Casciitum Scribe


23

前書き

サボテンにはさまざまなサイズ、形、色があります。しかし、すべての西洋で最も象徴的なサボテンと必需品はサグアロでなければなりません。重要な特徴は、そのサイズと腕であり、定型的なサボテンの外観を定義しています。

あなたの仕事は、サグアロをASCIIの世界に持ち込むことです。ただし、実際の世界と同様に、他のサグアロはありません。そのため、プログラムはさまざまなアーム構成でサグアロを生成できる必要があります。

サグアロの例

  • 入力:[0b10, 0b11][2, 3]10進数、入力長2
     _     
    / \    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

仕様書

サグアロには常にベースとトップがあり、その間にさまざまな量のステムがあります。ステムパーツには、アームがなく、右に1本、左に1本、または2本の腕があります。

Saguaroの成長パターンは、2ビット値を含む入力リストとして提供されます。00腕がない01、右10の腕、左の11腕、2本の腕(すべてバイナリ)を意味します。入力リストの長さにより、サグアロの高さが決まります。

Saguaroセクションは次のようになります。サボテンの部分は、#印刷されないように明確にするために、八重奏で囲まれています。
サグアロの高さは、常に4+6*k負でない整数の文字に等しくなりますk

#############
#     _     # Saguaro top
#    / \    #
#############
# _  | |  _ # Stem, both arms
#/ \ | | / \# Stem id: 11
#| | | | | |#
#\ \_| |_/ /#
# \__   __/ #
#    \ /    #
#############
# _  | |    # Stem, left arm
#/ \ | |    # Stem id: 10
#| | | |    #
#\ \_| |    #
# \__  |    #
#    \ |    #
#############
#    | |  _ # Stem, right arm
#    | | / \# Stem id: 01
#    | | | |#
#    | |_/ /#
#    |  __/ #
#    | /    #
#############
#    | |    # Stem, no arms
#    | |    # Stem id: 00
#    | |    #
#    | |    #
#    | |    #
#    | |    #
#############
#    | |    # Saguaro base
#    | |    #
#############

入力

前述のように、入力は2ビット値のリスト(0, 1, 2, 310進数)で構成されます。任意の合理的な形式で指定できます。リストの最初の要素は、サグアロの最も高いステム部分、2番目の要素は2番目に高いステム部分などに対応し
ます。必要に応じて、入力リストの長さを追加入力として要求できます。その場合は、回答で指定してください。

出力

出力ASCII saguaroは、上記の正確なステム部分を使用して構築する必要があります。行の末尾のスペースと末尾の新しい行は無視されます。上記で指定したよりも多く、少なく、または多く印刷できます。

ルール

  • 標準的な抜け穴が適用されます
  • これはであり、プログラムのバイトカウントは最小限でなければなりません

テストケース

  • 外れ値。入力:[0b01, 0b00, 0b01, 0b11]
     _     
    / \    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

  • 交互の腕。入力:[0b10, 0b01, 0b10]
     _     
    / \    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
    | |    
    | |    

  • 豊富な武器。入力:[0b11, 0b11]
     _     
    / \    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

  • 槍とも呼ばれる武器はありません。入力:[0b00]
     _     
    / \    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    

  • 体はなく、若いサボテンと呼ばれる人もいます。入力:[]
     _     
    / \    
    | |    
    | |    


入力を部品の量として取得してから、各部品を個別に番号付けできますか (例えば第一のテスト・ケースのようになります4 1 0 1 3
dzaima

末尾のスペースを無視できますか?
ブライアンH.

@dzaimaできます。
ジョナサンフレッチ

@BrianH。はい; 末尾のスペースはすべての行で無視されます。
ジョナサンフレッチ

回答:


10

50 49バイト

↘_\¶/F²«J¹¦²Fθ¿﹪÷Iκ⁺¹ι²”{➙∧⊟≕δaL7YF¬⊕ρ↥↖_K”↓⁶↓²‖T

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

↘_\¶/

上部を描画します。

F²«

両側をループします。

J¹¦²

右上のすぐ下にジャンプします。

Fθ

各ステム部分をループします。

¿﹪÷Iκ⁺¹ι²

腕があるかどうかをテストします。

”{➙∧⊟≕δaL7YF¬⊕ρ↥↖_K”

その場合、腕を印刷します。

↓⁶

それ以外の場合は、縦線のみを印刷します。

↓²

ステムを印刷した後、ベースを印刷します。

‖T

反対側を描く準備ができて反射します。両側が描画されると、側面は最終位置に反映されます。


7

JavaScript(ES6)、210バイト

より良い方法があることに気付く前に、私は別の解決策に非常に長い時間を費やしました。

a=>`     _
    / \\`+a.map(([x,y])=>`
 1  | |  2
3 5 | | 4 6
7 7 | | 8 8
5 51| |24 4
 511${`| `[x]} ${`| `[y]}224
    ${`|\\`[x]} `.replace(/\d/g,m=>` _/\\|`[m%2?x*-~m/2:y*m/2])+`|/`[y],s=`
    | |`).join``+s+s

それを試してみてください

o.innerText=(f=
a=>`     _
    / \\`+a.map(([x,y])=>`
 1  | |  2
3 5 | | 4 6
7 7 | | 8 8
5 51| |24 4
 511${"| "[x]} ${"| "[y]}224
    ${"|\\"[x]} `.replace(/\d/g,m=>` _/\\|`[m%2?x*-~m/2:y*m/2])+"|/"[y],s=`
    | |`).join``+s+s
)(i.value=["11","10","01","00"]);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>


これは00,01,10,11、バイナリ入力またはの代わりに、リテラルを入力として使用します0,1,2,3。OPテストケースを使用すると、これは失敗します。
ブライアン

@BrianH:入力にチャレンジ仕様を引用:「それは合理的な形式で指定することができます
シャギー

1
しかし、「入力は2ビット値(10進数で0、1、2、3)のリストで構成されています」と述べています。その直前...(しかし、これはダウン投票でも何でもありません。これはめちゃくちゃ賢いです。ルールの私の解釈では、入力が一致しません


3

Pythonの2256 253 ... 205の 203 199バイト

r=[('     _',''),('/','\ ')]
for a in input()+[0]:r+=zip(*[['|'*6,'_|    |_,,/|  \/  |\,,||  ||  ||,,\| _\/_ |/,,\ ____ /,,\/'[i::2].split(',')][2-i&a>0]for i in 0,1])
for l in r[:-4]:print'%5s %s'%l

オンラインでお試しください!


他の文字列リテラルで行うように、最初の行では、エスケープするバックスラッシュを省略できます。
ジョナサンフレッチ

末尾のスペースをすべて削除することで18バイト節約できるようです。
シャギー

for ...:\n r...\n r...-> for ...:r...;r...3バイトを節約します。
ジョナサンフレッチ

1

PowerShell、235バイト

param($a)'     _
    / \'
($a|%{((,'1|'*6),('1|  _
1| / \
1|2
1|_/ /
1 __/ 
1/'),(' _ 2
/ \2
| |2
\ \_| |
 \__  |
    \ |'),(' _ 2  _
/ \2 / \
| |22
\ \_| |_/ /
 \__   __/
    \ /'))[$_]})-replace1,'    | '-replace2,' | |'
,'    | |'*2

オンラインでお試しください!

PowerShellは持っていないmapか、zip繰り返しセクションの簡単な交換-私たちは何か他のものが残っているので、文字列を逆にするか、本当の簡単な方法を。

最初の2行は入力を整数の配列として受け取り、サボテンの上部を出力します。次に、ループし$aて、現在の値に基づいて4つの文字列の配列を選択します。これらの文字列はパイプラインに残った後-replace、適切なスポットを埋めるために使用します。次に、サボテンの底もパイプラインに配置します。

パイプラインからすべてが収集され、Write-Outputプログラムの完了時に暗黙的に行われ、すべての要素の間に改行が挿入されます。


1

05AB1E76 75バイト

„ _…/ \‚4ú»,v6F'|4ú"_ |/\"•Aö¡Èèj{^ë•5вèJ5ôNè©‚y1›èð'|®∞2äθ‚yÉèJ,}}„| 4úû=,

オンラインでお試しください!


1
ええ、私はyaを打とうとしますが、それを疑います。
魔法のタコUr

@MagicOctopusUrn:頑張ってください!あなたがそれを管理することを願っています(そして多分それを小競り合いに変えてください:P)
Emigna

これを打ち負かすための1つの良いアイデアは、「oasis / 05AB1E」チャットで投稿したコマンドの30バイトb / c程度に押しつぶされたことです。素敵なゴルフ、今試してみると、近すぎます。
魔法のタコUr

1

Java(OpenJDK 8)626 566 499 466 398 312 310 308バイト

1トンのゴルフが可能

a->{String r=" |,",g="    |",n="     _,    / \\,";boolean j,k;for(int e:a)n+=((k=e>1)?" _  |":g)+((j=e%2>0)?" |  _,":r)+(k?"/ \\ |":g)+(j?" | / \\,":r)+(k?"| | |":g)+(j?" | | |,":r)+(k?"\\ \\_|":g)+(j?" |_/ /,":r)+(k?" \\__ ":g)+(j?"  __/,":r)+(k?"    \\":g)+(j?" /,":r);return(n+g+r+g+r).replace(",","\n");}

オンラインでお試しください!


1
forループの終了も変更{j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+n+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+て削除すると、2バイトを節約できます}
ケビンCruijssen

あなたは「武器」のための間違った道「のラウンドを持っている12
シャギー

0

SOGL V0.1256の 54 53 バイト

5⁷yΙ‚‘∑≡`a#¾‘O.{@.2%i»¹{"⁸G‘6∙;?X"j1>ζ╔²i[n¹‘5n}┼±↔}O

ここで試してみてください!

説明:

..‘                   push the ending part - "    | |\n    | |"
   ..‘O               output the starting part - "     _ \n    / \"
       .{             input times do
         @              push a space
          .2%           push input%2
             i»         push floor(prevInput/2)
               ¹        wrap the two in an array

{                   }   for each of the two numbers
 "..‘                     push "|    " - base stem
     6∙                   multiply vertically 6 times
       ;?       }         if the current item iterating over is truthy (i.e. != 0)
         X                  remove ToS - the regular stem - from the stack 
          "..‘              push "|  _ | / \| | ||_/ / __/ /    " - stem with an arm
              5n            split it into line lengths of 5
                 ┼        add that horizontally to the space pushed earlier (or whatever it's become)
                  ±↔      reverse ToS - the stem currently - horizontally
                     O  output the array of the current part
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.