In Super Mario 3D World gibt es ein Minispiel, das als Lucky House bekannt ist . Es besteht aus einem Spielautomaten mit 4 Blöcken.
Jeder Block kann aus 5 verschiedenen Symbolen bestehen (Blume, Blatt, Glocke, Kirsche oder Bumerang). Ziel des Spielers ist es, so viele identische Symbole wie möglich zu erhalten ( siehe Video ).
Der Spieler wird mit Münzen belohnt, die wiederum in Extraleben umgewandelt werden können. Ihre Aufgabe ist es, die Anzahl der gewonnenen Extraleben zu berechnen.
Abhängig von der Anzahl der übereinstimmenden Symbole werden folgende Münzen belohnt:
- Keine Treffer - 10 Münzen
- Ein Paar - 100 Münzen
- Zwei Paare - 200 Münzen
- Drei-von-einer-Art - 300 Münzen
- Four-of-a-kind - 777 Münzen
Sie gewinnen ein Extraleben (1UP) pro 100 Münzen . Somit gewinnen Sie garantiert genau 1UP mit einem Paar , 2UP mit zwei Paaren und 3UP mit 3-of-a-kind . Die Anzahl der gewonnenen Leben ohne Matches oder 4-of-a-Kind hängt jedoch von Ihrem ursprünglichen Münzbestand ab.
Quelle: Super Mario Wiki
Eingang
Sie erhalten den anfänglichen Münzbestand und eine Liste mit vier Werten die die letzten Symbole des Spielautomaten darstellen.
Ausgabe
Die Anzahl der gewonnenen Extraleben: , , , , oder .
Regeln
- Sie können die Symbole in jedem vernünftigen Format verwenden: z. B. als Liste, als Zeichenfolge oder als vier verschiedene Parameter.
- Jedes Symbol kann entweder durch eine einstellige Ganzzahl oder ein einzelnes Zeichen dargestellt werden . Bitte geben Sie die in Ihrer Antwort verwendeten Symbole an. (Aber Sie müssen nicht erklären, wie sie auf Blume, Blatt, Glocke usw. abgebildet sind, weil es überhaupt keine Rolle spielt.)
- Sie dürfen die Ausgabewerte nicht neu zuordnen.
- Dies ist " Code-Golf ".
Testfälle
In den folgenden Beispielen verwenden wir eine Liste von Ganzzahlen in , um die Symbole darzustellen.
coins icons output explanation
-------------------------------------------------------------------------
0 [1,4,2,5] 0 no matches -> 0 + 10 = 10 coins -> nothing
95 [3,1,2,4] 1 no matches -> 95 + 10 = 105 coins -> 1UP
25 [2,3,4,3] 1 one pair -> 25 + 100 = 125 coins -> 1UP
25 [4,5,5,4] 2 two pairs -> 25 + 200 = 225 coins -> 2UP
0 [2,5,2,2] 3 3-of-a-kind -> 0 + 300 = 300 coins -> 3UP
22 [1,1,1,1] 7 4-of-a-kind -> 22 + 777 = 799 coins -> 7UP
23 [3,3,3,3] 8 4-of-a-kind -> 23 + 777 = 800 coins -> 8UP
99 [3,3,3,3] 8 4-of-a-kind -> 99 + 777 = 876 coins -> 8UP
quelle
Antworten:
x86-16-Baugruppe,
564139 BytesBinär:
Zerlegt:
Geben Sie die Anzahl der Startmünzen ein
DX
undSI
zeigen Sie auf den Beginn der "Symbol" -Bytes (dies kann'1'
-'5'
oder ein beliebiger Byte-Wert sein). Geben Sie die Anzahl der 1UPs in ausBX
.Erläuterung:
Die Eingabe von vier Bytes wird iteriert und mit den verbleibenden Bytes rechts verglichen, wobei die Anzahl der Übereinstimmungen gezählt wird. Die Punktzahlen für jede Art von Match werden vergeben und addieren sich zur Gesamtsumme. Da ein Four-of-a-Kind auch ein Three-of-a-Kind und ein One-Pair ist, kann der Wert jedes Score-Typs wie folgt zerlegt werden:
Beispiele:
[2, 2, 2, 2]
(Vierling) = 7 1UP's + 77 Münzen[2, 5, 2, 2]
(Drei-von-einer-Art) = 3 1UP's[4, 5, 5, 4]
(zwei Paare) = 2 1UP's[2, 3, 4, 3]
(ein Paar) = 1 1UPWenn die Anzahl der verdienten 1UPs am Ende 0 ist, werden 10 Münzen vergeben. Wenn die Gesamtzahl der Münzen 100 übersteigt, wird zusätzlich 1UP gutgeschrieben.
Hier ist ein Testprogramm für PC-DOS, das zusätzliche Routinen für die Verarbeitung der Ganzzahl-E / A enthält:
Laden Sie LUCKY.COM für DOS herunter und testen Sie es .
quelle
Jelly ,
23 22 2019 Bytes-1 dank Erik der Outgolfer (
³
anstelle von verwendenȷ2
) auch in neuerer Version zweimal verwendet-1 dank Grimy (subtrahiere eins vor der Summierung statt subtrahiere vier danach)
Vielleicht schlagbar?
Ein dyadischer Link, der eine Liste und eine Ganzzahl akzeptiert, die eine Ganzzahl ergibt.
Probieren Sie es online! Oder sehen Sie sich eine Testsuite an .
Wie?
So funktioniert die Handbewertung für jeden Handtyp:
Alternative 20:
ĠẈị“¡ıKĖ‘S×4+E{»⁵+:³
quelle
ȷ2
mit³
durch das Programm unter der Annahme , die Funktion in ist nicht Befehlszeilenargumente übernehmen , aber das ist nicht das, was ich denke du meinst mit „schlagbar“. : PċⱮ`’SṚḌH׳«777»⁵+:³
Zsh ,
117 ...60 Bytes-13 durch Verwenden eines anderen Unterscheidungskriteriums, -9 durch Kombinieren von Fällen, -28 durch Ändern der
case
Anweisung in einen verschachtelten arithmetischen Ternär, -4 dank @JonathanAllan, -1 durch Optimieren der Ternäre, -2 weil ich versehentlich verwendet habeecho
beim Hinzufügen verwendet habe Jonathans Optimierung.Übernimmt die Münzzählung für stdin und blockiert Eingaben als Argumente. Argumente können Zahlen, Zeichen oder sogar Zeichenfolgen sein:
./foo.zsh flower leaf flower boomerang
Versuchen Sie es online:
117 104 95 67 63 6260Hier ist die Magie der 67-Byte-Antwort:
quelle
C # (Visual C # Interactive Compiler) ,
12310690 ByteEin Port meiner Python-Antwort, der sich aus der Antwort von @ Dat ableitet.
Probieren Sie es online!
quelle
Python 2 , 63 Bytes
Probieren Sie es online!
Ich hatte die gleiche Idee wie GammaFunction zu verwenden ,
sum(map(l.count,l))
als „Fingerabdruck“. Aber anstatt eine arithmetische Formel für das Ergebnis zu verwenden, verwende ich eine Nachschlagetabelle, indem ich den Wert zuerst mit einer Mod-Kette auf 0 bis 4 zerquetsche%14%5
. Durch Teilen aller Punktwerte durch 100 wurden einige Bytes gespart.quelle
Python 3 , 68 Bytes
Probieren Sie es online!
Ein Python-Port von meinem C-Port von meinem Bash-Port von meiner Zsh-Antwort, neu golfen mit Hilfe der Seite "Tipps zum Golfen in Python". Letzter Hafen, ich schwöre ... mir gehen die Sprachen aus, in denen ich gerne Golf spiele. Ich war neugierig, wie diese Strategie im Vergleich zu den anderen Python-Antworten ist. Auch hier gibt es wahrscheinlich einen Weg, dies zu schlagen.
Dieser hat sich als überraschend gut erwiesen, daher habe ich unten eine Tabelle hinzugefügt, in der zusammengefasst ist, was passiert, damit andere dies portieren oder verbessern können.
Python 3.8 (Vorabversion) , 63 Byte
Lobe das
:=
Walross!Probieren Sie es online!
quelle
Perl 6 ,
4844 BytesProbieren Sie es online!
Curry-Funktion
f(icons)(coins)
.quelle
Python 2 ,
969189 Bytes-2 Bytes dank @Kevin Cruijssen
Probieren Sie es online!
quelle
(100*sum((a==b,a==c,a==d,b==c,b==d,c==d))
für -2 Bytes entfernen .PHP,
153127 Bytes@ 640KB hat einige wirklich clevere Änderungen vorgenommen, um es weiter zu verkürzen:
Probieren Sie es online!
quelle
Python 3 ,
126111108103 BytesProbieren Sie es online!
quelle
Python 3.8 (Vorabversion) , 78 Byte
Dat antwortete, spielte aber mehr.
Probieren Sie es online!
quelle
Perl 5
-pF
, 46 BytesProbieren Sie es online!
Als erstes wird das Spinergebnis mit 5 eindeutigen ASCII - Buchstaben ausgegeben, mit Ausnahme von
q
(Ich schlage vorabcde
) . Die zweite Eingabezeile ist die aktuelle Münzzahl.Wie?
Alle beteiligten Zahlen werden durch 100 geteilt, sodass das Programm die Anzahl der aktuell verdienten Leben (einschließlich der Teilleben) zählt. Der Trick zu dieser Lösung liegt in der
map
. Wenn die möglichen Einträge sindabcde
, dann jeweils$a
,$b
,$c
,$d
, und$e
halten Sie die Zählung der Anzahl , wie oft hatte dieser Charakter vorher gesehen worden. Dies wird$q
jedes Mal, wenn ein Charakter gesehen wird, zu einer laufenden Summe ( ) hinzugefügt . Die laufende Summe wird erhöht, wenn es einen Vierling gibt (effektiv ein Bonus von 177 Münzen).quelle
JavaScript (Node.js) , 64 Byte
Probieren Sie es online!
Ich dachte, es müsste mindestens eine JavaScript-Antwort auf eine Arnauld-Herausforderung geben!
Das Konzept hier besteht hauptsächlich darin, die Anzahl unterschiedlicher Elemente als Nachschlageschlüssel zu verwenden.
Um zwischen 2 Paaren und 3 einer Art zu unterscheiden, wird das Eingabearray sortiert und die mittleren 2 Elemente verglichen.
quelle
PHP ,
8984 BytesProbieren Sie es online!
Eingabe von der Kommandozeile, Ausgabe an
STDOUT
:quelle
Stax , 23 Bytes
Führen Sie es aus und debuggen Sie es
Dieses Programm verwendet einen beliebigen Satz von 5 Ganzzahlen für Symbole.
Verfahren:
Hier ist die Ausgabe eines experimentellen Stack-State-Visualizers, an dem ich für die nächste Veröffentlichung von stax gearbeitet habe. Dies ist eine entpackte Version desselben Codes mit dem Stapelstatus, der den Kommentaren hinzugefügt wurde.
Führen Sie dieses aus
quelle
Retina 0.8.2 , 72 Bytes
Probieren Sie es online! Link enthält Testfälle. Nimmt die Eingabe als 4 druckbare ASCII-Nicht-Ziffern vor, gefolgt von der anfänglichen Anzahl von Münzen in Ziffern. Erläuterung:
Sortieren Sie die Nicht-Ziffern so, dass identische Symbole zusammen gruppiert werden.
Four-of-a-Kind-Scores 777.
Drei-Punkte-Punkte 300.
Jedes Paar erhält 100 Punkte, zwei Paare erhalten also 200 Punkte.
Wenn es keine Spiele gäbe, gewinnst du trotzdem!
Wandle die Werte in unary um und nimm die Summe.
Ganzzahl dividiert die Summe durch 100 und wandelt sie in eine Dezimalzahl um.
quelle
Netzhaut , 56 Bytes
Probieren Sie es online! Link enthält Testfälle. Nimmt die Eingabe als 4 druckbare ASCII-Nicht-Ziffern vor, gefolgt von der anfänglichen Anzahl von Münzen in Ziffern. Erläuterung:
Four-of-a-Kind-Scores 777.
Jedes Paar erhält eine Punktzahl von 100. Dabei werden
w
alle Paare berücksichtigt, so dass sie verschachtelt werden können. Außerdem können Drei-von-einer-Art-Paare in drei Paare zerlegt werden, wodurch automatisch eine Punktzahl von 300 erzielt wird.Wenn es keine Spiele gäbe, gewinnst du trotzdem!
Wandle die Werte in unary um und nimm die Summe.
Ganzzahl dividiert die Summe durch 100 und wandelt sie in eine Dezimalzahl um.
quelle
APL + WIN, 42 Bytes
Eingabeaufforderungen für Symbole, gefolgt von Münzvorrat.
Probieren Sie es online! Mit freundlicher Genehmigung von Dyalog Classic
quelle
Bash ,
76 75 7170 Bytes-4 danke an @JonathanAllan, -1 durch Neuordnung des Ternärs .
Bash Port meiner Zsh Antwort.
Probieren Sie es online! Probieren Sie es online! Probieren Sie es online!Probieren Sie es online!quelle
C (gcc) ,
92 84 82 81 7978 Bytes-1 mal
x+=(..!=..)
-5 durch Zurücksenden per Zuweisung , -4 dank Jonathan Allan durch Ersetzen!=
durch<
, was Bytes an anderer Stelle spart, -1 durch Neuanordnen des Ternären.Von @ceilingcat: -2 durch Deklarieren
i
undx
außerhalb der Funktion, -1 durch Setzenx=i
und Dekrementierenx
.Ein weiterer Port meiner Zsh-Antwort. Ich bin mit C-Golf nicht vertraut, es gibt wahrscheinlich irgendwo einen anderen Trick, um ihn weiter zu reduzieren.
92 84 82 81 79Online ausprobieren!quelle
x+=a[i/4]<a[i%4];c=x?(x-6?6-x:c>89):7+(c>22);
05AB1E ,
201918 BytesPort of @JonathanAllan 's Jelly antworte , also stelle sicher, dass du ihn positiv bewertest !!
-2 Bytes dank @Grimy .
Nimmt die Liste der Symbole als erste Eingabe (Wesen
[1,2,3,4,5]
) und die Anzahl der Münzen als zweite Eingabe.Probieren Sie es online aus oder überprüfen Sie alle Testfälle . (Die Testsuite verwendet
T‚à+
stattdessenTMI+
, was eine Alternative mit gleichen Bytes darstellt.)Erläuterung:
quelle
777‚ßTMI
kann777T)Åm
.0.90
sind90
Münzen in diesem Fall? Da die Münzeingabe garantiert im Bereich liegt[0,99]
, können Sie OP fragen, ob er dies zulässt oder nicht.Scala , 88 Bytes
Probieren Sie es online!
quelle
Kohle , 30 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Nimmt Eingaben als Anzahl der Münzen und ein Array beliebiger Python-Vergleichswerte als Symbole. Erläuterung:
Stehlen Sie schamlos den Trick von @ GammaFunction, die Hälfte der Anzahl zu berechnen.
Subtrahieren Sie
2
von der Summe und erhalten Sie die0, 1, 2, 3
entsprechenden Werte. Teilen Sie bei einem Vierling das Ergebnis2
durch das9
erste, was zur Folge hat7.777...
.Wenn das Ergebnis jedoch 0 ist, wurden keine Übereinstimmungen gefunden. Ersetzen Sie es
0.1
stattdessen durch. (Die Verwendung eines Literal hilft mir hier nicht, da ich ein Trennzeichen benötigen würde.)Teilen Sie die Anfangsmünzen durch 100 und addieren Sie die Gewinne. Setzen Sie dann das Ergebnis auf den Boden und setzen Sie es für die implizite Ausgabe in einen String um.
quelle
Pyth , 32 Bytes
Probieren Sie es online!
Inspiriert von der GammaFunction-Lösung. Übernimmt die Eingabe als
[coins, [icons]]
.quelle
PowerShell , 94 Byte
Probieren Sie es online!
Abgerollt:
quelle
PowerShell ,
114107 Byte-7 Bytes dank mazzy
Probieren Sie es online!
Eine große alte ternäre Operation mit PowerShell-Charakter, die auf dem Gruppieren und Sortieren der Anzahl der Eingaben basiert. Die Sortierung wird benötigt, da wir die Tatsache nutzen, dass die gruppierte Liste umso kürzer wird, je mehr Wiederholungen vorhanden sind. In der Tat sind hier alle möglichen Werte:
Das Abschneiden auf ein int ist immer noch teuer.
Abgerollt:
quelle
0
? Probieren Sie es online!Wolfram Language (Mathematica) , 54 Byte
Probieren Sie es online!
quelle
R,
102,91, 81 BytesEs ist gelungen, dank @Giuseppe 11 Bytes zu löschen (und einen Fehler zu beheben). Weitere 10 wurden von der Idee von @ Giuseppe / 10 inspiriert.
Ungolfed
Probieren Sie es online!
quelle
as.factor()
und das entfernenf=
, um es auf 88 Bytes zu bringen.table
: Ich kenne mich nicht so gut aus, wie ich sollte. Ich habe damit angefangensummary(as.factor(v))
. Ich ziehe es vor, das Haus zu verlassenf=
. Ich habe nicht das Gefühl, dass der Code ohne ihn vollständig ist, aber mir ist klar, dass dies eine Stilwahl ist.f=
; Fühlen Sie sich frei, einen TIO-Link in Ihre Antwort zu setzen :-)sum(s==2)
sehr hilfreich ist . Aber alles andere musste neu geschrieben werden und die / 10 sparte keinen Platz mehr (glaube ich nicht)8051 Assembly (kompiliert auf 158 Bytes)
Dies ist ein VEEEEEEEEEERRY naiver Ansatz, dies ist noch ungetestet und ungolfed, aber ich bin ziemlich zuversichtlich, dass das funktioniert. Dinge zu beachten sind:
1) der 8051 ist eine Akkumulatormaschine dh. Es werden mov-Anweisungen benötigt, die andere Architekturen möglicherweise gar nicht benötigen.
2) Die 8051 ist eine 8-Bit-Maschine, daher müssen einige Tricks für die Zahlen> 255 ausgeführt werden, was zu mehr Code führt und daher einen Nachteil der Plattform gegenüber den anderen darstellt.
quelle