Einführung
Der Regen ließ endlich nach. Der größte Teil der Menschheit ist aufgrund eines Fehlers im Code von @ user12345 ertrunken . Überlebende sind auf einem weltweiten Archipel verstreut. Die Funkkommunikation ist unterbrochen, und die Menschheit ist bereit, sich wieder zu entfalten. Ohne jeden Grund haben sich Zombie-Piraten am Nullmeridian versammelt und ziehen nach Westen. Die Horde verschlingt alles.
Problem
Unser Weltuntergangsszenario kann durch 5 ganze Zahlen in einer einzigen Zeile beschrieben werden, die eine Reihe von kooperierenden Inselgemeinschaften darstellen. Sie sind von West (ganz links) nach Ost (ganz rechts) angeordnet.
Beginnend mit der östlichsten Insel fliehen die Inselbewohner paarweise zur nächstgelegenen Insel. Seltsamerweise überlebt für jedes Paar, das sich einschifft, nur eines die Reise. Inselbewohner reisen nur zu zweit. Seltsame Bevölkerungsgruppen wählen einen einzigen Bewohner, der zurückbleibt und die neuesten Radio-Updates zu den Possen der Zombie-Piratenhorde liefert. Die Bevölkerung weigert sich zu reisen, bis alle Inseln im Osten ihre Wanderungen abgeschlossen haben oder gestorben sind. Wenn die Bevölkerung die letzte, westlichste Insel erreicht, hört die Reise auf.
Der Betriebsleiter am Ende der Welt benötigt ein Programm, das die endgültigen Bevölkerungszahlen jedes Dorfes ausgibt.
Beispiel Eingabe
3 8 6 0 2
Beispielausgabe
8 1 0 1 0
Annahmen
- Die Eingabe kann über stdin erfolgen, aus einer Datei mit willkürlichem Namen gelesen oder als Argument akzeptiert werden
- Für jede Insel gilt 0 <= Bevölkerung <= 1024
- Die Bevölkerung überspringt niemals eine Insel
Kürzeste Antwort gewinnt!
Antworten:
APL, 16 Zeichen
Die Eingabe wird als Zeichenfolge für diesen Block bereitgestellt:
oder ein Zeichen weniger, wenn die Eingabe als Argument für diesen Block bereitgestellt wird:
Es basiert auf der Idee von Ilmari Karonen in diesem Kommentar .
2⊥⍵
Führt eine Basis-2-Konvertierung der Eingabe durch.(1e9,4⍴2)⊤
wandelt diese Zahl also wieder in Basis 2 (für die vier letzten Stellen) und Basis 1e9 für die erste um, was für die oben angegebenen Eingabebereiche ausreicht. (1e9,4⍴2
Erstellt die Liste1e9 2 2 2 2
.)Beachten Sie, dass die Flucht nach Westen während dieses Vorgangs automatisch durch die Basisumwandlung erfolgt.
quelle
APL
GolfScript,
2322 ZeichenEin iterativer Ansatz. Das Array wird mehrmals iteriert und jedes Mal wird eine Anzahl von Paaren von rechts nach links übertragen. Probieren Sie das Beispiel online aus .
Kurze Erklärung des Codes:
quelle
~]{2base}2*' '*
wäre das der Fall ...GolfScript (25 Zeichen)
Online-Demo
Ziemlich einfache Lösung: Es gibt einen interessanteren Ansatz, bei dem der Ausgabewert für jede Insel in Abhängigkeit von den Eingabewerten definiert wird. Ich denke jedoch, er kann nicht annähernd so weit golfen werden, wie es tatsächlich mit dem in der Frage beschriebenen Umverteilungsalgorithmus möglich ist.
quelle
Javascript / ES6 (69)
Spielen mit bitweisen Operatoren:
x&=1
behält das niedrigste Bit (1 wenn ungerade, 0 wenn gerade)x>>1
ist eine Division durch 2 für ganze ZahlenVersion ohne ES6:
Beispiele:
f("3 8 6 0 2")
Returns[8, 1, 0, 1, 0]
f("0 997 998 999 1000")
Returns[935, 0, 1, 1, 0]
quelle
f=a=>{a=a.split(' ');for(x=5;--x;a[x]&=1)a[x-1]-=-a[x]/2|0;return a}
das sind 68 Zeichen.Python - 96 Zeichen
Zum ersten Mal Golf spielen! Eingabe von stdin.
quelle
' '
, indem Sie es auf 96 reduzieren und die anderen Python2-Lösungen übertreffen.J (26 Zeichen)
Hier ist meine Lösung in J:
((<.@-:@}.,0:)+{.,2|}.)^:_
Diese allgemeine Lösung sollte mit einer beliebigen Anzahl von Inseln funktionieren.
quelle
Rubin,
97907472Online Version
Golf es ein bisschen weiter, nicht mehr das Array umkehren ...
quelle
C - 121 Zeichen
Die Eingabe erfolgt aus stdin.
quelle
Python2 - 98 Zeichen
Eingabe von stdin.
Python3 - 79 Zeichen
Eingabe von stdin.
quelle
Python 2,
85-80BytesX Personen, die auf einer beliebigen Insel beginnen, entsprechen X * 2 Personen, die eine Insel auf der rechten Seite beginnen. Dieser Code konvertiert alle Benutzer in der Startkonfiguration in ihre Entsprechung in Insulanern ganz rechts und verwendet dann die binäre Darstellung des Ergebnisses, um zu bestimmen, wie viele Benutzer auf jeder Insel landen.
BEARBEITEN: Verkürzung des Codes durch Initialisierung
b
auf 1 anstelle von 0, wodurchbin
anstelle einer Formatzeichenfolge die Verwendung gestattet wird .quelle
Python (101)
Wir durchlaufen die Liste von hinten nach vorne und verschieben die Populationen entsprechend der Spezifikation. Anschließend drucken wir die Liste aus. Hier ist ein kurzer Test:
quelle
Mathematica 105
Dies sollte mit einer beliebigen Anzahl von Inseln funktionieren.
Beispiele
5 Inseln
25 Inseln
quelle
270, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0
für Sie lange Testdaten. Ich glaube, ich habe bestätigt, dass ich richtig bin.Java -
647533, aber in der Hoffnung auf ein paar Brownie-Punkte für Java 8-Streams.Die unkomprimierte Form:
Mit Unterstützung von:
Etwas besorgt darüber, dass @ DavidCarraher's Test:
erzeugt
quelle
Java -
196195Ich sagte mir, ich würde es nicht posten, wenn ich es nicht unter 200 kriegen könnte ... Ich glaube ehrlich gesagt nicht, dass ich irgendetwas anderes loswerden kann, es ist ziemlich schlank für Java.
Zeilenumbrüche:
Beispiel Input Output:
quelle
Java - 179 Zeichen
Komprimiert:
Normal:
Beispielausgabe:
quelle
Emacs Lisp 144 Zeichen
Nicht winzig, aber es funktioniert
quelle
awk - 44 Zeichen
quelle
Java - 116 Zeichen
Zum Beispiel
int[] i = {2, 33, 16, 5};
(ich denke, diese addieren sich nicht zur Zählung, da jede Zahl variieren kann) würde ausgegeben23 0 0 1
quelle