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


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.