Drukuj niewidoczny tekst


38

Biorąc pod uwagę ciąg wejściowy, wypisz liczbę białych znaków (0x0A i 0x20) równych długości łańcucha.

Na przykład, biorąc pod uwagę ciąg, Hello, World!kod będzie musiał wypisać dokładnie 13 znaków spacji i nic więcej. Mogą to być dowolne kombinacje spacji i znaków nowej linii.

Twój kod nie powinien wyświetlać żadnych dodatkowych znaków nowej linii ani spacji.

Przypadki testowe:

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

Punktacja:

To jest więc wygrywa najmniej bajtów!


1
Nie rozumiem, co masz na myśli z tym „0x0A”. Gdzie to powinno być wydane? Czy należy to zachować, aby „a␠b␊c” stało się „␠␠␠␊␠”?
manatwork

1
@manatwork 0x0Ai 0x20są wartościami szesnastkowymi odpowiednio dla znaków nowej linii i spacji
Skidsdev

1
„Wypisz kilka znaków spacji (0x0A i 0x20)” - Gdzie na wyjściu powinny znajdować się te znaki nowej linii?
manatwork

3
These can be any mix of spaces and newlinesTwój wynik może być dowolną kombinacją spacji i znaków nowej linii, możesz po prostu wypisywać spacje, jeśli chcesz, jak wszyscy inni, lub możesz po prostu generować znaki nowej linii. To zależy od Ciebie
Skidsdev,

1
Rozumiem. Dzięki.
manatwork

Odpowiedzi:


137

Biała spacja , 311 150 77 68 65 46 41 38 bajtów

-3 bajty dzięki Kevin Cruijssen
-27 bajtów dzięki Ephphatha


  
   	 	 
 
  
 	
	 			
	  
	
  
 


Wypróbuj online!

Widoczny format

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

Objaśnienie (s = spacja, t = tab, n = nowa linia)

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
Zakładając, że to faktycznie działa, to zdecydowanie wygrywa mój głos na najbardziej kreatywną odpowiedź
Skidsdev

24
Poczekaj, gdzie jest odpowiedź? Czy to też jest niewidoczne?
Erik the Outgolfer,

16
CO TO JEST CZARNA MAGIA. Twojego kodu nawet tam nie ma! -1
Christopher

28
@Christopher bardziej jak WHITEspace MAGIC
Rod

12
Wiedziałem, że ktoś odpowie na to pytanie za pomocą programu spacji
Draco18s,

59

Japt , 1 bajt

ç

Wypróbuj online!


22
Czy Japt poważnie ma do tego wbudowaną funkcję? Cholera ...
Skidsdev

22
@Mayube ma wbudowaną funkcję zamiany wszystkich znaków w ciągu na inną, a domyślną zamianą jest spacja;)
Tom

4
Bardzo dobrze! Dla osób uruchamiających program możesz dodać -Qflagę do wejścia, aby wstawić cudzysłowy wokół wyjścia. TIO
Oliver

38

Haskell , 7 bajtów

(>>" ")

Wypróbuj online! Zastosowanie: (>>" ") "Hello, world!".

Biorąc pod uwagę dwie listy (i ciągi znaków są listami znaków w języku Haskell) >>operator powtórzy drugą listę tyle razy, ile pierwsza lista zawiera elementy. Ustawienie " "jako drugiego argumentu oznacza, że ​​łączymy tyle spacji, ile ciąg wejściowy jest długi.


Alternatywa (ta sama liczba bajtów):

(' '<$)

Wypróbuj online! Zastosowanie: (' '<$) "Hello, world!".

Biorąc pod uwagę pewną wartość i listę, <$operator zastępuje każdą wartość na liście podaną wartością. W ten sposób 5 <$ "abc"powoduje [5,5,5], i ' ' <$ "abc"w " ".

Funkcja może być napisana w sposób równoważny (<$)' ', na wypadek, gdybyś chciał znaleźć więcej morskich stworzeń w moim kodzie.


18
To jak urocza mała rybka bez drobiu
Taylor Scott



17

Siatkówka, 3 4 bajty

S\`.

Stara wersja nie działa, ponieważ Retina drukuje wiersz końcowy.

.
 

(Drugi wiersz zawiera spację).


2
Siatkówka TIO jest dość łatwa w użyciu. Oto twoja odpowiedź
Digital Trauma

2
Niestety, Retina domyślnie drukuje końcowe podawanie linii. Musisz to zrobić, \`aby tego uniknąć. Potem jest jednak krótszy w użyciu S\`., który zastępuje każdy znak linią (ponieważ dzieli dane wejściowe wokół każdego znaku).
Martin Ender

@MartinEnder Ahhh nie był pewien, czy chodziło o siatkówkę czy TIO. Dziękujemy za pomoc w zapisaniu bajtu!
TheLethalCoder



11

C #, 28 24 bajtów

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

Stara wersja używająca stringkonstruktora dla 28 bajtów:

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

3
Chciałem zrobić dokładnie to samo
LiefdeWen

1
@StefanDelport Muszę być szybki z C #, kiedy jestem w pobliżu :) Są podejścia Linq, aby zrobić to samo, ale wszystkie są o wiele dłuższe ...
TheLethalCoder


9

Mathematica, 21 bajtów

StringReplace[_->" "]

1
Jeśli dozwolone jest wprowadzanie listy znaków, może to być #/._->" "&. Niestety, wejście jest ciągiem znaków, a Znaki [] sprawiają, że jest on o jeden bajt dłuższy niż rozwiązanie :(
CalculatorFeline

1
Czy to nie wymaga #a &? EgStringReplace[#,_->" "]&
Ian Miller

3
@IanMiller Not in Mathematica 10.4 lub 11. reference.wolfram.com/language/ref/StringReplace.html
alephalpha

2
Ach ok. Mam tylko 10,3. Może czas na aktualizację ...
Ian Miller

8

JavaScript ES6, 22 bajty

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

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

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


3
Huh, pomyślałem „o kurcze, to musiałby być s=>s.replace(/[^]/g," ")bajt dłuższy niż inne rozwiązanie”. Nie
przyszło

8

C, 31 bajtów

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

1
Czym różni się to od twojej innej odpowiedzi C ? Oczywiście ten jest krótszy, ale czy powinieneś po prostu edytować drugi? Czy powinna to być tylko jedna odpowiedź z dwoma rozwiązaniami?
Tas

4
@Tas Po pierwsze, myślę, że w pewnym sensie wydaje mi się, że to nie jest tak dobre, jak inne, chociaż jest krótsze, ponieważ tak naprawdę nie kompiluje się w obecnej postaci. To tylko funkcja, więc musisz napisać wokół niej główną procedurę. Jednakże, jest krótszy i inni wydaje się zakładać funkcji odległości. Oczywiście są to dwa bardzo różne rozwiązania. Jedno nie jest udoskonaleniem drugiego, więc dla mnie ma sens, że powinny to być dwie różne odpowiedzi. Jestem jednak nowy w tej społeczności. Czy istnieje konsensus, że jeden użytkownik publikuje tylko jedną odpowiedź? Jeśli tak, zrobię to następnym razem.
sigvaldm

Czy przecinek powinien być przecinkiem, a nie średnikiem?
Oskar Skog

1
@OskarSkog dobrze, w tym przypadku nie ma to większego znaczenia, ponieważ nie ma lhs
kot

1
@OskarSkog Tak, powinien to być przecinek. Jak mówi @cat, w tym przypadku tak naprawdę nie ma to znaczenia, ale dla odmiany wybrałem przecinek :) Operator przecinka ocenia dwa wyrażenia (np. i++, j++W pętli for) i zwraca skrajnie prawe . Ważnym szczegółem jest to, że rekursja musi się jakoś zatrzymać. &&nie ocenia swojego rhs, jeśli lhs jest fałszywe. *c++ocenia false, gdy wskazuje na zerowe zakończenie łańcucha.
sigvaldm


7

Excel VBA, 17 15 bajtów

Anonimowa funkcja natychmiastowego okna VBE, która pobiera dane wejściowe z komórki [A1]i wysyła przestrzenie długości danych wejściowych do bezpośredniego okna VBE

?Spc([Len(A1)])

7

05AB1E , 3 bajty

vð?

Wypróbuj online!

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

Inne 3 bajtowe rozwiązania (dzięki Magic Octopus Urn i Kevin Cruijssen za większość z nich)

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
Inne rozwiązanie: gð×reszta, którą wymyśliłem, była powyżej 3, jak:õ‚.B¤
Magic Octopus Urn

2
Kolejna fajna:Sð:
Magic Octopus Urn

1
Więcej zabawy:ðs∍
Magic Octopus Urn

Niektóre bardziej alternatywne 3-bajtowe: võJ/ v¶J; €ðJ/ €¶J. A ponieważ sekwencja znaków jako We / Wy jest domyślnie dozwolona, ​​gdy pojawi się zapytanie o We / Wy, możliwe są niektóre wersje 2-bajtowe: €ð/ €¶/ εð/ ε¶i ð:/ ¶:. Chociaż ponieważ jest to dość stare wyzwanie, a wszystkie inne odpowiedzi używają rzeczywistych ciągów, zrozumiałbym, gdybyś zachował to jako ciąg I / O.
Kevin Cruijssen



6

C, 45 bajtów

Za pomocą głównego. Kompiluj z gcc, ignoruj ​​ostrzeżenia.

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

Stosowanie:

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

1
Jakikolwiek powód, dlaczego nie można umieścić char**vw main(c,v)?
CalculatorFeline

@CalculatorFeline Przynajmniej kompilacja GCC 6.3.1 po prostu gcc main.cnie wydaje się pozwalać na mieszanie definicji funkcji ANSI z definicją funkcji K&R, więc main(c,char**v)nie będzie się kompilować. Muszę to zrobić main(int c,char**v)lub main(c,v)char**v;ten drugi jest o 3 bajty krótszy. Nie znałbyś przypadkowo żadnej flagi lub czegoś, co pozwalałoby mieszać te style?
sigvaldm

3
Nie, nie możesz ich mieszać. Nie ma na to flagi. Styl K&R jest od dawna przestarzały, używany tylko do gry w golfa i zaciemniania kodu.
Cody Gray

Zgaduję, że char**vcałkowite usunięcie też się nie kompiluje.
CalculatorFeline

@CalculatorFeline Jeśli char**całkowicie pominiesz, kompilator zinterpretuje go jako int. Jeśli się nie mylę, pojawia się błąd przy próbie dereferencji inti nawet jeśli tego nie zrobiłeś, program nie zrobiłby tego, czego się spodziewałeś, ponieważ intzużywa kilka sekund chari dlatego nigdy nie dostajesz NULLwartości.
sigvaldm



5

> <> , 7 bajtów

i0(?;ao

Program jest pętlą

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

Sześciokąt , 12 11 bajtów

-1 bajt dzięki Martin Ender

,<.;.M@.>~8

Wypróbuj online!

Oto rozwinięty hex:

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

Chociaż jest wprowadzany, ten kod działa:

,        # 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.

Po osiągnięciu EOF:

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

Możesz wydrukować wiersz w trzech bajtach za pomocą M8;(co daje 778 = 10 (mod 256)). To powinno pozwolić ci przenieść tam, ~gdzie ;jest teraz, oszczędzając bajt.
Martin Ender


5

Python 2, 25 bajtów

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

-2 bajty dzięki Loovjo
-2 bajty w niepoprawnym kodzie dzięki totalnie ludzkiemu: p
-3 bajtów


1
Możesz usunąć parens, execponieważ jest to słowo kluczowe w Pythonie 2
Loovjo,

1
@Loovjo O racja, Python 2. Dzięki!
HyperNeutrino

Wiem, że to stare i takie tam, ale exec'print;'*len(input())działa.
całkowicie ludzki,

1
@ totalniehuman oh prawda, dzięki: P
HyperNeutrino

1
@ TheMatt prawdopodobnie nie ma go w specyfikacji problemu, ale jest to jedna z domyślnych akceptowalnych metod wprowadzania. Spróbuj spojrzeć na metę, nie chcę teraz jej
szukać


4

Cubix , 6 bajtów

Wahoo 6 bajtów!

wi?@oS

Cubified

  w
i ? @ o
  S
  • i dostaje wkład
  • ? przetestuj stos
    • jeśli ujemne (EOI) przekierowuje na wzmianę linii, która przechodzi do @zatrzymania
    • jeśli zatrzyma się 0 (null), nie należy tego uderzać
    • jeśli dodatnio Sowwypchniesz spację na stos, wyjdź i zmień linię nai

Wypróbuj online!


1
To nie jest zbyt często program Cubix jest taki krótki :-)
ETHproductions


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.