Ich war überrascht, dass dies nicht bereits gestellt wurde, obwohl es eine gute Frage zu Dart-Kassen gibt: Darts meets Codegolf
Ihre Herausforderung besteht darin, zu berechnen, welche Punkte mit "n" Pfeilen unterhalb der Maximalpunktzahl für "n" Pfeile nicht möglich sind. ZB für n = 3 ist die maximal mögliche Punktzahl 180, so dass Sie zurückkehren würden [163,166,169,172,173,175,176,178,179]
Für eine Zusammenfassung der Bare-Bones-Regeln:
Mögliche Punkte für einen einzelnen Pfeil sind:
- 0 (Fräulein)
- 1-20, 25, 50
- doppelt oder dreifach von 1-20
Regeln:
- Es gelten die Standard-Code-Golfregeln
- Sie müssen einen einzelnen Parameter 'n' so verwenden, wie es Ihre Sprache zulässt, und eine Liste / ein Array aller eindeutigen Punkte unter dem Maximalwert zurückgeben, der nicht mit n Pfeilen erzielt werden kann. Sie können diese Werte auch auf der Konsole ausdrucken.
- Reihenfolge der Ergebnisse ist unwichtig
- kürzester Code in Bytes gewinnt
Antworten:
Python 3 ,
80795957 Bytes-1 Byte dank Arnauld
-20 Byte dank ArBo
-2 Byte dank negativer Sieben
Probieren Sie es online!
quelle
Perl 6 , 42 Bytes
Probieren Sie es online!
Brute-Force-Lösung, die alle möglichen Dart-Werte ermittelt.
quelle
JavaScript (ES6),
5554 Byte1 Byte dank @Shaggy gespeichert
Basierend auf dem von Rod verwendeten Muster .
Probieren Sie es online!
quelle
s=60*n
->n*=60
um ein Byte zu speichern.Perl 6 , 39 Bytes (37 Zeichen)
Dies ist definitiv ein massiver Vorschlaghammer, aber es funktioniert. (Es zwingt nicht nur brutal, es zwingt brutal)
Probieren Sie es online!
Hier ist eine Erklärung dafür:
Der
X* ^4
Kreuzmultiplikator generiert viele doppelte Werte (es sind mehr als 20 Nullen erforderlich , bevor die Kreuzaddition durchgeführt wird), dies ist jedoch unproblematisch, da wir die festgelegte Differenz verwenden,∖
die mit den eindeutigen Werten funktioniert.Dies schlägt derzeit fehl
$n == 1
(was einen leeren Satz zurückgeben sollte), aber es liegt ein Problem vor, das wahrscheinlich in zukünftigen Versionen funktionieren wird. JoKings Version ist etwas länger, funktioniert aber$n == 1
im aktuellen Rakudo.quelle
Jelly , 19 Bytes
Probieren Sie es online!
quelle
MATL ,
2523 BytesVielen Dank an @ Giuseppe , der einen Fehler behoben und 2 Bytes golfen hat!
Probieren Sie es online!
Erläuterung
Brute-Force-Ansatz.
quelle
n=2
, also habe ich es behoben und ein Byte entfernt, um zu booten! Probieren Sie es online!J ,
48-45BytesProbieren Sie es online!
-3 Bytes dank FrownyFrog
Versuchte eine Brute-Force-Lösung, war aber nicht in der Lage, diese Übersetzung von Rods Idee zu übertreffen.
quelle
626b66jh
b
"Trennzeichen" dort war und las es als Teil der Zahl ...R , 64 Bytes
Probieren Sie es online!
Ports die erstaunliche Antwort von Rod gefunden .
R ,
857368 ByteProbieren Sie es online!
Brute Force generiert alle möglichen Punkte mit
n
Darts und nimmt dann die entsprechende Differenz.Dank an die Octave-Lösung von OrangeCherries, die mich daran erinnert hat
combn
.5 weitere Bytes dank Robin Ryders Vorschlag zur Verwendung
%o%
.quelle
FUN
Arguments voncombn
! Sie können mit statt 68 Bytes erhalten .%o%
x*3,x*2
Oktave ,
91 Bytes73 Bytes71 BytesEine andere Brute-Force-Methode.
Bis zu
73 Bytesdank GiuseppeBis zu 71 Bytes durch Ersetzen von nchoosek durch combnk
Probieren Sie es online!
quelle
Pyth , 22 Bytes
Probieren Sie es online!
Timeout in TIO für Eingänge größer als 3.
quelle
U4
,S3
wird ein bisschen verbessert, weil beide kartesischen Produkte nicht mit all diesen zusätzlichen nutzlosen Nullen umgehen müssen. In diesem Fall wird Eingabe 3 in ~ 13 Sekunden statt ~ 30 Sekunden ausgegeben (obwohl Eingabe 4 immer noch eine Zeitüberschreitung aufweist und dies Codegolf ist, spielt das keine Rolle; p).-S*60QsM^*MP*S3aU21 25
, aber dass der Raum zwischen21
und25
ist ein bisschen ärgerlich .. Mit einem 0-basierten inklusiven BereichyT
statt verwendet werden könnte21
, ein bisschen wie folgt aus :-S*60QsM^*MP*S3a}ZyT25
( aber dannZ
natürlich ohne den}
mit dem 0-basierten inklusivbereich). Vielleicht sehen Sie etwas zu Golf in diesem alternativen Ansatz, das25
der Liste hinzuzufügen und das75
nach dem ersten kartesischen Produkt zu entfernen ?Stax , 24 Bytes
Führen Sie es aus und debuggen Sie es
Es ist ziemlich langsam für n = 3 und wird von da an schlimmer.
quelle
Python 2 , 125 Bytes
Probieren Sie es online!
Python 3 ,
126125122 BytesProbieren Sie es online!
-3 Bytes, danke an Rod
quelle
05AB1E ,
212018 Bytes-3 Bytes dank @Grimy .
Je höher die Eingabe, desto schneller wird die Zeit abgelaufen
ã
. Dies liegt an dem eingebauten kartesischen Produkt .Probieren Sie es online aus oder überprüfen Sie ein paar weitere Testfälle .
Erläuterung:
quelle
60 * input
Gelee , 28 Bytes
Probieren Sie es online!
quelle
MathGolf , 26 Bytes
Probieren Sie es online!
-2 Bytes dank Kevin Cruijssen
Erläuterung
quelle
3╒*mÅ~*N_∞α+
aufN▐3╒*mÅ~*╡
. (PS: Warum erwähnen Sie " für Eingabe 3 " in Ihrem Erklärungsheader?)Wolfram Language (Mathematica) , 69 Bytes
Probieren Sie es online!
Basierend auf der Antwort von Lirtosiast .
Array
Das dritte Argument von gibt den Versatz an (Standard 1), und das vierte Argument gibt den zu verwendenden Kopf anList
.##&
ist gleichbedeutend mitSequence
,Array[1##&,{4,21},0,##&]
gibt also ein (abgeflachtes)Sequence
Element des äußeren Produkts von0..3
und zurück0..20
.quelle
Kohle , 36 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Verwendet den Algorithmus von @ Rod; rohe Gewalt hätte 60 Bytes gedauert. Kürzen Sie die Zeichenfolge auf 9 Zeichen, wenn die Eingabe größer als 1 ist. Nehmen Sie dann die Ordnungszahlen der Zeichen und addieren Sie das entsprechende Vielfache von 60.
quelle
C # (Visual C # Interactive Compiler) , 305 Byte
Nun, es scheint nicht einfach zu sein, alle möglichen Kombinationen in C # zu berechnen, also ist diese Katastrophe eines Codes alles, was ich mir einfallen lassen könnte.
Außerdem dauert es ungefähr 30s, um ...
Würde gerne eine bessere Lösung sehen.
Probieren Sie es online!
quelle
Kotlin , 118 Bytes
Probieren Sie es online!
quelle
Perl 5
-n
,969391 BytesProbieren Sie es online!
Es wurde eher für die Codelänge als für die Laufzeit optimiert, daher ist es etwas langsam. Es werden viele redundante Einträge für den Nachschlage-Hash generiert. Das
@b
Durchlaufen des Arraysuniq
beschleunigt es erheblich, kostet aber 5 weitere Bytes, weshalb ich es nicht getan habe.quelle
Wolfram Language (Mathematica) , 81 Byte
Probieren Sie es online!
Mathematica hat einige verwandte Buildins, einschließlich
FrobeniusSolve
und die eingeschränkte Form vonIntegerPartitions
, aber keines davon ist kürzer als Brute Force.quelle
{163,166,169,172,173,175,176,178,179}