Napisz program lub funkcję, która „zareaguje” na podaną liczbę całkowitą n (wejście przez parametr funkcji / args / stdin)
Program nie dba o liczby ujemne, lubi parzyste, nie lubi liczb nieparzystych i boi się liczby 13.
Powinien wygenerować następujące:
jeśli n <0:
--------------------------
| |
| |
(| _ _ |)
| |
| |
| |
| |
| oooooooooo |
| |
| |
| |
--------------------------
jeśli n% 2 == 0 i n> -1:
--------------------------
| |
| |
(| ^ ^ |)
| |
| |
| |
| o o |
| oooooooooo |
| |
| |
| |
--------------------------
jeśli n% 2 == 1 oraz n> -1 oraz n! = 13:
--------------------------
| |
| |
(| > < |)
| |
| |
| |
| |
| oooooooooo |
| o o |
| |
| |
--------------------------
jeśli n == 13:
--------------------------
| |
| |
(| (O) (O) |)
| |
| |
| oooooooooo |
| o o |
| oooooooooo |
| |
| |
| |
--------------------------
Najkrótsze rozwiązanie w bajtach wygrywa.
Odpowiedzi:
CJam - 169
Wypróbuj na http://cjam.aditsu.net/
Wyjaśnienie na wysokim poziomie:
S24*aB*
tworzy matrycę pełną spacji, ponieważ twarz bez krawędzili_D=3{_0<2{_2%}?}?\;:X
odczytuje liczbę i konwertuje ją na 0 (parzyste), 1 (nieparzyste), 2 (ujemne) lub 3 (13), zapisanie jej w XX"^^<>__":s"(O)"a2*+2/=~
wybiera typy oczu (2 strings){S*_@+_,C\-S*2*+@@++}:F
- funkcja F pobiera 2 łańcuchy (powiedzmy S1, S2) i liczbę (powiedzmy N) i tworzy 24-znakowy ciąg znaków zawierający N spacji, S2, inne spacje, S1, N spacji2 (eyes) 6X3=- (F)~t
umieszcza linię oczu w macierzy,7'o5*_7F:Mt
umieszcza wspólna linia ustna w matrycy, a także zapisuje ją w M,X3={5Mt6'o_7Ft}*
jeśli X wynosi 3, ponownie umieszcza M w matrycy, 2 linie wyżej i umieszcza boki ust pomiędzy,X2<{X2*6+'o_5Ft}*
jeśli X wynosi 0 lub 1, ustawia kąciki ust w odpowiednia pozycja{" |"\+'|+}%
dodaje pionowe krawędzie, a spacja po lewej stronie w każdej liniiS'-26*+aa2*\*
dodaje poziome krawędzie_3=1>"()"\*3\t
dodaje uszyN*
dodaje separatory nowej liniiźródło
Ruby,
241224Definiuje funkcję, która ma być wywoływana jak
f[13]
. Jestem pewien, że jest wiele miejsca na ulepszenia, podobnie jak Ventero pomógł mi tutaj .Zasadniczo najpierw buduję zgrubną ramę i łączę uszy oraz usta. Następnie umieszczam oczy w zależności od liczby. Pracując nad postaciami, które mają wpaść w oczy, dbam również o różne usta, aby nie musiałem ponownie sprawdzać rodzaju numeru. Wreszcie muszę naprawić prawe oko dla liczb nieparzystych, ponieważ powyższy kod umieszcza ten sam ciąg w obu oczach.
źródło
C # - 349 bajtów
Na pewno nie zdobędziesz żadnych nagród, ale inny sposób robienia rzeczy.
Gra w golfa:
Mniej golfa:
źródło
Python 2 - 255
Nie bardzo krótki, ale będę pisać to tak:
Brakuje mi przypisania elementu do łańcuchów w Pythonie! :( Wtedy można zacząć od matrycy postaci i po prostu zmodyfikować oczy i usta.
źródło
b=bytearray()
a następnieb+'mystring'
wygeneruje zmienną bytearray, która drukuje w taki sam sposób jak każdy inny ciąg.Python 2, 257
Nie zwycięzca, ale alternatywne podejście, całkiem się zbliżyło! Mam nadzieję, że uda mi się wycisnąć z niego jeszcze kilka znaków. Buduje wszystkie linie kawałek po kawałku, używając wspólnych podciągów, aby naprawdę wycisnąć bajty.
źródło
CJam, 202
źródło