Wyzwanie
Biorąc pod uwagę fazę księżyca, narysuj ją przy użyciu sztuki ASCII.
Twój program musi obsługiwać nowiu, woskowanie półksiężyca, pierwszy kwartał, woskowanie gibbous, pełnia księżyca, zanikający gibbous, ostatni kwartał i zanikający półksiężyc. Twój wkład będzie liczbą całkowitą.
0 -> new moon
1 -> waxing crescent
2 -> first quarter
3 -> waxing gibbous
4 -> full moon
5 -> waning gibbous
6 -> last quarter
7 -> waning crescent
Grafika ASCII jest umieszczana na siatce 16 x 8 (ponieważ proporcje wymiarów znaków). Możesz zastąpić .
dowolną postacią i #
dowolną inną spacją.
Dane wyjściowe dla nowiu powinny wynosić:
................
................
................
................
................
................
................
................
Do woskowania półksiężyca:
..........######
............####
.............###
.............###
.............###
.............###
............####
..........######
Za pierwszy kwartał:
........########
........########
........########
........########
........########
........########
........########
........########
Do woskowania garbnika:
......##########
....############
...#############
...#############
...#############
...#############
....############
......##########
I dla pełni księżyca:
################
################
################
################
################
################
################
################
Ubywający półksiężyc jest tylko woskującym półksiężycem z każdą odwróconą linią, podobnie jak ubywający garb i woskujący garb oraz pierwszy i ostatni kwadrans.
Zasady
- Obowiązują standardowe luki
- Możesz wybrać woskowanie / zanikanie w przeciwnym kierunku, jeśli chcesz, ale nie powinno to mieć znaczenia (grafika pokazana w tym pytaniu dotyczy półkuli północnej)
- Twój wynik musi być dokładnie taki, jak określono. Twoje znaki nowej linii mogą być dowolnym rozsądnym separatorem linii, a jeśli chcesz, możesz mieć końcowy znak nowej linii.
MoonPhase["Icon"]
ma 17 bajtów w Mathematica…Odpowiedzi:
Galaretka ,
4332 bajty-7 bajtów przechodzących z maski bitowej do maski porównawczej
-2 bajty z pewnymi ulepszeniami programowania ukrytego
-1 bajt przenoszony na półkulę południową
-1 bajt - użyj całkowicie nowego
ɓ
separatora łańcuchowego ... jego pierwsze użycie!Używa znaków
0
dla.
i1
dla#
.Wszystkie przypadki w pakiecie testowym w Wypróbuj online!
W jaki sposób?
Tworzy maskę przechwytującą pierwsze cztery fazy i zamiast odwracania linii uzupełnia uzyskane wyniki wyniku fazy modulo-4, gdy faza div-4 jest niezerowa.
I pierwotnie zbudowany maskę bitową, ale wartości były maski
0
,8
,12
, i14
-0000
,1000
,1100
oraz1110
- mają onephase
te wiodące - więc porównanie maska może być stosowany zamiast.źródło
JavaScript (ES6),
121...10392 bajtyPróbny
Pokaż fragment kodu
źródło
Haskell ,
9890 bajtówPętle przechodzą przez wiersze i kolumny za pomocą monady listy (
do
blok dla wierszy i rozumienie listy dla kolumn) i określa, który znak dla każdej komórki za pomocą wyrażenia input (i
), wartości przesunięcia dla row (a
) i indeksu kolumny (x
).Zaoszczędzono 8 bajtów, upraszczając podwyrażenie dla prawdziwego przesunięcia.
źródło
Python 2 ,
144142127 bajtówWypróbuj online!
Zdecydowanie można dalej grać w golfa, napiwki są mile widziane :)
Grał w golfa o 1 bajt dzięki podziemnej kolejce!
Grałem w golfa wiele bajtów dzięki Ovi i Mego, ponieważ jestem głupcem, który zapomina nie używać 4 spacji dla codegolfa :)
źródło
if i>2:y=16-y
może zostać zmieniony nay=[16-y,y][i>2]
, co jest dłuższe, ale przy swobodnym użyciu średników pozwoliłby, aby twoja pętla była jednowierszowa, aby zaoszczędzić kilka bajtów.PHP, 105 bajtów
Wypróbuj online!
źródło
$a/4
? Indeksowanie wykona cięcie. :)Mathematica, 125 bajtów
Zwraca siatkę za pomocą
1
i0
zamiast.
i#
odpowiednio.Działa przy użyciu dwóch masek, jednej okrągłej jednej i jednej półcieniowanej, i logicznie łącząc je, aby uzyskać odpowiednie kształty.
Dwie maski wykonane są
1-{3.4,5}~DiskMatrix~{8,16}
dla okrągłej iTable[Boole[i>8],8,{i,16}]
dla połowy. Logika jest następująca:Logika jest symulowana za pomocą
1
si0
si za pomocą mnożenia dlaAND
ix -> 1-x
dlaNOT
.Rozwiązanie premiowe (inne niż ASCII) dla 28 bajtów:
IconData["MoonPhase",#/4-1]&
źródło