EDIT: Ich werde eine Antwort Montag, 15.02.2016 akzeptieren. Mögen die Bytes immer zu Ihren Gunsten sein!
In seiner Challenge "Print the N-Bonacci Sequence" beschreibt @DJMcGoathem die N-Bonacci-Sequenzen, wobei die vorherigen N- Zahlen anstelle der traditionellen 2 der Fibonacci-Sequenz (die als " Duo- Nacci-Sequenz" bezeichnet wird) summiert werden. Er bat dann, zwei Eingaben zu nehmen, X und N, und dann die X- te N- Ncci-Zahl auszugeben.
Ich schlage das Gegenteil vor.
Bei gegebener Sequenz wird ausgegeben, von welcher N- NACCI-Sequenz sie eine Teilmenge ist. Ich sage "Teilmenge von", weil:
- A) Diese Sequenzen sind unendlich
- B) Wenn Sie den Beginn der Sequenz angeben, können Sie einfach die Anzahl der führenden Einsen zählen
Für den Fall, dass es zu mehreren N- NACCI-Sequenzen gehören könnte, wählen Sie die niedrigste aus.
In dem Fall, dass es zu keiner N-Nacci- Sequenz gehört, kann Ihr Programm etwas anderes tun, als etwas auszudrucken, das mit der Ausgabe verwechselt werden könnte. Zu diesen Verhaltensweisen gehören (ohne darauf beschränkt zu sein): Endlosschleife, Fehler, Absturz, Löschen (* Husten * Mahnwache * Husten *) oder Erstellen eines Schwarzen Lochs (solange dieses Schwarze Loch nichts produziert, was dies könnte) für eine gültige Ausgabe gehalten werden).
Aus diesem Grund beginnen diese Sequenzen mit 1. Dies bedeutet, dass jede N- NACCI-Sequenz mit N beginnt . Darüber hinaus ist Nmuss eine positive ganze Zahl sein. Also keine -1 -nacci usw.
Testfälle:
1,1,1 -> 1
49, 97 -> 7
55, 89, 144 -> 2
1 -> 1
6765 -> 2
12, 23, 45, 89 -> 12
100, 199 -> 100
create a black hole (as long as this black hole does not produce anything that could be mistaken for valid output).
Meine Güte, die Spiralen des Schwarzen Lochs laufen zum goldenen Schnitt zusammen! Es muss eine gültige Ausgabe für eine Duoacci-Sequenz sein!Antworten:
Ruby, 94
Ich bin ziemlich überrascht, wie weit ich das mit dem gleichen Algorithmus geschafft habe! Ich habe mit über 200 angefangen!
Ungolfed:
quelle
x=[1]*(s+z=a.size)
genau?n == 1
, dann werden wir niemals inkrementieren, also brauchen wir ein Array von Einsen , egal wie lang die Eingabe ist. Wenn jan > 1
, dann brauchen wir mindestensn
1 für die Sequenz. Ess+a.size
deckt alson == 1
eine beliebige Länge von aba
und deckt den Beginn einer beliebigen anderen Sequenz ab, sodass wir ganzs
nebenbei Ziffern hinzufügen können. Ist das sinnvoll?[1]*number
gibt Ruby ein Array von Einsen mit Länge annumber
. Sox=[1]*(s+z=a.size)
Abtretungsempfängera.size
zuz
, dann Abtretungsempfänger zux
einer Reihe von 1 Länges+z
.Python 2, 176 Bytes
Beachten Sie, dass hierfür Eingaben in folgendem Format erforderlich sind:
eher, als
Ziemlich einfache Lösung, nur um die Dinge ins Rollen zu bringen. Sobald jemand anders antwortet, werde ich mich mehr mit dem Golfspielen befassen. Dies verwendet eine leicht modifizierte Version des N-Bonnaci-Generators aus @Datas Antwort , so schlägt ihn. Dann wird für jeden N-Bonnaci im Bereich der Eingabe geprüft, ob die Eingabe eine Untersequenz davon ist.
quelle
f.append
fürf+=
;
notwendig?Lua,
324323 BytesWenn ich andere Einsendungen sehe, habe ich das Gefühl, dass mit meinem Code etwas nicht stimmt ... Aber ich erinnere mich, dass das Lua ist, und es gibt nicht alle diese ausgefallenen Funktionen: '(
Es hat sehr viel Spaß gemacht, hat mich tatsächlich einige Zeit gekostet.
Bearbeiten: 1 Byte mit einem einfachen Trick gespeichert: Verwenden eines
::label::
+goto label
anstelle einer Endlosschleife mitwhile''
.Ungolfed und Erklärungen
Lua hat keine Möglichkeit, eine Menge, eine Teilmenge oder auch nur zu überprüfen, ob ein Array / eine Tabelle einen Wert enthält, ohne seinen Index / Schlüssel zu verwenden. Aus diesem Grund habe ich mich entschieden, Elemente aus dem Array zu entfernen, das ich als Parameter nehme. Auf diese Weise kann ich aufzeichnen, welche Elemente bereits berechnet wurden und ob sie übereinstimmen.
Sie können Lua online testen und das folgende Codebeispiel kopieren / einfügen, um einige Tests auszuführen. Da diese Funktion beendet wird, wenn sie die Antwort findet (ansonsten Endlosschleife), müssen Sie den verwendeten Index ändern
test[]
(nicht vergessen, dass lua 1-indiziert ist :)).quelle