Распечатать невидимый текст


38

Учитывая строку в качестве входных данных, выведите количество пробельных символов (0x0A и 0x20), равное длине строки.

Например, учитывая строку, Hello, World!ваш код должен будет вывести ровно 13 пробельных символов и ничего больше. Это может быть любое сочетание пробелов и новых строк.

Ваш код не должен выводить какие-либо дополнительные завершающие символы новой строки или пробелы.

Testcases:

     Input      -> Amount of whitespace to output
"Hello, World!" -> 13
"Hi"            -> 2
"   Don't
Forget about
Existing
Whitespace!   " -> 45
""              -> 0
"             " -> 13
"
"               -> 1

Подсчет очков:

Это поэтому побеждает меньше байтов!


1
Я не понимаю, что вы имеете в виду с этим «0x0A». Где это должно быть выведено? Должно ли это быть сохранено, чтобы «a␠b␊c» стало «␠␠␠␊␠»?
manatwork

1
@manatwork 0x0Aи 0x20являются шестнадцатеричными значениями для символов
новой строки и пробела

1
«Выведите количество пробельных символов (0x0A и 0x20)» - Где в выходных должны быть эти символы новой строки?
manatwork

3
These can be any mix of spaces and newlinesВаш вывод может быть любым сочетанием пробелов и новых строк, вы можете просто выводить пробелы, если хотите, как и все остальные, или вы можете просто выводить новые строки. Это зависит от вас
Скидсдев

1
Понял. Спасибо.
Манатворк

Ответы:


137

Пробелы , 311 150 77 68 65 46 41 38 байт

-3 байта благодаря Кевину Круйссену
-27 байтов благодаря Эфате


  
   	 	 
 
  
 	
	 			
	  
	
  
 


Попробуйте онлайн!

Видимый формат

'\n  \n   \t \t \n \n  \n \t\n\t \t\t\t\n\t  \n\t\n  \n \n\n'

Пояснение (s = пробел, t = табуляция, n = новая строка)

nssn     # label(NULL) - loop start
ssststsn # push 10 in the stack -> [10]
sns      # duplicate the top of the stack -> [10, 10]
sns      # duplicate the top of the stack -> [10, 10, 10]
tnts     # read a single char from input, pop the stack and store at that address -> [10, 10] [10:<char that was read>]
ttt      # pop the stack and put the value at that adress on stack -> [10,<char>] [10:<char>]
ntssn    # jump to label(0) - since label(0) is not defined, the interpreter jumps to the end of the program - if the top of the stack (char) is 0 -> [10] [10:<char>]
tnss     # pop the top of the stack and print as ascii -> [] [10:<char>]
nsnn     # go back to the label(NULL)

25
Предполагая, что это действительно работает, это определенно выигрывает мой голос за самый креативный ответ
Skidsdev

24
Подождите, где ответ? Это тоже невидимо?
Эрик Outgolfer

16
ЧТО ТАКОЕ ЧЕРНАЯ МАГИЯ Твоего кода даже нет! -1
Кристофер

28
@Christopher больше похож на WHITEspace MAGIC
Род

12
Я знал, что кто-то ответит на этот вопрос с помощью программы для пробелов
Draco18s

59

22
У джапта серьезно есть встроенный для этого? Блин ...
Скидсдев

22
@Mayube ну у него есть встроенная функция для замены всех символов в строке другим, а замена по умолчанию - пробел;)
Том

4
Очень хорошо! Для тех, кто работает с программой, вы можете добавить -Qфлаг во входные данные, чтобы поместить кавычки вокруг выходных данных. TIO
Оливер

38

Haskell , 7 байтов

(>>" ")

Попробуйте онлайн! Использование: (>>" ") "Hello, world!".

Учитывая два списка (а строки - это списки символов в Haskell), >>оператор будет повторять второй список столько раз, сколько в первом списке есть элементы. Установка в " "качестве второго аргумента означает, что мы объединяем столько пробелов, сколько входная строка длинная.


Альтернатива (тот же счетчик байтов):

(' '<$)

Попробуйте онлайн! Использование: (' '<$) "Hello, world!".

При заданном значении и списке <$оператор заменяет каждое значение в списке заданным значением. Таким образом, 5 <$ "abc"приводит к [5,5,5], и ' ' <$ "abc"в " ".

Функцию можно аналогично записать так (<$)' ', если вы захотите найти в моем коде еще несколько морских существ.


18
Это как очаровательная маленькая рыба без рыбы
Тейлор Скотт



17

Сетчатка, 3- 4 байта

S\`.

Старая версия, не работает, потому что Retina печатает перевод строки.

,
 

(Вторая строка содержит пробел).


2
Сетчатка TIO довольно проста в использовании. Вот ваш ответ
Цифровая травма

2
К сожалению, Retina по умолчанию печатает завершающий перевод строки. Вам нужно будет подготовиться, \`чтобы избежать этого. Тогда его использовать будет короче S\`., что заменяет каждый символ переводом строки (потому что он разделяет ввод вокруг каждого символа).
Мартин Эндер

@MartinEnder Аааааа не был уверен, было ли это Retina или TIO. Спасибо за помощь в сохранении байта там, хотя!
TheLethalCoder



11

C #, 28 24 байта

s=>"".PadLeft(s.Length);

Старая версия с использованием stringконструктора для 28 байтов:

s=>new string(' ',s.Length);

3
Хотелось сделать то же самое
LiefdeWen

1
@StefanDelport Должен быть быстрым с C #, когда я рядом :) Есть подходы Linq, чтобы сделать то же самое, но они все
намного


9

Mathematica, 21 байт

StringReplace[_->" "]

1
Если разрешен ввод чарлистов, это может быть #/._->" "&. К сожалению, входные данные представляют собой строку и символы [] делают его на один байт длиннее, чем ваше решение :(
CalculatorFeline

1
Разве это не нужно #и &в нем? НапримерStringReplace[#,_->" "]&
Ян Миллер

3
@IanMiller Нет в Mathematica 10.4 или 11. reference.wolfram.com/language/ref/StringReplace.html
alephalpha

2
Ах хорошо. У меня только 10,3. Может быть, пора обновить ...
Ян Миллер

8

JavaScript ES6, 22 байта

a=>a.replace(/./g," ")

f=a=>a.replace(/./g," ");

var test = f("Hello, World!");
console.log(test, test.length);


3
Да, я подумал: «О, черт, должно быть s=>s.replace(/[^]/g," "), байт длиннее, чем другое решение». Мне не
приходило

8

C, 31 байт

f(char*c){puts(""),*c++&&f(c);}

1
Чем это отличается от вашего другого ответа C ? Ясно, что этот короче, но вы должны были просто отредактировать другой? Должен ли это быть один ответ с двумя решениями?
Tas

4
@Tas Прежде всего, я думаю, что в некотором смысле я чувствую, что это не так хорошо, как в другом случае, хотя он короче, потому что он на самом деле не компилируется как есть. Это просто функция, поэтому вам нужно написать некоторые основные процедуры вокруг нее. Тем не менее, он является короче и другими , кажется, размещать только функцию. Очевидно, это два совершенно разных решения. Одно не уточнение другого, поэтому для меня имеет смысл, что это должны быть два разных ответа. Тем не менее, я новичок в этом сообществе. Есть ли согласие, что один пользователь публикует только один ответ? Если так, я сделаю это в следующий раз.
sigvaldm

Должна ли запятая действительно быть запятой, а не точкой с запятой?
Оскар Ског

1
@OskarSkog ну, в данном случае это не так важно, потому что нет lhs
кошка

1
@OskarSkog Да, это должна быть запятая. Как говорит @cat, в данном случае это не имеет большого значения, но я выбрал запятую для вариации :) Оператор запятой вычисляет два выражения (например, i++, j++в цикле for) и возвращает самое правое. Важной деталью является то, что рекурсия должна как-то останавливаться. &&не оценивает его rhs, если это lhs - ложь. *c++оценивает false, когда указывает на нулевое окончание строки.
sigvaldm


7

Excel VBA, 17 15 байт

Функция анонимного непосредственного окна VBE, которая принимает входные данные из ячейки [A1]и выводит пробелы длины ввода в непосредственное окно VBE

?Spc([Len(A1)])

7

05AB1E , 3 байта

vð?

Попробуйте онлайн!

v   # For each character...
 ð? #    Output a space without a newline

Другие 3-байтовые решения (спасибо Magic Octopus Urn и Kevin Cruijssen за большинство из них)

v¶? # For each character print a newline (without adding a newline)
võ, # For each character print the empty string with a newline
gð× # Get the length, concatenate that many copies of space
g¶× # Get the length, concatenate that many copies of newline
Sð: # Split, push a space, replace each char in input with a space
ðs∍ # Push ' ', swap, make the string of spaces as long as the input was
võJ # For each char, push a space and ''.join(stack)
v¶J # For each char, push a newline and ''.join(stack)
€ðJ # For each char, push a space. Then ''.join(stack)
ۦJ # For each char, push a newline. Then ''.join(stack)

1
Другое решение: gð×остальное, что я придумал, было выше 3, например:õ‚.B¤
Волшебная урна осьминога

2
Еще один забавный:Sð:
Волшебная Осьминог Урна

1
Больше веселья:ðs∍
Волшебная урна осьминога

Еще несколько альтернативных 3-х байтов: võJ/ v¶J; €ðJ/ €¶J. А поскольку последовательность символов ввода-вывода по умолчанию разрешена при запросе ввода-вывода строк, возможны некоторые 2-байтовые версии: €ð/ €¶/ εð/ ε¶и ð:/ ¶:. Несмотря на то, что это довольно старая задача, а во всех остальных ответах используются настоящие строки, я могу понять, если вы оставите ее как строковый ввод-вывод.
Кевин Круйссен



6

C 45 байтов

Используя главное. Скомпилируйте с gcc, игнорируйте предупреждения.

main(c,v)char**v;{while(*(v[1]++))puts("");}

Использование:

$./a.out "Hello, World!"

1
Любая причина , почему вы не можете положить char**vв main(c,v)?
CalculatorFeline

@CalculatorFeline По крайней мере компиляция GCC 6.3.1 просто с помощью gcc main.c, по-видимому, не позволяет смешивать определение функции ANSI с определением функции K & R, поэтому main(c,char**v)не будет компилироваться. Я либо должен сделать, main(int c,char**v)или main(c,v)char**v;из которых последний на 3 байта короче. Вы случайно не знаете какой-нибудь флаг или что-то, что позволяет смешивать эти стили?
sigvaldm

3
Нет, вы не можете смешивать их. Там нет флага, который позволяет это. Стиль K & R давно устарел, используется только для игры в гольф и для запутывания кода.
Коди Грей,

И я предполагаю, что удаление char**vполностью не компилируется либо.
CalculatorFeline

@CalculatorFeline Если вы пропустите char**полностью, компилятор будет интерпретировать его как int. Если я не ошибаюсь, вы получаете ошибку, пытаясь разыменовать a, intи даже если вы этого не сделали, программа не будет делать то, что вы ожидали, поскольку она intпотребляет несколько charсекунд, и поэтому вы никогда не получите NULLзначение.
sigvaldm



5

> <> , 7 байт

i0(?;ao

Программа представляет собой цикл

i         //Push a character from the input onto the stack
 0        //Add a 0 to the stack
  (       //Pop the top two values of the stack, and push a 1 if the second is less than the first (In this case, the input has all been read), else push a 0
   ?      //Pop the top of the stack. If the value is a 0, skip the next instruction
    ;     // Terminate the program
     a    // Add a newline to the stack
      o   // Pop the top character of the stack and print it


5

Гексагония , 12 11 байт

-1 байт благодаря Мартину Эндеру

,<.;.M@.>~8

Попробуйте онлайн!

Вот расширенный гекс:

  , < . 
 ; . M @
. > ~ 8 .
 . . . .
  . . .

Пока есть ввод, этот код выполняется:

,        # Get input
 <       # Turn right (SE) if we didn't get EOF
  M8     # Set the memory edge to 778 which is 10 (mod 256)
    ;    # Print as a character (newline)
     >   # Redirect East
      ~  # Multiply by -1. This makes the pointer go to the top when it runs off the edge
       8 # Effectively a no-op.

Когда EOF достигнут:

,    # Get input
 <   # Turn left (NE)
  8  # Effectively a no-op
   @ # End program

Вы можете напечатать перевод строки в три байта с M8;(что дает 778 = 10 (мод 256)). Это должно позволить вам переместиться ~туда, где ;находится прямо сейчас, сохранив байт.
Мартин Эндер


5

Python 2, 25 байт

exec'print;'*len(input())

-2 байта благодаря Loovjo
-2 байта в неверном коде благодаря полностью человеческому: p
-3 байта


1
Вы можете удалить парены после того, execкак это ключевое слово в Python 2
Loovjo

1
@ Loovjo Да, Python 2. Спасибо!
HyperNeutrino

Я знаю, что это старый и прочее, но exec'print;'*len(input())работает.
полностью человек

1
@totallyhuman о, правда, спасибо: P
HyperNeutrino

1
@TheMatt, вероятно, не входит в спецификацию проблемы, но это один из приемлемых по умолчанию методов ввода. Попробуйте посмотреть на мета, я не хочу искать его прямо сейчас
HyperNeutrino


4

Cubix , 6 байтов

Wahoo 6 байт!

wi?@oS

Cubified

  w
i ? @ o
  S
  • i получает вход
  • ? тест вершины стека
    • если отрицательный (EOI) перенаправить на wсмену полосы, которая @останавливается
    • если остановка 0 (ноль), это не должно быть выполнено
    • если положительный Sowтолчок пробел в стеке, вывести и изменить полосу наi

Попробуйте онлайн!


1
Сладкая, не так уж часто программа Cubix такая короткая :-)
ETHproductions


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.