비 캐릭터 만들기


31

채팅 미니 도전에서 영감을 얻었습니다 .

문자열을 입력으로 지정하면 (ASCII 인쇄 가능 문자 만 해당) "raining"문자가있는 문자열을 출력하십시오. 각 문자는 아래쪽으로 임의의 수의 행 ( 0문자열의 길이와 길이 사이의 임의의 숫자 , 0이 아닌 확률을 가짐) 이어야하고 열당 하나의 문자 여야합니다 . 가능한 모든 출력에는 다시 0이 아닌 확률이 있어야합니다.

약간 혼란 스러울 수 있으므로 다음은 CMC에서 가져온 예입니다.

Hello World

          d
H
       o
  llo

         l
      W
 e
        r

H공간이 한 줄 d아래로, 0이 내려 가고 llo모든 줄이 어떻게 정렬 되는지 확인하십시오 . 는 r에서 가장 먼 다운 9, 그러나 멀리 상단에서 문자열 길이보다 여전히 낮다. 이것은 단지 하나의 예일뿐입니다 Hello World. input에 대한 다른 수십 가지 가능성이 있습니다.

다른 예는 다음과 같습니다.

test

t
 e
  s
   t


PP&CG

  & G
 P

P  C

  • 입력 및 출력은 편리한 방법 으로 제공 할 수 있습니다 .
  • 입력은 비어 있지 않은 것으로 보장됩니다 (즉, ""입력으로 수신되지 않습니다 ).
  • STDOUT에 인쇄하거나 함수 결과로 리턴 할 수 있습니다.
  • 전체 프로그램 또는 기능이 허용됩니다.
  • 문자가 적절하게 정렬되는 한 (예를 들어, 사각형으로 자유롭게 채울 수있는 경우) 임의의 양의 불필요한 공백이 허용됩니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

2
제목을 읽을 때 애니메이션과 관련이 있다고 생각했습니다. 우리는 이것의 애니메이션 버전을 가지고 있습니까?
Shaggy

@Shaggy 내가 보거나 찾을 수 없었습니다.
AdmBorkBork

"모든 양의 불필요한 공백이 허용됩니다."-선행 공백이 포함됩니까?
Jonathan Allan

매트릭스 코드를 기반으로 한 키워드가 있지만 2 개의 키워드를 사용하여 행운을 빕니다. 아이디어를 샌드 박스로해도 될까요?
얽히고 설킨

답변을 구현하는 데 필요한 최대 입력 크기는 얼마입니까? 나는 많은 사람들이 백엔드 그라운드에서 "의사-무작위"를 사용하는 임의의 함수를 사용하는 것을 보았습니다. 특정 입력 단어는 해당 생성기에 사용되는 시드의 크기보다 크며 "모든 가능한 출력에는 다시 0이 아닌 확률이 발생합니다. " 지정한 제한
Ferrybig

답변:


5

R , 104 바이트

function(s){m=matrix(" ",l<-nchar(s),l)
m[cbind(1:l,sample(l,l,T))]=el(strsplit(s,""))
write(m,1,l,,"")}

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

문자열로 입력하십시오. stdout에 씁니다.


scan(,'')많은 호출 을 사용 하고 중첩 하여 바이트를 절약 할 수 는 있지만 솔직히 함수 접근 방식을 선호합니다.이 다른 방법은 최소한의 이득을 위해 무시 무시합니다. 그래도 몇 가지 아이디어가 생길 수 있습니다. 온라인으로 사용해보십시오!
CriminallyVulgar

나는 (-1 바이트) sample(l,,T)대신 충분 하다고 생각 sample(l,l,T)합니다.
로빈 라이더

4

자바 스크립트 (ES6), 72 바이트

문자 목록으로 입력을받습니다. 문자 행렬을 반환합니다.

a=>a.map((_,y)=>a.map((c,x)=>Math.random()<.5|!a[y+1]?(a[x]=' ',c):' '))

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


삼항식을 부정하지 않으면 1 바이트를 절약 할 수 있다고 생각합니다.
orthoplex

2
@orthoplex 그것은 작동하지 않으며 (0|'A') === (0|undefined)나머지 문자는 더 이상 마지막 행에 나타나지 않을 것입니다. (따라서 기본적으로 |!a[y+1]완전히 제거 된 것과 같습니다 .)
Arnauld

Google은 말한다 Math.random()반환 [0, 1의 수), 그렇게하지 못했습니다 Math.random()<.5Math.random()>0?
nedla2004

@ nedla2004 이론적으로는 그렇습니다. 실제로, PRNG의 구현이 정확히 반환하지 못할 가능성이 높다고 생각합니다 ( 모든 구성이 실제로 발생할 기회를 갖도록 충분히 0을 닫지 않아도됩니다). 우리는 구현에 의해 언어를 정의하기 때문에 개인적으로 언어가 잘못되었다고 생각합니다. 0 0
Arnauld

어떤 플랫폼에서 자바 스크립트를 만들었습니까? 도전 과제에는 고유성 요구 사항이 있으며 최대 입력을 지정하지 않기 때문에 대부분의 플랫폼 math.random()에서 내부 상태가 있는 구현을 사용 하므로 고유 한 출력을 생성 할 수 없으므로 이는 매우 중요 합니다.
Ferrybig

4

Pyth-9 바이트

라인리스트를 출력합니다.

.tm+*;OlQ

 .t                       Transpose, padding with spaces
  m      (Q implicit)     Map over input
   +    (d implicit)      Concatenate to loop var
    *                     String repeat
     ;                    This refers to the var replaced by loop var, which is d=" "
     O                    Random number less than
      lQ                  Length of input

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


4

J , 30 19 바이트

|:@,.]{.~"+_2-#?@##

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


1
0|:]{.~"+_1-#?#을위한 15 바이트
갈렌 이바노프

@GalenIvanov이 아이디어를 좋아하지만 dyad 거래가 반복되지 않기 때문에 출력 범위가 전체 범위에 걸쳐 있지는 않습니다. 예를 들어, 두 글자가 같은 높이로 무작위로 떨어지는 것은 불가능합니다.
요나

@ Conor, 0|:]{.~"+_2-#?@##답변의 동작을 변경하지 않고 17 바이트를 할 수 있습니다 .
요나

1
@Jonah 네 맞습니다. 나는 그것을 깨달았고 또 다른 17 바이트 솔루션을 가지고있었습니다.
Galen Ivanov

4

Japt , 8 바이트

@Shaggy에서 -1 바이트

y_iUÊö ç

y_iUÊö ç        Full Program. Implicit input U
y_              transpose and map each row in U (Call it X)
  i             Insert at the beginning of X:
       ç        " " repeated ↓ many times
   UÊö          random integer in [0, length of U] 
                implicit transpose back and output

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



lol @Shaggy 나는 얼마 전에 같은 대답을 얻었고, 나는 단지 설명을 추가하고 있었다. 여하튼 c :
Luis felipe De jesus Munoz

3

APL (Dyalog Unicode) , 16 바이트 SBCS

익명의 암묵적 접두사 함수

⍉∘↑⊢↑¨⍨∘-∘?≢⍴1+≢

 끈의 길이

1+ 하나는 그것에 추가

≢⍴ 그 "길이"사본

∘? 1… 범위의 임의의 정수

∘- 부정하고 ...

⊢↑¨⍨ 왼쪽에 공백으로 채워서 각 문자에서 많은 요소를 가져옵니다.

∘↑ 문자열 목록을 행렬로 혼합하고 오른쪽에 공백으로 채 웁니다.

 바꾸어 놓다

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


2

Japt , 8 바이트

yÈùUÊö Ä

시도 해봐

yÈùUÊö Ä     :Implicit input of string U
y            :Transpose
 È           :Pass each column through the following function and transpose back
  ù          :  Left pad with spaces to length
   UÊ        :    Length of U
     ö       :    Random number in the range [0,UÊ)
       Ä     :    Plus 1

2

젤리 , 10 바이트

³LŻX⁶x;)z⁶

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

      )    | For each input character
³L         | Length of original input
  Ż        | 0..length
   X       | Random number from that list
    ⁶x     | That number of spaces
       ;   | Concatenate to the character
        z⁶ | Finally transpose with space as filler

우리는 9 줄의 공백을 출력 할 수 있습니다 ( 8 바이트 가있을 것 같지만 ...)
Jonathan Allan

@JonathanAllan은 범위와 같지 0..(length - 1)않습니까? 질문은 0과 문자열 길이 사이를 지정합니다. 아니면 뭔가 빠졌습니까?
Nick Kennedy

오 예, 포용성에 대해 잊었습니다. 3 일 전에 공백을 선행으로 물었을 때 9를 가지고 있다고 확신합니다. 위에서 제안한 것이 아니라고 생각합니다 ... 흠
Jonathan Allan


2

PHP , 88 바이트

for($o='';$i<$l=strlen($argn);$o[$i+$l*rand(0,$l)]=$argn[$i++]);echo chunk_split($o,$l);

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

또는 PHP의 암호화 임의 정수 기능을 사용하는 94 바이트 .

for($o='';$i<$l=strlen($argn);$o[$i+$l*random_int(0,$l)]=$argn[$i++]);echo chunk_split($o,$l);

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

에서 입력하고 STDIN로 출력합니다 STDOUT. 다음으로 실행 :

$ echo Hello World|php -nF rain.php
   l  W    
  l        

 e      r d

H      o   

         l 


    o 

@ASCII 전용으로 -1 바이트 (공백 대신 빈 문자열) 및 +1 바이트 (규칙의 측면에서 오류)!


당신이 포함되어 있지 않기 때문에이 궁금가 허용되는 <?php?>닫힙니다. $o빈 문자열 이면 괜찮습니다.
ASCII 전용

@ASCII 전용, 당신은 맞습니다. 빈 문자열도 작동합니다 (조금 더 불평합니다). 닫기 및 다시 열기 태그 사용에 대한 판결이 확실하지 않으면 계속 업데이트하도록 업데이트하겠습니다. 고마워!
640KB

이 챌린지의 규칙은 "가능한 모든 출력은 다시 0이 아닌 확률을 가져야합니다"라고 말하고 rand, 내부 텍스트의 크기보다 더 임의의 입력 텍스트를 요구할 수 있으므로 PHP 기능으로 는 불가능합니다. 시드 랜드는 기술적으로 귀하의 답변이 모든 상황에서이 조건을 만족시키지 못합니다
Ferrybig

@Ferrybig 나는 레거시 PHP / libc rand가 그다지 유용하지 않다는 것에 동의 하지만, 지원되는 모든 PHP 버전 (7.1+) mt_rand은 임의의 숫자 생성을 위해 내부적으로 Mersenne Twister RND ( )를 사용합니다. 이것이이 도전에 대해 충분히 무작위 적이 지 않다는 걱정이 있습니까?
640KB

mt_rand또한 의사 난수 시스템을 내부적으로 사용하며 제한 사항도 있습니다. PHP가 64 비트 숫자로 컴파일되었다고 가정하면 ( 이 전체 범위에 사용 rand되거나 mt_rand허용 되는 시드 ) 최대 13 자 이하의 단어에 대해 고유 한 출력을 생성합니다. 당신이 나에게 묻는다면 꽤 제한
페리 빅

1

, 10 9 바이트

↑Eθ◧ι⊕‽Lθ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 편집 : @ASCII 전용 덕분에 1 바이트가 절약되었습니다. 설명:

  θ         Input string
 E          Map over characters
        θ   Input string
       L    Length
      ‽     Random value
     ⊕      Incremented
    ι       Current character
   ◧        Padded to length
↑           Print rotated

ASCII 전용으로 지적했듯이 동일한 효과를 위해 문자를 아래로 이동하는 대신 무작위로 위로 이동할 수 있습니다 (상단이 아니라 하단에 여분의 공백이있을 수 있음을 제외하고). 문자 배열을 위쪽으로 인쇄하는 것은 문자열을 정상적으로 인쇄하는 것과 동일하므로 패딩은 각 문자를 임의의 양만큼 세로로 오프셋합니다.


인쇄가 대신 작동하는지 궁금하십니까?
ASCII 전용

1

05AB1E (레거시) , 9 바이트

εIgÝΩú}ζ»

문자열 또는 문자 목록으로 입력하십시오.

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

훨씬 느린 9 바이트 대안 :

gDÝsãΩúζ»

문자 목록으로 입력하십시오.

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

새 버전이 명시 적으로 필요로하기 때문에 두, 05AB1E의 기존 버전을 사용 €S전과 ζ..

설명:

ε       # Map each character in the (implicit) input to:
 Ig     #  Take the length of the input
   Ý    #  Create a list in the range [0, input-length]
    Ω   #  Pop and push a random integer from this list
     ú  #  Pad the current character with that many leading spaces
      # After the map: zip/transpose; swapping rows/columns (with space as default filler)
  »     # Then join all strings by newlines (and it output implicitly as result)

g          # Get the length of the (implicit) input-list
 D         # Duplicate this length
  Ý        # Create a list in the range [0, input-length]
   sã      # Take the cartesian product of this list that many times
     Ω     # Pop and push a random list from this list of lists of integers
      ú    # Pad the characters in the (implicit) input-list with that many spaces
       ζ   # Zip/transpose; swapping rows/columns (with space as default filler)
        »  # Then join all strings by newlines (and it output implicitly as result)

라인을 따라 생각하고 gD¸s∍ÝδΩ있었지만 더 길고 ... 오오 ... 이것은 새로운 05AB1E에서는 작동하지 않습니다.).
매직 문어 항아리


1

줄리아, 69 바이트

f(s)=(n=length(s);z=fill(' ',n,n);for i=1:n z[rand(1:n),i]=s[i]end;z)

이 함수 정의 f을 허용 String또는 Vector{Char}과를 반환합니다 Matrix{Char}.

언 골프 드 :

function f(s)
    n = length(s)
    z = fill(' ', n, n)  # an n×n matrix of spaces
    for i = 1:n
        # set a random entry in the ith column to the ith character in s
        z[rand(1:n),i] = s[i] 
    end
    z
end

예:

julia> f("test")
4×4 Array{Char,2}:
 't'  ' '  ' '  ' '
 ' '  ' '  ' '  ' '
 ' '  'e'  ' '  't'
 ' '  ' '  's'  ' '

이것은 분명히 더 나을 수 있습니다. 내 골프 기술은 꽤 녹슨입니다.

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



1

PowerShell을 , 108 (102) 98 바이트

mazzy 덕분에 -4 바이트

$a=1..($z=($y=$args|% t*y).count)|%{random $z}
1..$z|%{-join($y|%{" $_"[$a[$i++%$z]-eq+$r]});$r++}

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

기본적으로 1..length문자열을 두 번 반복 하여 한 번 각 문자에 대해 임의의 줄 위치를 얻고 두 번째로 해당 색인을 사용하여 각 줄을 실제로 만듭니다. 한 번의 스윕으로 수행하는 방법을 알아내는 것이 큰 바이트 절약입니다.



0

SmileBASIC 3, 62 바이트

LINPUT T$L=LEN(T$)CLS
FOR I=0TO L-1LOCATE,RND(L+1)?T$[I];
NEXT


0

파이썬-92 바이트

import random
lambda s:map(None,*[(random.randrange(len(s))*' '+c).ljust(len(s))for c in s])

import random
MilkyWay90

@ MilkyWay90 d' oh
Maltysen

1
from random import*대신 사용하여 1 바이트를 저장할 수 있습니다 .
orthoplex

map(None,...파이썬 3에서는 작동하지 않는다고 생각 하므로 제목에 Python 2를 지정해야합니다.
orthoplex

0

K (oK) , 20 바이트

해결책:

+c$(-1-c?c:#x)$++x:

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

설명:

+c$(-1-c?c:#x)$++x: / the solution
                 x: / store input as x
                +   / flip (enlist)
               +    / flip again (break into chars)
              $     / pad (each) character
   (         )      / do this together
           #x       / length of x
         c:         / save as c
      -c?           / choose (?) c times from c
    -1              / subtract from -1
 c$                 / pad to length of x
+                   / flip


0

파이썬 3, 208 바이트

import random as r;x=input();R=range(len(x));c=[r.choice(R) for i in R];y=[' '*c[i]+x[i]+' '*(len(x)-c[i]) for i in R];R=range(len(y));print('\n'.join([''.join(r) for r in [[y[i][j] for i in R] for j in R]]))

무작위 선택 목록을 작성한 다음 각 무작위 선택에 의해 지정된 색인을 제외한 모든 위치에 공백이있는 열 목록을 작성하십시오. 열은 행으로 바뀌고 그 사이에 개행이 인쇄됩니다.

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

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