Wprowadzenie
Twoim dzisiejszym wyzwaniem (zainspirowanym tym wyzwaniem ) jest napisanie kilku urywków, funkcji lub pełnych programów, z których każdy generuje różne emotikony ascii, bez ponownego wykorzystywania znaków.
Wyzwanie
Lista prawidłowych emotikonów ascii dla tego wyzwania znajduje się zarówno tutaj, jak i w bloku kodu na dole tego postu.
Każdy fragment powinien znajdować się w osobnej linii w zgłoszeniu.
Możesz używać tylko jednego języka dla wszystkich fragmentów.
Każdy fragment kodu musi albo wyprowadzać na standardowe wyjście, albo zwracać ciąg zawierający emotikon i opcjonalny końcowy nowy wiersz, oraz nic więcej .
Nie możesz użyć żadnej postaci więcej niż jeden raz we wszystkich fragmentach, jednak wielokrotne użycie znaku w jednym fragmencie jest w porządku.
Nie możesz używać żadnego znaku spoza strony kodowej swojego języka (lub ascii, jeśli Twój język nie używa niestandardowej strony kodowej) w żadnym fragmencie. Innymi słowy, jesteś ograniczony tylko do znaków, które można zakodować w jednym bajcie.
Żaden fragment kodu nie może pobierać żadnych danych wejściowych.
Standardowe luki są niedozwolone.
Twój wynik to liczba unikatowych fragmentów, z których każdy drukuje inny emotikon ascii w powyższym pliku tekstowym.
Najwyższy wynik wygrywa!
Powodzenia!
Dozwolone emotikony, oddzielone spacją:
:-) :) :-] :] :-3 :3 :-> :> 8-) 8) :-} :} :o) :c) :^) =] =) :-D :D 8-D 8D x-D xD X-D XD =D =3 B^D :-)) :-( :( :-c :c :-< :< :-[ :[ :-|| >:[ :{ :@ >:( :'-( :'( :'-) :') D-': D:< D: D8 D; D= DX :-O :O :-o :o :-0 8-0 >:O :-* :* ;-) ;) *-) *) ;-] ;] ;^) :-, ;D :-P :P X-P XP x-p xp :-p :p :-b :b d: =p >:P :-/ :/ :-. >:\ >:/ :\ =/ =\ :L =L :S :-| :| :$ :-X :X :-# :# :-& :& O:-) O:) 0:-3 0:3 0:-) 0:) 0;^) >:-) >:) }:-) }:) 3:-) 3:) >;) |;-) |-O :-J #-) %-) %) :-###.. :###.. <:-| ',:-| ',:-l <_< >_>
EDYCJA: Przepraszam, w jednym z emotikonów, których mi brakowało, była postać Unicode. Od tego czasu usunąłem zawierający go emotikon. Mam nadzieję, że nie spowoduje to zbyt wielu niedogodności.
źródło
Odpowiedzi:
Lenguage , 131
Wszystkie emotikony, które reprezentuję, umieściłem w formacie, w
<emoticon> <byte> <length>
którym program jest<byte>
powtarzany<length>
razy.źródło
×
!Haskell , 3
Oto początek rozwiązania Haskell.
xD
Wypróbuj online!
Ten jest zwykłym ciągiem znaków, w którym są używane znaki
"xD
:]
Wypróbuj online!
To jest desugared ciąg przy użyciu minusów, aby zbudować listę znaków. Używa emotikon
:]
ponieważ oba:
i]
są już stosowane. W sumie używa to znaków':][
.8)
Wypróbuj online!
To tutaj zaczyna się robić trochę ciekawiej. Ponieważ potrzebujemy sposobu, aby utworzyć ciąg bez znaków
"
lub'
użyćshow
funkcji.show
bierze coś do pokazania i tworzy z niego sznurek. Tutaj pokazujemy krotkę(88,8,8,8)
. W szczególności w krotce kończy8)
się ciąg, który chcemy, więc upuszczamy pierwsze8
znaki z ciągu za pomocądrop 8
. Unikalne postacie w tym rozwiązaniu todrop 8(shw,)
Gdybyśmy mogli znaleźć inny sposób na zrobienie
Char
s, prawdopodobnie byłbym w stanie zrobić 4.mempty
, można użyć zamiast[]
w odpowiedzi 2, i istnieją sposoby na wydobycie,
odpowiedzi 3.źródło
chr
zData.Char
, przekształcić każdy znak w ciąg znaków,:[]
a następnie++
wszystkie razem.Węgiel drzewny, 10
To tylko te, które mogę zrobić bez użycia
cat
umiejętności podobnej do Charcoala , co pozwoliłoby mi dodaćXP
i|-0
.Wypróbuj je online! Dodałem
D⎚
polecenia, aby oddzielić fragmenty, które je rozmieszczają, chociaż nie jest to idealne, ponieważ kod powinien być naprawdę w jednym wierszu. Wyjaśnienie:←
Powoduje ciągiem znaków)%
mają być drukowane w lewo czyli odwrócone.Kod znaku dla
:
to 58. Kod znaku dla(
to 5 razy 8. (Oba są tutaj zanegowane na wypadek, gdyby później potrzebowałem separatora).To
:
jest dosłowne.¹
Wydrukowanie linii o długości 1 w poziomie, który znajduje się-
.↓
Wywołuje drugą linę być drukowane w pionie, co daje|
.⮌
Odwraca ciągiem znaków];
.Jest
<_
to dosłowny ciąg znaków i‖O
powoduje, że<
zostanie on odzwierciedlony na drugiej stronie_
.Jest
=
to literał strunowy, a↗÷χχ
linia rysuje linię o długości 10/10 tj. 1 po przekątnej, tj/
.Liczby
9-1
i0
są rzutowane na ciąg znaków, a więc drukowane jako cyfry, podczas0
gdy środek jest logicznie zanegowany, zamieniając go w1
inny sposób drukowania-
. (I nawet nie użyłem tego jako dosłowności!)To bierze literał łańcucha
D^B
i konwertuje go na tablicę, która normalnie drukowałaby w pionie, jednak kierunek wydruku jest zastępowany do pionu, co powoduje ... odwrócone wyjście!To wyszukuje znaki na pozycjach 3 i 23 dużymi literami (indeksowane 0).
W
↶⁴
obraca kierunek drukowania o 180 ° powodując ciągiem znakówpx
do zadrukowania odwrócona ponownie.źródło
↶⁴px
wtedyxp
, gdy działałyby równie dobrze.Galaretka , 6
+1, aby przyjść? dylnan zasugerował użycie
ṭ
do uwolnieniaȮ
, ale czy można go użyć?Sześć pełnych programów:
;] xp ; D : 0 XP 8-0
“;]
⁾xp
⁽8Ạb⁹Ọ
”:®ṭ
24,16ịØA
7‘.NṾṖ⁺
Zastosowano 31 różnych bajtów, tutaj potwierdzenie .
źródło
”:ṭ@¬
pozwoli ci korzystaćȮ
z innego programu”:®ṭ
jest krótszy.0”:0
działa zbyt uwalniając tack-
.¶
a znak nowej linii odwzorowuje na ten sam bajt).Ruby , 7
= \ Wypróbuj online! Dosłowny ciąg
> _> Wypróbuj online! Kolejny dosłowny ciąg znaków
: p Wypróbuj online! Wyświetla
:p
symbol wraz ze składnią (:
), ponieważ używap
metody%) Wypróbuj online! Jeszcze jeden dosłowny ciąg
XP Wypróbuj online! Tutaj notacja dokumentu (w zasadzie dosłowny ciąg wieloliniowy)
;] Wypróbuj online! Tablica 2 znaków (
':'
i']'
) połączona z'-'
D8 Wypróbuj online! Łańcuch źródłowy wyrażenia regularnego
__
Wyróżnienie Wypróbuj online! Wykonuje kod bash, zwraca
emoticon
z końcem\n
źródło
Python 2, 4
Ta odpowiedź jest dość prostym początkiem. Przez pierwsze dwa po prostu używamy dwóch różnych składni łańcucha Pythona. Po trzecie, używamy tej samej metody, co moja odpowiedź Haskella, w której krotka uzyskuje reprezentację ciągu i kroi ją na kawałki. Do ostatniej części używamy
chr
funkcji, aby znaki:
i)
dodać je razem.xD
= \
8)
:)
źródło
=/
.R 4
Wypróbuj online!
Pierwsza próba rozwiązania R. Konieczność użycia nawiasów dla dowolnego wywołania funkcji poważnie ogranicza możliwości. Pierwszy fragment to wywołanie, do
quote
którego po prostu zwraca swój argument - dzięki @BLT za pokazanie mi, jak to zrobić bez nawiasów, co pozwala mi używaćintToUtf8
z poniższej linii.Użyłem innej sztuczki, o której @Giuseppe wspominał w komentarzu do innego pytania, aby przeliterować
quote
bezo
it
.źródło
mtcars[4,5]
), Ale jak dotąd żadnych kości.intToUtf8
itp.),+
znakiem = quote; + XP, aby zwolnić nawiasy? (nie wiem, jak to zrobić, aby wyświetlać się bez formatowania Markdown - znak + jest otoczony przez backticks)Rozszczepienie , 3
| ;-)
Wypróbuj online!
XP
Wypróbuj online!
: o
Wypróbuj online!
Są tylko 3 sposoby na wyprowadzenie czegoś w Fission, więc oto jesteśmy
źródło
Perl 5, 6
:-)
:)
: -3
=]
B ^ D
XP
Wypróbuj online .
źródło
JavaScript, 5
Trzy trywialne, a następnie dwa ciekawe:
xD
XP
<_ <
: 3
Brak znaków dla literałów łańcuchowych dla czwartego, więc otrzymujemy łańcuchy łącząc się z tablicą. Dwukropek pochodzi z napisania funkcji używającej dwukropka, a następnie przekształcenia go w ciąg znaków.
8)
Ten działa bardzo podobnie do czwartego, ale używa nieco innych metod, aby zrobić wszystko.
Podziękowania dla @ steve-bennett za sugerowanie użycia
String
konstruktora oraz.slice
jako alternatywę dla łączenia z tablicami i indeksowania. Udało się wycisnąć z niego +1 punkt.źródło
String.fromCharCode(58)+String.fromCharCode(91)
prawdopodobnie byłaby prostszą wersją ostatniej.String(D=>1).slice(0,2)
/>_>/.source
new RegExp().toString().substring(3,5)
[((new Date)+[]).charAt(18), ~2].join(name)
0+String(-3)