Tallying ist ein einfaches Zählsystem, das in Basis 5 funktioniert. Es gibt verschiedene Zählsysteme auf der ganzen Welt, aber dasjenige, das in den meisten englischsprachigen Ländern verwendet wird, ist vielleicht das einfachste - Zählen von Einheiten durch Markieren vertikaler Linien, z Mit jeder fünften Markierung wird eine horizontale Linie durch die vorherige Vierergruppe gezogen. Dies gruppiert die Zählmarken in Gruppen von 5 (und erleichtert das schnelle Zählen).
Sie werden ein Programm schreiben, das Strichzahlen bis zu einem bestimmten Wert anzeigt. Aber es ist langweilig, nur in Basis 5 zu zählen! Daher sollte Ihr Programm auch in der Lage sein, Zahlen in verschiedenen Basen anzuzeigen.
Eingang
Die Eingabe besteht entweder aus einem oder zwei nicht negativen Ganzzahlwerten, die durch ein Komma (z . B. 9
oder 8,4
) getrennt sind. Die erste Zahl ist der Wert, der von der Zählung angezeigt werden soll. Der zweite Wert ist die Basis der Abrechnung. Wenn der zweite Wert nicht angegeben wird, verwenden Sie Basis 5 .
Ausgabe
Die Ausgabe ist der eingegebene Wert, der als ASCII-Art-Tally-Markierungen dargestellt wird. Hier sind einige Beispiele, mit denen Sie Ihr Programm testen können - Ihre Ausgabe sollte genau mit ihnen übereinstimmen!
Eingabe: 12
oder12,5
| | | | | | | | | |
-+-+-+-+- -+-+-+-+- | |
| | | | | | | | | |
Eingang: 7,3
| | | | |
-+-+- -+-+- |
| | | | |
Eingang: 4,2
| |
-+- -+-
| |
Eingabe: 6,1
oder 6,10
(beachten Sie die führenden Leerzeichen)
| | | | | |
| | | | | |
| | | | | |
Beachten Sie auch, dass Basis 1 inkonsistent sein soll - nur vertikale Linien sollten verwendet werden.
Wenn einer der eingegebenen Werte 0 ist, sollte überhaupt keine Ausgabe erfolgen (und Ihr Programm sollte ordnungsgemäß beendet werden).
Regeln
- Das ist Code-Golf , also gewinnt die kürzeste korrekte Implementierung (in Bytes).
- Die Ein- / Ausgabe kann auf jedem geeigneten Medium erfolgen (z. B. stdin / stdout, file ...).
- Die Eingabe kann in Form mehrerer Befehlszeilenargumente oder durch Leerzeichen usw. getrennt erfolgen, wenn dies für Ihre Zielsprache besser geeignet ist.
- Nachgestellte Zeilenumbrüche sind in der Ausgabe zulässig. Nachgestellte Leerzeichen gibt es nicht. Diese Regel gilt nur, wenn eine Ausgabe vorliegt (dh nicht, wenn der eingegebene Wert 0 ist).
- Ihr Code muss standardmäßig auf Basis 5 eingestellt sein, wenn keine Basis eingegeben wird.
6,1
eher so aussehen-+- -+- -+- -+- -+- -+-
?-+-
würde zwei darstellen, weil es eine vertikale Linie und eine horizontale Kerbe durch sie gibt. Basis 1 würde nur vertikale Linien haben. @AndoDaan gebessert.--- --- --- --- --- ---
dann. Um die Übereinstimmung mit den anderen Basen zub-1
gewährleisten, sollten Sie einen horizontalen Strich durch die vertikalen Linien machen. Wenn es inkonsistent sein soll, sollten Sie dies explizit angeben.Antworten:
CJam 103 85 72 Zeichen
Versuchen Sie es unter http://cjam.aditsu.net/ .
Original
Definiert eine Reihe von Reihen mit Leerzeichen, Linien und einem l für Leerzeichen, die Leerzeichen bleiben sollen. Nutzt dann die Funktion er (Transliteration), um die zweite Zeile zu erstellen. Der ineffizienteste Teil befasst sich mit den Sonderfällen 1 und 0. Wird bearbeitet, wenn ich es verbessere. Tipp Ich habe zu lange gebraucht, um zu realisieren: Da die zweite Eingabe 1 der Unendlichkeit oder die erste Eingabe +1 entspricht, spart die Neudefinition, wenn sie 1 entspricht, eine Menge Arbeit.
Die meisten wurden bisher durch Kommas getrennt verbessert
Die meisten wurden bisher durch durch Leerzeichen begrenzte Eingaben verbessert
Da ist CJam natürlich wirklich für raumbegrenzte Eingaben ausgelegt. Es ist ein großer Vorteil, den Eingang auf 20 3 anstatt auf 20,3 zu setzen.
quelle
Python 2 -
111 108 119 144 140 136 135134 - Probieren Sie es ausOk, lass es uns versuchen:
Edit: Ich habe übersehen, dass es keine Ausgabe geben soll, wenn
n==0
oderb==0
. Das kostet mich 11 Zeichen. :(Edit: Ok, nachdem ich das zweite in den Kommentaren erwähnte Problem behoben habe, ist meine Lösung im Grunde der von BeetDemGuise angenähert.
quelle
b
sollte in diesem Fall 5 sein). Ich werde es in der Frage klarer machen. Edit: oh, egal, du hast es gerade behoben, als ich diesen Kommentar abgegeben habe!n/b
stattdessen nicht noch ein Zeichen speichern, indem Sie verwendenn//b
?Bash,
239 228 199 189188Hier ist mein Versuch, es könnte viel Golf gespielt werden.
Hinweis: Die zweite Zeile subtrahiert nicht 5 von 2, sondern setzt einen Standardwert, wenn
$2
leer!quelle
{1..$n}
statt`seq $n`
?h=8;echo {1..$h}
Ausgänge{1..8}
Python -
171143Das Programm ist ziemlich einfach:
t,b
. Wenn dies fehlschlägt, weisen Sie einfach die richtigen Werte zu.1
, ändern Sie den Wert in einen Wert, der alle vertikalen Linien problemlos verarbeiten kann (t+1
).t
undb
nicht Null sind.EDIT 1: Verwenden Sie die
input
Funktion anstattraw_input
nach einigem Herumspielen.EDIT 2: Danke an Falko für den Hinweis auf einen kleinen Fehler bei meiner Nicht-Null-Prüfung. Jetzt ist unser Code im Grunde genommen identisch, abzüglich einiger Variablennamen und einer kleinen Logik.
EDIT 3: Dank dem Vergleich von Sequenzen und verschiedenen Typen in Python können wir einen Vergleich
i
mit a anstellenlist
, um eine kürzere Version unserestry...except
Blocks zu erhalten.Hier ist die ungolfed Version:
quelle
t&b
istFalse
für 10,5. Ansonsten laufen unsere Lösungen zusammen! ;)i
es sich um Skalar oder eine Liste handelt. Dann könnten wir dastry ... except
Monster fallen lassen.list
ist immer größer als ein int. Außerdem werdenlist
s in lexikographischer Reihenfolge verglichen. Wenn wir also vergleichen,[0]<i
wird immer zurückgegeben,False
obi
eine Zahl undTrue
obi
eine Liste ist (mit einem ersten Element ungleich Null).Java, 343
Weniger golfen:
quelle
i
ein ,long
so dass Sie es nicht separat deklarieren müssen. Ein paar mehr, indem Siei++%b>0
in Ihren Schleifen arbeiten, anstatt sie separat zu erhöhen (undi++<n%b
in der dritten Schleife). Ein anderer mitb=b<2?(int)2e9:b
.Perl -
167165156ungolfed
quelle
C - 193
Es tut mir Leid. Sich mit dem Spezialfall für 1 zu befassen, war ein schlechter Hack, also könnte man mit einer besseren Herangehensweise mehr Golf spielen. Außerdem enthält dieser Code eine neue Zeile am Anfang der Ausgabe. Wenn dies nicht zulässig ist, lassen Sie es mich bitte wissen.
Natürlich hilft das sehr hässlich aussehende definiert immer :)
Die Zeichenanzahl umfasst nur die erforderlichen Leerzeichen und neuen Zeilen.
quelle
printf
mitputs
und Ersetzenreturn
mit einem ternären Operator.puts
ist, dass jedes Mal eine neue Zeile hinzugefügt wird :(. Und für den ternären Operator ist es nicht möglich,return
s oderfor
s in diese einzufügen !. Ihr Kommentar hat mich auf die Idee gebracht, sehr viele weitere Zeichen zu speichern leicht durch Entfernen derreturn
obwohl. Danke!C # 271bytes
Nicht die kürzeste, ich konnte den Eingabewert nicht messen, da 0 als Eingabe akzeptiert werden musste.
Formatierter Code:
quelle
Lua -
219203 BytesIch habe mich für die Erstellung von Kopien von Kopien von "|" entschieden und dann r Kopien von "|" hinzugefügt. Am Ende. Ich habe das Gefühl, ich hätte die "|" - Zahlen nacheinander auf die Saite bringen sollen.
ungolfed:
Stichprobe:
quelle
JavaScript (193)
Dies kann zu komplex sein.
Kommentierte Version
quelle
Python -
127123122Einfach mit einer etwas kürzeren Python-Version reinschleichen.
edit: Behoben: 0 druckt nichts und rejigger, endete gleich lang
quelle
C (207 Zeichen)
Die Newline direkt davor
exit
dient nur der Lesbarkeit.scanf
Verwendung schamlos von Allbeert gestohlen. Beachten Sie, dass diese Lösung nicht mit gcc kompiliert werden kann, da versucht wird, einen nicht vorhandenen Prototyp für zu erzwingenexit
. Kompilieren Sie mit einem funktionierenden C-Compiler wietcc
. Diese Funktion funktioniert möglicherweise auch auf 64-Bit-Plattformen. Mit Vorsicht anwenden.Hier ist die ursprüngliche Implementierung ohne Golf, auf der dies basiert:
quelle
Python 2 ,
134126123114 BytesProbieren Sie es online!
Alte Frage, die ich kenne, aber die Spaß macht, es trotzdem zu versuchen. Chance, ein paar Tricks auszuprobieren, die ich seit meinem Beitritt gelernt habe.
quelle