Wprowadzenie
Wszyscy znamy fajne S (znane również jako Superman S, Stüssy S, Super S, Skater S, Pointy S, Graffiti S itp.): Miliardy uczniów na całym świecie narysowało to S i natychmiast poczuli się dumni z siebie. W przypadku, gdy zapomniałeś lub miałeś zupełnie niechlujne dzieciństwo , oto zdjęcie wspomnianego fajnego S:
Biorąc pod uwagę współczynnik skali n
jako dane wejściowe (gdzie ), wypisz Cool S w sztuce ASCII.
Jak to narysować
Ze strony Wikipedii w Cool S:
Wydajność
Cool S when n
= 1 wynosi:
^
/ \
/ \
/ \
| | |
| | |
\ \ /
\ \/
/\ \
/ \ \
| | |
| | |
\ /
\ /
\ /
v
Dla różnych wartości n
po prostu zwiększasz n
czasy wyjściowe . Na przykład n
= 2:
^
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
v
Zauważ, że pionowe sekcje są dwa razy dłuższe, a odstępy między pionowymi liniami są dwa razy szersze.
A kiedy n
= 3:
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
\ /
\ /
v
Uwaga: Chociaż nie jest to wymagane, Twój kod może również obsługiwaćn
= 0:
^
/ \
\\/
/\\
\ /
v
Zwycięski
Najkrótszy program w bajtach wygrywa.
Λ
Odpowiedzi:
Węgiel ,
58 53 47 4341 bajtówWypróbuj online!
Chciałem tylko wypróbować inne podejście, które rysuje na zewnątrz poprzez refleksje (dzięki Neilowi za rozwinięcie pomysłu), a następnie rysuje wnętrze. Ponieważ węgiel drzewny ma
:Left
domyślny kierunek rysowania linii, korzystam z niego w jak największym stopniu, aby zaoszczędzić niektóre bajty, rysując literę S poziomo, jak poniżej:A potem muszę obrócić płótno o 90 stopni w kierunku przeciwnym do ruchu wskazówek zegara.
źródło
Rotate
? To daje mi pomysł ...Python 3 ,
255249248209 bajtów-6 bajtów dzięki Kevin Cruijssen
-1 bajt dzięki Kevin Cruijssen
-39 bajtów dzięki Rod i Jo King
Wypróbuj online!
Teraz obsługuje n = 0.
źródło
o+~d
mogą byćm-d
irange(o)
mogą byćrange(m+1)
, a następnie można usunąć,o=m+1\n
aby zapisać 6 bajtów. Dobra odpowiedź, +1 ode mnie.p(s)\np(s[::-1])
nap(s+q+s[::-1])
: 248 bajtówprint
, a więcej 4, usuwając[]
zjoin([...])
, sumując 238 bajtówq.join
zmienną, aby zapisać bajtq.join
i kilka innych rzeczyWęgiel drzewny ,
474241 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Objaśnienie: Rysuje następujące linie w kolejności:
Gdzie
5
jest bieżący znak ciąguv^
. Na końcu pierwszej pętli kursor jest następnie ustawiany w punkcie9
. Całe płótno jest następnie obracane, aby można było narysować drugą połowę Cool S. (Płótno faktycznie obraca się dwukrotnie, ale jest to tylko szczegół implementacji.)Węgiel drzewny nie obsługuje,
RotateCopy(:Up, 4)
ale gdyby tak się stało, działałoby to dla 33 bajtów:źródło
Płótno ,
363229 bajtówWypróbuj tutaj!
Dużo manipulacji na stosie. (nieaktualne) wyjaśnienie:
źródło
Python 2 ,
227208207202196181 bajtówWypróbuj online!
Dziękuje Jo King za 1 bajt; a następnie kolejne 5 bajtów (via
n => 2*n
).Działa
n=0
również dla.źródło
C (gcc) ,
379353344334 bajtyUżyłem kilku
#define
s do eliminacji podwyrażeń i kilku globałów do komunikacji między funkcjami wewnętrznymi. Główna pętla idzie {0,1,2,3,3,2,1,0} do budowy S.Podziękowania dla Jonathana Frecha za sugestie.
Wypróbuj online!
źródło
w -r-1
można ewentualnie grać w golfaw~r
.C (gcc) ,
260254 bajtów-6 bajtów dzięki pułapkowi cat .
Wypróbuj online!
Zniszczony
Możemy podzielić kształt na części:
Każda część może być opisana liczbą wierszy, trzema znakami i trzema relacjami do pewnych wartości, które decydują o szerokości pola w każdej linii.
Pierwszą iteracją stało się:
Wywołania
g()
makra wyglądają bardzo podobnie do tabeli, którą można zbudować i zapętlić. Szerokości pól są czasami powiązane z licznikiem indeksu, a czasem nie. Możemy uogólnić szerokość pola, która ma byćF * i + A
, gdzie F jest czynnikiem, który należy pomnożyći
, a A jest wartością dodaną do szerokości. Tak więc na przykład ostatnia szerokość czwartego wywołania powyżej-2 * i + t
.W ten sposób otrzymujemy:
Ostatecznie nie był on znacznie krótszy niż zaostrzona wersja
g()
dzwoniącego, ale krótszy jest krótszy.źródło
Java, 435 bajtów
Sama funkcja zajmuje 435 bajtów. Z pewnością jest miejsce na ulepszenia, „wysoki poziom” poprzez analizę zasad dotyczących miejsca, w którym należy umieścić postać (na końcu S jest symetryczny), a „niski poziom”, poprzez klasyczne gry w golfa (być może wyciągnięcie innej zmiennej lub łączenie dwóch
for
pętli). Ale to pierwszy strzał z tym raczej nieżyczliwym językiem:źródło
t=...
nieco mniej w miejscu, w którym oszczędzałoby to bajty. Jeśli masz jakieś pytania dotyczące zmian, które wprowadziłem, daj mi znać. :)PHP ,
378374378377376335331328 bajtów-3 bajty, dzięki manatwork
-4 bajty, użyty str_pad zamiast str_repeat
-41 bajtów, dzięki sugestiom manatworks
-1 bajt, połączył dwa przyrosty w + = 2
-1 bajt, usunięto zbędne \
-4 bajty przez powtórzenie echa.Zapomniałem, że muszę przekazać ciąg do funkcji, więc jest to więcej bajtówDziała również dla n = 0.
Wypróbuj online!
źródło
'v'
w finaleecho
.$i>0
i$m>0
może być napisany po prostu jak$i
i$m
..
konkatenację po,
. Wypróbuj online!Python 3 ,
321307 bajtówDzięki @EsolangingFruit za zapisanie 14 bajtów
Wypróbuj online!
Python 2 , 303 bajty
Wypróbuj online!
źródło
'\\','/'
w drugim wierszu na,*'\/'
aby zapisać trzy bajty.print
input()
automatycznieeval()
jest ciąg znaków, więc możesz pominąćint()
połączenie.for l in L:print(*l,sep="")
(nie sądzę, że istnieje odpowiednik w Python 2).