Cảm xúc số nguyên


12

Viết chương trình hoặc hàm "phản ứng" với số nguyên n đã cho (đầu vào thông qua tham số hàm / args / stdin)

Chương trình không quan tâm đến số âm, thích chẵn, không thích số lẻ và sợ số 13.

Nó sẽ xuất ra như sau:

nếu n <0:

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

nếu n% 2 == 0 và n> -1:

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

nếu n% 2 == 1 và n> -1 và n! = 13:

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

nếu n == 13:

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

Giải pháp ngắn nhất trong byte thắng.


2
13 là số lẻ. Chúng ta chỉ xuất một mặt? Các tiêu cực là kỳ lạ và thậm chí ...

@ MartinBüttner, trong trường hợp đó, quy tắc đầu tiên về số âm là hoàn toàn không cần thiết. Ưu tiên duy nhất thực sự đòi hỏi tất cả các quy tắc là dành cho quy tắc đầu tiên và cuối cùng có quyền ưu tiên so với quy tắc trung bình.
Peter Taylor

@PeterTaylor oops, điểm tốt.
Martin Ender

@St ChuẩnToaster Tôi đã chỉnh sửa các điều kiện đầu ra để tránh mọi hiểu lầm
Markuz

Câu trả lời:


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*

Dùng thử tại http://cjam.aditsu.net/

Giải thích cấp cao:

S24*aB*tạo một ma trận đầy không gian, cho mặt không có cạnh
li_D=3{_0<2{_2%}?}?\;:Xđọc số và chuyển đổi thành 0 (chẵn), 1 (lẻ), 2 (âm) hoặc 3 (13), lưu trữ nó trong X
X"^^<>__":s"(O)"a2*+2/=~chọn loại mắt (2 chuỗi)
{S*_@+_,C\-S*2*+@@++}:F- hàm F lấy 2 chuỗi (giả sử S1, S2) và một số (giả sử N) và tạo chuỗi 24 char chứa N khoảng trắng, S2, khoảng trắng khác, khoảng trắng S1, N
2 (eyes) 6X3=- (F)~tđặt đường mắt trong ma trận
7'o5*_7F:Mtđặt đường miệng chung trong ma trận và cũng lưu nó trong M
X3={5Mt6'o_7Ft}*nếu X là 3, nó đặt M lại trong ma trận, cao hơn 2 đường và đặt cạnh miệng ở giữa
X2<{X2*6+'o_5Ft}*nếu X bằng 0 hoặc 1, nó đặt các góc miệng vào vị trí thích hợp
{" |"\+'|+}%thêm các cạnh dọc và một khoảng trắng ở bên trái trên mỗi dòng
S'-26*+aa2*\*thêm các cạnh ngang
_3=1>"()"\*3\tthêm tai
N* thêm dấu phân cách dòng mới


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}

Điều này định nghĩa một chức năng được gọi là như thế f[13]. Tôi chắc chắn có rất nhiều chỗ để cải thiện, tương tự như những gì Ventero đã giúp tôi làm ở đây .

Về cơ bản, tôi đang xây dựng khung thô trước tiên và gắn tai cũng như miệng. Sau đó, tôi đặt mắt tùy theo số lượng. Trong khi xử lý các nhân vật để đưa vào mắt, tôi cũng chăm sóc các miệng khác nhau để tôi không phải kiểm tra lại loại số. Cuối cùng tôi cần sửa mắt phải cho các số lẻ, bởi vì đoạn mã trên đặt cùng một chuỗi vào cả hai mắt.


4

C # - 349 byte

Chắc chắn sẽ không giành được bất kỳ giải thưởng, nhưng một cách làm khác nhau.

Chơi gôn

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

Ít chơi gôn hơn:

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

Không thực sự ngắn, nhưng tôi sẽ đăng nó bằng mọi cách:

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

Tôi nhớ việc gán vật phẩm cho các chuỗi trong Python! :( Sau đó, người ta có thể bắt đầu với ma trận ký tự và chỉ cần sửa đổi mắt và miệng.


Ban đầu tôi thực sự đã học được Ruby cho một thử thách PPCG tương tự, nơi tôi cần các chuỗi bất biến cho chính xác lý do đó. : D
Martin Ender

Bạn có thể làm b=bytearray()và sau đó b+'mystring'sẽ tạo ra một bytearray có thể thay đổi, nó in giống như bất kỳ chuỗi nào khác.
Veedrac

3

Con trăn 2, 257

Không phải là một người chiến thắng, nhưng một cách tiếp cận khác, đã khá gần! Tôi có hy vọng tôi có thể vắt thêm một vài ký tự ra khỏi nó. Xây dựng tất cả các dòng từng mảnh, sử dụng các chuỗi con phổ biến để thực sự vắt kiệt các 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

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.