Bei einer durch Leerzeichen getrennten Liste von Ganzzahlen besteht Ihre Aufgabe darin, die nächste Ganzzahl in der Sequenz zu finden. Jede ganze Zahl in der Sequenz ist das Ergebnis eine einzige mathematische Operation der Anwendung ( +
, -
, *
oder /
) zur vorherige ganzen Zahl ist , und jede Sequenz wird aus einer variablen Anzahl dieser Operationen aus (aber nicht mehr als 10). Keine Sequenz ist länger als die Hälfte der Sequenz von Ganzzahlen, sodass jede Sequenz von Operationen zur Bestätigung mindestens zweimal angezeigt wird.
Die Eingabe erfolgt über stdin (oder prompt
für JavaScript-Lösungen).
Hier einige erläuternde Beispiele.
Eingang:
1 3 5 7 9 11
Ausgabe:
13
Ziemlich einfach. Alle Werte sind Vorgängerwerte +2
.
Eingang:
1 3 2 4 3 5 4 6 5 7 6
Ausgang:
8
Zwei Schritte in dieser Reihenfolge, +2
dann -1
.
Eingang:
2 6 7 3 9 10 6 18 19 15 45 46
Ausgabe:
42
Drei Schritte - *3
, +1
, -4
.
Testfälle
Hier noch ein paar Testfälle:
Eingang:
1024 512 256 128 64 32 16
Ausgabe:
8
Eingang:
1 3 9 8 24 72 71 213 639
Ausgabe:
638
Eingang:
1 2 3 4 5 2 3 4 5 6 3 4 5 6 7
Ausgabe:
4
Eingang:
1 2 4 1 3 9 5 8 32 27 28 56 53 55 165 161 164 656 651 652 1304
Ausgabe:
1301
Ich habe eine Scala-Lösung (42 Zeilen), die ich in ein paar Tagen veröffentlichen werde.
Das ist Code-Golf - die kürzeste Antwort gewinnt.
Antworten:
Golfscript,
203138 ZeichenDies verwendet weit mehr
if
s als ein Standard-Golfscript-Programm und seine Bedienung ist ziemlich kryptisch.Mein ursprünglicher Beitrag war der folgende mit 88 Zeichen:
Hierbei wird jedoch versucht, die Operationen vom ersten Auftreten jeder Operation an zu berechnen. Wenn die Operation also eine Multiplikation oder Division ist und das Argument beim ersten Mal 0 ist, wird sie unterbrochen.
quelle
Haskell,
276261259257243 ZeichenHier ist meine ineffiziente Lösung. Es funktioniert mit unbegrenzten (und begrenzten) ganzen Zahlen. Diese Lösung funktioniert bei nicht exakter Unterteilung (zB:)
5 / 2 = 2
.So funktioniert es: Ich erstelle jede mögliche Folge von (möglichen) Operationen. Dann teste ich anhand der Eingabesequenz von Zahlen, ob die generierte Sequenz die Eingabe erzeugt. Wenn dies der Fall ist, geben Sie die nächste Nummer in der Sequenz zurück. Der Code gibt immer eine Antwort zurück, die aus einer kürzesten Abfolge von Vorgängen abgeleitet wurde. Dies geschieht, weil die Liste der Operationssequenzen in dieser Reihenfolge generiert wird. Es ist willkürlich (aber beständig), sich für eine Verbindung zu entscheiden. Zum Beispiel gibt der Code
6
oder8
für die Sequenz zurück2 4
.Ungolfed:
quelle
Control.Monad -> Monad
möglich Und wie wäre esinteract$show.n.q read.words
Python,
333366...315303278269261246 ZeichenErzeugt eine Operation mit dem ersten Zahlenpaar und überprüft sie bei anderen Paaren. Speichert alle Operationen und wendet, wenn alle erfolgreich sind, die entsprechende Operation auf das letzte Listenelement an.
Bearbeitet: Besteht bösen Test :-) Jetzt auf allen Positionen nach Operation suchen.
quelle
0 0 1 2 3 6 7 14
0 0 0 0 1 0 0 0 0 1
wird nicht ausgegeben0
.lambda x:x+b-a
->(b-a).__add__
. Schade, dass es nur ein Charakter ist, ich lerne so viel über Python, indem ich das mache.l
implizit globale spart eine Menge: pastie.org/2416407Python,
309305295279 ZeichenBehandelt alle Original-Testfälle sowie Peter Taylors knorrigen
0 0 1 2 3 6 7 14
:Ungolfed, mit Debugging-Ausgabe (sehr hilfreich bei der Überprüfung der Korrektheit):
Verwendung:
quelle
v<1
als Wache.Ruby 1,9
(437)(521)(447)(477)Funktioniert für alle Testfälle, einschließlich der "bösen". Ich werde später mehr Golf spielen.
BEARBEITEN: Mir ist aufgefallen, dass es einen anderen Fall gibt, den ich nicht richtig behandelt habe - wenn die Fortsetzung die "Rätsel" -Operation verwenden muss. Die Sequenz
2 0 0 -2 -4 -6
gab anfangs 0 anstelle von -12 zurück. Ich habe das jetzt behoben.BEARBEITEN: Einige Randfälle wurden behoben und der Code auf 447 reduziert.
EDIT: Ugh. Musste etwas Code hinzufügen, um andere "böse" Sequenzen wie z
0 0 0 6 18 6 12
quelle
Scala
Dies ist die Lösung, die ich mir ausgedacht habe:
Ungolfed:
quelle
echo "0 0 1 2 3 6 7 14" | scala Sequence
Hält den Bildschirm schwarz.scala Sequence
und geben Sie die Sequenz ein und drücken Sie die Eingabetaste.Scala 936
ungolfed:
Scheitert kläglich an Peter Taylors
h
, aber ich sehe keine Möglichkeit, das Programm in angemessener Zeit zu heilen.quelle
-
als Sonderfall von+
und/
als Sonderfall von behandelt würden*
? Meine Art, Peter Taylors (und ähnliche) Eingaben weiterzugeben, bestand darin, die erste Zahl in der Sequenz abzuschneiden und es erneut zu versuchen. Ich hatte noch keine Zeit zu schauen, wie Ihr Programm funktioniert, um zu wissen, ob das bei Ihnen helfen würde.-1, 0, 0, 1, 2, 3, 6, 7, 14
wird eine andere Heilung benötigen.