Друк невидимого тексту


38

Подавши рядок як вхід, виведіть кількість символів пробілу (0x0A та 0x20), рівну довжині рядка.

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

Ваш код не повинен виводити жодних додаткових рядків чи пробілів.

Тести:

     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" став "␠␠␠␊␠"?
манатура

1
@manatwork 0x0Aі 0x20є шістнадцяткові значення для символів Newline та Space відповідно
Skidsdev

1
“Виведіть кількість символів пробілу (0x0A та 0x20)” - Де у висновку повинні бути символи нового рядка?
манастирські роботи

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
Якщо припустити, що це справді працює, це безумовно виграє мій голос за найкреативнішу відповідь
Скідсдев

24
Почекайте, де відповідь? Це теж непомітно?
Ерік Атголфер

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
Сітківка сітківки досить проста у використанні. Ось ваша відповідь
Digital Trauma

2
На жаль, Retina друкує за замовчуванням зворотну стрічку. Щоб \`уникнути цього, вам знадобиться зробити попередню пропозицію . Тоді використання коротше, S\`.але це замінює кожен символ символом передачі рядків (оскільки він розбиває введення навколо кожного символу).
Мартін Ендер

@MartinEnder Ahhh не був упевнений, чи це була сітківка чи ТІО. Дякуємо за допомогу щодо збереження байта там!
TheLethalCoder



11

C #, 28 24 байти

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

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

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

3
Хотів зробити саме так
LiefdeWen

1
@StefanDelport Треба бути швидким із C #, коли я поруч :) Є підходи Linq, щоб зробити те саме, але всі вони довші ...
TheLethalCoder


9

Математика, 21 байт

StringReplace[_->" "]

1
Якщо введення до списку дозволено, це може бути #/._->" "&. На жаль, вхід є рядком, і символи [] роблять його на один байт довше вашого рішення :(
CalculatorFeline

1
Чи не потрібно це #і &в ньому? НаприкладStringReplace[#,_->" "]&
Ян Міллер

3
@IanMiller Не в Математиці 10.4 або 11. reference.wolfram.com/language/ref/StringReplace.html
alephalpha

2
Ну, тоді добре. У мене є лише 10,3. Можливо час на оновлення ...
Іван Міллер


8

C, 31 байт

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

1
Чим це відрізняється від вашої іншої відповіді на С ? Очевидно, що цей коротший, але чи варто було просто відредагувати інший? Чи повинна бути лише одна відповідь з двома рішеннями?
Тас

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 байта рішення (Завдяки магії Octopus Урна і Кевін 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. А оскільки послідовність символів як I / O дозволена за замовчуванням, коли запитуються рядки I / O, можливі деякі 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. Якщо я не помиляюся, ви отримуєте помилку при спробі знеструмлення, 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 байти завдяки Ловжо
-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

Кубіфікований

  w
i ? @ o
  S
  • i отримує вхід
  • ? тестовий верх стека
    • якщо негативне (EOI) переадресація на wзміну смуги руху, яка знаходиться на umps@ зупинці
    • якщо 0 (null) halt, це не повинно потрапляти
    • якщо позитивний Sowпробіл пробіг до стека, виведіть і змініть смугу наi

Спробуйте в Інтернеті!


1
Мило, не так часто програма
Кубікс


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.