미국으로 올라


11

이제 다른 사용자가 Trump가 벽을 쌓는 데 도움이 되었으므로 벽 을 등반 할 때가되었습니다.

이것은 무작위로 놓인 홀드로 등반 벽을 출력해야하는 아스키 아트 챌린지입니다.

클라이밍 벽은 각각 3-10 개의 홀이 있고 5 개의 패널이있는 패널로 구성됩니다. 각 패널의 높이는 4 자, 10 자입니다.

우리 |는 벽의 측면 (아 케테) -을 나타 내기 위해 사용 하고 a 는 패널의 가장자리를 나타냅니다. 패널의 모서리는로 표시되고 +보류는로 표시됩니다 o.

마지막으로 벽은 America!상단과 Mexico하단에 있어야합니다 .

프로그램은 입력이 필요하지 않으면 입력을받지 않아야하며 아래와 비슷한 것을 출력해야합니다.

다음은 예제 출력입니다.

  America!
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
|  o       |
|    o o   |
| o    o   |
|  o    o  |
+----------+
   Mexico

이것은 혼란스럽게 설정되어 아래에 더 명확하게 구성되어 있습니다.

입력

질초. 절대 입력하지 마십시오.

산출

5 개의 패널로 구성된 ascii-art 등반 벽은 각각 6 개의 선으로 12 개의 기둥으로 12 개의 기둥을 America!중심으로 Mexico하고 아래쪽을 중심으로합니다. 각 패널은 프로그램에 의해 무작위로 생성되는 동일한 패턴을 가지고 있습니다. 패널 패턴은 3에서 10 사이의 무작위로 분산 된 임의의 보유 수로 구성됩니다.

규칙

  • 입력이 허용되지 않습니다
  • "내장 없음"이라고 말하고 싶지만 언어에 내장 된 언어가 있으면 자동으로 승자로 받아들입니다.
  • 이것은 이므로 가장 짧은 코드 (바이트)가 이깁니다.
  • 홀드가없는 출력은 다시 위와 동일해야하며 다시 홀드가 없습니다.
  • 랜덤은 여기에 정의 된 랜덤입니다.

5
랜덤은 균일하게 랜덤을 의미합니까, 아니면 각각의 가능한 레이아웃이 제로가 아닌 가능성이 필요합니까, 아니면 적어도 두 가지 가능성이 필요합니까?
Pavel

@ Notts90 그들은 같아야하고, 무작위로 수량을 선택하십시오. 이것은 게시물에서 언급되었지만 임의성은 정의되지 않았습니다.
Pavel

2
모든 패널이 달라야한다면 여전히 이것이 더 나은 과제라고 생각합니다.
Shaggy

3
이것은 바로 샌드 박스와 관련된 문제입니다. 나는 한 달 이상이 도전을 받았으며 방금 내 게시물을 정리하기로 결정했습니다. 그래서 나는 모든 문제가 해결되었다고 생각하면서 이것을 게시했습니다.
caird coinheringaahing

1
@WORNGALL 가짜 뉴스! 거짓말! 무작위는 매우 중요합니다. 트럼프 스크립트에는 지금까지 본 최고의 RANDOM GENERATOR가 있습니다. (당신이해야 할 일은 대통령의 트위터 피드에 연결하는 것입니다!)
Level River St

답변:


5

젤리 , 65 57 바이트

최초의 새로운 신기한로 사용 하는 두 개의 코드 포인트 정수 문자열 리터럴 ( ⁽¥0= 2049)

⁽¥0ṃ⁾+-W
“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#»

입력을받지 않고 벽을 인쇄하는 전체 프로그램.

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

어떻게?

⁽¥0ṃ⁾+-W - Link 1, panel separator: no arguments
⁽¥0      - literal 2049
    ⁾+-  - literal "+-"
   ṃ     - convert 2049 to base "+-" as if they were [1,0]
       W - wrap in a list   -> ["+----------+"]

“K2X)»Ṅø40RẊ<8X+3¤s⁵ị⁾o j@€⁾||Yṭ¢µṄ€5¡Ṗ;⁷“Ç€:;#» - Main link: no arguments
“K2X)»                                           - "  America!"
      Ṅ                                          - print with line feed
       ø                                         - niladic chain separation
        40                                       - literal 40
          R                                      - range -> [1,2,...,40]
           Ẋ                                     - random shuffle
                 ¤                               - nilad and link(s) as a nilad:
             8X                                  -   random integer between 1 and 8
                3                                -   literal 3
               +                                 -   add
            <                                    - less than? (vectorises)
                   ⁵                             - literal 10
                  s                              - split into chunks of length 10
                     ⁾o <-- a space              - literal "o "
                    ị                            - index into
                           ⁾||                   - literal "||"
                        j@€                      - join with reversed @rguments
                              Y                  - join with line feeds
                                ¢                - call last link (1) as a nilad
                               ṭ                 - tack left to right
                                 µ               - call that p... (monadic chain separation)
                                    5¡           - repeat five times:
                                   €             -   for €ach (separator & panel)
                                  Ṅ              -     print with trailing line feed(separator and panel):
                                      Ṗ          - pop (just the separator now)
                                        ⁷        - literal line feed
                                       ;         - concatenate
                                                 - unused value printed
                                         “Ç€:;#» - "   Mexico"
                                                 - implicit print

4
이것은 내가 본 것 중 가장 긴 젤리 프로그램입니다.
Pavel

모호성이 변경되었습니다. 나는 당신이 머무를 수 있도록 3-10으로 결정했습니다.
caird coinheringaahing

+1 )o <-- a space. 진정으로 나를 웃게했다!
caird coinheringaahing

@ 피닉스는 짧아 지지만 도움이 될 수는 없지만 여전히 짧아야한다고 생각합니다.
Jonathan Allan

@ Satan'sSon 그것은 거의 우주 호퍼입니다!
Jonathan Allan

4

PHP, 138 바이트

<?=($p=str_pad)("  America!",349,strtr("
+----------+
|0|
|1|
|2|
|3|",str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10)))."   Mexico";

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

넓히는

<?=($p=str_pad)("  America!",349, 
#fill the string till a length of 349 with
strtr("
+----------+
|0|
|1|
|2|
|3|",
# before replace the digits with strings in the array
str_split(str_shuffle($p($p(o,rand(3,10),o),40)),10))) 
# make a string with o length 3- 10 fill it with spaces to length 40
# shuffle the resulting string and split it into a array of strings with length 10
."   Mexico"; # add the end

4

자바 스크립트 (ES6) 194 160 바이트

(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`

시도 해봐

보류 패턴은 아래 스 니펫에서 2 초마다 변경됩니다.

f=
(h=0,g=p=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s])))=>`  America!
${t=`+----------+
`}${g(`|          |
`.repeat(4)+t).repeat(5)}   Mexico`
o.innerText=f()
setInterval("o.innerText=f()",2e3)
<pre id=o>


설명

  • 익명 함수를 작성합니다. 입력을받지는 않지만 기본값을 가진 2 개의 매개 변수가 있습니다.
    • h초기 값은 0; 추가 할 때 패널의 보류 수를 유지합니다.
    • g, 패널에서 임의의 패턴을 유지하는 데 사용할 재귀 함수입니다. 우리는 이것으로 조금 돌아올 것입니다.
  • 메인 함수 본문에서로 시작하는 템플릿 리터럴을 출력합니다 America!\n.
  • 그런 다음 패널 분배기 ( +----------+\n) 를 만들고 variable에 할당 t하여 프로세스의 출력에 추가합니다.
  • 다음으로 패널의 한 줄을 만들고 ( | |\n) 4 번 반복하고 추가 t합니다.
  • 우리는 전화 g매개 변수를 통해 인수로 위의 단계에서 문자열을 전달 p.
  • 홀드 패턴입니다. 내 g:
    • 우리는 확인합니다 h>2(즉, 3 개 이상의 보류가 있습니까).
    • 그렇다면 문자열을 반환합니다 p.
    • 그렇지 않다면, g이번에는 수정 된 사본을 p인수로 전달하여 다시 호출 합니다 .
    • 의 수정 된 사본 p에는 replace사용 된 메소드 가 있으며 문자열의 문자 색인 (0 또는 1)을 참조 하여 모든 <space>문자를 a <space>또는 a로 바꿉니다 .o<space>o
    • 캐릭터 인덱스를 다음과 같이 결정합니다.
      1. 호출 ( Math.random()0과 1 사이의 10 진수, 배타적)을 반환합니다.
      2. 이보다 큰지 확인합니다 .8. 패널에 40 개의 공백이 있고 최대 10 개의 보류 만 있으면 패널을 통한 보류의 분배가 향상됩니다 ( .75더 정확할 것입니다. 그러나 희망적으로는 바이트 절약!).
      3. 해당 검사의 부울은 variable에 할당됩니다 s.
      4. s는 정수 (0 또는 1)로 강제 변환되고에 추가됩니다 h.
      5. 우리 h는 현재 11 미만 인지 (즉, 현재 10 미만의 보유를 가지고 있는지 ) 그리고s 사실 인지 확인 합니다.
      6. 그 부울은 정수로 강제 변환되어 문자열에 색인을 제공합니다.
  • 다시 출력으로 돌아갑니다! 반환 된 문자열을 g5 번 반복합니다 .
  • 그런 다음 Mexico문자열 끝에 추가 하면됩니다. 휴!

대안

그리고 단순히 난제를 추가 할 수 있다고 생각했기 때문에 12 바이트 만 추가하면 각 패널마다 고유 한 패턴을 가질 수 있습니다.

(g=(p=`|          |
`.repeat(4)+t,h=0)=>h>2?p:g(p.replace(/ /g,_=>" o"[(h+=s=Math.random()>.8)<11&s]),h))=>`  America!
${t=`+----------+
`}${g()+g()+g()+g()+g()}    Mexico`

시도 해봐

다시, 보류 패턴이 2 초마다 변경됩니다.


3

Pyth- 58 57 바이트, 가능하면 47

Ks(b\+*\-T\+*+++b\|*dT\|4)J<.SxdmdK+3O8+*s.e?/Jk\obK5<K13

시도 해봐

오래된 해결책에 대한 설명 (시간이 있으면 업데이트 할 것입니다) :

J+++b\+*\-T\+K+J*+++b\|*dT\|4=Y<.SxdmdK+3O8+*s.e?/Yk\obK5J
J+++b\+*\-T\+                                                Create the +----------+, and store as J
             K+J*+++b\|*dT\|4                                Create a full panel (minus bottom border, and without holes), store as K
                                  xdmdK                      Get indices of spaces
                                .S                           Create random permutation of these indices
                               <       +3O8                  Get first several indices (a random number from 3 to 10)
                                             s.e?/Yk\obK     Replace space with 'o' at these indices
                                           +*           5J   Create 5 copies, and add bottom border

기술적으로 규칙을 준수하면서 47을 얻을 수 있다고 생각합니다.

JhO2Ks(b\+*\-T\+*+++b\|.S+*\oJ*d-TJ\|4)+*K5<K13

여기서, 홀 수는 여전히 무작위로 선택되며 (세트 {4,8}에서) 홀의 구성은 임의로 선택됩니다 (각 행이 동일한 구성 세트에서).

시도 해봐


2

수학, 201 바이트

c=Column;s=RandomSample[Tuples[{" ",o," "," "},10],4];t="+----------+";w=c[{t,c[Row/@Table[AppendTo[s[[i]],"|"];PrependTo[s[[i]],"|"],{i,Length@s}]]}];c[Flatten@{"  America!",Table[w,5],t,"   Mexico"}]

테스트 할 수없는 언어를 사용하여 +1합니까?
caird coinheringaahing

Satan'sSon @, 당신은 무료로 대부분의 매스 매 티카 프로그램을 실행할 수 있습니다 여기 볼프람 샌드 박스에서. (붙여넣고 shift-enter를 누르십시오.)
나무가 아님

인쇄와 관련하여이 사이트는 재미있는 방식으로 인쇄합니다. 특수 문자
생성기를

1

파워 쉘 (255 바이트)

echo "  America!"
for($l=0;$l-lt4;$l++){$a=," "*12;$a[0]="|";$a[11]="|";$i=get-random -Max 10 -Min 6;$j=get-random -Max 5 -Min 1;$a[$i]=$a[$j]="o";$b+=($a-join"")}
for($k=0;$k-lt5;$k++){echo +----------+($b-join"`n")} 
echo +----------+`n"   Mexico" 

1

파이썬 2 , 259 (224) 221 218 바이트

from random import*
b=[' ']*40
for x in sample(range(40),randint(3,10)):b[x]='o'
a=["+"+"-"*10+"+"]+['|'+''.join(o)+'|'for o in[b[x*10:x*10+10]for x in 0,1,2,3]] 
print'\n'.join(['  America!']+a*5+[a[0]]+['   Mexico'])

repl.it에서 사용해보십시오

@ Satan'sSon의 힌트를 포함하여 -35-감사합니다!

@Wondercricket 덕분에 -3


t변수에 저장하지 않고 단순히 출력하여 바이트를 절약 할 수 있습니까? America!그리고 공백을 제거하면 Mexico? print" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0?
caird coinheringaahing

감사합니다 @ Satan'sSon. 이것은 "점심 스페셜"이었고 시간을 얻었을 때 아마 골프를 조금 더 할 수 있습니다. 힌트를 다시 한번 감사드립니다.
ElPedro

가져 오기를 변경 하고 함수에서를 from random import*제거하여 몇 바이트를 절약 할 수도 r.있습니다
Wondercricket

감사합니다 @Wondercricket. 내가 그 중 하나를 놓친 방법을 잘 모르겠습니다 :)
ElPedro

사탄은 도움이되었습니다! (첫 번째 및 모두를위한 마지막 시간> :(
coinheringaahing 케어 드

0

파이썬 2, 197 바이트

from random import*
n=randint(3,10)
s=list('o'*n+' '*(40-n))
shuffle(s)
t=10
S='+'+'-'*t+'+'
print'\n'.join(['  America!']+([S]+['|'+''.join(s[x:x+t])+'|'for x in range(0,40,t)])*5+[S,'   Mexico'])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.