Drucken Sie unsichtbaren Text


38

Bei einer Zeichenfolge als Eingabe wird eine Anzahl von Leerzeichen (0x0A und 0x20) ausgegeben, die der Länge der Zeichenfolge entspricht.

Wenn Sie beispielsweise die Zeichenfolge angeben, Hello, World!müsste Ihr Code genau 13 Leerzeichen und sonst nichts ausgeben. Dies kann eine beliebige Mischung aus Leerzeichen und Zeilenumbrüchen sein.

Ihr Code sollte keine zusätzlichen nachgestellten Zeilenumbrüche oder Leerzeichen ausgeben.

Testfälle:

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

Wertung:

Dies ist so dass die wenigsten Bytes gewinnen!


1
Ich verstehe nicht, was Sie mit "0x0A" meinen. Wo soll das ausgegeben werden? Sollte das beibehalten werden, damit "a␠b␠c" zu "␠␠␠␊␠" wird?
Manatwork

1
@manatwork 0x0Aund 0x20sind die hexadezimalen Werte für die Newline- und Space-Zeichen
Skidsdev

1
"Ausgabe einer Anzahl von Whitespace-Zeichen (0x0A und 0x20)" - Wo sollen diese Zeilenumbrüche ausgegeben werden?
manatwork

3
These can be any mix of spaces and newlinesIhre Ausgabe kann eine beliebige Mischung aus Leerzeichen und Zeilenumbrüchen sein. Sie können wie alle anderen auch Leerzeichen oder Zeilenumbrüche ausgeben. Es liegt an Ihnen
Skidsdev

1
Ich habs. Vielen Dank.
manatwork

Antworten:


137

Whitespace , 311 150 77 68 65 46 41 38 Bytes

-3 Bytes dank Kevin Cruijssen
-27 Bytes dank Ephphatha


  
   	 	 
 
  
 	
	 			
	  
	
  
 


Probieren Sie es online!

Ein sichtbares Format

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

Erklärung (s = Leerzeichen, t = Tabulator, n = neue Zeile)

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
Vorausgesetzt, dies funktioniert tatsächlich, gewinnt dies definitiv meine Stimme für die kreativste Antwort
Skidsdev

24
Warten Sie, wo ist die Antwort? Ist es auch unsichtbar?
Erik der Outgolfer

16
WAS SCHWARZE MAGIE IST DAS? Dein Code ist noch nicht mal da! -1
Christopher

28
@Christopher eher wie WHITEspace MAGIC
Rod

12
Ich wusste, dass jemand diese Frage mit einem Whitespace-Programm beantworten würde
Draco18s

59

22
Hat japt ernsthaft ein eingebautes dafür? Verdammt ...
Skidsdev

22
@ Mayube Nun, es hat eine eingebaute, um alle Zeichen in einer Zeichenfolge durch eine andere zu ersetzen, und die Standard-Ersetzung ist ein Leerzeichen;)
Tom

4
Sehr schön! Für diejenigen, die das Programm ausführen, können Sie das -QFlag zur Eingabe hinzufügen , um die Ausgabe in Anführungszeichen zu setzen. TIO
Oliver

38

Haskell , 7 Bytes

(>>" ")

Probieren Sie es online! Verbrauch: (>>" ") "Hello, world!".

Bei zwei Listen (und Strings sind Listen mit Zeichen in Haskell) >>wiederholt der Operator die zweite Liste so oft, wie die erste Liste Elemente enthält. Wenn Sie " "als zweites Argument angeben, verketten wir so viele Leerzeichen, wie die Eingabezeichenfolge lang ist.


Alternative (gleiche Byteanzahl):

(' '<$)

Probieren Sie es online! Verbrauch: (' '<$) "Hello, world!".

Bei einem bestimmten Wert und einer Liste <$ersetzt der Operator jeden Wert in der Liste durch den angegebenen Wert. So 5 <$ "abc"ergibt sich [5,5,5], und ' ' <$ "abc"in " ".

Die Funktion kann genauso geschrieben werden wie (<$)' 'für den Fall, dass Sie weitere Meerestiere in meinem Code finden möchten.


18
Es ist wie ein entzückender kleiner Fisch ohne Flossen
Taylor Scott



17

Retina, 3 4 Bytes

S\`.

Alte Version, funktioniert nicht, weil Retina einen Zeilenvorschub nach dem Ende druckt.

.
 

(Die zweite Zeile enthält ein Leerzeichen).


2
Die Retina TIO ist recht einfach zu bedienen. Hier ist deine Antwort
Digitales Trauma

2
Leider druckt Retina standardmäßig einen nachgestellten Zeilenumbruch. Sie müssen sich voranstellen \`, um das zu vermeiden. In diesem Fall ist die Verwendung S\`.jedoch kürzer, da jedes Zeichen durch einen Zeilenumbruch ersetzt wird (da die Eingabe um jedes Zeichen herum aufgeteilt wird).
Martin Ender

@MartinEnder Ahhh war sich nicht sicher, ob das eine Retina- oder eine TIO-Sache war. Vielen Dank für die Hilfe beim Speichern eines Bytes!
TheLethalCoder



11

C #, 28 24 Bytes

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

Alte Version mit dem stringKonstruktor für 28 Bytes:

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

3
Wollte genau das gleiche tun
LiefdeWen

1
@StefanDelport Muss schnell mit C # sein, wenn ich da bin :) Es gibt Linq-Ansätze, um das Gleiche zu tun, aber sie sind alle
viel


9

Mathematica, 21 Bytes

StringReplace[_->" "]

1
Wenn Charlist-Eingabe erlaubt war, könnte dies sein #/._->" "&. Leider ist die Eingabe eine Zeichenfolge und Characters [] macht es ein Byte länger als Ihre Lösung :(
CalculatorFeline

1
Braucht das nicht ein #und ein &drin? ZBStringReplace[#,_->" "]&
Ian Miller

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

2
Ach ok Ich habe nur 10.3. Vielleicht ist es Zeit für ein Upgrade ...
Ian Miller

8

JavaScript ES6, 22 Byte

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

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

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


3
Huh, ich dachte "oh verdammt, es müsste s=>s.replace(/[^]/g," ")ein Byte länger sein als die andere Lösung". Es ist mir nicht aufgefallen, dass Zeilenumbrüche in der Ausgabe erlaubt sind: P
ETHproductions

8

C 31 Bytes

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

1
Wie unterscheidet sich dies von Ihrer anderen C-Antwort ? Klar ist dieser kürzer, aber hättest du einfach den anderen bearbeiten sollen? Sollte es nur eine Antwort mit zwei Lösungen sein?
Bis

4
@Tas Erstens denke ich, dass dies in gewisser Weise nicht so gut ist wie das andere, obwohl es kürzer ist, weil es nicht so kompiliert, wie es ist. Es ist nur eine Funktion, also müssen Sie eine Hauptroutine darum schreiben. Es ist jedoch kürzer und andere scheinen nur Funktionen zu posten. Es handelt sich eindeutig um zwei sehr unterschiedliche Lösungen. Eins ist nicht die Verfeinerung des anderen, daher ist es für mich sinnvoll, dass es zwei verschiedene Antworten gibt. Ich bin jedoch neu in dieser Community. Ist der Konsens, dass ein Benutzer nur eine Antwort veröffentlicht? Wenn ja, werde ich das nächste Mal tun.
Sigvaldm

Sollte das Komma wirklich ein Komma und kein Semikolon sein?
Oskar Skog

1
@OskarSkog gut, in diesem Fall spielt es keine Rolle , dass viel , weil es keine LHS ist
Katze

1
@OskarSkog Ja, es sollte ein Komma sein. Wie @cat sagt, spielt es in diesem Fall keine Rolle, aber ich habe ein Komma als Variation gewählt :) Der Komma-Operator wertet zwei Ausdrücke aus (z. B. i++, j++in einer for-Schleife) und gibt den ganz rechten zurück. Ein wichtiges Detail ist, dass die Rekursion irgendwie aufhören muss. &&bewertet es nicht als rhs, wenn lhs falsch ist. *c++Wertet false aus, wenn es auf die Nullterminierung der Zeichenfolge verweist.
Sigvaldm


7

Excel VBA, 17 15 Bytes

Funktion für anonymes VBE-Sofortfenster, die Eingaben von der Zelle entgegennimmt [A1]und Längenräume der Eingabe an das VBE- Sofortfenster ausgibt

?Spc([Len(A1)])

7

05AB1E , 3 Bytes

vð?

Probieren Sie es online!

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

Andere 3-Byte-Lösungen (Vielen Dank an Magic Octopus Urn und Kevin Cruijssen für die meisten dieser Lösungen )

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
Andere Lösung: gð×Der Rest, den ich mir ausgedacht habe, war über 3 wie:õ‚.B¤
Magic Octopus Urn

2
Ein weiterer Spaß:Sð:
Magic Octopus Urn

1
Mehr Spaß:ðs∍
Magic Octopus Urn

Einige weitere alternative 3-Bytes: võJ/ v¶J; €ðJ/ €¶J. Und da eine Folge von Zeichen als E / A standardmäßig zulässig ist, wenn Zeichenfolgen-E / A abgefragt werden, sind einige 2-Byte-Versionen möglich: €ð/ €¶/ εð/ ε¶und ð:/ ¶:. Obwohl dies eine ziemlich alte Herausforderung ist und alle anderen Antworten tatsächliche Zeichenfolgen verwenden, könnte ich verstehen, wenn Sie sie als Zeichenfolgen-E / A beibehalten.
Kevin Cruijssen



6

C 45 Bytes

Mit main. Kompiliere mit gcc, ignoriere Warnungen.

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

Verwendung:

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

1
Gibt es Gründe , warum Sie nicht setzen char**vin main(c,v)?
CalculatorFeline

@CalculatorFeline Zumindest GCC 6.3.1, das einfach mit kompiliert wird, gcc main.cscheint es nicht zu ermöglichen, die ANSI-Funktionsdefinition mit der K & R-Funktionsdefinition zu mischen. Daher main(c,char**v)wird es nicht kompiliert. Ich muss entweder tun main(int c,char**v)oder main(c,v)char**v;wovon letzteres 3 Bytes kürzer ist. Sie kennen nicht zufällig eine Flagge oder etwas, mit dem sich diese Stile mischen lassen?
Sigvaldm

3
Nein, du kannst sie nicht mischen. Es gibt keine Flagge, die das erlaubt. Der K & R-Stil ist längst überholt und wird nur zu Code-Golf- und Verschleierungszwecken verwendet.
Cody Grey

Und ich vermute, dass das Entfernen char**vauch nicht vollständig kompiliert.
CalculatorFeline

@CalculatorFeline Wenn Sie nichts angeben, char**interpretiert der Compiler dies als int. Wenn ich mich nicht irre, bekommst du einen Fehler beim Versuch, eine zu dereferenzieren, intund selbst wenn du es nicht getan hättest, würde das Programm nicht das tun, was du erwartet hast, da eine intmehrere chars verbraucht, und daher bekommst du nie einen NULLWert.
Sigvaldm



5

> <> , 7 Bytes

i0(?;ao

Das Programm ist eine Schleife

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

Hexagony , 12 11 Bytes

-1 Byte dank Martin Ender

,<.;.M@.>~8

Probieren Sie es online!

Hier ist das erweiterte Hex:

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

Während der Eingabe wird der folgende Code ausgeführt:

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

Wenn EOF erreicht ist:

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

Sie können einen Zeilenvorschub in drei Bytes mit M8;(das ergibt 778 = 10 (mod 256)) drucken . Das sollte es Ihnen ermöglichen, das Objekt dorthin zu verschieben, ~wo es sich gerade ;befindet, und dabei ein Byte sparen.
Martin Ender


5

Python 2, 25 Bytes

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

-2 Bytes dank Loovjo
-2 Bytes im ungültigen Code dank totalhuman: p
-3 Bytes


1
Sie können die Eltern danach entfernen exec da es sich um ein Schlüsselwort in Python 2
Loovjo,

1
@ Loovjo Oh, richtig, Python 2. Danke!
HyperNeutrino

Ich weiß, das ist alt und Zeug, aber es exec'print;'*len(input())funktioniert.
Totalhuman

1
@totallyhuman oh wahr, danke: P
HyperNeutrino

1
@TheMatt ist wahrscheinlich nicht in den Problemspezifikationen enthalten, aber es ist eine der standardmäßig akzeptablen Eingabemethoden. Versuchen Sie, nach Meta zu suchen, ich möchte jetzt nicht danach suchen
HyperNeutrino


4

Cubix , 6 Bytes

Wahoo ein 6 Byte!

wi?@oS

Cubified

  w
i ? @ o
  S
  • i wird eingegeben
  • ? Oberseite des Stapels testen
    • Wenn negativ (EOI), umleiten auf wSpurwechsel, der zur umps@ Stillstand führt
    • wenn 0 (null) halt sollte dies nicht getroffen werden
    • Bei positivem SowDruck wird ein Leerzeichen auf den Stapel gelegt, ausgegeben und die Spur gewechselti

Probieren Sie es online!


1
Süß, es ist nicht allzu oft, dass ein Cubix-Programm so kurz ist :-)
ETHproductions


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.