Poker hat eine Etikette, wie Sie Ihre Chips arrangieren, die oft bei Turnieren durchgesetzt wird - Ihre Chips können Ihren Gegnern nicht "verborgen" werden, indem Sie hinter anderen Chips stehen, meistens, um einige Chips mit großem Nennwert nicht zu verbergen.
Die Herausforderung
Wir werden Poker in ASCII spielen, also müssen wir eine Funktion oder ein Programm schreiben, die / das unsere ASCII - Chipstapelanordnung aufgrund ihres Gesamtwerts zeichnet n
.
Eingabe
- Eine positive ganze Zahl n
(bis zu 2**32-1
sollte behandelt werden)
Ausgabe
- Eine ASCII-Darstellung der Stapelanordnung wie unten definiert.
Dies kann Leerzeichen rechts von jeder Zeile enthalten, sodass keine Zeile länger als ein Zeichen ist als die Länge, die druckbare Zeichen in der längsten (untersten) Zeile verwenden.
Dies kann eine einzelne nachgestellte neue Zeile enthalten. und
Die Zeichen, die Chips darstellen, können nach Belieben in Kleinbuchstaben geschrieben werden.
Die Stapelanordnung wird:
- Enthalten Sie die geringstmöglichen Chips, je nach Stückelung (siehe unten).
- Wird gleichwertige Chips in "Stapeln" (Spalten) haben;
- Sie müssen so angeordnet sein, dass die kürzeren Stapel rechts von den größeren Stapeln stehen. und
- Sie müssen so angeordnet sein, dass Stapel mit Chips mit höherem Nennwert rechts von gleich großen Stapeln mit niedrigerem Nennwert stehen (was bedeutet, dass sie für unsere Gegner auf der rechten Seite sichtbar sind).
Die Chips selbst sollen als einzelne Zeichen dargestellt werden, die ihre Farbe kennzeichnen:
White : 1 = W
Red : 5 = R
Green : 25 = G
Black : 100 = B
Yellow : 500 = Y
Pink : 1K = P
Orange : 5K = O
Cyan : 25K = C
Magenta : 100K = M
Aqua-blue : 500K = A
Lavender : 1M = L
Indigo : 5M = I
Turquoise : 25M = T
Violet : 100M = V
Silver : 500M = S
Beispiel
Für n = 276,352
die kleinste Anzahl von Chips wäre:
2 * 100K + 3 * 25K + 1 * 1K + 3 * 100 + 2 * 25 + 2 * 1
MM CCC P BBB GG WW
Die einzelnen P
muss weitergehen ganz rechts,
dann die drei Stapel von Größe als 2
nächstes gehen muss,
- aber das MM
muss nach rechts durch die gefolgt gehen am weitesten GG
und dann die WW
da 100K > 25 > 1
dann die beiden Stapel von Größe 3
gehen auf der linken Seite
- aber das CCC
muss gehe nach rechts von dem BBB
da25K > 100
Jetzt müssen wir diese Chips in tatsächliche Stapel legen, um unsere Ausgabe zu machen:
BC
BCWGM
BCWGMP
Testfälle
Input:
1
Output:
W
Input:
9378278
Output:
L
LWGPCM
LWGPCMB
LWGPCMBI
Input:
22222222
Output:
ROI
ROI
ROIWBPML
ROIWBPML
Input:
1342185143
Output:
WRCIV
WRCIVOLS
WRCIVOLSGBMT
Input:
2147483647
Output:
RMIS
RMISPC
RMISPCWL
RMISPCWLGBYOTV
Input:
4294967295
Output:
S
S
S
S
SRML
SRMLGOIT
SRMLGOITBPCV
SRMLGOITBPCVA
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes. Keine Lücken, yada yada, du kennst die Übung.
2**31-1
, oder möchten Sie größer sein als die meisten signiertenint
Typen?2**32-1
handelt es sich um einen Testfall, aber ich bin bereit, ihn zu senken. (Interessante Tatsache: PokerStars hat einen25B
Chip im Image-Ordner.)Antworten:
Pyth,
565552 BytesDer Code enthält einige nicht druckbare Dateien. Hier ist also ein umkehrbarer
xxd
Hexdump.Probieren Sie es online aus. Testsuite.
Profi-Tipp: Zum Golfspielen
1
am Ende eines Programms, in dem eine Zahl ungleich Null akzeptiert wirdQ
, einfach hinzufügen/
./QQ
, was in Python wäreQ // Q
, ist 1 für ungleich NullQ
.Ohne Komprimierung und nicht druckbare Dateien (55 Byte):
quelle
JavaScript (ES6),
185177... 171 ByteFormatiert und kommentiert
Demo
quelle
Rubin,
181177 BytesTests auf Ideone .
quelle
Python 2.7,
282248238 BytesErläuterung:
Füllen Sie die Liste
L
mit Elementen[quanity, chip_order, chip_character]
, die die Menge der einzelnen Chipsarten angeben, wobeichip_order
sichergestellt wird, dass Chips gleicher Menge in umgekehrter Reihenfolge sortiert werden (Chips mit höherem Wert zuerst ). Nehmen Sie die ChipsL
in umgekehrter Reihenfolge, um Zeichenfolgen für jede Zeile zu bilden. Drucken Sie die Zeilen in umgekehrter Reihenfolge, um die kleinsten Zeilen nach oben zu bringen.Vielen Dank an Blue für einige Verbesserungen.
quelle
for
Schleife), können Sie den Rohwert einfach ersetzen, um einige Bytes zu sparen. Weitere Tipps finden Sie unter codegolf.stackexchange.com/questions/54/…input
erhalten Sie mit regular die Ganzzahl, die nicht konvertiert werden muss, undX[0]>0
können zuX[0]
Mathematica, 440 Bytes
Die ASCI-Darstellung und die richtige Reihenfolge verschlucken den größten Teil des Codes.
* Funktioniert nur mit Version 11 und höher (Verwendung von Nothing) *
quelle
PHP, 274 Bytes
quelle