보이지 않는 텍스트 인쇄


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”가“␠␠␠␊␠”이됩니까?
manatwork

1
@manatwork 0x0A0x20Newline 및 Space 문자 각각에 대한 16 진수 값입니다.
Skidsdev

1
“여러 개의 공백 문자를 출력합니다 (0x0A 및 0x20)”– 출력에서 ​​새 줄 문자는 어디에 있어야합니까?
manatwork

3
These can be any mix of spaces and newlines출력은 공백과 개행 문자를 혼합하여 사용할 수 있습니다. 다른 사람처럼 원하는 경우 공백을 출력하거나 개행 문자를 출력 할 수 있습니다. 그것은 당신에게
달렸

1
알았다. 감사.
manatwork

답변:


137

공백 , 311 (150) 77 68 65 46 41 38 바이트

Kevin Cruijssen 덕분에 -3 바이트 Ephphatha
덕분에 -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
이것이 실제로 작동한다고 가정하면, 이것은 가장 창조적 인 답변에 대한 내 투표에서 확실히 이깁니다
Skidsdev

24
답은 어디입니까? 보이지 않습니까?
Outgolfer Erik

16
검은 마법이 무엇입니까. 코드가 없습니다! -1
Christopher

28
@Christopher WHITEspace MAGIC와 유사
Rod

12
나는 누군가 공백 프로그램으로이 질문에 대답 할 것이라는 것을 알고 있었다
Draco18s

59

22
japt가 이것을 위해 내장되어 있습니까? 젠장 ...
Skidsdev

22
@Mayube 그것은 문자열의 모든 문자를 다른 문자로 대체하는 내장 기능을 가지고 있으며 기본 대체는 공백입니다.)
Tom

4
아주 좋아요! 프로그램을 실행하는 사용자의 경우 -Q플래그를 입력에 추가하여 출력을 따옴표로 묶을 수 있습니다. TIO
Oliver

38

하스켈 , 7 바이트

(>>" ")

온라인으로 사용해보십시오! 사용법 : (>>" ") "Hello, world!".

두 개의 목록 (및 문자열이 Haskell의 문자 목록)이 주어지면 >>연산자는 첫 번째 목록에 요소가있는 횟수만큼 두 번째 목록을 반복합니다. " "두 번째 인수로 설정 하면 입력 문자열의 길이만큼 많은 공백을 연결합니다.


대안 (같은 바이트 수) :

(' '<$)

온라인으로 사용해보십시오! 사용법 : (' '<$) "Hello, world!".

값과 목록이 주어지면 <$연산자는 목록의 각 값을 주어진 값으로 바꿉니다. 그러므로 5 <$ "abc"초래 [5,5,5]하고 ' ' <$ "abc"에서 " ".

함수는 다음과 같이 쓸 수 있습니다. (<$)' '내 코드에서 더 많은 해양 생물을 찾으려면 .


18
사랑스러운 작은 finless 물고기
테일러 스콧



17

망막, 3 4 바이트

S\`.

Retina가 후행 줄 바꿈을 인쇄하기 때문에 이전 버전은 작동하지 않습니다.

.
 

두 번째 줄에는 공백이 있습니다.


2
망막 TIO는 사용하기 매우 쉽습니다.
Digital Trauma

2
불행히도 Retina는 기본적으로 후행 줄 바꿈을 인쇄합니다. \`이를 피 하려면 앞에 추가 해야합니다. 그런 다음 사용하는 것이 더 짧아서 S\`.각 문자를 줄 바꿈으로 바꿉니다 (입력을 각 문자로 나누기 때문에).
Martin Ender 2016 년

@MartinEnder Ahhh는 그것이 Retina인지 TIO인지 확실하지 않았습니다. 그래도 바이트를 절약하는 데 도움을 주셔서 감사합니다!
TheLethalCoder



11

C #, 28 24 바이트

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

string28 바이트 의 생성자를 사용하는 이전 버전 :

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

3
정확히 같은 것을 원했습니다
LiefdeWen

1
@StefanDelport C #을 사용하면 빠르게 접근 할 수 있습니다. :) Linq가 똑같이하는 방법이 있지만 모두 더 오래입니다 ...
TheLethalCoder


9

수학, 21 바이트

StringReplace[_->" "]

1
charlist 입력이 허용 된 경우이 수 있습니다 #/._->" "&. 안타깝게도 입력은 문자열이고 Characters []는 솔루션보다 1 바이트 더 길어집니다. (
CalculatorFeline

1
이것이 a #와 a 가 필요하지 &않습니까? 예StringReplace[#,_->" "]&
Ian Miller

3
@IanMiller하지 티카 10.4 (11)에 reference.wolfram.com/language/ref/StringReplace.html
alephalpha

2
그래. 나는 10.3 밖에 없다. 아마 시간이 ... 업그레이드
이안 밀러

8

자바 스크립트 ES6, 22 바이트

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

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

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


3
허, 나는 "아 s=>s.replace(/[^]/g," "), 다른 솔루션보다 1 바이트 길어야한다"고 생각했다. 개행 문자가 출력에서 허용되는 것을 나에게 발생하지 않았다 : P
ETHproductions

8

C, 31 바이트

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

1
이것은 다른 C 답변 과 어떻게 다릅니 까? 분명히 이것은 짧지 만 다른 것을 간단히 편집 했어야합니까? 두 가지 솔루션으로 하나의 대답이어야합니까?
Tas

4
@Tas 우선, 어떤 의미에서는 이것이 실제로 컴파일되지 않기 때문에 다른 이벤트만큼 좋지 않다고 생각합니다. 그것은 단지 함수이므로 주변의 주요 루틴을 작성해야합니다. 그러나, 그것은 이다 짧고 다른 사람은 단지 기능을 게시 할 것 같다. 분명히 두 가지 매우 다른 솔루션입니다. 하나는 다른 것의 개선이 아니기 때문에 두 가지 다른 대답이어야한다는 것이 합리적입니다. 그러나 저는이 커뮤니티를 처음 사용합니다. 한 명의 사용자가 한 개의 답변 만 게시한다는 합의가 있습니까? 그렇다면 다음에 그렇게 할 것입니다.
sigvaldm

쉼표가 실제로 세미콜론이 아닌 쉼표 여야합니까?
Oskar Skog

1
@OskarSkog 음,이 경우 lhs가 없기 때문에 그다지 중요하지 않습니다
cat

1
@OskarSkog 예, 쉼표 여야합니다. @cat이 말했듯이,이 경우 실제로 중요하지 않지만 변형을 위해 쉼표를 선택했습니다. :) 쉼표 연산자는 두 개의 표현식 (예 : i++, j++for 루프)을 평가 하고 가장 오른쪽을 반환합니다. 중요한 세부 사항은 재귀가 어떻게 든 중지되어야한다는 것입니다. &&lhs가 false 인 경우 rhs를 평가하지 않습니다. *c++문자열의 널 종료를 가리킬 때 false를 평가합니다.
sigvaldm


7

Excel VBA, 17 15 바이트

[A1]에서 입력을 받아 입력 길이의 공백을 VBE 즉시 창으로 출력 하는 익명 VBE 즉시 창 기능

?Spc([Len(A1)])

7

05AB1E , 3 바이트

vð?

온라인으로 사용해보십시오!

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

다른 3 바이트 솔루션 ( Magic Octopus UrnKevin 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¤
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);}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.