Emozioni intere


12

Scrivi un programma o una funzione che "reagisce" a un dato numero intero n (input tramite parametro di funzione / args / stdin)

Il programma non si preoccupa dei numeri negativi, piace anche, non ama i numeri dispari e teme il numero 13.

Dovrebbe produrre quanto segue:

se n <0:

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

se n% 2 == 0 e n> -1:

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

se n% 2 == 1 e n> -1 e n! = 13:

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

se n == 13:

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

Vince la soluzione più breve in byte.


2
13 è dispari. Emettiamo solo una faccia? I negativi sono pari e dispari ...

@ MartinBüttner, in tal caso la prima regola sui numeri negativi è del tutto superflua. L'unica priorità che in realtà richiede tutte le regole è che la prima e l'ultima abbiano la priorità su quelle intermedie.
Peter Taylor,

@PeterTaylor oops, buon punto.
Martin Ender,

@StandardToaster Ho modificato le condizioni di uscita per evitare equivoci
Markuz,

Risposte:


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*

Provalo su http://cjam.aditsu.net/

Spiegazione di alto livello:

S24*aB*rende una matrice piena di spazi, poiché la faccia senza i bordi
li_D=3{_0<2{_2%}?}?\;:Xlegge il numero e lo converte in 0 (pari), 1 (dispari), 2 (negativo) o 3 (13), memorizzandolo in X
X"^^<>__":s"(O)"a2*+2/=~seleziona i tipi di occhio (2 stringhe)
{S*_@+_,C\-S*2*+@@++}:F- la funzione F prende 2 stringhe (diciamo S1, S2) e un numero (diciamo N) e crea una stringa di 24 caratteri contenente N spazi, S2, altri spazi, S1, N spazi
2 (eyes) 6X3=- (F)~tmette la linea degli occhi nella matrice
7'o5*_7F:Mtmette il linea della bocca comune nella matrice e la salva anche in M
X3={5Mt6'o_7Ft}*se X è 3, rimette M nella matrice, 2 linee più in alto e mette i lati della bocca in mezzo
X2<{X2*6+'o_5Ft}*se X è 0 o 1, inserisce gli angoli della bocca la posizione appropriata
{" |"\+'|+}%aggiunge i bordi verticali e uno spazio a sinistra su ogni linea
S'-26*+aa2*\*aggiunge i bordi orizzontali
_3=1>"()"\*3\taggiunge le orecchie
N* aggiunge i separatori newline


4

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

Questo definisce una funzione da chiamare come f[13]. Sono sicuro che c'è molto margine di miglioramento, simile a quello che Ventero mi ha aiutato a fare qui .

Fondamentalmente, sto costruendo prima la struttura ruvida e attacco sia le orecchie che la bocca. Quindi posiziono gli occhi in base al numero. Mentre lavoro i personaggi da mettere negli occhi, mi prendo cura anche delle diverse bocche, quindi non devo controllare di nuovo il tipo di numero. Infine, devo correggere l'occhio destro per i numeri dispari, perché il codice sopra mette la stessa stringa in entrambi gli occhi.


4

C # - 349 byte

Certamente non vincerà alcun premio, ma un modo diverso di fare le cose.

golfed:

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

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

3

Python 2 - 255

Non molto breve, ma lo posterò comunque:

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

Mi manca l'assegnazione degli oggetti per le stringhe in Python! :( Quindi si potrebbe iniziare con la matrice di caratteri e semplicemente modificare occhi e bocca.


Inizialmente ho effettivamente imparato Ruby per una sfida PPCG simile in cui ho bisogno di stringhe immutabili proprio per questo motivo. : D
Martin Ender,

Puoi farlo b=bytearray()e quindi b+'mystring'genererà un bytearray mutevole, che stampa allo stesso modo di qualsiasi altra stringa.
Veedrac,

3

Python 2, 257

Non un vincitore, ma un approccio alternativo, si sono avvicinati abbastanza! Spero di poterne spremere qualche altro in più. Costruisce tutte le linee pezzo per pezzo, usando sottostringhe comuni per spremere davvero i 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.