Ganzzahlige Emotionen

12

Schreiben Sie ein Programm oder eine Funktion, die auf eine bestimmte Ganzzahl n "reagiert" (Eingabe über Funktionsparameter / args / stdin)

Das Programm kümmert sich nicht um negative Zahlen, mag gerade, mag ungerade Zahlen nicht und fürchtet die Zahl 13.

Es sollte Folgendes ausgeben:

wenn n <0:

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

wenn n% 2 == 0 und n> -1:

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

wenn n% 2 == 1 und n> -1 und n! = 13:

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

wenn n == 13:

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

Die kürzeste Lösung in Bytes gewinnt.

Markuz
quelle
2
13 ist ungerade. Geben wir nur ein Gesicht aus? Negative sind ungerade und gerade ...
@ MartinBüttner, in diesem Fall ist die erste Regel über negative Zahlen völlig unnötig. Die einzige Priorität, für die tatsächlich alle Regeln erforderlich sind, besteht darin, dass die ersten und letzten Regeln Vorrang vor den mittleren haben.
Peter Taylor
@ PeterTaylor Hoppla, guter Punkt.
Martin Ender
@StandardToaster Ich habe die Ausgabebedingungen bearbeitet, um Missverständnisse zu vermeiden
Markuz

Antworten:

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*

Probieren Sie es bei http://cjam.aditsu.net/

Erklärung auf hoher Ebene:

S24*aB*macht eine Matrix voller Leerzeichen, denn das Gesicht ohne Kanten
li_D=3{_0<2{_2%}?}?\;:Xliest die Zahl und wandelt sie in 0 (gerade), 1 (ungerade), 2 (negativ) oder 3 (13) um. Durch Speichern in X werden
X"^^<>__":s"(O)"a2*+2/=~die Augentypen ausgewählt (2 Zeichenfolgen)
{S*_@+_,C\-S*2*+@@++}:F- Funktion F verwendet 2 Zeichenfolgen (z. B. S1, S2) und eine Zahl (z. B. N) und erstellt eine Zeichenfolge mit 24 Zeichen, die N Leerzeichen, S2, andere Leerzeichen, S1 und N Leerzeichen enthält.
2 (eyes) 6X3=- (F)~tDie Augenlinie wird in die Matrix eingefügt
7'o5*_7F:Mt setzt den gemeinsame Mundlinie in der Matrix und speichert sie auch in M,
X3={5Mt6'o_7Ft}*wenn X 3 ist, setzt sie M erneut in die Matrix, 2 Zeilen höher, und setzt die Mundseiten dazwischen,
X2<{X2*6+'o_5Ft}*wenn X 0 oder 1 ist, setzt sie die Mundwinkel ein Die entsprechende Position
{" |"\+'|+}%fügt vertikale Kanten hinzu und ein Leerzeichen links in jeder Zeile
S'-26*+aa2*\*fügt die horizontalen Kanten
_3=1>"()"\*3\thinzu und fügt die Ohren hinzu
N* Fügt Zeilenumbrüche hinzu

aditsu kündigen, weil SE böse ist
quelle
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}

Dies definiert eine Funktion, die wie folgt aufgerufen werden soll f[13] . Ich bin sicher, es gibt viel Raum für Verbesserungen, ähnlich wie Ventero mir hier geholfen hat .

Grundsätzlich baue ich zuerst das grobe Gerüst und befestige die Ohren sowie den Mund. Dann platziere ich die Augen je nach Anzahl. Während ich die Zeichen ausarbeite, die ich in die Augen stecke, kümmere ich mich auch um die verschiedenen Münder, damit ich nicht noch einmal nach der Art der Zahl suchen muss. Schließlich muss ich das rechte Auge für ungerade Zahlen korrigieren, da der obige Code die gleiche Zeichenfolge in beide Augen einfügt.

Martin Ender
quelle
4

C # - 349 Bytes

Mit Sicherheit keine Preise gewinnen, aber eine andere Art, Dinge zu tun.

Golf gespielt:

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

Weniger golfen:

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
quelle
3

Python 2 - 255

Nicht wirklich kurz, aber ich werde es trotzdem posten:

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

Ich vermisse die Elementzuweisung für Zeichenfolgen in Python! :( Dann könnte man mit der Zeichenmatrix beginnen und einfach Augen und Mund modifizieren.

Falko
quelle
Ursprünglich habe ich Ruby für eine ähnliche PPCG-Herausforderung gelernt, bei der ich genau aus diesem Grund unveränderliche Zeichenfolgen benötige. : D
Martin Ender
Sie können tun , b=bytearray()und dann b+'mystring'wird erzeugen ein veränderliches bytearray, die die gleiche Art und Weise wie jede andere Zeichenfolge gedruckt wird .
Veedrac
3

Python 2, 257

Kein Gewinner, aber eine alternative Herangehensweise, kam dem sehr nahe! Ich hoffe, ich kann ein paar Zeichen mehr herauspressen. Baut alle Zeilen Stück für Stück auf und verwendet dabei gemeinsame Teilzeichenfolgen, um die Bytes wirklich herauszudrücken.

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
quelle
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
quelle