雪だるまをコーディングしますか?


176

これは簡単なASCIIアート雪だるまです:

_===_
(.,.)
( : )
( : )

彼に友達を作りましょう。これは、ASCIIアートsnowpeopleの一般的なパターンです。

 HHHHH
 HHHHH
X(LNR)Y
X(TTT)Y
 (BBB)

先頭のスペースと括弧は、すべての雪だるまで常に同じです。異なる文字は、個別に変更できるパターンのセクションを表します。各セクションには、ASCII文字で埋めることができる正確な4つのプリセットがあります。8つのセクションすべてでこれらのプリセットを組み合わせて一致させることで、さまざまな雪の人を作ることができます。

すべてのプリセット

(スペースが他の空の行に置かれているため、セクションの形状は常に正しいことに注意してください。)

Hは帽子

  1. 麦わら帽子

         
    _===_
  2. メキシカンハット

     ___ 
    .....
    
  3. フェズ

      _  
     /_\ 
    
  4. ロシアの帽子

     ___ 
    (_*_)
    

Nは鼻/口用

  1. 普通 ,

  2. ドット .

  3. ライン _

  4. 無し

Lは左目用

  1. ドット .

  2. 大きいドット o

  3. 最大のドット O

  4. 閉まっている -

Rは右目用

(左目と同じリスト。)

Xは左腕用

  1. ノーマルアーム

     
    <
  2. 上向きアーム

    \
     
  3. 下向きの腕

     
    /
  4. 無し

     
     

Yは右腕用

  1. ノーマルアーム

     
    >
  2. 上向きアーム

    /
     
  3. 下向きの腕

     
    \
  4. 無し

     
     

Tは胴体用

  1. ボタン :

  2. ベスト ] [

  3. 内向きの腕 > <

  4. 無し

Bはベース用

  1. ボタン :

  2. " "

  3. 平らな ___

  4. 無し

チャレンジ

形式HNLRXYTBで8文字の文字列を(stdinまたはコマンドライン経由で)取り込むプログラムを作成します。各文字は、雪だるまの対応するセクションに使用するプリセットを示す1〜4の数字です。雪だるま全体を標準出力に出力します。

たとえば、入力11114411はページ上部の雪だるまです。(1 1つ目は麦わら帽子、2つ目1は普通の鼻などです)

別の例、入力用の雪だるま33232124

   _
  /_\
\(o_O)
 (] [)>
 (   )

詳細

  • 先頭/末尾のスペースと先頭/末尾の改行の量と組み合わせは、次の場合に限り許可されます...

    • 雪だるまは、すべてのセクションを互いに正しく配置しています。
    • 合計で64個を超える空白文字が存在することはありません(一般的なパターンは7x5のみであるため、おそらくこの制限に達することはありません)。

    パターンに空白のみが含まれる場合、パターンの行/列を印刷する必要はありません。たとえば、麦わら帽子の空のラインは必要ありません。

  • 上記の部品の順序を使用する必要があります。

  • プログラムの代わりに、数字の文字列を引数として取る関数を作成できます。出力は正常に印刷されるか、文字列として返されます。

  • 必要に応じて、入力を文字列ではなく整数として扱うことができます。

得点

バイト単位の最短コードが優先されます。

ボーナス質問: 65536個の異なる雪だるまのうち、どれがお気に入りですか?


19
天使14441133が好きです。あるいは、小さな目の4腕のモンスター。あなたのピック。
-Sp3000

14
雪だるまである必要がありますか?

54
雪だるまである必要はありません。(免責事項:雪だるまでなければならない場合があります)
ジョシュバロン

3
時折の機知に富んだコメントはいいですが、拡張ディスカッションにはコメントの代わりにチャット使用してください。これを少し整理しました。
マーティンエンダー

36
次に行う質問:「コードはとにかく私を悩ませることはありませんでした」
カルビンの趣味

回答:


39

CJam、135の 134 132 130 126 125バイト

0000000: 4e22285b200a5c225f2a295c2d2e2f6f2c3e4f3a3c3d5d225f  N"([ .\"_*)\-./o,>O:<=]"_
0000019: 2422dd7382d6bfab28707190992f240c362ee510262bd07a77  $".s....(pq../$.6...&+.zw
0000032: 08556de9dcdb566c676817c2b87f5ecb8bab145dc2f2f76e07  .Um...Vlgh....^....]...n.
000004b: 22323536624b623224663d4e2f7b5f2c342f2f7d25723a7e2e  "256bKb2$f=N/{_,4//}%r:~.
0000064: 3d2828342423346222205f0a20222e2a6f6f736572372f4e2a  =((4$#4b" _. ".*ooser7/N*

マシン上にファイルを作成するには、上xxd -r > snowman.cjamからリバーシブルhexdumpを実行して貼り付け、Enter最後にCtrl+を押しDます。

または、CJamインタープリターを使用してオンラインでコードを試すことができます。

ボーナス

私の好きな雪だるまはオラフです:

$ LANG=en_US cjam snowman.cjam <<< 12222212

 _===_
\(o.o)/
 ( : ) 
 (" ")

冬は滞在して寄り添うのに良い時期ですが、夏に私を置き、私は幸せな雪だるまになります!

アイデア

16進文字列

dd7382d6bfab28707190992f240c362ee510262bd07a7708
556de9dcdb566c676817c2b87f5ecb8bab145dc2f2f76e07

固定部分を含む雪だるまのすべての部分の可能な選択肢をエンコードします。この文字列をPと呼びましょう。

これをデコードするには、P(ここでは整数の配列として扱われます)を基数256から基数20 に変換し、結果の各整数を文字列Mの対応する文字で置き換えます。

([ 
"_*)\-./o,>O:<=]

これにより、文字列Tが生成されます。

/(_*_)"_===_/....., /_\ 
 ,._
-.oO
-.oO
   <\  /
   >/  \
    : ] [> <
    : " "___
 ((()

最初の行はすべての帽子の選択をエンコードし、最後の行はすべての固定された身体部分をエンコードします。他の行には、28の可変ボディパーツが含まれています。

改行でTを分割し、結果の配列の文字列を等しい長さの4つの部分に分割します。次に、STDINから入力を読み取り、その数字の配列を基数10にプッシュし、分割された文字列の対応する要素を選択します。配列はCJamでラップアラウンドするという事実を利用するため、長さ4の配列のインデックス4の要素は実際には最初の要素です。最後に分割された文字列は入力に対応しないため、完全に選択されます。

結果の配列から最初の要素をシフトすることにより、帽子を処理します。Mの最初の文字のインデックスは、基数4として読み取られ、帽子の最初の行にあるスペースとアンダースコアの数を示します。これらの文字、改行、スペース、およびシフトされた文字列の残りを印刷します。次に、スタックの下部に追加のラインフィードをプッシュします。

ボディ部分については、それらすべてに対応する文字列を連結します。この文字列をSと呼びましょう。体の部分を組み立てるために、文字変換を実行します。文字列Mの各文字を取得し、sort(M)でインデックスを計算し、Sの対応する文字で置き換えます。私たちは、自動的に、パッド音訳のオペレータがいるという事実を利用するSの長さと一致するように並べ替え(M)の最後の文字を繰り返すことにより、S必要な回数だけ。

最後に、結果の文字列を長さ7の部分文字列に分割し、部分文字列の各ペアの間に改行を配置します。

コード

変数MおよびPに文字列MおよびPが含まれているとします。

N        e# Push a linefeed.
M_$      e# Push M and a sorted copy.
P256bKb  e# Push P and convert it from base 256 to base 20.
2$       e# Push a copy of M.
f=       e# Compute T by retrieving the proper chars from M.
N/       e# Split T at linefeeds.
{_,4//}% e# Divide each string into four substrings of equal length.
r:~      e# Read a number from STDIN and push the array of its digits in base 10.
.=       e# Get the corresponding chunks from T.
((       e# Shift out the first string and that string's first character.
4$#      e# Find its index in M.
4b       e# Compute its digits in base 4.
" _
 ".*     e# Repeat the space and underscore that many times in place.
oo       e# Print the result and the shifted string.
s        e# Flatten the remainder of the array. This pushes S.
er       e# Perform transliteration.
7/       e# Split into chunks of length 7.
N*       e# Join using linefeeds.

60

JavaScriptのES6、210の 208 202バイト

s=>` 0
8(213)9
4(6)5
 (7)`.replace(/\d/g,p=>`_===_1 ___
 .....1  _
  /_\\1 ___
 (_*_)1,1.1_11.1o101-1.1o101-1<11/11>11\\11 : 1] [1> <1   1 : 1" "1___1   11\\11 11/11 `.split(1)[s[p>7?p-4:p]-1+p*4]||' ')

これは匿名関数です。を実行して使用します([function code])('42232124')。これの最も厄介な部分は武器であり、2行かかるため、上部と下部の両方にコードを含める必要がありました。

以下のスタックスニペットには、ES6化されていないコメントされていないコードが含まれています。また、これを使用してコードを簡単にテストし、さまざまな組み合わせを試すことができます。編集:私はこれであまりにも多くの楽しみを持っています。ランダムな雪だるまを生成する方法など、いくつかの新しい機能を追加しました。

6バイトを節約してくれたYair Randに感謝します。

var f=function(s){
  return' 0\n8(213)9\n4(6)5\n (7)' // Start with a placeholder string with all the static components
    .replace(/\d/g,function(p){ // Go through each placeholder number to replace it with its value
    // The massive string below holds all the possible body parts, separated by 1 for easy splitting.
    // The two at the end are for the top of the arms
    return'_===_1 ___\n .....1  _\n  /_\\1 ___\n (_*_)1,1.1_11.1o101-1.1o101\
-1<11/11>11\\11 : 1] [1> <1   1 : 1" "1___1   11\\11 11/11 '.split(1)
    [s[p>7?p-4:p]-1 // Get the value from the input string. If the current body part
                    // is the top of the two-line arms (8 or 9), drop it down to 4 or 5
                    // Subtract 1 to account for the 0-indexed array.
     +p*4] // multiply by 4 to skip to the relevant code
     ||' ' // To save bytes in the above string, spaces are empty strings, so replace them here
  })
}

// Code for the interactive version follows
// http://codepen.io/hsl/pen/bdEgej
function updateRadios(){$('input[type="radio"]').each(function(){if($(this).is(":checked")){var t=$(this).data("p"),i=$(this).data("v");input[t]=i}}),inputS=input.join(""),update()}var input=[],inputS=$("#code").val(),update=function(){$("#p").text(f(inputS)),$("#code").val(inputS)};$('input[type="radio"]').change(updateRadios),$("#code").keyup(function(){inputS=$(this).val(),update()}),updateRadios(),$("#random").click(function(){for(var t=0;8>t;t++)$("div:eq("+t+") input:eq("+Math.floor(4*Math.random())+")").prop("checked",!0);updateRadios()});
body{font-family:sans-serif}h2{font-size:18px;font-weight:400}label{display:block}div{display:inline-block;margin:0 10px}#code{width:70px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div><h2>Hat</h2><label><input type="radio" name="p1" data-p="1" data-v="1"> Straw hat</label><label><input type="radio" name="p1" data-p="1" data-v="2"> Mexican hat</label><label><input type="radio" name="p1" data-p="1" data-v="3"> Fez</label><label><input type="radio" name="p1" data-p="1" data-v="4" checked> Russian hat</label></div><div><h2>Nose/mouth</h2><label><input type="radio" name="p2" data-p="2" data-v="1"> Normal</label><label><input type="radio" name="p2" data-p="2" data-v="2" checked> Dot</label><label><input type="radio" name="p2" data-p="2" data-v="3"> Line</label><label><input type="radio" name="p2" data-p="2" data-v="4"> None</label></div><div><h2>Left eye</h2><label><input type="radio" name="p3" data-p="3" data-v="1"> Dot</label><label><input type="radio" name="p3" data-p="3" data-v="2" checked> Bigger dot</label><label><input type="radio" name="p3" data-p="3" data-v="3"> Biggest dot</label><label><input type="radio" name="p3" data-p="3" data-v="4"> Closed</label></div><div><h2>Right eye</h2><label><input type="radio" name="p4" data-p="4" data-v="1"> Dot</label><label><input type="radio" name="p4" data-p="4" data-v="2"> Bigger dot</label><label><input type="radio" name="p4" data-p="4" data-v="3" checked> Biggest dot</label><label><input type="radio" name="p4" data-p="4" data-v="4"> Closed</label></div><div><h2>Left arm</h2><label><input type="radio" name="p5" data-p="5" data-v="1"> Normal</label><label><input type="radio" name="p5" data-p="5" data-v="2" checked> Upwards</label><label><input type="radio" name="p5" data-p="5" data-v="3"> Downwards</label><label><input type="radio" name="p5" data-p="5" data-v="4"> None</label></div><div><h2>Right arm</h2><label><input type="radio" name="p6" data-p="6" data-v="1" checked> Normal</label><label><input type="radio" name="p6" data-p="6" data-v="2"> Upwards</label><label><input type="radio" name="p6" data-p="6" data-v="3"> Downwards</label><label><input type="radio" name="p6" data-p="6" data-v="4"> None</label></div><div><h2>Torso</h2><label><input type="radio" name="p7" data-p="7" data-v="1"> Buttons</label><label><input type="radio" name="p7" data-p="7" data-v="2" checked> Vest</label><label><input type="radio" name="p7" data-p="7" data-v="3"> Inward arms</label><label><input type="radio" name="p7" data-p="7" data-v="4"> None</label></div><div><h2>Base</h2><label><input type="radio" name="p8" data-p="8" data-v="1"> Buttons</label><label><input type="radio" name="p8" data-p="8" data-v="2"> Feet</label><label><input type="radio" name="p8" data-p="8" data-v="3"> Flat</label><label><input type="radio" name="p8" data-p="8" data-v="4" checked> None</label></div><br><button id="random">Randomize</button><pre id="p"></pre><input type="text" id="code">


3
1非常に巧妙な、そんなに私のものよりも良い
edc65

23
「GUI」はかなりクールです。
トファー

7
甘い、8目スパイダー雪だるまをチェック:22112333
Claudiu

1
私は眠っているロシアのフクロウが好きです:41444442
ETHproductions

1
スロット内の各スペースを1つ削除し(1 1-> 11||' '、最後に追加することで6バイトを節約できます。
イェールランド

30

CJam、164バイト

雪だるまを左から右、上から下に生成します。これにより、雪だるまのすべてのピースをスタックに残すだけなので、あらゆる種類のストリングの結合または再配置操作の必要がなくなります。そして、プログラムの最後の自動スタックダンプのため:

CJamは雪だるまを作りたい!

q:Q;SS"
 _===_,___
 ....., _
  /_\,___
 (_*_)"',/0{Q=~(=}:G~N" \ "4G'(".oO-"_2G",._ "1G@3G')" / "5GN"< / "4G'(" : ] [> <   "3/6G')"> \ "5GNS'(" : \" \"___   "3/7G')

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

ボーナス

箱の外側を考える!32443333雪男を花嫁に与えます。少し試してみる必要がありますが、内側の腕、フェズ+下向きの腕=ベールがあり、実際には頭はフェズ/ベールにあります。一般的に大きな形は大波のドレスで、「目」と「鼻」はドレスのひだです。

   _
  /_\
 (-.-) 
/(> <)\
 (___)

その他の「目」の選択肢は、少し危険です...


17
私にとって、あなたのボーナスは花嫁というよりはKKKメンバーのように見えます。
ace_HongKongIndependence

26

Python、276 289バイト

V='.oO-'
def F(d):
 D=lambda i:int(d[i])-1
 print"  "+("","___"," _ ","___")[D(0)]+"\n "+\
"_. (=./_=._*=.\\__. )"[D(0)::4]+"\n"+\
" \\  "[D(4)]+"("+V[D(2)]+',._ '[D(1)]+V[D(3)]+")"+" /  "[D(5)]+'\n'+\
"< / "[D(4)]+"("+" ]> :    [< "[D(6)::4]+")"+"> \\ "[D(5)]+"\n ("+\
' "_ : _  "_ '[D(7)::4]+")"

このコードには\、読みやすくするために8バイト(* 4)が追加されています。

雪だるまを少しずつ積み上げます。

ボーナス

F("44444432") 「眠いロシアくま」を与える:

  ___    
 (_*_)
 (- -)
 (> <)
 (" ")

13
眠そうなロシアのクマも私のお気に入りです。
カルビンの趣味

1
一番上の行のアンダースコアは、フェズとロシアの帽子では正しくないようです。例えば、それはプロペラの帽子を与えている..
カルバンの趣味

@ Calvin'sHobbies:ロシアの帽子は大丈夫でしたが、フェズの帽子は台無しになりました。今すぐ修正し、他のすべてのケースもチェックしました。今後はもっと注意する必要があります!
クラウディ

パーティーに遅刻しましたが、このTIOは私にとってこれが297だと言います。Intellijは299と言います。何か不足していますか?
雪が降る

21

Python 2、354 280 241 261バイト

def s(g):H,N,L,R,X,Y,T,B=[int(c)-1for c in g];e='.oO-';print(' '*9+'_ _ ___ _ _\n\n\n\n    _. (=./_=._*=.\\__. )')[H::4]+'\n'+' \\  '[X]+'('+e[L]+',._ '[N]+e[R]+')'+' /  '[Y]+'\n'+'< / '[X]+"("+' ]> :    [< '[T::4]+')'+'> \\ '[Y]+'\n ('+' "_ : _  "_ '[B::4]+")"

電話s('33232124')をかけると:

   _ 
  /_\ 
\(o_O) 
 (] [)>
 (   )

しかし、私のお気に入りです4424212341341144

  ___      ___
 (_*_)    (_*_)
\(o -)    (O,-) 
 (] [)>  <(   )>
 (___)    (   )

1
私がs('33232124')フェズをするとき、スラッシュは描かれません。実際、帽子の下半分は多くの場合欠落しています。また、0オプションの1つではありません。
カルバンの趣味

@ Calvin'sHobbiesありがとう、私はそれを修正しました。
シーズティマーマン

20

CJam、150 145バイト

すべてをベースに変換します

"b8li'
U9gN;|"125:Kb8bl:~f="r  pL|P3{cR`@L1iT"Kb21b"G.HMtNY7VM=BM@$^$dX8a665V"KbFb"=_./ <[(*-oO,\":"f=_"/<[(""\>])"er+4/f=.=7/N*

SEは印刷できないものをマングルしますので、ここにPastebinのコピーがあります。行番号の隣の部分ではなく、「RAW Paste Data」部分を必ずコピーしてください。オンライン試すことができますが、ブラウザによってはパーマリンクが機能しない場合があります。

説明

"b8li'U9gN;|"125:Kb8bp部分は配列を生成します

[1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 2 1 3 0 5 4 0 6 6 6 0 5 0 0 7 7 7 0]

入力の各桁を、その桁が使用される場所にマッピングします。すべての入力に共通するもの(先頭のスペースやなど())には、ベース変換が機能するように1が割り当てられる最初のものを除き、任意に0が割り当てられます。

l:~f=その後、intに各桁を変換し、例えばのために、それに応じてマッピングし14441133、我々が得ます

[2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 2 4 1 2 1 1 3 3 3 1 2 1 1 4 4 4 1]

"G.HMtNY7VM=BM@$^$dX8a665V"KbFb"=_./ <[(*-oO,\":"f= 文字列を与える

"_=./  /  < /  [<(((((_. _ _     _ __*=._-.oO ,._  \"_ :   : _"

その後、複製し、置換/<[(\>])て追加し、長い文字列を提供します。次に、文字列を4つのグループに分割し、別の配列に従ってマップします"r pL|P3{cR`@L1iT"Kb21b。したがって、各セルで可能なすべてのオプションを記述する長さ4の文字列の配列を取得します(たとえば_=./、ロシアの帽子)。

最後にオプションを入力に応じてマップし、.=長さ7の行に分割し7/、いくつかの改行でリフルしN*ます。

テスト実行

11111111

 _===_ 
 (.,.) 
<( : )>
 ( : )

22222222
  ___  
 ..... 
\(o.o)/
 (] [) 
 (" ")

33333333
   _   
  /_\  
 (O_O) 
/(> <)\
 (___)

44444444
  ___  
 (_*_) 
 (- -) 
 (   ) 
 (   )

19

TI-BASIC、397バイト

重要:これをテストする場合は、ここからダウンロードして、そのファイルを計算機に送信してください。んではない TI-接続CEのプログラムエディタまたはSourceCoder 3または構築し、自分の電卓にそれを送信するために何かに以下のコードをコピーしてみてください。TI-Connectの場合、無効なトークンがあると言われます。SC3は、バックスラッシュをコメント区切り文字として使用し(//SC3でコメントを開始しますが、/\/としてエクスポートします//)、武器や帽子などを正しくエクスポートせず、プログラムが誤った身体部分を表示し、エラー:時々ドメイン。楽しいもの!

重要#2:現時点ではダウンロードを修正するのが面倒なので、calcに転送するとき7は、下から3行目のをに変更しますX+6。以下のコードは、比較する必要がある場合に修正されます。

Input Str9
seq(inString("1234",sub(Str9,I,1)),I,1,length(Ans→L1
"      ___   _   ___ →Str1
"_===_..... /_\ (_*_)→Str2
",._ →Str3
"•oO-→Str4
"<\/ →Str5
">/\ →Str6
" : ] [> <   →Str7
" : ¨ ¨___   →Str8
"Str1Str2Str3Str4Str5Str6Str7Str8→Str0
For(X,3,5
Output(X,2,"(   )
End
L1
Output(3,3,sub(Str4,Ans(3),1)+sub(Str3,Ans(2),1)+sub(Str4,Ans(4),1
Ans(5
Output(4-(Ans=2),1,sub(Str5,Ans,1
L1(6
Output(4-(Ans=2),7,sub(Str6,Ans,1
L1-1
For(X,1,2
Output(X+3,3,sub(expr(sub(Str0,X+6,1)),1+3Ans(X+6),3
Output(X,2,sub(expr(sub(Str0,X,1)),1+5Ans(1),5
End

ボーナス:私は特に好きです12341214

 _===_
 (O.-)/
<( : )
 (   )

いくつかのメモ:

  • それは間違いなくもっとゴルフができる、それについては疑いの余地はありません。出力の大部分(すべてではないにしても)を単一のFor(ループに結合できることはほぼ間違いありません。また、いくつかの文字列をマージできることはかなり確信しています。
  • Str4(目)では[2ND] → [0]CATALOG → [3]θ → scroll down, it's between ﹢ (small plus) and · (interpunct)、ピリオドではなく「プロットドット」()を使用して、目がコンマと合わないようにします。
  • Str8(ベース)では、TI-BASICで文字をエスケープする方法がないため、二重引用符の代わりに分音記号(¨)を使用する必要があり、二重引用符は文字列の開始/終了に使用されます。
  • TI-BASICでは、コロン、改行、または→(varの割り当てに使用)が続く場合、括弧とブラケットを閉じる必要はなく、改行または→が続く場合は二重引用符(文字列)を閉じないままにすることができます。

1
最初に、2行目で、次のlength(Ansようになりlength(Str9ます。第二に、Str3からStr6を単一の文字列に組み合わせてみましたか?
リスト管理者

ああ、あら!ただし、ダウンロードでは修正されていると思います。それに加えて、私はそれを作ったので、私はこれだけを見ていないが、私はなかった私はおそらく一緒にいくつかの文字列をマージすることができることに言及します。今日/今週のどこかで調べます。
MIライト

18

C、280の272 264バイト

この時点では部分的にしかゴルフをしていませんが、これは楽しいチャレンジです。

#define P(n)[s[n]&3],
f(char*s){printf("  %.3s\n %.5s\n%c(%c%c%c)%c\n%c(%.3s)%c\n (%.3s)",
"___   ___ _"+*s%4*3,"(_*_)_===_..... /_\\"+*s%4*5,"  \\ "P(4)"-.o0"P(2)    
" ,._"P(1)"-.o0"P(3)"  /"P(5)" < /"P(4)"    : ] [> <"+s[6]%4*3," > \\"P(5)
"    : \" \"___"+s[7]%4*3);}

(読みやすくするために、追加の\ nを追加します。)defineさらにゴルフをすることで消えるはずです。

より読みやすいバージョンは

#define P(n)[s[n]&3],
f(char *s) {
  printf("  %.3s\n"
         " %.5s\n"
         "%c(%c%c%c)%c\n"
         "%c(%.3s)%c\n"
         " (%.3s)",
         "___   ___ _"+*s%4*3,                  /* Top of hat. */
         "(_*_)_===_..... /_\\"+*s%4*5,         /* Lower hat. */
         "  \\ "P(4)                            /* Upper left arm. */
         "-.o0"P(2)                             /* Left eye. */
         " ,._"P(1)                             /* Nose. */
         "-.o0"P(3)                             /* Right eye. */
         "  /"P(5)                              /* Upper right arm. */
         " < /"P(4)                             /* Lower left arm. */
         "    : ] [> <"+s[6]%4*3,               /* Torso. */
         " > \\"P(5)                            /* Lower right arm. */
         "    : \" \"___"+s[7]%4*3              /* Base. */
         );
}

12

C、212バイト

d;main(){char*t="##3#b#b3#bbb3#b#b##\r#3b1#+3@12b3@1b-3@1_b3b1#,#\r7#_##+51rR04/1b#61rR0,8#2##\r7?#2#+9#`A#9=###9#^?#,8A#_#\r#+:#%b#:=#b#:#%b#,#",p[9];for(gets(p);d=*t++;putchar(d-3))d=d<51?d:(p[d-51]-53)[t+=4];}

読み取り可能なバージョン:

d;
main()
{
    char *t = "##3#b#b3#bbb3#b#b##\r"
              "#3b1#+3@12b3@1b-3@1_b3b1#,#\r"
              "7#_##+51rR04/1b#61rR0,8#2##\r"
              "7?#2#+9#`A#9=###9#^?#,8A#_#\r"
              "#+:#%b#:=#b#:#%b#,#",
        p[9]; // 9 bytes is just enough for the input string of length 8

    for (gets(p); d = *t++; putchar(d-3))
        d = d < 51 ? d : (p[d - 51] - 53)[t += 4];
}

レトコラディの答えから考えを取りました。私がやったいくつかの楽しい改善がありましたが、それは別の答えを投稿することを保証します

  • 関数からプログラムに変換(+10)
  • 改行を制御文字列に移動しました(-7)
  • すべての文字コードに3を追加して、\"(-3)などのエスケープ文字を減らしました
  • 自動インクリメントで文字列から読み取ります。また、置換t[i++]によって*t++(-4)
  • に置き換えられましwhilefor。削除済み{}(-4)
  • 単純化されたループ終了:\0(-9)までの読み取り
  • 形質転換t[...],t+=4するために(...)[t+=4]カンマ演算子を排除するために(-1)

なぜそんなに面倒なのですか?私の好きな雪の幽霊を共有するには:

   _
  /_\
\(. .)/
 (   )
 (___)

置くことができるdの後ろに括弧でmain
ceilingcat

10

JavaScript、489(改行およびタブなし)

x=' ';
d="   ";
h=['\n_===_',' ___ \n.....','  _  \n /_\\ ',' ___ \n(_*-)'];
n=[',','.','_',x];
e=['.','o','O','-'];
y=['>',,'\\',x];
u=['<',,'/',x];
t=[' : ','[ ]','> <',d;
b=[' : ','" "',"___",d];

j=process.argv[2].split('').map(function(k){return parseInt(k)-1});
q=j[4]==1;
w=j[5]==1;

console.log([
    h[j[0]].replace(/(.*)\n(.*)/g, " $1\n $2"),
    (q?'\\':x)+'('+e[j[2]]+n[j[1]]+e[j[3]]+')'+(w?'/':x),
    (!q?u[j[4]]:x)+'('+t[j[6]]+')'+(!w?y[j[5]]:x),
    x+'('+b[j[7]]+')'].join('\n'));

と走る node snowman.js 33232124


6
コードゴルフへようこそ!いくつかのポインター:parseInt減算は自動的に文字列オペランドを数値にキャストしようとするため、呼び出しは必要ありません。また、functionラッピングを取り除き、i=process.argv[2]再帰または変数のスコープ指定に使用している場合を除き、でリードすることができます。さらに、s完全に取り除くことができますconsole.log([ ... ].join('\n'))
-apsillers

3
実際、各配列の先頭にコンマを入れて各項目のインデックスを増やすと、入力文字列から配列への変換を完全に廃止できます。これは、7つの追加,文字は、それはあなたが50以上最後に、1つの非常に気難しい最適化が使用されます削除することができますq=j[4]-1代わりにq=j[4]==1(と、その後の使用を反転qして!q)。これが原因となりますqように0(falsey値)j[4]1あり、そうでない場合truthyゼロ以外の値。これは、あなたの現在の真/偽の値とは正反対であるので、あなたは単純に切り替えるq!q
-apsillers

あなたの最初の答えに関するフィードバックの山でごめんなさい!個人的には、提出物の改訂がゴルフの最も楽しい部分の1つであると感じています。あなたが私の気持ちを共有しない場合、私の謝罪。:)
アプシラー

@apsillersあなたのフィードバックは大歓迎です!私は昨夜眠りについたところで、後でそれをできるだけ簡単なものに変更することを完全に意図して、楽しみのためにこれを書きました。今晩、いくつかの編集を行います!
クリストファーリード

9

Pyth、203バイト

M@GCHgc"  ___

  ___
   _"bhzgc" (_*_)
 _===_
 .....
  /_\\"bhzs[g"  \ "@z4\(g"-.oO"@z2g" ,._"@z1g"-.oO"@z3\)g"  / "@z5)s[g" < /"@z4\(gc"   
 : 
] [
> <"b@z6\)g" > \\"@z5)++" ("gc"   
 : 
\" \"
___"bez\)

笑。オンラインで試す:Pyth Compiler / Executor

説明

最初にg、入力としてリストと文字を受け取り、文字をASCII値に変換し、対応する要素(モジュラーラッピング)を受け取るヘルパー関数を定義します。

M@GCH  def g(G,H): return G[ord(H)]

他のことは、単に行ごとに印刷することです。たとえば、最初の行は次のとおりです。

 c"  ___\n\n  ___\n   _"b     split the string "  ___\n\n  ___\n   _" at "\n"
                         hz   first char in input
g                             apply g and print

ところで .F"{:^7}"文字列を中央に配置するを少し試してみました。これを使用して、コード内にいくつかのスペースを節約できましたが、最後にバイトを保存しません。


9

R、436 437バイト

ここでは、最短ではないがまだ楽しいRを使用して、初めて試します。少なくとも私は(今のところ)JavaScriptを破っています...

H=c("_===_"," ___\n .....","  _\n  /_\\"," ___\n (_*_)")
N=c(",",".","_"," ")
L=c(".","o","O","-")
X=c(" ","\\"," "," ")
S=c("<"," ","/"," ")
Y=c(" ","/"," ","")
U=c(">"," ","\\","")
T=c(" : ","] [","> <","   ")
B=c(" : ","\" \"","___","   ")
f=function(x){i=as.integer(strsplit(x,"")[[1]]);cat(" ",H[i[1]],"\n",X[i[5]],"(",L[i[3]],N[i[2]],L[i[4]],")",Y[i[6]],"\n",S[i[5]],"(",T[i[7]],")",U[i[6]],"\n"," (",B[i[8]], ")",sep="")}

テスト:

> f("12344321")
 _===_
 (O.-) 
 (] [)\
 ( : )

私は実際に苦労XYの間にmultilinedが、ものとされ、各ラインを分離することになった(XS()とYU)。

function また、文字列から整数への変換も非常に冗長です。

編集436 => 437

@OganMが気付いた欠落している空のスペースを修正する必要がありました

変数間の改行をに置き換えて428に減らすこともできます;が、「1行の」コードは非常に悪く、読みにくいので、欲張りになることはありません。


4番目の帽子に追加の文字が必要です
-OganM

@OganM余分なバイトをありがとう!:(修正
済み-Molx

codegolfを実行する場合、通常、新しい行は2行(Windowsの場合)ではなく1文字(* nixの場合)としてカウントされます。したがって、セミコロンを使用するか改行を使用するかは問題ではありません。
ace_HongKongIndependence

@aceヒントをありがとう、知っておくといい!
モルクス

8

ハスケル、361の 306 289バイト

o l a b=take a$drop((b-1)*a)l
n="\n"
p i=id=<<["  ",o"    \n _===____ \n ..... _  \n  /_\\ ___ \n (_*_)"11a,n,o" \\  "1e,o"(.(o(O(-"2c,o",._ "1 b,o".)o)O)-)"2d,o" /  "1f,n,o"< / "1e,o"( : )(] [)(> <)(   )"5g,o"> \\ "1f,n," (",o" : )\" \")___)   )"4h]where[a,b,c,d,e,f,g,h]=map(read.(:[]))i

使用法:

putStrLn $ p "12333321"

 _===_
 (O.O) 
/(] [)\
 ( : )

仕組み:のリストのすべての要素を[hat options, left upper arm options, left eye options, ..., base options]対応する入力番号でインデックス化し、単一のリストに連結します。左腕と右腕を上下に分割し、雪だるまをラインごとに構築できるようにしました。

私のお気に入りは古典11112211です。

編集:文字列のリストからパーツ(帽子、目、...)の文字列に切り替えました。2番目のパラメーターであるサブストリングの長さが必要です。

編集II:抽出された共通の部分文字列


8

C、233 230バイト

char*t="  0 _ _0 ___0 _ _   0_. (0=./_0=._*0=.\\_0_. ) 4 \\  (2.oO-1,._ 3.oO-)5 /  4< / (6 ]> 6:   6 [< )5> \\  (7 \"_ 7: _ 7 \"_ ) ";i,r,d;f(char*p){while(r++<35){d=t[i]-48;putchar(t[d<0?i:i+p[d]-48]);i+=d<0?1:5;r%7?0:puts("");}}

読みやすくするために改行と空白を使用:

char* t = "  0 _ _0 ___0 _ _   0_. (0=./_0=._*0=.\\_0_. ) 4 \\  (2.oO-1,._ 3.oO-)5 /  4< / (6 ]> 6:   6 [< )5> \\  (7 \"_ 7: _ 7 \"_ ) ";
i, r, d;
f(char* p)
{
    while (r++ < 35)
    {
        d = t[i] - 48;
        putchar(t[d < 0 ? i : i + p[d] - 48]);
        i += d < 0 ? 1 : 5;
        r % 7 ? 0 : puts("");
    }
}

全体はかなり力ずくです。35(長さ7の5行)文字ごとに1つのエントリを含むテーブルを使用します。表の各エントリは次のいずれかです。

  • 一定の文字:()。テーブルエントリの長さは1文字です。
  • ボディパーツのインデックスと、それに続く入力のパーツ選択に応じて4つの可能な文字。テーブルエントリの長さは5文字です。

次に、コードは35文字をループ処理し、テーブル内の値を検索します。


8

R 414バイト

Molxのバージョンのわずかに変更されたバージョン

W =c("_===_"," ___\n .....","  _\n  /_\\"," ___\n (_*_)",",",".","_"," ",".","o","O","-"," ","\\"," "," ","<"," ","/"," "," ","/"," ","",">"," ","\\",""," : ","] [","> <","   "," : ","\" \"","___","   ")
f=function(x){i=as.integer(strsplit(x,"")[[1]]);cat(" ",W[i[1]],"\n",W[i[5]+12],"(",W[i[3]+8],W[i[2]+4],W[i[4]+8],")",W[i[6]+20],"\n",W[i[5]+16],"(",W[i[7]+28],")",W[i[6]+24],"\n"," (",W[i[8]+32], ")",sep="")}

別の変数を1つにマージしました。X=c(ルーチンに使用されていたスペースの揺れ。


7

CJam、200 191バイト

これは確かに多くのことができます。(特に、ベースエンコードする場合)。しかし、まずは次のとおりです。

7S*"_===_  ___  .....   _    /_\   ___  (_*_)"+6/2/Nf*",._ "1/".oO-"1/_" <\  /   >/  \  "2/4/~" : ] [> <    : \" \"___   "3/4/~]l~Ab:(]z::=:L0=N4{L=}:K~0='(2K1K3K')5K0=N4K1='(6K')5K1=NS'(7K')

入力はSTDINに入ります。たとえば、入力23232223は次のようになります。

  ___ 
 .....
\(o_O)/
 (] [) 
 (___)

こちらからオンラインでお試しください


7

Haskell、333バイト

私の最初の提出!雪だるまを上から下、左から右に構築します。腕を各腕の2つの機能に分割しました。頭の横の部分と体の横の部分です。

関数sは整数のリストを取り、入力の正しいサブリストが与えられると、身体部分を生成する関数の出力を連結します。

a=y["\n _===_\n","  ___ \n .....\n","   _  \n  /_\\ \n","  ___ \n (_*_)\n"]
d=y",._ "
c=y".oO-"
e=y"< / "
j=y" \\  "
f=y"> \\ "
k=y" /  "
y w n=w!!(n-1)
h=y[" : ","] [","> <","   "]
b=y[" ( : ) \n"," (\" \") \n"," (___) \n"," (   ) \n"]
s(m:x:o:p:n:q:t:l:_)=putStr$a m++j x:'(':c o:d n:c p:')':k q:'\n':e x:'(':h t++')':f q:'\n':b l

機能に依存しています

y :: [a] -> Int -> a
y w n=w!!(n-1)

与えられたリストのn番目の要素を返します。これにより、aの帽子のリストと、次のようなものが可能になります。

k=y" /  "

これらの関数はすべてベータ削減を使用するため、引数はy関数のインデックスとして渡されます。

出力:

λ> s $ repeat 1

 _===_
 (.,.) 
<( : )>
 ( : ) 

λ> s $ repeat 2
  ___ 
 .....
\(o.o)/
 (] [) 
 (" ") 

λ> s $ repeat 3
   _  
  /_\ 
 (O_O) 
/(> <)\
 (___) 

λ> s $ repeat 4
  ___ 
 (_*_)
 (- -) 
 (   ) 
 (   ) 

@ Calvin'sHobbiesありがとう、私は今それを修正したと思う。
クレイグ・ロイ

7

Python 3、349 336 254 251バイト

私の論文をするためにそんなに。

ファイルsnowman.pyの内容は次のとおりです。

l='_===_| ___\n .....|  _\n  /_\| ___\n (_*_)| : |] [|> <|   |>| |\| | : |" "|___|   '.split('|')
l[4:4]=' \  .oO-,._ .oO- /  < / '
def s(a):print(' {}\n{}({}{}{}){}\n{}({}){}\n ({})'.format(*[l[4*m+int(a[int('0421354657'[m])])-1]for m in range(10)]))

そして、これは私が私の好きな雪だるまを想起させる方法です:

s('11112311')

 _===_ 
\(.,.) 
 ( : )\
 ( : ) 

説明

# Create a list containing the 4 * 10 body parts of the snowman in order of drawing:
#   hats,
#   upper left arms, left eyes, noses, right eyes, upper right arms,
#   lower left arms, torso's, lower right arms,
#   bases
l='_===_| ___\n .....|  _\n  /_\| ___\n (_*_)| : |] [|> <|   |>| |\| | : |" "|___|   '.split('|')
l[4:4]=' \  .oO-,._ .oO- /  < / '
# This is the function that draws the snowman
# All the lines of this function are golfed in a single statement, but seperated here for clearity
def s(a):
    # In this list comprehension I put the elements of l that are chosen according to the parameters
    list_comprehension = []
    # m is the number of the body part to draw
    for m in range(10):
        # Get the index for the choice of the m-th bodypart
        # (example: the 2nd bodypart (m = 1: the upper left arm) is in the 4th place of the arguments list)
        choice_index = int('0421354657'[m])
        # n is the parameter of the current bodypart
        n = int(a[choice_index]) - 1
        # Add the body part from list l to the list comprehenseion
        list_comprehension.append( l[4 * m + n] )
    # Print the list comprehension with the static parts
    print(' {}\n{}({}{}{}){}\n{}({}){}\n ({})'.format(*list_comprehension))

[int(i)]との間の2行目のスペースを削除できforます。同様に、f(int(i))との間の7行目のスペースを削除できますfor。また、あなたのprint()声明では、最終スペースを印刷する必要はありません-それは雪だるまの一部ではありません。最後に、print()呼び出しを単一行に変更しますprint("{}\n{}({}{}{}){}\n{}({}){}\n ({})".format(*c))。これらはそれぞれ1バイト節約し、合計4バイト節約できます:)
ace_HongKongIndependence

1
また、グローバル変数を使用する代わりにn、functionの属性を定義できますf。したがって、5〜6行目をdef f(m):f.n+=1;return l[4*m+int(b[f.n])-1]<newline>に置き換えることができますf.n=-1。これにより、さらに3バイト削減されます。
ace_HongKongIndependence

1
@aceありがとう、以前は関数属性について聞いたことがないので、新しいことを学びました!
マティ

6

PowerShell、199バイト

Reto Koradianatolygに触発されました

for($t='  0 _ _0 ___0 _ _
 0_. (0=./_0=._*0=.\_0_. )
4 \  (2.oO-1,._ 3.oO-)5 /  
4< / (6 ]> 6:   6 [< )5> \ 
 (7 "_ 7: _ 7 "_ )';$d=$t[$i++];$r+="$d"){if($d-ge48){$d=$t[$i+"$args"["$d"]-49]
$i+=4}}$r

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

注:行3には2つのトレールスペースがあり、行4にはトレールスペースがあります。

私のお気に入りは44444444「眠そうなロシアの警備員」です。

 ___
(_*_)
(- -)
(   )
(   )

5

JavaScript(ES6)、247

@NinjaBearMonkeyの:(

スニペットでテストする(Firefoxを使用)

S=p=>([h,n,c,d,l,r,t,b,e,x]=[...p,' .oO-',`1_===_1 ___
 .....1  _
  /_\\1 ___
 (_*_)1 : 1] [1> <1   1 : 1" "1___1   `.split(1)],` ${x[h]}
${'  \\  '[l]}(${e[c]+' ,._ '[n]+e[d]})${'  /  '[r]}
${' < / '[l]}(${x[3-~t]})${' > \\ '[r]}
 (${x[7-~b]})`)

// TEST // 

function go()
{
  var n=N.value
  if (/^[1-8]{8}$/.test(n)) {
    s=S(n)
    OUT.innerHTML = s+'\n'+n+'\n\n'+ OUT.innerHTML
  }
  else N.focus()
}
  
<input id=N maxlength=8><button onclick="go()">Test</button>
<pre id=OUT></pre>


3

05AB1E137の 135 128 122 バイト

…( )7ÝJ»•αγʒδÓ₂©8¥ŽQxΣxêÿ•12вèJIvN”</[(
._-=:"ÆŸ,*”º•DùÙÂ+;Èγтáì³ÓW©ÎÂ_`ƒ≠îj*ΓçÊ~ÞÒ¸β¦oåb/õ47/vÎΓ”›≠øØZµλݺ•20в趡Nè4äyè.;

@Grimyのおかげで-6バイト。

オンラインそれを試してみたり、さらにいくつかのテストケースを確認してください

説明:

最初にテンプレート文字列を作成します。

…( )         # Push string "( )"
7ÝJ          # Push a list in the range [0,7] joined together: "01234567"
»            # Join both by a newline: "( )\n01234567"
•αγʒδÓ₂©2°ćì₂òη₆½•
             # Push compressed integer 80545642885242518310229085147411483894
 12в         # Convert it to Base-12 as list: [1,4,4,4,4,4,3,1,4,4,4,4,4,3,8,0,6,5,7,2,9,3,8,0,10,10,10,2,9,3,1,0,11,11,11,2]
    è        # Index each into the string: [" ","0","0","0","0","0","\n"," ","0","0","0","0","0","\n","4","(","2","1","3",")","5","\n","4","(","6","6","6",")","5","\n"," ","(","7","7","7",")"]
     J       # And join it to a single string: " 00000\n 00000\n4(213)5\n4(666)5\n (777)"

次のようになります:

 00000
 00000
4(213)5
4(666)5
 (777)

次に、入力の桁をループします。

I            # Get the input
 v           # Loop `y` over each of its digits:

そして、以下を実行します:リスト
の(0インデックス付き)インデックスNをプッシュします。

  N          # Push the index of the loop

可能なすべての部分を文字リストのリストとしてプッシュします。

  ”</[(
  ._-=:"ÆŸ,*”
            "# Push dictionary string "</[(\n._-=:" Oo,*"
   º         # Mirror each line: "</[()]\>\n._-=:" Oo,**,oO ":=-_."
  DùÙÂ+;Èγтáì³ÓW©ÎÂ_`ƒ≠îj*ΓçÊ~ÞÒ¸β¦oåb47/vÎΓ”›≠øØZµλݺ•
             # Push compressed integer 492049509496347122906361438631265789982480759119518961177677313610613993948059787418619722816092858096158180892708001681647316210
   20в       # Convert it to Base-20 as list: [15,10,10,10,15,3,10,19,10,4,15,15,15,15,15,10,12,12,12,10,15,10,10,10,15,9,9,9,9,9,15,15,10,15,15,15,1,10,6,15,8,15,18,9,10,8,11,9,17,16,8,11,9,17,16,8,15,15,15,0,6,15,15,1,8,15,15,15,7,1,15,15,6,8,15,15,15,15,13,15,5,15,2,7,15,0,8,15,15,15,15,13,15,14,15,14,10,10,10]
      è      # Index each into the string: [" ","_","_","_"," ","(","_","*","_",")"," "," "," "," "," ","_","=","=","=","_"," ","_","_","_"," ",".",".",".",".","."," "," ","_"," "," "," ","/","_","\"," ","\n"," ",",",".","_","\n","-",".","o","O","\n","-",".","o","O","\n"," "," "," ","<","\"," "," ","/","\n"," "," "," ",">","/"," "," ","\","\n"," "," "," "," ",":"," ","]"," ","[",">"," ","<","\n"," "," "," "," ",":"," ","""," ",""","_","_","_"]
       ¶¡    # Split it by the newline character: [[" ","_","_","_"," ","(","_","*","_",")"," "," "," "," "," ","_","=","=","=","_"," ","_","_","_"," ",".",".",".",".","."," "," ","_"," "," "," ","/","_","\"," "],[" ",",",".","_"],["-",".","o","O"],["-",".","o","O"],[" "," "," ","<","\"," "," ","/"],[" "," "," ",">","/"," "," ","\"],[" "," "," "," ",":"," ","]"," ","[",">"," ","<"],[" "," "," "," ",":"," ","""," ",""","_","_","_"]]

ループインデックスNを使用して、現在作業しているパーツの文字リストを取得します。

  Nè         # Index the loop index into it
             #  i.e. 6 → [" "," "," "," ",":"," ","]"," ","[",">"," ","<"]

次に、文字リストを4つの等しい部分に分割し、入力数字y(1から始まる)を使用してインデックスを作成します。(注:。05AB1Eは0インデックスですが、入力が1インデックスである、インデックスの前に1桁を低下させるために論理的になるので05AB1Eは、自動ラップアラウンドを持っているので、(つまり、インデックス3リストでは、[1,3,5]になります1)、単にIチャレンジの説明でnr 4のパーツがリストの先頭にくるように、パーツを1回回転しました。)

    4ä       # Split it into 4 equal parts
             #  i.e. [[" "," "," "],[" ",":"," "],["]"," ","["],[">"," ","<"]]
      yè     # Index the input-digit `y` into it (with automatic wraparound)
             #  i.e. 4 → [" "," "," "]

そして、最初にプッシュしたループのインデックスが0のインデックスを、部分文字で1つずつ置き換えます。

  .;         # Replace first; every index of the loop `N` in the template-string
             # is replaced one by one with the characters

そして最終的に、結果は暗黙的に出力されます。

この05AB1E鉱山の先端を参照してください(セクション大きな整数を圧縮する方法は?どのように整数のリストを圧縮するの?圧縮部品がどのように機能するかを理解すること。


私のお気に入りについては、Javaソリューションを投稿した1.5年前と同じ「雪うさぎ」のままです。

44114432:
   _  
 (_*_)
 (. .) 
 (> <) 
 (" ")

-4、CJamを打ち負かすのに十分です!
グリミー

1
122まで、そして元々持っていたものに近くなります。
グリミー

@Grimy 122バイトバージョンには0目がありません。:)
ケビンクルーッセン

12進数のエンコードの間違いだけで、修正するのに十分簡単なはずです!
グリミー

@Grimyその通りです。昨日はあまり時間がありませんでしたが、実際にはリストの簡単な修正です。-6をありがとう!:)
ケビンクルーイッセン

2

Java 8、548 545 432 401 399バイト

a->{int q=50,H=a[0]-49,N=a[1],L=a[2],R=a[3],X=a[4],Y=a[5];return"".format(" %s%n %s%n%c(%c%c%c)%c%n%c(%s)%c%n (%s)",H<1?"":H%2<1?" ___":"  _","_===_s.....s /_\\s(_*_)".split("s")[H],X==q?92:32,L<q?46:L<51?111:L<52?79:45,N<q?44:N<51?46:N<52?95:32,R<q?46:R<51?111:R<52?79:45,Y==q?47:32,X<q?60:X%2<1?32:47,"   s : s] [s> <".split("s")[a[6]%4],92-(Y%3+Y%6/4)*30,"   s : s\" \"s___".split("s")[a[7]%4]);}

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

説明:

a->{             // Method with character-array parameter and String return-type
  int q=50,      //  Temp integer with value 50 to reduce the byte-count
      H=a[0]-49, //  The hat-character as unicode value minus 49: 1=0; 2=1; 3=2; 4=3
      N=a[1],L=a[2],R=a[3],X=a[4],Y=a[5];
                 //  Most of the other characters as unicode values: 1=49; 2=50; 3=51; 4=52
  return"".format(" %s%n %s%n%c(%c%c%c)%c%n%c(%s)%c%n (%s)",
                                               // Return the snowman with:
    H<1?"":H%2<1?" ___":"  _",                 //  The top of the hat
    "_===_s.....s /_\\s(_*_)".split("s")[H],   //  + the bottom of the hat
    X==q?92:32,                                //  + the top of the left arm
    L<q?46:L<51?111:L<52?79:45,                //  + the left eye
    N<q?44:N<51?46:N<52?95:32,                 //  + the nose
    R<q?46:R<51?111:R<52?79:45,                //  + the right eye
    Y==q?47:32,                                //  + the top of the right arm
    X<q?60:X%2<1?32:47,                        //  + the bottom of the left arm
    "   s : s] [s> <".split("s")[a[6]%4],      //  + the torso
    92-(Y%3+Y%6/4)*30,                         //  + the bottom of the right arm
    "   s : s\" \"s___".split("s")[a[7]%4]);}  //  + the feet

お気に入り:

44114432:
   _  
 (_*_)
 (. .) 
 (> <) 
 (" ")

理由はわかりませんが、ちょっとかわいいですね。耳の代わりにロシアの帽子をかぶったウサギのように。


1

F#、369バイト

let f(g:string)=
 let b=" "
 let p=printfn
 let i x=int(g.[x])-49
 p"  %s  "["";"___";" _ ";"___"].[i 0]
 p" %s "["_===_";".....";" /_\ ";"(_*_)"].[i 0]
 p"%s(%c%c%c)%s"[b;"\\";b;b].[i 4]".oO-".[i 2]",._ ".[i 1]".oO-".[i 3][b;"/";b;b;b].[i 5]
 p"%s(%s)%s"["<";b;"/";b].[i 4][" : ";"] [";"> <";"   "].[i 6][">";b;"\\";b].[i 5]
 p" (%s) "[" : ";"\" \"";"___";"   "].[i 7]

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

g配列アクセサーを使用するため、関数定義で型を明示的に指定する必要があります。stringこれが関数定義にがある理由(g:string)です。

それとは別に、通常stringsはインデックスによってアクセスされる配列です。帽子、左右の腕は別々の線になり、別々の上下のアレイに分割されます。このi関数は、引数g内の数値を配列インデックスに変更します。そして、文字bは配列内のワンスペース文字列を置き換えます。

素晴らしい挑戦です!私の好きな雪だるまはおそらく242244113

  ___  
 ..... 
 (o o) 
 ( : ) 
 ( : ) 

私はあなたを注視しています


1

PHP、378バイト

<?$f=str_split;$r=$f($argv[1]);$p=[H=>'   _===____..... _  /_\ ___(_*_)',N=>',._ ',L=>'.oO-',R=>'.oO-',X=>' <\  /  ',Y=>' >/  \  ',T=>' : ] [> <   ',B=>' : " "___   '];echo preg_replace_callback("/[A-Z]/",function($m){global$A,$p,$r,$f;$g=$m[0];return$f($f($p[$g],strlen($p[$g])/4)[$r[array_search($g,array_keys($p))]-1])[(int)$A[$g]++];},'  HHH
 HHHHH
X(LNR)Y
X(TTT)Y
 (BBB)');

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

賢明なミミズクが好き 31333342

   _ 
  /_\ 
 (O,O) 
/(   )\
 (" ")

1

Python 2.7、257バイト(私は思う)

H,N,L,R,X,Y,T,B=map(int,i)
l='\n'
s=' '
e=' .o0-'
F='  \  / '
S=' < / \ >'
o,c='()'
print s+'      _ _ ___ _ _\n\n\n\n    _. (=./_=._*=.\__. )'[H::4]+l+F[X]+o+e[L]+' ,._ '[N]+e[R]+c+F[-Y]+l+S[X]+o+'  ]> :    [< '[T::4]+c+S[-Y]+l+s+o+'  "_ : _  "_ '[B::4]+c

ここで、「i」は文字列としての入力です(例: "13243213")


2
PPCGへようこそ!たまたま、256バイトです。残念ながら、入力が変数に保存されていると想定することはできません。ただし置き換えることができますiのためにinput()262バイトの合計
H.PWiz

0

Dart、307バイト

f(i,{r='.o0-',s=' : '}){i=i.split('').map((j)=>int.parse(j)-1).toList();return' ${['_===_',' ___ \n.....',' /_\\ ',' ___ \n (_*_)'][i[0]]}\n${' \\  '[i[4]]}(${r[i[2]]+',._ '[i[1]]+r[i[3]]})${' /  '[i[5]]}\n${'< /  '[i[4]]}(${[s,'] [','> <','  '][i[6]]})${'> \\ '[i[5]]}\n (${[s,'" "','___','   '][i[7]]})';}

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


0

Zsh、247バイト

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

(){H='_===_h ___
 .....h  _
  /_\h ___
 (_*_)'
W=' \  ' L=.oO- N=,._\  Y=' /  '
X='< / ' T=' : ] [> <   ' Z='> \ '
B=' : " "___   '
<<<" ${H[(ws:h:)$1]}
$W[$5]($L[$3]$N[$2]$L[$4])$Y[$6]
$X[$5](${T:3*($7-1):3})$Z[$6]
 (${B:3*($8-1):3})"
} ${(s::)1}

fav雪だるま:

43232122 Cossack dancer
  ___
 (_*_)
\(o_O) 
 (] [)>
 (" ")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.