Okay, gestern war der 2. Weihnachtstag und meine (Groß-) Eltern und ich spielten "Sjoelen", wie es in den Niederlanden heißt. Der innere Programmierer kam auf mich zu, aber als ich die Antwort hatte, verlor ich sie. Ich möchte, dass du es neu erstellst.
Die Regeln:
Sie haben ein Holzbrett, einen Sjoelbak , mit 4 Kisten, jede mit einer eigenen Nummer. Wenn ein Schijf ( ein puckartiges Objekt) in eines der Kästchen kommt, erhält man die Punkte über diesem Kästchen.
Wenn in allen 4 Kisten ein Schijf vorhanden ist, erhält man nicht 10, sondern 20 Punkte.
Beispiel:
Von links nach rechts: 3 5 4 3
Jede Schachtel hat mindestens 3 Schijven (Plural von Schijf ), dh 20 * 3 = 60 Punkte.
Resultierende Werte: 0 2 1 0
0 * 2 + 2 * 3 + 1 * 4 + 0 * 1 = 10 Punkte.
Das ergibt insgesamt 60 + 10 = 70 Punkte.
Die Eingabe:
Die Menge an Schijven von links nach rechts, dh "4 5 4 5", [4,5,4,5], "4 \ n5 \ n4 \ n5", was auch immer Sie möchten.
Die Ausgabe:
Die Anzahl der Punkte, dh 84, als Ausgabe, Variable, Rückgabe oder oben auf dem Stapel, ganz wie Sie möchten.
Wie bei jedem Codegolf können Sie keine externen Skripte verwenden und der Code mit den wenigsten Bytes gewinnt.
PS: Wie Sie vielleicht schon bemerkt haben, bin ich Holländer. Fühlen Sie sich frei, um mögliche Grammatikfehler zu bearbeiten.
quelle
Antworten:
CJam,
23 2120 BytesIch könnte in der Lage sein, ein paar Bytes davon zu spielen.
Eingabe ist wie
Output ist die Punktzahl
Wie es funktioniert
Algorithmus
[1 2 3 4]
.1 + 2 + 3 + 4 = 10
addiere ich einfach die minimalen gemeinsamen Schijven zu jedem einzelnen, um den Effekt der Bonuspunktzahl zu10
erzielen.1
jedem, dann multipliziere ich das zweite mit2
und addiere es zum ersten. In der nächsten Iteration bekomme ich die aktuelle Summe und3
schijven Punktzahl . Und so weiter.Probieren Sie es hier online aus
quelle
Piet, 240 (30 * 8) Codels, 138 mit aktuellem Code
Codel Größe 10, für eine bessere Sichtbarkeit
Testbeispiele:
Durchflussanzeige:
Ich benutze meine eigene Kurzschrift für eine einfachere Handhabung und ein kompaktes Display. Es zeigt den allgemeinen Programmablauf, nicht die genauen Positionen der Codels.
Vollständige Erklärung:
Speichern Sie das Bild und probieren Sie es in diesem Online-Piet-Interpreter aus:
PietDev online Piet Dolmetscher
quelle
APL (Dyalog Classic) ,
161312 Bytes-3 danke an @ Adám
Probieren Sie es online!
⌽+⌊/
Rückwärts (arg) + Min (arg)1⌽
1 nach links drehen+\
Teilsummen+/
Summequelle
Mathematica,
38322320 Bytes(Mit Hilfe von Swish )
Verwenden Sie, indem Sie die Eingabe bis zum Ende anheften:
Alternative (36 Byte):
quelle
Tr[(# + Min@#) {2, 3, 4, 1}] &
20*Min@#
, Sie können es loswerden, indem Sie Minus durch Plus ersetzen, weil dies bequem ist2+3+4+1==10
.R
4140 ZeichenVerwendung:
Im letzten Beispiel
a
ist vector3 5 4 3
,a-b
is0 2 1 0
, das wir mit vector multiplizieren,2 3 4 1
so dass0 6 4 0
wir addieren und5*b
geben15 21 19 15
(5*b
recycelt für jedes Mitglied des hinzugefügten Vektors, also effektiv addieren4*5*b
), was wir schließlich summieren und so geben70
.quelle
b=min(a<-scan());sum(5*b+(a-b)*c(2:4,1))
JavaScript (ES6),
9347 BytesVerwendung:
s(1, 2, 3, 4)
So funktioniert es: Die Funktion sucht in den Argumenten nach der kleinsten Zahl und multipliziert diese mit
10
(nicht mit20
) und addiert den Rest der Punktzahl. Es ist nicht erforderlich,20
Teile von der Partitur zu multiplizieren und zu subtrahieren, um die Berechnung fortzusetzen.Vielen Dank an edc65 für das Teilen von Verbesserungen!
Nicht golfen:
quelle
S=(a,b,c,d)=>10*Math.min(a,b,c,d)+a*2+b*3+c*4+d
Pyth , 15
Die Eingabe sollte durch Kommas getrennt auf STDIN erfolgen, z
Dies verwendet den gleichen Trick, den viele andere Lösungen angewendet haben, nämlich das Minimum zu jedem Element hinzuzufügen, um den Bonus zu berücksichtigen. Das Minimum steht
hSQ
im obigen Code. Um die Multiplikation mit 2, 3, 4 und 1 zu berücksichtigen, ordne ich d der Liste [0,1,2,3] zu und multipliziere das (dl) -te Element der Eingabe mit d + 1. Das -1te Element wird also mit 1 multipliziert, das nullte mit 2, das erste mit 3 und das zweite mit 4. Dann summiere ich.quelle
J,
2322 ZeichenBeispiel:
Probieren Sie es hier aus.
(23 lang explizite Funktionsdefinition:
v=:3 :'+/+/\.3|.y+<./y'
)quelle
+/2 3 4 1*(+<./)
?2 3 4 1+/ .×]+<./
?Strauß v0.1.0 ,
4841 Zeichen (viel zu lang)Dies ist einfach die gleiche wie die alte Version unten, mit der Ausnahme, dass anstelle des Drehens
@
des gesamten Stapels)\+
(rechte Uncon) stattdessen verwendet wird.Alte Version:
Ich habe tatsächlich zwei Fehler in meiner neu implementierten Sprache entdeckt, die in der folgenden Beschreibung kommentiert sind. (Die Sprache ist derzeit sehr, sehr ähnlich zu Golfscript. Wenn Sie also Golfscript kennen, sollte es ziemlich einfach zu lesen sein.
Erwartet Eingaben als Array in STDIN, da ich ein Türknauf bin und vergessen habe, E / A in Version 0.1.0 zu implementieren.
Das Lösen eines tatsächlichen Problems in Ostrich ist nett, weil es mir genau zeigt, wie viel mehr Dinge ich zur Sprache hinzufügen muss: D
quelle
Python 2, 43 Bytes
Inspiriert von der Antwort von @ user2487951.
quelle
Jagl Alpha 1,2 - 20 Bytes
Die Eingabe erfolgt im Format stdin
(3 4 5 6)
, die Ausgabe bleibt im Stapel:Warten auf eine Antwort vom Originalposter zum Ausgabeformat. Da die Eingabe als "Was auch immer Sie möchten" angegeben ist , gehe ich davon aus, dass meine Eingabe ein Array oben im Stapel sein kann.Übernimmt nun die Eingabe von stdin.Erläuterung:
quelle
Haskell, 40
Anstatt die Mindestanzahl aus dem Rest zu entfernen und zusätzliche
20
s hinzuzufügen, wird die Mindestanzahl hinzugefügt10
.quelle
..4*c+d..
Matlab, 27
Ich habe eine Weile gebraucht, um zu verstehen, dass es sich um ein Einzelspielerspiel handelt. Mit Hilfe der anonymen Funktion
welches mit dem Zeilenvektor aufgerufen wird
quelle
f=
für 2 weniger Bytes fallen zu lassen. Die Funktion wirdans
stattdessen in der Variablen gespeichert .[2:4,1]
werden 2 Bytes abgeschnitten, wenn die Eingabe ein Spaltenvektor ist.Java, 84 Bytes
Ich habe die Idee, dass dies weiter golfen werden kann, aber das ist es fürs Erste.
Aufruf mit
A(new int[]{3,5,4,3})
, Ausgabe wird als int zurückgegeben (weilSystem.out.println()
sich die Bytes verdoppeln würden)Ungolfed
quelle
GolfScript, 22 Bytes
Liest die Eingabe von stdin im Format
[3 5 4 3]
. Schreibt die Ausgabe in stdout. (Wenn die Eingabe als Array auf dem Stapel zulässig ist,~
kann der Zeilenabstand für insgesamt 21 Bytes weggelassen werden.)Dies verwendet eine etwas andere Strategie als die CJam / Pyth / etc.-Lösungen: Ich erstelle ein Array mit 2 Kopien des ersten Eingabewerts, 3 der zweiten, 4 der dritten und einer der vierten. Dann sortiere ich dieses Array, ziehe das kleinste Element heraus, multipliziere es mit 11 und summiere es mit den anderen Elementen.
quelle
Python 2, 51
Einfallslos, aber kurz:
Pythonischer:
quelle
Julia,
4835 Zeichenfunction p(m);sum([2 3 4 1].*m)+10minimum(m);end
in kompakter Auftragsform:
Beispiel:
quelle
Javascript, 97 Bytes
quelle
Javascript, ES6, 57
Ich wollte sehen, wie sich eine Rekursion entwickeln würde, und obwohl dies definitiv nicht die kürzeste Antwort ist, hatte ich das Gefühl, dass es sich als gut herausgestellt hat.
a*b*c*d
: Es nimmt die Eingabewerte und findet das Produkt von allen und wertet es als Booleschen Ausdruck für eine Inline-if-Anweisung aus. Dies gibt false zurück, wenn einer oder mehrere der Werte 0 ist, und true für jeden anderen Wert.20+f(--a,--b,--c,--d)
: Wenn true zurückgegeben wird, gibt die Funktion 20 (für die Schijven- Menge) plus den rekursiven Aufruf der Funktion für alle Werte minus eins zurück (um diese Schijven- Menge zu entfernen ). Auf diese Weise wird rekursiv durchgeschleift, bis mindestens eines der Kästchen leer ist.a*2+b*3+c*4+d
Nachdem mindestens ein Feld leer ist, wird der else-Teil der Inline-if-Anweisung ausgeführt. Es werden nur die Punkte für die verbleibenden Schijven in den Feldern zurückgegeben.Somit am Ende alle 20 Punkt schijven Sets, und die Punkte zurückverwiesen werden aufsummiert und von der Funktion zurückgegeben, um die Antwort zu erzeugen.
quelle
Haskell 42 Zeichen
quelle
f l@[a,b,c,d]=10*minimum l+2*a+3*b+4*c+d
- spart 2 ZeichenHPPPL (HP Prime Programming Language),
5857 BytesDas * zwischen 10 und min ist nicht notwendig, deshalb habe ich es entfernt.
HPPPL ist die Programmiersprache für den HP Prime Color Graphing Calculator / CAS.
Beispiel läuft:
Wenn es kein Programm sein muss, dann ist es in a realisierbar
4039 Bytes einzeilig:quelle
Staq, 72 Zeichen
Beispiellauf:
Staq hat zwei Stapel, einen aktiven und einen passiven. Der
|
Befehl schaltet den aktiven Stack auf passiv und umgekehrt.Alles zwischen geschweiften Klammern definiert eine Funktion, der erste Buchstabe nach der öffnenden Klammer ist der Funktionsname, der Rest bis die schließende Klammer die Funktion selbst ist. Überschreibende Funktionen, Rekursion und verschachtelte Funktionen sind möglich.
{aii}
würde eine Funktion a definieren , die die Oberseite des Stapels zweimal erhöht. Jede folgende Instanz vona
im Code wird durch ersetztii
.Kommentare in Staq- Programmen: Fügt
&
eine Null oben auf dem Stapel hinzu,[
weist den Zeiger an, zur entsprechenden Stelle zu springen,]
wenn die Oberseite des Stapels Null ist, undx
löscht den obersten Wert auf dem Stapel. So können Kommentare in Form von in den Code geschrieben werden&[here is a comment]x
Erklärung (auch ausführbar):
https://esolangs.org/wiki/Staq
Das Programm verwendet einen Stapel (anfangs aktiv), um 2a + 3b + 4c + d zu berechnen, und den zweiten Stapel (anfangs passiv), um das 10-fache des Minimums der Eingabewerte zu berechnen. Dann werden beide Ergebnisse aufsummiert und angezeigt.
quelle
PowerShell für Windows ,
48 -47 Byte-1 Byte dank mazzy
Probieren Sie es online!
quelle
Powershell for Windows
wann wir densort
Alias verwenden? siehe meta