Es gibt ein "Spiel", in dem Piraten Goldmünzen nach bestimmten Regeln rational aufteilen. Zitat aus Wikipedia :
Es gibt 5 rationale Piraten, A, B, C, D und E. Sie finden 100 Goldmünzen. Sie müssen entscheiden, wie sie verteilt werden.
Die Piraten haben eine strenge Rangordnung: A ist B überlegen, der C überlegen ist, der D überlegen ist, der E überlegen ist.
Die Verteilungsregeln der Piratenwelt lauten daher: Der älteste Pirat sollte eine Verteilung von Münzen vorschlagen. Die Piraten, einschließlich des Antragstellers, stimmen dann darüber ab, ob diese Verteilung akzeptiert werden soll. Bei Stimmengleichheit hat der Antragsteller die ausschlaggebende Stimme. Wenn die Verteilung akzeptiert wird, werden die Münzen ausgezahlt und das Spiel endet. Wenn nicht, wird der Antragsteller vom Piratenschiff über Bord geworfen und stirbt, und der nächsthöhere Pirat macht einen neuen Vorschlag, das System erneut zu starten.
Piraten stützen ihre Entscheidungen auf drei Faktoren. Zunächst möchte jeder Pirat überleben. Zweitens möchte jeder Pirat bei gegebenem Überleben die Anzahl der Goldmünzen, die er erhält, maximieren. Drittens würde jeder Pirat lieber einen anderen über Bord werfen, wenn alle anderen Ergebnisse gleich wären. Die Piraten vertrauen sich nicht und werden keine Versprechungen zwischen Piraten machen oder einlösen, abgesehen von einem vorgeschlagenen Verteilungsplan, der jedem Piraten eine ganze Anzahl von Goldmünzen gibt.
Herausforderung
Nehmen Sie als Eingabe eine ganze Zahl n
, 1 <= n <= 99, wobei n
die Anzahl der Piraten ist - und geben Sie die Verteilung der Münzen aus, beginnend mit dem ersten Piraten.
Testfälle (erste Zeile ist Eingabe; zweite Ausgabe):
1
100
2
100 0
3
99 0 1
5
98 0 1 0 1
Das ist Code-Golf , also gewinnt die kürzeste Lösung in Bytes.
n < 100
? Überbesetzte, untervergoldete Piratenschiffe benötigen ebenfalls Verteilungshilfe.Antworten:
Jelly ,
11 bis10 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle auf einmal .
Wie es funktioniert
Für die Eingabe n läuft die Aufgabe darauf hinaus, die Liste x, 0, 1, 0, ... mit der Länge n zu erstellen , deren Summe 100 ist .
quelle
Python, 33 Bytes
Berechnet den ersten Wert, hängt einige an
0, 1, 0, 1...
und schneidet die Länge abn
.Beachten Sie, dass
-n/2+101
dies nicht abgekürzt werden kann,101-n/2
da Unär und Binär-
unterschiedliche Priorität haben: Ersteres wird analysiert als(-n)/2
und Letzteres als101-(n/2)
.Die Rekursion war viel länger (45):
quelle
MATL , 12 Bytes
Hierbei wird die aktuelle Version (9.2.2) der Sprache / des Compilers verwendet, die älter ist als diese Herausforderung.
Beispiel
Erläuterung
quelle
Pyth, 13 Bytes
Testsuite .
quelle
Python,
6258 BytesEDIT: Ich bin froh, dass ich es zu einem Einzeiler gemacht habe. Aber ich verliere für Python. Daher dient dies nur als Referenz. Danke @Zgarb
Es nimmt die Eingabe entgegen und erstellt eine Liste mit Paritäten aller Zahlen von 1 bis i. Setzt dann das erste Element in i auf 101-sum (n) und druckt.
Probieren Sie es hier aus
quelle
Javascript ES6, 45 Bytes
Danke an @Neil für 1 Byte gespeichert!
quelle
202-a>>1
Speichert ein Byte.𝔼𝕊𝕄𝕚𝕟 14 Zeichen / 26 Byte
Try it here (Firefox only).
Nicht schlecht, aber auch nicht gut ...
Erläuterung
quelle
Im Ernst,
2317 BytesEDIT : Danke @quintopia
Verwendet den gleichen Ansatz wie meine Python-Antwort, aber ich mache das Modulo 2 mit Mapping und drehe meinen Stapel mehrmals.
Erklärung :
Dieser Code drückt die Eingabe (ich werde es nennen
i
). Weiter drücktrange(1,i+1)
und macht eine Funktion. Dann drückt 2, dreht Stapel und nimmt schließlich Modulo.Als nächstes ordnen Sie diese Funktion dem iterierbaren Bereich zu. Dies gibt die Parität jedes Elements in der Liste an.
Zum Schluss duplizieren Sie den Stapel, summieren die Paritätsliste, drücken 2, 10 ^ 2 und 100 + 1 und subtrahieren die Summe (nennen wir diesen Wert
n
). Als nächstes drückt der Code 0, dreht den Stapel um 1 und setzt das Index 0-Element der Liste auf n. Die resultierende Liste wird implizit gedruckt.quelle
,R`2@%`M;Σ2╤u-0(T
Japt, 14 Bytes
Eine weitere Herausforderung, bei der ich mir ein eingebautes Gerät wünsche, das ich gerade hinzugefügt habe ...
Probieren Sie es online!
quelle
Actionscript 3, 87 Byte
function x(n){var l=[],i=1;for (l[0]=int(101-n/2);i<n;){l[i]=++i%2;}return l.join(" ")}
Es ist nicht die beste Golfsprache, aber ich poste gerne as3 Antworten.
quelle
05AB1E , 12 Bytes (nicht kompensiert )
Probieren Sie es online!
quelle
s)˜
kann sein¸ì
.Perl
514944 BytesBenötige die folgenden Perlrun-Optionen
-E
quelle
QBIC ,
2825 BytesErläuterung
quelle