アメリカに登る


11

他のユーザーがトランプを助けて壁を築いたので、あなたがそれを登る時が来ました。

これは、ランダムに配置されたホールドでクライミングウォールを出力する必要があるアスキーアートの課題です。

クライミングウォールは、それぞれ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つのパネルで構成されるアスキーアートクライミングウォール。各パネルは6行12列America!で、上部がMexico中央、下部が中央です。各パネルには、プログラムによってランダムに生成される同一のパターンがあります。パネルパターンは、ランダムに分散された3〜10個のホールドのランダムな数で構成されます。

ルール

  • 入力不可
  • 私は「ビルトインなし」と言いますが、あなたの言語にこのビルトインがあれば、自動的に勝者として受け入れます。
  • これはので、最短のコード(バイト単位)が優先されます。
  • ホールドなしの出力は、上記とまったく同じである必要があります。これもホールドなしです。
  • ランダムはここで定義さたランダムです

5
ランダムとは、一様にランダムなことを意味しますか、可能性のあるレイアウトごとにゼロ以外の可能性が発生する必要がありますか、または少なくとも2つの可能性が必要ですか?
パベル

@ Notts90それらは同じであり、ランダムに数量を選択する必要があります。これは投稿で言及されていますが、ランダム性は定義されていません。
パベル

2
すべてのパネルが異なっていなければならないなら、これはまだ良い挑戦だと思います。
シャギー

3
これがサンドボックスに関する私の問題です。そこに1か月以上この課題があり、そこで投稿をクリアすることにしました。だから私はこれを投稿し、すべての問題が解決され、これが起こると考えています!
コメアリンガーアーイング

1
@WORNGALLフェイクニュース!うそ!ランダムは非常に重要です。Trumpscriptには、これまでに見た中で最高のランダムジェネレータがあります。(あなたがしなければならないのは、大統領のツイッターフィードへのリンクです!)
レベルリバーセント

回答:


5

ゼリー65 57 バイト

new-fangledの最初の使用2コードポイント整数文字列リテラル⁽¥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
これは私が見た中で最も長いゼリープログラムです。
パベル

あいまいさが変更されました。あなたの滞在を許可するように3-10で決めました。
コメアリンガーアーイング

以下のための1 )o <-- a space。本当に笑わせてくれました!
コイアーリンガーアーイング

@フェニックスは短くなりましたが、私はそれがまだ短くなると思わずにはいられません。
ジョナサンアラン

@ Satan'sSonそれはほとんどスペースホッパーです!
ジョナサンアラン

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

JavaScript(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、parameterを介して引数として上記のステップから文字列を渡しますp
  • 次に、保留パターンについて説明します。内g
    • 確認しますh>2(つまり、3つ以上の保留があるかどうか)。
    • その場合、文字列を返しますp
    • そうでない場合は、g再度呼び出しpます。今回は、の変更されたコピーを引数として渡します。
    • の変更されたコピーにpreplaceメソッドが使用されており、文字列の文字インデックス(0または1)を参照<space>して、すべての文字を<space>またはに置き換え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 true であるかどうかを確認します。
      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

Mathematica、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では、Wolfram SandboxでほとんどのMathematicaプログラムを無料実行できます。(貼り付けて、Shiftキーを押しながらEnter
ツリーではない

印刷に関しては、このサイトは面白い方法で印刷します。それは...特別なcharachtersを使用しているため、出力が歪んでいる
J42161217を

1

Powershell(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

パイソン2259の 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で試してください

-35 @ Satan'sSonからのヒントを含む-ありがとう!

-3 @Wondercricketのおかげで


あなたは、単に出力することでバイトを救うことができるt変数にして、後にスペースを削除している場合ではなく、その保存America!Mexicoprint" America!" <NEWLINE> d,a,b,c=[" Mexico"],["+"+"-"*10+"+"],[" "]*40,0
コメアリンガーアーイング

@ Satan'sSonに感謝します。これは「ランチブレイクスペシャル」であり、時間をとるときにゴルフがかなりオフになる可能性があります。ヒントをありがとう。
エルペドロ

インポートを変更して関数からfrom random import*削除することにより、数バイトを保存することもできますr.
-Wondercricket

ありがとう@Wondercricket。どうやってそれを逃したのかわからない:)
ElPedro

サタンは役に立ちました!(すべてのための最初と最後の時間> :(
ケアニアン共犯

0

Python 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.