Tam Sayı Duygular


12

Belirli bir n tamsayısına "tepki veren" bir program veya işlev yazın (işlev parametresi / args / stdin yoluyla giriş)

Program negatif sayıları umursamıyor, hatta seviyor, tek sayıları sevmiyor ve 13 rakamından korkuyor.

Aşağıdaki çıktıyı almalıdır:

n <0 ise:

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

n% 2 == 0 ve n> -1 ise:

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

n% 2 == 1 ve n> -1 ve n! = 13 ise:

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

n == 13 ise:

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

Baytlardaki en kısa çözüm kazanır.


2
13 tuhaf. Sadece bir yüz çıkarıyor muyuz? Negatifler tek ve çift ...

@ MartinBüttner, bu durumda negatif sayılarla ilgili ilk kural tamamen gereksizdir. Aslında tüm kuralları gerektiren tek öncelik, ilk ve son kuralların orta kurallara göre önceliğe sahip olmasıdır.
Peter Taylor

@PeterTaylor ayy, iyi bir nokta.
Martin Ender

@StandardToaster Herhangi bir yanlış anlamadan kaçınmak için çıktı koşullarını düzenledim
Markuz

Yanıtlar:


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/ adresinde deneyin.

Üst düzey açıklama:

S24*aB*boşluklarla dolu bir matris yapar, kenarları olmayan yüz
li_D=3{_0<2{_2%}?}?\;:Xsayıyı okur ve 0 (çift), 1 (tek), 2 (negatif) veya 3 (13) 'e dönüştürür, X'te saklamak
X"^^<>__":s"(O)"a2*+2/=~göz türlerini seçer (2 şeritler)
{S*_@+_,C\-S*2*+@@++}:F- fonksiyonu F 2 dizeleri (ki S1, S2) ve bir sayı (N demek) alır ve N boşluk, S2, diğer alanlarda, S1, N boşluklar ihtiva eden bir 24-Char dize yapan
2 (eyes) 6X3=- (F)~tmatris içinde koyar gözler hattı
7'o5*_7F:Mtkoyar matrisdeki ortak ağız çizgisini ve ayrıca
X3={5Mt6'o_7Ft}*X 3 ise M'ye kaydeder, M'yi matriste, 2 satır daha yükseğe koyar ve
X2<{X2*6+'o_5Ft}*X 0 veya 1 ise ağız kenarlarını arasına koyar, ağız köşelerini içeri sokar uygun konum
{" |"\+'|+}%dikey kenarlar ekler ve her satırda soldaki boşluk
S'-26*+aa2*\*yatay kenarları
_3=1>"()"\*3\tekler kulakları ekler
N* satırsonu ayırıcıları ekler


4

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

Bu, şöyle adlandırılacak bir işlevi tanımlar f[13]. Eminim iyileştirme için çok fazla alan var, Ventero'nun burada yapmama yardımcı olduğu gibi .

Temel olarak, önce kaba çerçeveyi inşa ediyorum ve kulakları ve ağzını tutturuyorum. Sonra sayılara bağlı olarak gözleri yerleştiriyorum. Gözlere koymak için karakterleri incelerken, farklı ağızlarla da ilgileniyorum, bu yüzden sayı türünü tekrar kontrol etmek zorunda değilim. Son olarak, yukarıdaki kod her iki göze aynı dize koyar çünkü Sonunda, tek sayılar için sağ göz düzeltmek gerekir.


4

349 bayt

Kesinlikle hiçbir ödül kazanmayacak, ama farklı şeyler yapmanın farklı bir yolu olacak.

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

Daha az 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

Gerçekten kısa değil , ama yine de göndereceğim:

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 dizeleri için öğe atama özledim! :( Sonra karakter matrisi ile başlayabilir ve sadece gözleri ve ağzı değiştirebilir.


Aslında Ruby'yi benzer bir PPCG mücadelesi için öğrendim ve tam da bu nedenle değişmez dizelere ihtiyacım var. : D
Martin Ender

Yapabilir b=bytearray()ve daha sonra b+'mystring'diğer herhangi bir dizeyle aynı şekilde yazdırılan değiştirilebilir bir bytearray üretebilirsiniz.
Veedrac

3

Python 2, 257

Kazanan değil, alternatif bir yaklaşım oldukça yaklaştı! Umarım birkaç karakter daha çıkarabilirim. Baytları gerçekten sıkmak için ortak alt dizeleri kullanarak tüm satırları parça parça oluşturur.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.