Forscher entdeckten kürzlich eine interessante Bienenkolonie, die in einem unendlichen Wabenfeld lebt:
Jede Zelle kann eine Biene beherbergen oder nicht. Tatsächlich scheint das Leben dieser Kreaturen ein bisschen ... chaotisch zu sein. Es könnte berechnet werden, dass eine Kolonie immer mit dem folgenden Muster beginnt:
(Biene gezeichnet von Emmanuel Boutet auf Wikimedia Commons . Dieses Waben-Bienen-Bild wird also unter CC-By-SA veröffentlicht . Murren )
Danach werden die Lebenszyklen der Bienen in sogenannte Generationen unterteilt. Jede Generation alter Bienen stirbt und neue schlüpfen, und das hängt in erster Linie von den Nachbarn ihrer Zelle ab:
- Wenn eine Biene weniger als zwei Nachbarn hat, stirbt sie an Einsamkeit.
- Wenn eine Biene mehr als drei Nachbarn hat, stirbt sie an Überfüllung.
- Wenn eine Zelle zwei, drei oder vier lebende Bienen in benachbarten Zellen hat, schlüpft dort in der nächsten Generation eine neue Biene.
Sterbende Bienen sterben erst am Ende einer Generation ab, daher wirken sie sich immer noch auf umliegende Zellen aus, die Bienen in der nächsten Generation ausbrüten könnten.
Jetzt, da wir wissen, wie eine solche Kolonie funktioniert, können wir sie über eine beliebige Anzahl von Generationen simulieren.
Eingang
Die Eingabe ist eine einzelne Zahl N , die bei der Standardeingabe angegeben wird und durch einen Zeilenumbruch abgeschlossen wird. 0 ≤ N ≤ 150. Dies ist die Anzahl der zu simulierenden Generationen.
Ausgabe
Die Ausgabe ist eine einzelne Zahl in der Standardausgabe und optional gefolgt von einem einzelnen Zeilenumbruch, der die Anzahl der lebenden Bienen nach N Generationen darstellt.
Zusätzliche Ausgabe bei Standardfehler wird ignoriert.
Beispieleingaben
0
5
42
100
Beispielausgaben
6
44
1029
5296
Gewinnbedingung
Der kürzeste Code gewinnt, wie es im Golf üblich ist. Bei einem Gleichstand gewinnt die frühere Lösung.
Testfälle
Es gibt zwei Testskripte mit identischen Testfällen:
Der Aufruf erfolgt in beiden Fällen: <test script> <my program> [arguments]
zB ./test ruby beehive.rb
oder ./test.ps1 ./beehive.exe
.
Ich weiß, dass es statt 151 nur 22 Tests gibt (hauptsächlich, weil Lösungen oft sehr langsam sind). Bitte unterlassen Sie es, die genauen Testfälle einzubetten, anstatt die Aufgabe zu lösen. Mit diesen Skripten können Sie bequem testen, ob das Programm nach einer Änderung immer noch korrekt reagiert. nicht, dass Sie Ihren Code an die spezifischen Testfälle anpassen können.
Noch ein Hinweis
Diese Aufgabe war Teil eines Golfwettbewerbs an meiner Universität im Zeitraum 2011-24. Die Partituren und Sprachen unserer Teilnehmer waren wie folgt:
- 336 - C
- 363 - C
- 387 - C
- 389 - Haskell
- 455 - C
Unsere eigene Lösung war
- 230 - Rubin
Antworten:
Ruby,
181163153146 ZeichenDiese Implementierung folgt einem Standardansatz unter Verwendung eines Arrays
h
(Abmessungen200
x200
abgeflacht), wobei jedes Element entweder0
(keine Biene) oder1
(Biene eingeschlossen) ist. Das Array[0,-200,201,202,2,3]
beschreibt die Anfangspositionen der Bienen (relativ zu jeder Anfangszelle).Eingabe und Ausgabe wie oben angegeben bestehen alle definierten Testfälle.
Edit 1: Zurück zu einer Wrapping-Lösung anstelle der "Additional Space" -Version (die in einer Zwischenversion kürzer war, jetzt aber mehrere Zeichen länger ist).
Edit 2: Variable
b
komplett entfernt.Edit 3: Warnung: Diese Bearbeitung hat das Programm fürchterlich langsam gemacht. So habe ich die Abmessungen auf jeweils 200 reduziert, was noch für bis zu 150 Iterationen ausreicht. Anstatt das Array durch eine Variable zu indizieren, drehen wir das Array ständig vorwärts. Nicht wirklich gutes Design, aber jetzt sind wir deutlich unter den 150.
quelle
Python, 152 Zeichen
Diese Lösung verfolgt Bienenstandorte mit einer Reihe komplexer Zahlen. Es ist ziemlich langsam, weil die innere Schleife in der Anzahl der Bienen quadratisch ist. Ich habe bis zu 50 getestet und es funktioniert.
quelle
P={0,2,3,1j,1+1j,1-1j}
und dann{p}<P
zum Testen der Mitgliedschaft verwenden können (spart 1Python,
171169158 ZeichenIch modelliere die Welt als 300 * 300 = 900000 1D-Array (
h
ist tatsächlich größer, aber das Ende wird nicht verwendet), wobei eine Biene eine 1 und leer eine 0 ist. Die Größe von 300 ist in Ordnung, weil höchstens das Wachstum von wäre 2 in jeder Dimension für jede Generation, und es gibt nicht mehr als 150 Generationen.Hier ist eine leicht ungolfederte und kommentierte Version:
quelle