Wymagania
Na potrzeby wyzwania zdefiniujmy jednostkę :
Jednostkę definiuje się jako dowolny punkt, który tworzy siatkę, w której rysowana jest twarz (piksele dla ekranu, znaki dla grafiki ASCII itp.).
Te minimalne wymagania do twarzy są:
Smiley face ma kształt przypominający okrąg (niekoniecznie idealny) o dowolnym promieniu. Musi być co najmniej 1 jednostka na każde z dwóch oczu i co najmniej 2 jednostki na usta. Zarówno oczy, jak i usta powinny mieć kształt twarzy. Usta mogą być zorientowane w dowolny sposób (szczęśliwy, smutny, obojętny itp.).
Oto przykład wyniku:
0 0 0 . . .
0 . . 0 . o o .
0 --- 0 . \_/ .
0 0 0 . . .
Cele
Oczywiście głównym celem jest opracowanie możliwie najkrótszego kodu, ale ważna jest także sztuka .
Zwycięzca
Zwycięzca wybierany jest na podstawie liczby głosów użytkowników, co najmniej w ciągu najbliższych 5 dni.
alt + 1
ialt + 2
wyprodukować odpowiednio ☺ i ☻. Dla argumentu rozważęalt
naciśnięcie klawisza znaku i wywołanie 2 znaków.Odpowiedzi:
JavaScript, 340
JavaScript, 283
wersja zoptymalizowana (z pewnymi ulepszeniami i bez zbędnych białych znaków)
Cóż ... może nie jest tak krótki, jak byś chciał, ale na pewno niekonwencjonalny. Wygląda lepiej, gdy przeglądarka jest zmaksymalizowana. Naprawdę podobało mi się twoje pytanie! Jeśli chcesz zwiększyć szczegóły, po prostu
d
nieznacznie zmniejsz zmienną.edycja: Niestety nie mogę uruchomić go na jsfiddle,
ale możesz wkleić go do konsoli Javascript w przeglądarce. Aha, i włącz wyskakujące okienka na stronie :).edit2: Możesz go uruchomić tworząc nowy plik HTML i wkleić do niego kod:
Następnie, gdy go uruchomisz i nic się nie stanie, po prostu włącz wyskakujące okna i załaduj stronę ponownie. Ponadto wklejam
źródło
HTML,
200141 znakówDzięki skutku , mam wyciąć to w dół do 141 znaków :
Oto oryginalny HTML:
Działa najlepiej na małych ekranach:
źródło
Brainfuck: 583 znaków (bez liczenia białych znaków)
Wynik:
źródło
SVG
Renderowania takie jak to:
źródło
Ruby, 224
Douglas Adams byłby przerażony. :-P
Wynik:
Ruby, 110
Ta sama technika. Mniej kodu. Mniej pomysłowy. Wygląda na to, że ktoś stopił plastikową buźkę. : -}
Wynik:
źródło
QBasic ASCII, 134 (niezoptymalizowany)
Ta odpowiedź całkowicie oszukuje, używając znaku 1 ASCII jako buźki. Jednak w przeciwieństwie do odpowiedzi BF i „zwykłego tekstu”, faktycznie przestrzega zasad, tworząc grafikę ASCII opartą na pikselach uśmiechniętej postaci, zamiast po prostu drukować postać jako pełne rozwiązanie. Niezoptymalizowana wersja reprezentuje sposób, w jaki IDE QBasic zapisuje pliki. IDE „pomocnie” naprawia dla nas składnię i dodaje wiele białych znaków tam, gdzie jest „potrzebna”.
Wynik:
QBasic ASCII, 80 (zoptymalizowany)
Jest to zoptymalizowana wersja pierwszego przykładu kodu, który wciąż ładuje się w QBasic. Rzeczy, które zostały wykonane:
CHR$(1)
ciągiem zawierającym rzeczywisty znak. (Zilustrowane tutaj pasującym znakiem Unicode. Jeśli naprawdę chcesz wypróbować kod, zamień go na prawdziwy znak ASCII 1 za pomocą edytora szesnastkowego.)PRINT
z?
, jak tradycja BASIC pozwala.IF
linię na linię drukującą znaki na podstawie wartości piksela źródłowego. Będzie to 0 lub 3. 0 to kolor czarny. Znak 0 drukuje znak zerowy, który jest traktowany jak spacja. 3 to kolor biały w 4-paletowej palecie CGA. ASCII 3 to serce.Wynik:
QBasic graphic, 83 (zoptymalizowany pod kątem białych znaków)
Ale poczekaj, pytam tutaj, czy nie możesz po prostu użyć wbudowanych poleceń graficznych QBasic? Jasne, ale tak naprawdę nie pozwoli ci to zaoszczędzić bajtów z powodu gadatliwości języka. Ale ma wbudowaną funkcję rysowania łuku koła między dwoma podanymi kątami, co jest miłe. Kąty są podane w radianach, a
4
i5.4
zbliżenie łuk okręgu symetrycznie skupione wokółπ*3/2
, lub jeśli już dołączył bok dobry ,τ*3/4
.Wynik:
Uwaga: Rozmiary w tej odpowiedzi oznaczają rozmiar pliku w bajtach.
źródło
APL, 97 znaków / bajtów *
Działa poprzez obliczenie kilku równań okręgu. Testowane na GNU APL .
Wyjście ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL można zapisać we własnym (starszym) jednobajtowym zestawie znaków, który odwzorowuje symbole APL na górne 128 bajtów. Dlatego do celów oceniania program N znaków, który używa tylko znaków ASCII i symboli APL, może zostać uznany za N-bajtowy.
źródło
Bash, 63 znaki
Wynik:
Kunszt:
Krowy
źródło
Bash, 22 znaki
Przykładowe dane wyjściowe:
Edycja: można to pograć w golfa, jak sugeruje kilka osób. Najkrótsza znaleziona dotychczas samodzielna wersja to:
(dzięki nitro2k01)
źródło
curl -L x.co/3WG0m
. Można by jeszcze bardziej zoptymalizować, jeśli mamy lokalną,-L
Z
tej nazwie do serwera hostującego plik.Python
247230227 Znaków - i wersja ładniejszaZnaki Python 243 - Korzystanie z kolorów
źródło
C ++ - 122 znaków bez niepotrzebnych spacji
To najbardziej realistyczny pomysł, jaki mogłem wymyślić:
Dla tych z was, którzy tęsknią, tworzy to:
źródło
return 0;
nie jest wymagany w ISO C ++ :)źródło
PHP, wiele innych języków ... - 1601 znaków
Źródło buźki: Asciiworld.com: Buźka
źródło
HTML, CSS
Wiem, że nie jest to ani krótkie, ani prawdziwe kodowanie, ale nadal chciałem to opublikować
jsFiddle
źródło
#d{border-radius:20px/10px;}
. Lub z#d{border-radius:0 0 20px 20px/0 0 10px 10px;}
. Lub z#d{height:10px;border-radius:0 0 20px 20px/0 0 10px 10px;margin-top:10px;}
.Rebmu , 24 znaki
Och, minimalna ludzkość. :-) Najmniej imponujący program Rebmu, tak celowo osadzający pHp jako hołd dla niebieskiej pigułki w świecie programowania :
H{ -- }pHp{|..|^/|\/|}pH
Wykonanie:
Wyjaśnienie
Rebmu jest tylko dialektem Rebola . Dziedziczy ograniczenia parsowania, używa skrótów bez spacji oddzielonych ciągami wielkich liter. Jest on traktowany w specjalny sposób, gdy pierwszy cykl jest pisany wielkimi literami w porównaniu z literami niekapitalizowanymi.
(Zamiast więc rozdzielać terminy w taki sposób,
AbcDefGhi
że można użyć różnicy międzyABCdefGHI
i,abcDEFghi
aby wycisnąć trochę informacji. Sekwencje, których przebiegi rozpoczynają się wielkimi literami, są oddzielone, więc pierwszy termin reprezentuje „zestaw słów”, często interpretowany kontekstowo jako pożądanie dla zadania. zobacz wideo )Jeśli chcesz przetłumaczyć to na rodzimego Rebola, musisz zaakceptować takie rzeczy, które zaczynają się od dużej litery H, co oznacza, że tak naprawdę
h:
nie jesth
. Źródło jest zatem analogiczne do:Przypisuje ciąg
--
do h (przy użyciu asymetrycznych ograniczników ciągu, ponieważprint {"Isn't it nice," said {Dr. Rebmu}, "when you have asymmetric multi-line string delimiters with no need for escaping matched nested pairs, and that accept apostrophes and quotes too?"}
Drukuje h jeden raz, drukuje kolejny ciąg, w którym
^/
jest sekwencja ucieczki dla nowej linii (znaki są rzadziej używane w oprogramowaniu niż ukośniki odwrotne, które często pojawiają się na ścieżkach) , drukuje h ponownie.źródło
JavaScript
262251Edycja: dodano lepsze oczy.
Drukuje buźkę na konsoli.
Mógłbym stracić sporo znaków, aby uprościć moją maskę bitową i wydrukować mniej ładną twarz, lub użyć równania koła zamiast elipsy, aby uwzględnić odstępy między znakami - ale to nie jest duch.
Możesz zmienić
r
zmienną, aby zmienić rozmiar i uzyskać bardziej lub mniej szczegółową twarz; dowolna liczba>=7 && <=99
da dobry wynik i pozostanie w granicach liczby znaków.Czytelny dla człowieka:
Wynik:
Moją pierwszą grą w golfa będzie prawdopodobnie kilka ulepszeń.
źródło
Perl, 106 znaków
Jest to oneliner Perla, wystarczy go C&P w wierszu polecenia, pod warunkiem, że
Acme::EyeDrops
moduł Perla jest już zainstalowany na komputerze.Innym sposobem jest buźka z ciągnięciem twarzy
Jeszcze inny sposób: buźka z wyciąganiem twarzy do góry nogami,
źródło
Bash + ImageMagick: 137 znaków
Przykładowe dane wyjściowe:
Ale jak to jest wyzwanie ascii-art …
Bash + ImageMagick: 172 znaków
Przykładowe dane wyjściowe:
źródło
GolfScript, 27
To daje drugi przykład dokładnie tak, jak podano.
Pierwszy można zrobić w ten sam sposób, ale myślę, że drugi wygląda ładniej :)
źródło
Brainf *** - 2
Wydruki
☺
lub wartość ascii 1. (może nie działać na niektórych platformach)źródło
Bash - jedna linijka: 442 znaki
Przykładowe dane wyjściowe: (wywoływany przez
m 8
)To trochę szalone, ale zdecydowałem się użyć diamentu zamiast koła. Oczy są zakryte okularami ochronnymi.
BASH - 252 znaków (dzięki @manatwork)
źródło
s(){ (($1>1))&&echo -n "${2:- }"&&s $[$1-1] $2;};m(){ ((t=2*$1));while ((t=t-1));do v=$[$1-t];l=$[${v#-}+1];s $l;q=$[2*($1-l)];w=`s $q`;((l>t&&l<t+3&&q>2))&&w=" `s $[q-2] 0` ";((t>$1+1&&q>3))&&{ g=`s $[(q-1)/2] 0`;w=" $g $g ";};echo "+${w:+$w+}";done;}
. Lub 245, jeśli zrezygnujesz z funkcji mi umieścisz kod w pliku skryptu. Prawdopodobnie można jeszcze bardziej zmniejszyć, modyfikując obliczenia, ale teraz nie mam na to czasu.HTML + CSS, 83
zrzut ekranu (za pomocą Firefoxa):
szkoda, że spóźniłem się z odpowiedzią (dostałem +10 powtórzeń również dość późno ...)
źródło
border-radius:50%
jednym singlem<hr>
: dabblet.com/gist/8472397
: jsfiddle.net/T9BdL/2GolfScript, 18
Ten program używa niektórych wartości zakodowanych w systemie binarnym, które pojawiają się jako dziwne / nieprawidłowe znaki w edytorze tekstu.
Oto zrzut heksowy:
Uwaga: nie działa w ustawieniach regionalnych UTF-8, ale działa dobrze na przykład z ISO-8859-1.
Rozszerzona wersja ze znakami ucieczki:
Wynik:
Aby uzyskać lepszy wynik, możesz zastąpić blok,
{2base{38+}%n}
który powoduje, że wersja binarna ma 23 bajty. Wersja rozszerzona:Wynik:
źródło
JavaScript
Ten kod należy uruchomić
f12
na tej stronie:Wynik:
źródło
CJam, 18 lat
Zdecydowałem się na krótki kod ... Wypróbuj tutaj .
Wyjaśnienie
Wykorzystuje to symetrię zaprojektowanej przeze mnie buźki.
Wynik
źródło
uu
uśmiechu jest opcją, jeśli wybierasz się na taki „Pyton
Wynik:
źródło
Python, 42
źródło
HTML 5: 321 znaków
Fiddle: http://jsfiddle.net/wfNGx/
Źródło: http://www.codecademy.com/courses/web-beginner-en-SWM11/0/1
źródło
Polecenie powłoki lub wbudowane
W zależności od smaku twojej powłoki lub zestawu poleceń,
echo
może interpretować znaki kontrolne za pomocą lub bez-e
... (... i wymagam, że mogę być Vroomfondelem! zawiedzie, używanieprintf
powinno być bezpiecznym zakładem ...źródło
C 178 znaków:
źródło (dodano białe znaki - wszystko można usunąć oprócz
int x
wynik:
źródło