अदृश्य पाठ प्रिंट करें


38

इनपुट के रूप में एक स्ट्रिंग को देखते हुए, स्ट्रिंग की लंबाई के बराबर कई व्हाट्सएप वर्ण (0x0A और 0x20) का उत्पादन होता है।

उदाहरण के लिए, स्ट्रिंग को देखते हुए Hello, World!आपके कोड को वास्तव में 13 व्हाट्सएप वर्णों के उत्पादन की आवश्यकता होगी और कुछ नहीं। ये किसी भी स्थान और newlines का मिश्रण हो सकते हैं।

आपका कोड किसी भी अतिरिक्त अनुगामी newlines या रिक्त स्थान को आउटपुट नहीं करना चाहिए।

परीक्षण के मामलों:

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

स्कोरिंग:

यह इतना कम बाइट्स जीतता है!


1
मुझे उस "0x0A" से आपका मतलब नहीं है। उत्पादन कहाँ होना चाहिए? क्या उसे रखा जाना चाहिए, ताकि "␊b␊c" "so" बने?
मैनटवर्क

1
@manatwork 0x0Aऔर 0x20क्रमशः न्यूलाइन और स्पेस पात्रों के लिए हेक्साडेसिमल मान हैं
स्काइड्सडेव

1
"आउटपुट व्हॉट्सएप के कई अक्षर (0x0A और 0x20)" - आउटपुट में उन नए वर्ण कहाँ होने चाहिए?
मैनेटवर्क

3
These can be any mix of spaces and newlinesआपका आउटपुट किसी भी स्थान और 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
@ क्रिसटर अधिक जैसे सफेद क्षेत्र
रॉड

12
मुझे पता था कि कोई इस सवाल का जवाब
व्हॉट्सएप

59

22
क्या जप गंभीरता से इसके लिए एक बेसिन है? धिक्कार है ...
स्काईड्सदेव

22
@ माय वेल अच्छी तरह से एक स्ट्रिंग में सभी वर्णों को दूसरे के साथ बदलने के लिए एक बिलिन है, और डिफ़ॉल्ट प्रतिस्थापन एक स्थान है;)
टॉम

4
बहुत अच्छा! प्रोग्राम चलाने वालों के लिए, आप -Qआउटपुट के चारों ओर उद्धरण लगाने के लिए ध्वज को इनपुट में जोड़ सकते हैं । टीआईओ
ओलिवर

38

हास्केल , 7 बाइट्स

(>>" ")

इसे ऑनलाइन आज़माएं! उपयोग: (>>" ") "Hello, world!"

दो सूचियों को देखते हुए (और स्ट्रिंग्स हास्केल में पात्रों की सूची है) >> ऑपरेटर दूसरी सूची को कई बार दोहराएगा क्योंकि पहली सूची में तत्व हैं। " "दूसरे तर्क के रूप में सेट करने का मतलब है कि हम कई स्थानों को समतल करें क्योंकि इनपुट स्ट्रिंग लंबी है।


वैकल्पिक (एक ही बाइट गिनती):

(' '<$)

इसे ऑनलाइन आज़माएं!उपयोग: (' '<$) "Hello, world!"

कुछ मान और एक सूची को देखते हुए, <$ऑपरेटर दिए गए मान के साथ सूची में प्रत्येक मान को बदल देता है। इस प्रकार 5 <$ "abc"परिणाम में [5,5,5], और' ' <$ "abc" में " "

फ़ंक्शन को समान रूप से लिखा जा सकता है (<$)' ', जैसा कि आप मेरे कोड में कुछ और समुद्री जीव ढूंढना चाहते हैं।


18
यह एक आराध्य छोटी मछली की तरह है
टेलर स्कॉट

21

ब्रेनफक , 18 बाइट्स

++++++++++>,[<.>,]

इसे ऑनलाइन आज़माएं!

इनपुट के प्रत्येक बाइट के लिए एक नई रेखा प्रिंट करता है। इसके बजाय मुद्रण स्थान 4 बाइट्स जोड़ते हैं।


4
पश्चात के लिए: मिका लम्मी ने एक चतुर 16-बाइट उत्तर पोस्ट किया जो दफन हो गया। ,[>++++++++++.,]
लिन


17

रेटिना, 3 4 बाइट्स

S\`.

पुराना संस्करण, काम नहीं करता क्योंकि रेटिना एक अनुगामी रेखा फ़ीड को प्रिंट करता है।

।
 

(दूसरी पंक्ति में एक स्थान होता है)।


2
रेटिना टीआईओ का उपयोग करना काफी आसान है। यहाँ आपका जवाब है
डिजिटल ट्रामा

2
Unfortunately, Retina prints a trailing linefeed by default. You'll need to prepend \` to avoid that. Then it's shorter to use S\`. though, which replaces each character with a linefeed (because it splits the input around each character).
Martin Ender

@MartinEnder Ahhh wasn't sure if that was a Retina or TIO thing. Thanks for the help on saving a byte there though!
TheLethalCoder



11

C#, 28 24 bytes

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

Old version using the string constructor for 28 bytes:

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

3
Wanted to do exactly the same
LiefdeWen

1
@StefanDelport Gotta be quick with C# when I'm around :) There's Linq approaches to do the same but they're all a LOT longer...
TheLethalCoder


9

Mathematica, 21 bytes

StringReplace[_->" "]

1
If charlist input was allowed, this could be #/._->" "&. Sadly, the input is a string and Characters[] makes it one byte longer than your solution :(
CalculatorFeline

1
Doesn't this need a # and a & in it? E.g. StringReplace[#,_->" "]&
Ian Miller

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

2
Ah ok. I only have 10.3. Maybe time to upgrade...
Ian Miller

8

JavaScript ES6, 22 bytes

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

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

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


3
Huh, I thought "oh darn, it'd have to be s=>s.replace(/[^]/g," "), a byte longer than the other solution". It didn't occur to me that newlines are allowed in the output :P
ETHproductions

8

C, 31 bytes

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

1
How does this differ from your other C answer? Clearly this one is shorter, but should you have simply edited the other one? Should it just be one answer with two solutions?
Tas

4
@Tas First of all, I guess in some sense I feel this is not as good as the other one eventhough it's shorter, because it doesn't actually compile as-is. It's just a function so you need to write some main routine around it. However, it is shorter and others seems to post just functions. Clearly it's two very different solutions. One is not the refinement of the other, so to me it makes sense that it should be two different answers. However, I'm new to this community. Is the consensus that one user only posts one answer? If so I will do that next time.
sigvaldm

Should the comma really be a comma and not a semicolon?
Oskar Skog

1
@OskarSkog well, in this case it doesn't matter that much because there is no lhs
cat

1
@OskarSkog Yes, it should be a comma. As @cat says, it doesn't really matter in this case but I chose comma for variation :) The comma operator evaluates two expressions (e.g. i++, j++ in a for loop) and returns the rightmost one. An important detail is that the recursion has to stop somehow. && doesn't evaluate it's rhs if it's lhs is false. *c++ evaluates false when it points to the null-termination of the string.
sigvaldm


7

Excel VBA, 17 15 Bytes

Anonymous VBE immediate window funtion that takes input from cell [A1] and outputs spaces of length of the input to the VBE immediate window

?Spc([Len(A1)])

7

05AB1E, 3 bytes

vð?

Try it online!

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

Other 3 byte solutions (Thanks Magic Octopus Urn and Kevin Cruijssen for most of these)

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
Other solution: gð×, the rest I came up with were above 3 like: õ‚.B¤
Magic Octopus Urn

2
Another fun one: Sð:
Magic Octopus Urn

1
More fun: ðs∍
Magic Octopus Urn

Some more alternative 3-byters: võJ/v¶J; €ðJ/€¶J. And since a sequence of characters as I/O is allowed by default when strings I/O is asked, some 2-byte versions are possible: €ð/€¶/εð/ε¶ and ð:/¶:. Although since this is a pretty old challenge and all other answers use actual strings, I could understand if you kept it as string I/O.
Kevin Cruijssen



6

C, 45 bytes

Using main. Compile with gcc, ignore warnings.

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

Usage:

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

1
Any reason why you can't put char**v in main(c,v)?
CalculatorFeline

@CalculatorFeline At least GCC 6.3.1 compiling simply with gcc main.c doesn't seem to allow mixing ANSI function definition with K&R function definition, so main(c,char**v) won't compile. I either have to do main(int c,char**v) or main(c,v)char**v; of which the latter is 3 bytes shorter. You wouldn't by chance know any flag or something which allows mixing these styles?
sigvaldm

3
No, you can't mix 'em. There's no flag that allows that. K&R style is long obsolete, used only for code golfing and obfuscation purposes.
Cody Gray

And I'm guessing removing char**v entirely doesn't compile either.
CalculatorFeline

@CalculatorFeline If you omit char** entirely the compiler will interpret it as int. If I'm not mistaken you get an error trying to dereference an int and even if you didn't the program wouldn't do what you expected it to do since an int consumes several chars and therefore you never get a NULL value.
sigvaldm



5

><>, 7 bytes

i0(?;ao

The program is a loop

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 thanks to Martin Ender

,<.;.M@.>~8

Try it online!

Here is the expanded hex:

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

While there is input, this code runs:

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

When EOF is reached:

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

You can print a linefeed in three bytes with M8; (which gives 778 = 10 (mod 256)). That should allow you to move the ~ where the ; is right now, saving a byte.
Martin Ender


5

Python 2, 25 bytes

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

-2 bytes thanks to Loovjo
-2 bytes in the invalid code thanks to totallyhuman :p
-3 bytes


1
You can remove the parens after exec since it's a keyword in Python 2
Loovjo

1
@Loovjo Oh right, Python 2. Thanks!
HyperNeutrino

I know this is old and stuff but exec'print;'*len(input()) works.
totallyhuman

1
@totallyhuman oh true, thanks :P
HyperNeutrino

1
@TheMatt it's probably not in the problem specs but it's one of the default acceptable input methods. Try looking on meta, I don't want to go looking for it right now
HyperNeutrino


4

Cubix, 6 bytes

Wahoo a 6 byter!

wi?@oS

Cubified

  w
i ? @ o
  S
  • i gets input
  • ? test top of stack
    • if negative (EOI) redirect onto w lane change which umps to the @ halt
    • if 0 (null) halt this shouldn't be hit
    • if positive Sow push space to the stack, output and change lane onto i

Try it online!


1
Sweet, it's not too often a Cubix program is this short :-)
ETHproductions

4

C, 32 bytes

Try Online modifying characters into spaces

f(char*t){(*t=*t?32:0)&&f(t+1);}

C, 37 bytes

Try Online Left-padding the end-of-string with its length

f(char*t){printf("%*c",strlen(t),0);}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.