整数感情


12

指定された整数nに「反応する」プログラムまたは関数を作成します(関数parameter / args / stdinを介して入力)

このプログラムは、負の数を気にせず、偶数を好み、奇数を嫌い、13を恐れます。

次を出力するはずです。

n <0の場合:

 --------------------------
 |                        |
 |                        |
(|      _          _      |)
 |                        |
 |                        |
 |                        |
 |                        |
 |       oooooooooo       |
 |                        |
 |                        |
 |                        |
 --------------------------

n%2 == 0かつn> -1の場合:

 --------------------------
 |                        |
 |                        |
(|      ^          ^      |)
 |                        |
 |                        |
 |                        |
 |     o            o     |
 |       oooooooooo       |
 |                        |
 |                        |
 |                        |
 --------------------------

n%2 == 1かつn> -1およびn!= 13の場合:

 --------------------------
 |                        |
 |                        |
(|      >          <      |)
 |                        |
 |                        |
 |                        |
 |                        |
 |       oooooooooo       |
 |     o            o     |
 |                        |
 |                        |
 --------------------------

n == 13の場合:

 --------------------------
 |                        |
 |                        |
(|     (O)        (O)     |)
 |                        |
 |                        |
 |       oooooooooo       |
 |       o        o       |
 |       oooooooooo       |
 |                        |
 |                        |
 |                        |
 --------------------------

バイト単位の最短ソリューションが勝ちです。


2
13は奇数です。顔を1つだけ出力しますか?負の値は奇数と偶数です。

@MartinBüttner、その場合、負の数に関する最初のルールは完全に不要です。実際にすべてのルールを必要とする唯一の優先度は、最初と最後のルールが中央のルールよりも優先されることです。
ピーターテイラー

@PeterTaylorおっと、良い点。
マーティンエンダー14

@StandardToaster誤解を避けるために出力条件を編集しました
Markuz

回答:


4

CJam-169

S24*aB*2li_D=3{_0<2{_2%}?}?\;:X"^^<>__":s"(O)"a2*+2/=~6X3=-{S*_@+_,C\-S*2*+@@++}:F~t7'o5*_7F:MtX3={5Mt6'o_7Ft}*X2<{X2*6+'o_5Ft}*{" |"\+'|+}%S'-26*+aa2*\*_3=1>"()"\*3\tN*

http://cjam.aditsu.net/で試してください

高レベルの説明:

S24*aB*エッジのない面
li_D=3{_0<2{_2%}?}?\;:Xが数値を読み取り、0(偶数)、1(奇数)、2(負)、または3(13)に変換し、Xに格納し
X"^^<>__":s"(O)"a2*+2/=~て目のタイプ(2文字列)
{S*_@+_,C\-S*2*+@@++}:F-関数Fは、2つの文字列(S1、S2など)と数字(Nなど)を取り、N個のスペース、S2、その他のスペース、S1、N個のスペース
2 (eyes) 6X3=- (F)~tを含む24文字の文字列を作成し、行列
7'o5*_7F:Mtに目線を入れます行列の共通の口線、および
X3={5Mt6'o_7Ft}*Xが3の場合はMに保存し、行列に2行上にMを再び配置し、
X2<{X2*6+'o_5Ft}*Xが0または1の場合に口の側面を間に配置し、口の角を適切な位置
{" |"\+'|+}%は垂直エッジを
S'-26*+aa2*\*追加し、各行の左側のスペースは水平エッジを
_3=1>"()"\*3\t追加し、耳を追加します
N* 改行セパレーターを追加します


4

ルビー、241 224

f=->n{s=" #{?-*26}
"
s+=" |#{' '*24}|
"*11+s
s[84]=?(
s[110]+=?)
s[233,12]=m=?O*12
s[91,3]=s[102,3]=n<0?' _ ':n==13?(s[177,12]=m;s[205]=s[216]=?O;'(O)'):(s[203+d=n%2*56]=s[218+d]=?O;" #{n%2<1??^:b=?>} ")
s[103]=?<if b
$><<s}

これは、次のように呼び出される関数を定義します f[13]。ここには、Venteroが助けてくれたのと同様に、改善の余地がたくさんあると確信しています

基本的には、最初に大まかなフレームワークを構築し、耳だけでなく口も取り付けます。それから私は数に応じて目を置きます。目に入るようにキャラクターを調整する間、私は異なる口の世話もするので、数字のタイプを再度確認する必要はありません。最後に、奇数の右目を修正する必要があります。上のコードでは、両方の目に同じ文字列が入力されるためです。


4

C#-349バイト

確かにどんな賞も受賞するつもりはありませんが、物事を行う別の方法です。

ゴルフ済み:

class P{static void Main(string[]A){int j=64,i,r=0,n=int.Parse(A[0]);for(var f=(n<0?"IDID-TDTD-":n==13?"HDHD(IDIDOJDJD)SDSD(TDTDOUDUD)KIRI JHSJo":n%2<1?"IDID^TDTD^HIHIoUIUIo":"IDID>TDTD<HKHKoUKUKo")+@"JJSJoCBZM BB[M|BA[N-ADAD(\D\D)AA\N AA]N"+"\n";j++<78;)for(i=64;i++<93;System.Console.Write(f[r]))for(r=0;f[r++]>i|f[r++]>j|i>f[r++]|j>f[r++];r++);}}

少ないゴルフ:

class P
{
    static void Main(string[]A)
    {
        int j=64,i,r=0,n=int.Parse(A[0]); // everything is offset by 65 in this program

        for(
            var f=(n<0?"IDID-TDTD-": // this string describes a set of rectangles (x1,y1,x2,y2,ch)
                n==13?"HDHD(IDIDOJDJD)SDSD(TDTDOUDUD)KIRI JHSJo":
                n%2<1?"IDID^TDTD^HIHIoUIUIo":
                "IDID>TDTD<HKHKoUKUKo"
                )+@"JJSJoCBZM BB[M|BA[N-ADAD(\D\D)AA\N AA]N"+"\n";

            j++<78;) // the loop then prints the rectangles to the screen
            for(i=64;i++<93;System.Console.Write(f[r]))
                for(r=0;f[r++]>i|f[r++]>j|i>f[r++]|j>f[r++];r++);
    }
}

3

Python 2-255

それほど短くはありません、とにかく投稿します。

n=input()
o='o'
S='  '
w=y=7*S
b=' '+'-'*26+'\n'
p=' |%19s     |\n'
E=p%y*2
v=S+o*10+S
u=z=o+6*S+o
A=a='^ '
if n%2:A='< ';a='> ';u=y;w=z
if n<0:A=a='_ ';u=w=y
if n==13:A=a='(O)';u=w=v;v=S+o+S*4+o+S
print b+E+'(|%8s%11s     |)\n'%(a,A)+E+p%u+p%v+p%w+E+b

Pythonの文字列のアイテム割り当てが見当たりません!:(キャラクターマトリックスから始めて、目と口を単純に変更できます。


もともと、私は実際に同じ理由で不変の文字列を必要とする同様のPPCGチャレンジでRubyを学びました。:D
マーティンエンダー14

これを行うb=bytearray()と、b+'mystring'他の文字列と同じ方法で出力される可変バイト配列が生成されます。
Veedrac 14

3

Python 2、257

勝者ではなく、別のアプローチが非常に近づきました!私はそれからさらにいくつかの文字を絞ることができることを願っています。共通の部分文字列を使用してバイトを実際に絞り出すことにより、すべての行を1つずつ作成します。

X,Z=R=" |"
Q=X*5
Y=X*7
A=X+"-"*26
B=R+X*24+Z
n=input()
a,b,c,d,e,f,g=((("^>^<o  o "+Q)[n%2::2],"OO  ()o")[n==13],"__"+Q)[n<0]
for F in(A,B,B,"(|"+Q+e+a+f+Y+X+e+b+f+Q+"|)",B,B,R+Y+g*10+Y+Z,R+Q+c+X+g+Y+X+g+X+c+Q+Z,R+Y+"o"*10+Y+Z,R+Q+d+Y+Q+d+Q+Z,B,B,A):print F

2

CJam、202

[S'-26*N]:Z[S'|:PS24*PN]:RR'(PS5*qi:XD=X0<-X2%2*+:Y[" ^ "_" > ""(O)"" - "__]=S8*Y[" ^ ""   "" < ""(O)"" - "__]=S5*P')NRRXD=[SPS7*'oA*S7*PN]:QR?Y[[SPS5*'oSC*'oS5*PN]:T_R[SPS7*'oS8*'oS7*PN]RRR]=QY2=TR?RRZ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.