Emosi Integer

12

Tulis program atau fungsi yang "bereaksi" ke bilangan bulat yang diberikan n (input melalui parameter fungsi / args / stdin)

Program ini tidak peduli dengan angka negatif, suka bahkan, tidak suka angka ganjil dan takut nomor 13.

Seharusnya menampilkan yang berikut:

jika n <0:

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

jika n% 2 == 0 dan n> -1:

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

jika n% 2 == 1 dan n> -1 dan n! = 13:

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

jika n == 13:

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

Solusi terpendek dalam byte menang.

Markuz
sumber
2
13 itu aneh. Apakah kita hanya menampilkan satu wajah?
@ MartinBüttner, dalam hal ini aturan pertama tentang angka negatif sama sekali tidak perlu. Satu-satunya prioritas yang sebenarnya membutuhkan semua aturan adalah untuk yang pertama dan terakhir memiliki prioritas di atas yang tengah.
Peter Taylor
@PeterTaylor oops, poin bagus.
Martin Ender
@StandardToaster Saya mengedit kondisi keluaran untuk menghindari kesalahpahaman
Markuz

Jawaban:

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*

Cobalah di http://cjam.aditsu.net/

Penjelasan tingkat tinggi:

S24*aB*membuat matriks penuh spasi, untuk wajah tanpa tepi
li_D=3{_0<2{_2%}?}?\;:Xmembaca angka dan mengubahnya menjadi 0 (datar), 1 (aneh), 2 (negatif) atau 3 (13), menyimpannya dalam X
X"^^<>__":s"(O)"a2*+2/=~memilih jenis mata (2 string)
{S*_@+_,C\-S*2*+@@++}:F- fungsi F mengambil 2 string (katakanlah S1, S2) dan angka (katakanlah N) dan membuat string 24-char yang berisi spasi N, S2, spasi lainnya, spasi S1, N
2 (eyes) 6X3=- (F)~tmenempatkan garis mata dalam matriks
7'o5*_7F:Mtmenempatkan garis mulut yang umum dalam matriks, dan juga menyimpannya dalam M
X3={5Mt6'o_7Ft}*jika X adalah 3, menempatkan M lagi dalam matriks, 2 garis lebih tinggi, dan menempatkan sisi mulut di antara
X2<{X2*6+'o_5Ft}*jika X adalah 0 atau 1, ia menempatkan sudut mulut di posisi yang sesuai
{" |"\+'|+}%menambahkan tepi vertikal dan ruang di sebelah kiri pada setiap garis
S'-26*+aa2*\*menambahkan tepi horizontal
_3=1>"()"\*3\tmenambah telinga
N* menambahkan pemisah baris baru

aditsu berhenti karena SE adalah JAHAT
sumber
4

Ruby, 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}

Ini mendefinisikan fungsi yang disebut seperti f[13]. Saya yakin ada banyak ruang untuk perbaikan, sama seperti apa yang Ventero bantu saya lakukan di sini .

Pada dasarnya, saya membangun kerangka kasar terlebih dahulu, dan menempelkan telinga serta mulut. Lalu saya letakkan mata tergantung pada jumlahnya. Sambil mengerjakan karakter untuk dimasukkan ke dalam mata, saya juga menjaga mulut yang berbeda jadi saya tidak perlu memeriksa jenis nomor lagi. Akhirnya saya perlu memperbaiki mata kanan untuk angka ganjil, karena kode di atas menempatkan string yang sama di kedua mata.

Martin Ender
sumber
4

C # - 349 byte

Tentu tidak akan memenangkan penghargaan apa pun, tetapi cara yang berbeda dalam melakukan sesuatu.

Golf:

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++);}}

Kurang golf:

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++);
    }
}
VisualMelon
sumber
3

Python 2 - 255

Tidak terlalu pendek, tetapi saya tetap akan mempostingnya:

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

Saya melewatkan tugas item untuk string dengan Python! :( Lalu orang bisa mulai dengan matriks karakter dan cukup memodifikasi mata dan mulut.

Falko
sumber
Awalnya saya benar-benar belajar Ruby untuk tantangan PPCG serupa di mana saya membutuhkan string yang tidak dapat diubah untuk alasan itu. : D
Martin Ender
Anda dapat melakukan b=bytearray()dan kemudian b+'mystring'akan menghasilkan bytearray yang bisa diubah, yang mencetak dengan cara yang sama seperti string lainnya.
Veedrac
3

Python 2, 257

Bukan pemenang, tetapi pendekatan alternatif, sudah cukup dekat! Saya berharap dapat memeras beberapa karakter lagi darinya. Buat semua garis sepotong demi sepotong, menggunakan substring umum untuk benar-benar memeras byte.

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
Claudiu
sumber
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
Ypnypn
sumber