단어 고드름 만들기


45

Stack Exchange의 기술적 제한으로 인해 제목이 잘못 렌더링됩니다. 올바른 이 문제에 대한 제목입니다

을 만들다

Word Icicle!
Word Icicle 
Word  cicle 
 ord  cicle 
 ord   icle 
 ord   i le 
 or    i le 
 or    i l  
 or      l  
 or         
  r         

오늘날의 과제는 입력 단어에서 고드름을 만드는 것입니다. 완전히 인쇄 가능한 ASCII 문자열 과 최소 2 개의 비 공백 문자가 제공되면 다음 단계를 수행하십시오.

  1. 문자열의 현재 상태를 인쇄하십시오.

  2. 공백이 아닌 가장 작은 문자를 공백으로 바꿉니다. 동점이 있으면 가장 왼쪽 문자를 교체하십시오.

  3. 문자열에 공백이 아닌 문자가 하나만 포함될 때까지 연속 행에서 반복하십시오.

이것은 입력 문자열이 녹는 것처럼 보이는 효과를 만듭니다 ...

I'm Melting!!!
I'm Melting !!
I'm Melting  !
I'm Melting   
I m Melting     
  m Melting   
  m  elting   
  m   lting   
  m   ltin    
  m   lt n    
  m    t n    
       t n    
       t      

규칙

  • 몇 번의 반복 후에, 출력은 거의 확실하게 각 줄에 후행 공백이 있습니다. 이를 자르기로 선택하면 허용됩니다.

  • 빈 줄 이 하나만 있을 수 있지만 더 이상은 아닙니다.

  • 입력에 공백이 여러 개있을 수 있지만 모두 효과적으로 건너 뜁니다. 예를 들어, 입력 a a

    a      a
           a
    
  • 원하는 경우 문자열 목록으로 입력을받을 수 있습니다. 출력을 위해 문자열 목록, 줄 바꾸기가 포함 된 단일 문자열 또는 char 행렬 / 2D 배열을 반환하거나 인쇄 할 수 있습니다. 일반적으로 허용 IO 형식을 선호하므로 다른 형식은 일관되고 명확하게 올바른 출력에 해당하는 한 허용됩니다. 의심스러운 경우 언제든지 문의하십시오. 평소와 같이 전체 프로그램 또는 기능이 허용됩니다.

  • 이것은 모든 언어로 가장 짧은 답변을하기위한 콘테스트입니다. Java로 응답하도록 선택한 경우 가능한 한 가장 짧은 Java 응답 (바이트)을 작성하십시오.

테스트 사례

Hello World! -->

Hello World!
Hello World 
 ello World 
 ello  orld 
 ello  orl  
  llo  orl  
   lo  orl  
    o  orl  
    o  or   
       or   
        r   


AbCdEfGhIjKlMnOpQrStUvWxYz -->

AbCdEfGhIjKlMnOpQrStUvWxYz
 bCdEfGhIjKlMnOpQrStUvWxYz
 b dEfGhIjKlMnOpQrStUvWxYz
 b d fGhIjKlMnOpQrStUvWxYz
 b d f hIjKlMnOpQrStUvWxYz
 b d f h jKlMnOpQrStUvWxYz
 b d f h j lMnOpQrStUvWxYz
 b d f h j l nOpQrStUvWxYz
 b d f h j l n pQrStUvWxYz
 b d f h j l n p rStUvWxYz
 b d f h j l n p r tUvWxYz
 b d f h j l n p r t vWxYz
 b d f h j l n p r t v xYz
 b d f h j l n p r t v x z
   d f h j l n p r t v x z
     f h j l n p r t v x z
       h j l n p r t v x z
         j l n p r t v x z
           l n p r t v x z
             n p r t v x z
               p r t v x z
                 r t v x z
                   t v x z
                     v x z
                       x z
                         z


PPCG is da BEST --> 

PPCG is da BEST
PPCG is da  EST
PP G is da  EST
PP G is da   ST
PP   is da   ST
 P   is da   ST
     is da   ST
     is da    T
     is da     
     is d      
     is        
      s        


({({})({}[()])}{}) -->

({({})({}[()])}{})
 {({})({}[()])}{})
 { {})({}[()])}{})
 { {}) {}[()])}{})
 { {}) {}[ )])}{})
 { {}  {}[ )])}{})
 { {}  {}[  ])}{})
 { {}  {}[  ] }{})
 { {}  {}[  ] }{} 
 { {}  {}   ] }{} 
 { {}  {}     }{} 
   {}  {}     }{} 
    }  {}     }{} 
    }   }     }{} 
    }   }     } } 
        }     } } 
              } } 
                } 

1
코드 포인트에 의해 "어휘 적으로 가장 작은"수단?
Giuseppe

1
@Giuseppe 네, ASCII 코드 포인트가 가장 작은 문자 (공백 제외)
DJMcMayhem

2
알파벳의 색인으로 문자를 세로로 반복 해야하는 또 다른 도전을 생각 나게합니다.
얽히고 설킨

6
@Shaggy 아마 알파벳 비 만들기를 생각하고있을 것입니다 .
Rainbolt

2
미디어 위키에 대한 언급은 ...
아웃 골퍼 Erik

답변:



8

레티 나 , 28 바이트

/\S/+¶<~(O`.
0L$`\S
0`$\$&¶ 

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

/\S/+

입력 값이 비어 있지 않은 동안 반복하십시오.

¶<

현재 값을 인쇄하십시오.

~(

값에서 나머지 스크립트를 실행하십시오. 그런 다음 해당 스크립트의 결과를 값에 대한 스크립트로 실행하십시오.

O`.

문자를 순서대로 정렬하십시오.

0L$`\S
0`$\$&¶ 

공백이 아닌 첫 번째 문자를 선택하고 해당 문자의 첫 번째 리터럴 ( $\)을 $&공백 (원래 코드의 후행 공백)으로 바꾸는 Retina 프로그램을 출력하십시오 .


6

APL (Dyalog Unicode) , 18 11 바이트

∪∘↓∘⍉⍋∘⍋⍴⌸⊢

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

사용 ⎕io←1; 문자열 배열 (문자형 벡터로 구성된 벡터)을 반환합니다.


인가 필요?
Kritixi Lithos

@Cowsquack 예, 그렇지 않으면 출력의 처음 몇 행이 동일 할 수 있습니다
ngn

@Cowsquack 감사합니다, 나는 그것을 눈치 채지 못했습니다
ngn


좋은 하나, 정말 영리한 사용법 ⍋∘⍋:)
Kritixi Lithos

6

05AB1E , 9 바이트

ðм{v=yð.;

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

설명

ð      # Push space
м      # Implicit input. Remove spaces
{      # Sort. Gives string of sorted, non-space chars
v      # For each char in that string
  =    #   Print latest string, without popping. The first time it prints the input
  y    #   Push current char
  ð    #   Push space
  .;   #   Replace first occurrence of current char by space
       # Implicitly end for-each loop

1
{ðKv=yð.;내 것, 좋은 사람이었습니다.
Magic Octopus Urn

@MagicOctopusUrn Heh, 꽤 유사
Luis Mendo

1
@MagicOctopusUrn 사실, 최신 05AB1E 버전에서는 여전히 9 바이트가됩니다. 첫 번째 :문자를 대신 .;하는 대신 모든 문자 를 바꿉니다 (예 : !테스트 케이스에서 7 바이트가 수행하는 작업 참조 ). 또한 도전 과제는 공백을 명시 적으로 명시하지 않으므로 7 바이트는 여러 공백이있는 입력에는 작동하지 않습니다. PS : 좋은 답변, Luis! 나에게서 +1 :)
Kevin Cruijssen

1
@KevinCruijssen은 내가 왜 .;처음 부터 사용해야했는지 잊어 버렸 습니다. 말 그대로 올해 5 월 1 일에 그 문제로 어려움을 겪었던 것을 기억합니다.
매직 문어 Urn

1
@LuisMendo 글쎄,이 답변에 사용한 명령은 05AB1E의 Elixir 재 작성에서 변경되지 않았습니다. :)
Kevin Cruijssen

5

Pyth, 17 14 13 바이트

V-SQdQ=XQxQNd

여기 사용해보십시오

V-SQdQ=XQxQNd
V-SQd              For each non-space character in the sorted input (Q)...
     Q             ... print the current value of Q...
      = Q          ... and set Q to itself...
         xQN       ... with the first instance of the character...
       X    d      ... replaced by a space.

5

sed -rn , 142143 바이트

:a
p
s/$/	ABCDEFGHIJKLMNOPQRSTUVWXYZ/
s	\w+$	!"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_`\L&{|}~	
:b
/(.).*	\1/!s/	./	/
tb
s/(.)(.*)	\1.*/ \2/
ta

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

(참고 : 프로그램에 탭이 있습니다)

sed에는 사전 식 순서 개념이 없기 때문에 인쇄 가능한 ASCII 문자 세트를 하드 코딩해야했고 바이트 수의 절반 이상을 차지했습니다.

sed 4.2.2를 사용하면 이름이없는 레이블이 허용되므로 바이트 수를 2만큼 줄입니다 . 온라인 에서 사용해보십시오!


-r 확장 정규 표현식 가능 (golfier)

-n 프로그램 끝에서 패턴 공간의 암시 적 인쇄를 비활성화합니다

패턴 공간은 입력으로 시작

:alabel a, 이것은 메인 프로그램 루프입니다

p 패턴 공간 인쇄 (버퍼의 팬시 이름)

이제 인쇄 가능한 ASCII 문자 세트를 추가합니다 (공백 제외).

s/$/ ABCDEFGHIJKLMNOPQRSTUVWXYZ/ 1 바이트 분리 문자 역할을하는 탭을 추가하고 대문자 알파벳

s<tab>대체 (sed는 구분 기호로 모든 문자를 사용할 수 있습니다.이 경우 탭은 이스케이프에서 바이트를 저장하는 데 사용됩니다 /)

  • \w+$ 방금 추가 한 대문자 알파벳

  • <tab>

  • !"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_\`\L&{|}~<tab>나머지 문자 \L&는 대문자 알파벳의 소문자 버전입니다.

:blabel b, 입력에없는 시작 세트에서 문자를 제거하십시오.

/(.).* \1/! ASCII 세트의 첫 문자가 입력에없는 경우

  • s/ ./ / 그것을 제거

tbb대체가 실패 할 때까지 반복

s/(.)(.*) \1.*/ \2/ 입력에있는 ASCII 세트의 첫 문자를 공백으로 바꾸고 ASCII 세트를 제거하십시오.

ta 재귀


욕심없는 매칭은 여기에 실제로 도움이되었지만 sed적어도 4 바이트를 절약 할 수있는 바보를 발견 할 수있었습니다 : 온라인으로보십시오!
Neil

(Cows quack은 잘못된 문자로 동일한 문자를 제거 할 때 sed 만 속일 수 있다고 지적했다.)
Neil


4

R , 140100 바이트

-40 바이트 주세페 덕분에!

function(x)for(i in any((z=utf8ToInt(x))<33):max(y<-rank(z,,"f"))){z[y==i]=32
cat(intToUtf8(z),"
")}

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

outerGiuseppe의 마법을 사용하여 올바르게 작동 하는 솔루션 은 104 바이트가 더 깁니다. 이 답변에서 영감을 얻었습니다 .

function(x,z=utf8ToInt(x)-32)apply(t(outer(rank(z,,"f"),(2-(min(z)>0)):nchar(x),">=")*z+32),1,intToUtf8)

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


문자 벡터로 입력되는 109 바이트
Giuseppe

1
문자열로 입력을받는 100 바이트 !
주세페

여전히 좋은 답변입니다. 내가 기억하지 못했기 때문에 광산은 200 바이트 이상으로 벌어졌습니다 rank!
주세페

@Giuseppe 그것에 대해 말해주세요 – 나는 먼저 "주문"을 해보았지만 정확한 순서는 아닙니다.
JayCe

@Giuseppe와 귀하의 게시물에서 영감을 얻은 외부를 사용하려는 시도는 모든 공간을 제거하기 만했습니다. TIO 나는 작동하는 외부 접근법이 별도의 답변으로 게시되는 것을보고 싶습니다. 여전히 노력하고 있지만 그렇게 우아하지 않을 수 있습니다.
JayCe

3

파이썬 3 , 71 바이트

f=lambda a:[*a.strip()]and[a]+f(a.replace(min(a.replace(*" ~"))," ",1))

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

ovs 덕분에 -4 바이트


*bool({*a}-{" "})if{*a}-{" "}else[a]
RootTwo

@RootTwo이 결과가 RecursionError아닌가?
ovs

@RootTwo if/else바로 가기이지만 *bool그렇습니다. ovs와 같은 재귀 오류
HyperNeutrino

물론 맞습니다. 버그 때문에 함수가 작동하는 것처럼 함수를 호출하여 함수가 재귀되었습니다.
RootTwo


3

젤리 , 8 바이트

ẋ"ỤỤ$z⁶Q

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

생각

기본 아이디어는 문자열을 조작하고 모든 중간 결과를 반환하는 대신 원하는 출력의 열을 직접 작성하는 것입니다.

입력 문자열의 문자를 제거되는 순서대로 숫자로 시작합니다. 지금은 공백도 제거 될 것입니다.

tee ay oh
845139276

이제이 열거에서 인덱스별로 각 문자를 반복하여 열을 작성합니다.

tee ay oh
tee ay oh
tee ay oh
tee  y oh
t e  y oh
t    y oh
t    y o 
t    y   
     y   

남은 것은 공백을 설명하기 위해 중복을 제거하는 것입니다.

암호

ẋ"ỤỤ$z⁶Q  Main link. Argument: s (string)

    $     Combine the two links to the left into a chain.
  Ụ       Grade up; sort the indices of s by their corresponding values.
          Let's call the result J.
          Grade up again, sorting the indices of J by the corr. values in J.
          This enumerates the positions of s as described before.
ẋ"        Repeat each character of s that many times.
     z⁶   Zip the resulting 2D array, filling missing characters with spaces.
       Q  Unique; deduplicate the array of rows.

3

펄 5 -n , 37 34 바이트

@TonHospel의 도움으로 3 바이트를 삭제했습니다.

say&&s/\Q$a/ / while($a)=sort/\S/g

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


아, 아주 좋은, 훨씬 좋은 접근! 나는 당신 \Q이 마지막 테스트 케이스에 대해 그래도 필요하다고 생각합니다 .
Dom Hastings

네가 옳아. 추가했습니다.
Xcali

더 짧음 : say&&s/\Q$a/ / while($a)=sort/\S/g. 또한 올바르게 처리0
Ton Hospel

3

자바 스크립트, 67 66 65 바이트

나는 한동안 술에 취하지 않았기 때문에!

s=>[...t=s].sort().map(x=>x>` `?t+=`
${s=s.replace(x,` `)}`:0)&&t

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

맥주에 포함 된 4 개의 중복 바이트를 지적 해 주신 DanielIndie에게 감사드립니다!


왜지도에서 y를 지정합니까? : P 그것은 67 만들 수 있습니다
DanielIndie 08:17에

@DanielIndie, 맥주 때문에! : D 지적 해 주셔서 감사합니다.
Shaggy

그렇습니다, 나는 그것이 사실 일 것이라고 생각했다. : P
DanielIndie

3

K (ngn / k) , 26 24 바이트

{?(,x),x{x[y]:" ";x}\<x}

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


아름다운! 내 K 시도는 41시에 시작되었습니다 :`{. [x; (-1 + # x) & x? _ci & / _ ic x _dv ""; :; ""]}`바이트를 int로 변환하고 낭비하고 낭비하고 있습니다. 그것이 범위를 벗어나지 않는지 확인하십시오.
uryga

@uryga 감사합니다. 프로젝션을 제대로 구현했다면 가능 {@[x;y;:;" "]}했을 것 @[;;:;" "]입니다. 어떤 버전의 k를 사용하십니까? 나는 이것에 익숙하지 않다 _ci _ic _dv.
ngn

나는 그것이 2.8-ish라고 생각합니까? 나는 연산자를 내장으로 제공하는 Kona 인터프리터를 사용하고 있습니다 : char-of-int, int-of-char, delete-value.
uryga

2

C # (Visual C # 대화식 컴파일러) 129 바이트

var s=ReadLine();while(s.Any(c=>c!=32)){WriteLine(s);var i=s.IndexOf(s.Min(c=>c==32?(char)999:c));s=s.Remove(i,1).Insert(i," ");}

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


c!=32될 수 있습니다 c>32; c==32될 수 있습니다 c<33; 그리고 (char)999될 수있다 '¡'(또는 인쇄 가능한 ASCII 유니 코드 범위 위의 다른 문자).
Kevin Cruijssen

아, 그리고 당신이 더 많은 변화 바이트를 저장할 수 있습니다 whilefor하고, 배치 var s=ReadLine()하고 s=s.Remove(i,1).Insert(i," ")(두 세미콜론이 더 이상 필요하지 않은, 그래서) 그 안에.
Kevin Cruijssen


2

하스켈 , 67 바이트

Laikoni 덕분에 12 바이트 절약

f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b)

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

이것은 오류로 종료됩니다

하스켈 , 83 79 바이트

g(a,_:b)=a++' ':b
mapM_ putStrLn.(iterate$g.(span=<<(/=).minimum.concat.words))

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

이것은 오류로 종료됩니다

하스켈 , 86 바이트

u=concat.words
g(a,_:b)=a++' ':b
(take.length.u)<*>(iterate$g.(span=<<(/=).minimum.u))

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

하스켈 , 100 91 88 바이트

u=concat.words
f x|(a,_:b)<-span(/=minimum(u x))x=a++' ':b
(take.length.u)<*>(iterate f)

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


67 바이트 : f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b) 온라인으로 사용해보십시오!
Laikoni

@Laikoni 감사합니다! 나는 그런 식의 직전에 있었고 잠들었습니다. 그러나 나는 그것이 id=<<꽤 영리 하다고 생각하지는 않습니다
Wheat Wizard


2

K4 , 28 20 18 바이트

해결책:

?x{x[y]:" ";x}\<x:

예:

q)k)?x{x[y]:" ";x}\<x:"PPCG is da BEST"
"PPCG is da BEST"
"PPCG is da  EST"
"PP G is da  EST"
"PP G is da   ST"
"PP   is da   ST"
" P   is da   ST"
"     is da   ST"
"     is da    T"
"     is da     "
"     is d      "
"     is        "
"      s        "
"               "

설명:

ngn 과 같은 기능 입니다. 오름차순 목록을 생성하는 색인을 찾아로 하나씩 겹쳐 쓰고 " "구분선을 사용하여 중복 된 행을 제거하십시오.

?x{x[y]:" ";x}\<x: / the solution
                x: / save input as x
               <   / return indices that would result in ascending sort
 x{        ; }\    / two-line lambda with scan
        " "        / whitespace
       :           / assignment
   x[y]            / x at index y
            x      / return x
?                  / distinct

2

gcc 32 비트, 66 65 바이트

char*p,i;f(a){for(i=32;i++;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}
main(){char s[]="3.1415926";f(s);}

-1 바이트를위한 Jonathan Frech에게 감사합니다


*p==i?...:0;아마 될 수 있습니다 *p-i?0:...;.
Jonathan Frech

@JonathanFrech 아니요, 1 바이트 더 깁니다 ( *p-1||(...)길이는 동일)
l4m2

죄송합니다, 쉼표 표현을 함께 유지해야한다는 중요성을 인식하지 못했습니다. 그러나 이것은 65 바이트 일 수 있습니다 . 또한 type이어야 하는 f(a)컴파일 방법을 모르지만 32 비트 gcc 사용과 관련이 있다고 가정합니다. achar*
Jonathan Frech

@JonathanFrech 나는 char*p,i;f(long long a){for(i=31;++i;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}tio (64bit)에서 어떻게 f(a)작동 하는지 설명 할 수있다
l4m2

OP에 챌린지 사양에 대해 문의했지만 입력 문자열이 공백으로 시작될 수 있다고 말했지만 죄송합니다. 따라서 제안 된 솔루션이 유효하지 않으므로 (이러한 입력으로 인해 무한 루프가 발생하므로) 원래 솔루션으로 되돌릴 가능성이 높습니다.
Jonathan Frech

2

MATLAB, 74 바이트

max () 함수의 2 출력 형식을 사용하여 공백에서 문자열을 0으로, 인쇄 가능한 문자에서 256을 문자 값으로 변환하여 가장 작은 문자와 색인을 검색합니다.

s=input('s');x=1;while(x);disp(s);[x,y]=max((256-s).*(s~=' '));s(y)=' ';end

1
PPCG에 오신 것을 환영합니다! 잘 했어!
AJFaraday

2

커먼 리스프 , 240 228 224 바이트

(setf s(read))(defun f(x)(setf y(char-code(elt s x)))(if(= y 32)1e9 y))(loop for _ across s do(print s)do(setf s(replace s" ":start1(position(code-char(reduce #'min (loop for i from 0 below(length s)collect i):key #'f))s))))

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

이번이 처음입니다.
나는 lisp를 배우는 과정에있어서 누군가가 이것보다 짧은 것을 생각할 수 있다고 확신합니다.


1
사이트에 오신 것을 환영합니다! 일반적인 lisp를 만나서 반갑습니다!
밀 마법사

1

APL (Dyalog Unicode) , 39 바이트 SBCS

{⎕←⍵⋄×≢⍵∩g' '~⍨⎕UCS256:∇' '@(⊃g⍋⍵)⊢⍵}

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

Dfn.

어떻게?

{⎕←⍵⋄×≢⍵∩g' '~⍨⎕UCS256:∇' '@(⊃g⍋⍵)⊢⍵}  Main function, argument 
 ⎕←⍵⋄                                     Print 
         g' '~⍨⎕UCS256                  Assign to g every Unicode character except space
     ×≢⍵∩                :                If ⍵∩g is not empty
                                         Recursively call the function with argument:
                           ' '@          Space at
                               (⊃g⍋⍵)     The first (⊃) element in  graded up (⍋) with g
                                          The dyadic grade up function will index  according
                                          to its left argument, in this case g.


1

PowerShell , 103 99 바이트

param($a)2..$a.length|%{($x=$a);[regex]$p=""+([char[]]$a-ne' '|sort)[0];$a=($p.replace($x," ", 1))}

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

에 입력을 문자열로 $a받습니다. 그런 다음에서 2로 반복 합니다 $a.length(즉, 한 문자를 제외한 모든 문자를 제거하는 데 필요한 수직 시간 수). 반복 할 때마다 현재 문자열을 출력 $x하고 동시에 편리하게 저장 합니다. 우리는 그 다음 새로운 구성 [regex]객체를 $pattern 나머지 문자 이루어진에 $a해당하다 -nOT e공간에 QUAL sortED 후, 0그 하나의 제.

그런 다음 문자열 , attern을 공백 으로 바꾸는 방법을 $a사용하여 정규식 객체의 새 문자열과 동일하게 설정 하지만 st는 일치합니다. 예,이 문법은 이상합니다..Replace$x$p" "1

문자열은 파이프 라인에 남겨지고 암시 적으로 Write-Output그들 사이에 줄 바꿈과 무료 줄 바꿈을 제공합니다.




1

MATL , 17 16 바이트

tSXz"tOy@=f1)(]x

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

t       % Implicit input. Duplicate
S       % Sort
Xz      % Remove spaces
"       % For each char in that string
  t     %   Duplicate last result. This is the most recent string obtained
        %   from replacing chars by spaces in the input
  O     %   Push 0
  y     %   Duplicate from below
  @     %   Push current char
  =     %   Equals? (element-wise) Gives 1 for occurrences of current char
        %   in the most recent string, 0 otherwise
  f     %   Indices of nonzeros
  1)    %   Get the first entry
  (     %   Write 0 at that position. Char 0 will be displayed as space
]       % End
x       % Delete last result, which consists only of space / char zero

1

Excel VBA, 167 바이트

범위에서 입력 [A1]을 받아 VBE 즉시 창으로 출력 하는 익명의 VBE 즉시 창 기능 .

s="Code(Mid(A$1,Row(),1))":[B1].Resize([Len(A1)])="=If("&s &"=32,1E3,"&s &")":For i=1To[Len(A1)-CountIf(B:B,1E3)]:?[A1]:[A1]=[Substitute(A1,Char(Min(B:B))," ",1)]:Next

Ungolfed 및 댓글 달기

''  run as `call icicle("Test")` or `icicle"I am the WALRUS`
Sub icicle(Optional str As String)
    If Not IsMissing(str) Then [A1] = str   ''  pipe input
    [B:B].Clear                             ''  reset between runs
    [B1].Resize([Len(A1)]) = "=If(Code(Mid(A$1,Row(),1))=32,1E3,Code(Mid(A$1,Row(),1)))"  ''  get char number for every char in input
    For i = 1 To [Len(A1)-CountIf(B:B,1E3)] ''  iterate across from 1 to length of input - number of spaces
        Debug.Print [A1]                    ''  output a single line
        [A1]=[Substitute(A1,Char(Min(B:B))," ",1)]  ''  replace minimum char with space
    Next
End Sub

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