Schreiben Sie ein Programm oder eine Funktion, die bei einer positiven Ganzzahl als Eingabe die Darstellung dieser Ganzzahl in Mayazahlen ausgibt .
Maya-Ziffern
Maya-Ziffern sind ein Vigesimalsystem (Basis 20) mit nur 3 Symbolen:
< >
für Null (Das richtige Symbol ist eine Art Shell, die mit ASCII nicht einfach dargestellt werden kann)..
für einen----
für fünf
Zahlen werden vertikal in Potenzen von 20 geschrieben, und Zahlen zwischen 0 und 19 werden als Stapel von fünf und eins geschrieben . Weitere Informationen finden Sie im Wikipedia-Artikel .
Als Beispiel hier sind die Zahlen zwischen 0 und 25, getrennt durch Kommas:
. .. ... ....
. .. ... .... ---- ---- ---- ---- ---- . . . . . .
. .. ... .... ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
< >, . , .. ,... ,....,----,----,----,----,----,----,----,----,----,----,----,----,----,----,----,< >, . , .. ,... ,....,----
Eingänge
- Eingaben sind immer positive ganze Zahlen zwischen 0 und 2147483647 (2 ^ 31 - 1).
- Sie können die Eingabe von STDIN als Befehlszeilenargument, Funktionsparameter oder ähnliches verwenden.
Ausgänge
- Jede Zeile ist maximal 4 Zeichen lang.
< >
und----
sollte immer wie hier angegeben gedruckt werden (jeweils 4 Zeichen lang). - Ein (
.
) muss in der Linie zentriert sein. Wenn es 1 oder 3.
gibt, spielt es keine Rolle, ob es sich um eine Spalte links oder eine Spalte rechts oder eine Spalte in der Mitte handelt, da eine perfekte horizontale Ausrichtung nicht möglich ist. Es muss genau eine Leerzeile zwischen verschiedenen Potenzen von 20 stehen, unabhängig von der Höhe der Stapel in der Potenz von 20s. Die korrekte Ausgabe für 25 und 30 lautet beispielsweise:
. . ---- ---- ----
Keine führenden oder nachfolgenden Zeilen erlaubt.
Die Ausgaben müssen genau so gedruckt werden, wie sie in den Beispielen angegeben sind.
Testfälle
Jede einzelne Zahl zwischen 0 und 25 ist oben als Beispiel angegeben.
Eingang:
42
Ausgabe:
..
..
- Eingang:
8000
Ausgabe:
.
< >
< >
< >
- Eingang:
8080
Ausgabe:
.
< >
....
< >
- Eingang:
123456789
Ausgabe:
.
...
----
----
----
.
----
----
..
----
----
.
....
----
----
----
....
----
- Eingang:
31415
Ausgabe:
...
...
----
----
----
----
----
----
----
----
- Eingang:
2147483647
Ausgabe:
.
...
----
----
.
----
----
.
----
----
----
....
----
..
..
----
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
quelle
Antworten:
Pyth, 41 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
Perl,
125117 BytesVielen Dank an Dom Hastings, der mir geholfen hat, 8 Bytes zu sparen.
quelle
redo,if(int($i/=20))
du verwenden kannst~~($i/=20)&&redo
.~~
konvertiert nach int - Sie können auch0|
am Anfang (oder|0
am Ende) verwenden. Auch das Ersetzensubstr(".... ... .. . ",20-$i%5*5,5)
durch(' .', ' ..','...','.'x4)[$i%5-1].$/
scheint in Ordnung zu sein, aber ich habe nicht alle Testfälle getestet ... Wenn diese funktionieren, sind Sie bei 114 ... Wenn mir noch etwas zum Teilen einfällt, melde ich mich!$-
die immer auf eine ganze Zahl abschneidet ... könnte ein paar mehr sparen!JavaScript ES6, 143 Bytes
Jede Menge Bytes hinzugefügt, da
console.log
weitere 23 Bytes gespeichert werden müssten .quelle
Mathematica
185 182 171153Mit 18 Bytes, die dank des Vorschlags von Arcinde zur Verwendung anonymer Funktionen eingespart wurden,
Beispiel
Überprüfung
Die Dezimalzahl 31415, ausgedrückt in Basis 20. Mathematica verwendet hierfür Kleinbuchstaben.
Die Dezimalstellen entsprechen der obigen Zahl zur Basis 20.
Ein anderes Beispiel
quelle
c=Column;c[If[#>0,{q,r}=#~QuotientRemainder~5;c@{{""," ."," .."," ...","...."}[[r+1]],c@{{""},{d="----"},{d,d},{d,d,d}}[[q+1]]},"< >"]&/@#~IntegerDigits~20]&
mit anonymen Funktionen.JavaScript (ES6), 157 Byte
Die Zeilenumbrüche sind signifikant und werden jeweils als 1 Byte gezählt. Da das Drucken auf STDOUT erforderlich ist,
console.log
kosten mich dort ein paar Bytes.Demo
Zu Demonstrationszwecken schreibe ich eine ES5-Version, damit sie in allen Browsern funktioniert:
quelle
.join
Klammer?Python 2.x, 142 Bytes:
Beispiel:
Edit: abschließende Zeile ...
quelle
[n%20==0]
zu[n%20<1]
. Zweitens ändern Sie[[""," "*(2-n%5/2)+"."*(n%5)+"\n"][n%5!=0]
zuh=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1]
mita=n%5
, wodurch allen%5
s nach außen verschoben werden, und ändern Sie die Bedingung, zu*(a>0)
der eine leere Zeichenfolgea==0
für den gleichen Effekt zurückgegeben wird.a
,h
undn
auf einer Linie, etwa so:a=n%5;h=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1];n/=20
. All dies sollte Sie mit 131 Bytes verlassen.CJam,
8276 BytesMein erstes CJam-Programm, im Grunde nur eine Transliteration meiner Perl-Antwort auf CJam.
Versuchen Sie es online
Mehrzeilig mit Kommentaren:
quelle
PHP, 220 Bytes
Gleicher Ansatz wie meine JavaScript-Antwort. PHP hat für alles eingebaute Funktionen.
Nimmt 1 Eingabe von der Befehlszeile (dh STDIN) auf, wie mit
$argv[1]
:quelle
C - 149
Verwendet die Rekursion, um die wichtigsten Zahlen zuerst zu drucken. Dann druckt entweder Null oder druckt alle Punkte mit einem cleveren
printf
und allen fünf Punkten in einer Schleife. Ich bin mir nicht sicher, ob ich es vermeiden kann, if-else hier zu verwenden.Der Nachteil von clever printf ist, dass 1 und 3 nicht miteinander ausgerichtet sind:
Ergebnis für 23 ist:
119falsche lösung - nachgestellte newlinequelle
PHP,
202192 BytesEs erhält die Eingabe vom ersten Befehlszeilenargument.
Der vollständige Quellcode mit Kommentaren und Tests ist auf github verfügbar .
quelle
\n
besteht aus zwei Zeichen - ein Zeilenumbruch in der Mitte eines Strings besteht jedoch nur aus einem.Python 2, 114 Bytes
Diese Antwort basiert auf der Pyth-Antwort von Jakube und der Python-2-Antwort von Locoluis.
quelle
Jelly ,
504947 BytesProbieren Sie es online!
...
ist jetzt dank user202729s Punkt linksbündig ausgerichtet.Wenn Sie sich zum Denken
< >
verleiten, ist das ein Palindrom ...quelle
...
....
und..
dort muss ein Raum sein, also setzte ich einen für...
auch. Gibt es einen kürzeren Weg?...
nicht rechtsbündig sein sollte. Einfach umsteigen<4
auf<3
?