Herausforderung
Zeichnen Sie die Mondphase mit ASCII-Kunst.
Ihr Programm muss sich mit Neumond, zunehmendem Halbmond, erstem Quartal, zunehmendem Gibbous, Vollmond, abnehmendem Gibbous, letztem Quartal und abnehmendem Halbmond befassen. Ihre Eingabe wird eine ganze Zahl sein.
0 -> new moon
1 -> waxing crescent
2 -> first quarter
3 -> waxing gibbous
4 -> full moon
5 -> waning gibbous
6 -> last quarter
7 -> waning crescent
Die ASCII-Grafik wird alle in einem 16 x 8-Raster platziert (da das Verhältnis der Zeichenmaße stimmt). Sie können durch ein .
beliebiges Zeichen und #
durch ein beliebiges anderes Zeichen ohne Leerzeichen ersetzen .
Die Ausgabe für Neumond sollte sein:
................
................
................
................
................
................
................
................
Zum Wachsen von Halbmond:
..........######
............####
.............###
.............###
.............###
.............###
............####
..........######
Für das erste Quartal:
........########
........########
........########
........########
........########
........########
........########
........########
Zum Wachsen von Gummibändern:
......##########
....############
...#############
...#############
...#############
...#############
....############
......##########
Und für Vollmond:
################
################
################
################
################
################
################
################
Der abnehmende Halbmond ist nur der abnehmende Halbmond, wobei jede Linie umgekehrt ist, ebenso wie der abnehmende und der abnehmende Halbmond sowie das erste und das letzte Viertel.
Regeln
- Es gelten Standardlücken
- Sie können das Wachsen / Abnehmen in die entgegengesetzte Richtung ausgeben, wenn Sie möchten, es sollte jedoch keinen Unterschied machen (die in dieser Frage gezeigten Grafiken gelten für die nördliche Hemisphäre).
- Ihre Ausgabe muss genau wie angegeben sein. Ihre Zeilenumbrüche können ein beliebiges sinnvolles Zeilentrennzeichen sein, und wenn Sie möchten, haben Sie möglicherweise einen nachgestellten Zeilenumbruch.
MoonPhase["Icon"]
ist 17 Bytes in Mathematica ...Antworten:
Jelly ,
4332 Bytes-7 Bytes beim Übergang von der Bitmaske zur Vergleichsmaske
-2 Bytes mit einigen stillschweigenden Programmierverbesserungen
-1 Bytes beim Übergang zur südlichen Hemisphäre
-1 Bytes - verwenden Sie den brandneuen
ɓ
Kettentrenner ... es ist der erste Einsatz!Verwendet die Zeichen
0
für.
und1
für#
.Alle Fälle in einer Testsuite bei Try it online!
Wie?
Erstellt eine Maske, die die ersten vier Phasen erfasst, und statt die Linien umzukehren, werden die resultierenden Werte des Modulo-4-Phasenergebnisses ergänzt, wenn die Phase div-4 ungleich Null ist.
Ich ursprünglich eine Bitmaske gebaut, aber die Maskenwerte waren
0
,8
,12
, und14
-0000
,1000
,1100
und1110
- diese habenphase
führende Einsen - so eine Vergleichsmaske stattdessen verwendet werden könnte.quelle
JavaScript (ES6),
121...10392 BytesDemo
Code-Snippet anzeigen
quelle
Haskell ,
98-90BytesEs durchläuft die Zeilen und Spalten mit der Listenmonade (ein
do
Block für Zeilen und ein Listenverständnis für Spalten) und bestimmt anhand eines Ausdrucks für input (i
), eines Versatzwerts für row (a
) und eines Spaltenindex , welches Zeichen für jede Zelle verwendet wird (x
).8 Byte durch Vereinfachung des Unterausdrucks für den wahren Versatz eingespart.
quelle
Python 2 ,
144142127 BytesProbieren Sie es online!
Kann definitiv weiter golfen werden, Tipps sind erwünscht :)
Ab 1 Byte dank U-Bahn-Monorail!
Ich habe dank Ovi und Mego viele Bytes verloren, weil ich ein Idiot bin, der vergisst, keine 4 Leerzeichen für Codegolf zu verwenden :)
quelle
if i>2:y=16-y
könnte in geändert werdeny=[16-y,y][i>2]
, was länger ist, aber mit der großzügigen Verwendung von Semikolons könnte Ihre Schleife ein Einzeiler sein, um mehrere Bytes zu sparen.PHP, 105 Bytes
Probieren Sie es online!
quelle
$a/4
? Die Indexierung erledigt das Schneiden. :)Mathematica, 125 Bytes
Gibt ein Raster mit
1
und0
anstelle von.
und#
zurück.Es werden zwei Masken verwendet, eine kreisförmige und eine halbschattierte, und diese werden logisch kombiniert, um die entsprechenden Formen zu erhalten.
Die beiden Masken sind mit
1-{3.4,5}~DiskMatrix~{8,16}
für die runde undTable[Boole[i>8],8,{i,16}]
für die halbe gemacht. Die Logik ist wie folgt:Die Logik wird mit
1
s und0
s durch Multiplikation fürAND
undx -> 1-x
für simuliertNOT
.Eine Bonuslösung (Nicht-ASCII) für 28 Bytes:
IconData["MoonPhase",#/4-1]&
quelle