Ein Mann von den Sternen ist auf die Erde gekommen! Zum Glück hat der Präsident der Vereinigten Staaten, Donald Trump, einen unendlichen Tod. Mit diesem Würfel kann er eine Zahl heraufbeschwören, mit der Sie , der Bürgermeister von Podunk , bestimmen müssen, wer geschickt werden soll, um den Eindringling zu stoppen! Aber seien Sie vorsichtig, Sie können nur eine begrenzte Anzahl von Bytes auf die Rückseite Ihres Frosches senden !
Bei einer Benutzereingabe (bei der es sich um eine positive Ganzzahl handelt) müssen Sie abhängig von der Kategorie, in der sich die Zahl befindet, eine Zeichenfolge zurückgeben.
- Wenn die Zahl eine Fibonacci-Zahl ist , müssen Sie Ness ausgeben .
- Wenn die Nummer eine Lucas-Nummer ist , müssen Sie Lucas ausgeben .
- Wenn die Nummer sowohl eine Lucas-Nummer als auch eine Fibonacci-Nummer ist , müssen Sie Travis ausgeben .
- Wenn die Zahl weder aa Lucas Nummer noch eine Fibonacci - Zahl , müssen Sie Ausgabe Pippi .
Beispiele
Hier sind einige Testfälle:
1 => Travis 2 => Travis 3 => Travis 4 => Lucas 5 => Ness 6 => Pippi 7 => Lucas 8 => Ness 610 => Ness 722 => Pippi 843 => Lucas
Regeln
- Dies ist Code-Golf , die kürzeste Antwort in Bytes gewinnt.
- Ihr Programm kann ein vollständiges Programm oder eine (nicht anonyme) Funktion sein.
Boni
Es gibt ein paar Boni, mit denen Sie Ihrem Frosch helfen können, die Daten schneller zu Präsident Trump zu bringen:
- Für
-15
Bytes: Wenn die Eingabenummer ist2016
, müssen Sie ausgebenTrump
, da er sich auf dem Höhepunkt seiner Präsidentschaft befindet.
0, 1
während andere mit beginnen1, 1
, hängt dies meiner Meinung nach von der Definition ab, die Sie verwenden. Es ist nicht ungewöhnlich, dass die Lucas-Zahlen mit beginnen2, 1
, z. B. hat OEIS beide Versionen ( 1 , 2 ), aber die mit 2 beginnende ist die Definitionsphase, mit der sie gegangen sind.Antworten:
Pyth, 59-15 = 44 Bytes
oder 42 Bytes nachdem ein Fehler behoben wurde
Hexdump:
Die ersten beiden Zeichen (
&Q
) sind notwendig , weil ein Pyth Parsing Fehler, machtQ
nach."
scheitern. Fix wurde angewendet. Wenn der Post-Bugfix-Interpreter zulässig ist, -2 Byte.Ohne unlesbare String-Komprimierung:
Pyth, 63-15 = 48 Bytes
49 Bytes ohne Trump
Test Suite
Ganz einfach, erstellen Sie einfach die Sequenzen, duplizieren Sie eine und überprüfen Sie die Mitgliedschaft.
Sequenzen werden generiert, indem mit
[1, 2]
und begonnen[2, 1]
wird und dann die Fibonacci-Regel angewendet wird.quelle
Julia,
146142121120 BytesDadurch wird eine unbenannte Funktion erstellt, die einen Booleschen Wert zurückgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=n->...
.Ungolfed:
Problem behoben und 7 Bytes dank Glen O gespart!
quelle
Mathematica
143156 - 15 (Bonus) = 141 BytesMit 2 Bytes dank LegionMammal978 gespeichert.
quelle
False
undTrue
kann durch1<0
bzw.1>0
ersetzt werden.Mathematica,
9287 BytesInspiriert von der Antwort von Sp3000 .
quelle
Python 2, 107
Der Schlüssel sind zwei rein arithmetische Prüfungen für Fibonacci und Lucas Zahlen:
n
ist eine Fibonacci-Zahl, genau wenn5*n*n+4
oder5*n*n-4
ist ein perfektes Quadratn
ist eine Lucas-Zahl, genau wenn5*n*n+20
oder5*n*n-20
ist ein perfektes QuadratDiese Seite hat Beweisskizzen .
Die Ausgabe hängt also von den Werten von
5*n*n+i
fori
in ab{4,-4,20,-20}
. Die Funktionf
testet einen Wert voni
, indem sie prüft, ob der entsprechende Wert keine ganze Quadratwurzel hat. Diesabs
dient nur dazu, einen Fehler bei der Wurzelbildung eines Negativs für zu vermeidenn=1, i=-20
.Die Funktion
f
übernimmt den Wert dern
zu testenden Zahl aus STDIN. Python wertet dies nur einmal aus, nicht einmal pro Funktionsaufruf.Ob die Zahl nicht Fibonacci ist, wird unter
f(4)*f(-4)
Verwendung der impliziten Umwandlung von Booleschen Werten in Zahlen und in ähnlicher Weise für Lucas nicht bewertet , und die entsprechende Zeichenfolge wird verwendet. Wenn nachfolgende Leerzeichen zulässig wären, wäre das String-Interleaving kürzer.quelle
Python 2, 117 Bytes
Für die Stringliste
"Pippi Lucas Ness Travis".split()
ist die Länge gleich.quelle
CJam,
585554 BytesNaiver Ansatz, die Fibonacci-und Lucas-Zahlen zu generieren, dann die Vorkommen in beiden zu zählen, in Binärdaten umzuwandeln und die entsprechende Zeichenfolge auszuwählen.
Probieren Sie es online aus .
quelle
Im Ernst, 69 Bytes
Vor dieser Herausforderung hatte Seriously das Builtin
f
(Index in Fibonacci-Nummern, -1, wenn keine Fibonacci-Nummer) ... aber kein Index in einer Liste oder "ist in Liste"! (Es ist seitdem als hinzugefügt wordení
.)Infolgedessen verbringe ich folgende Zeit damit, herauszufinden, ob die Eingabe eine Fibonacci-Zahl ist:
Das ist, was ich damit verbringe, eine Liste von Lucas-Nummern zu generieren:
Und das ist es, was ich damit verbringe, herauszufinden, ob die Eingabe in der Liste der Lucas-Zahlen enthalten ist:
Dies ist eine Zeichenfolge, die mit der% -Notation von Python in so etwas wie formatiert
:610:=
und in eine Funktion konvertiert wird, die dann über das Array gemappt und summiert wird. (Die Lucas-Zahlen sind eindeutig, die Summe ist also immer 0 oder 1.)Vielen Dank an @Mego für das letzte Bit bei der String-Formatierung.
quelle
Perl,
133(146-15 =) 131(144-15 =) 129(136-15 =) 121 Bytes+1 Byte für das
-n
Flag.Mit Zeilenumbrüchen nach Semikolons zur besseren Lesbarkeit:
Demo:
Tricks:
Sie fragen sich vielleicht, warum meine Variablen mit dem Namen$a
,$b
,$%
, und$d
. Das ist eine hervorragende Frage! In der Tat erlaubt es mir, ein Byte zu speichern.ist ein Byte kürzer als
Dies gilt nicht mehr, da ich meinen Code durch Neuanordnen von Dingen golfen habe und die Änderung des Variablennamens dazu führte, dass keine Bytes mehr gespeichert wurden. Ich habe es zurückgesetzt, damit Variablennamen wieder Sinn machen.$_-2?$f+$l*2:3
ist leicht interessant. Grundsätzlich musste ich2
für Lucas-Nummern einen Sonderfall machen, da mein Programm prüft, ob eine Nummer eine Lucas-Nummer ist, nachdem die Fibonacci- Nummer und die Lucas-Nummer "aktualisiert" wurden. So2
galt eine Nicht-Lucas-Nummer.$_-2?foo:bar
ist ein Zeichen kürzer als$_==2?bar:foo
. Das Gleiche wird für den2016
Test verwendet.Dies gilt auch nicht mehr, da ich das Programm so umstrukturieren konnte, dass keine Sondergehäuse erforderlich sind
2
. Aber ich benutze$_-2016?stuff:Trump
stattdessen immer noch$_==2016?Trump:stuff
, was ein Byte länger ist.Apropos, Sie fragen sich vielleicht, wie ich diese Umstrukturierung durchgeführt habe. Ich habe das Programm soeben dazu gebracht, 9-mal mehr Iterationen als nötig durchzuführen, was nur 2 Bytes (
*9
) kostet, aber es mir ermöglicht, Annahmen zu treffen, die beim Golfspielen helfen.Da Variablen standardmäßig auf Null gesetzt sind,
ist kürzer als
Perl unterstützt Barewords, daher muss ich keine meiner Zeichenfolgen (\ o /) angeben.
quelle
-n
Flag aufgerufen werden muss (wie in der Antwort angegeben).-n
Flagge?while(<>) { ... }
Schleife um Ihr Programm angenommen. Siehe: Perl-Dokumente .Julia,
101100 BytesUngolfed:
quelle
{}
alternative Syntax fürAny[]
veraltet ist. das würde ein paar Bytes sparen.Oktave, 93 Bytes
Dieser Ansatz ähnelt meiner MATLAB-Antwort, mit der Ausnahme, dass Sie mit Octave direkt in ein neues Array indexieren können:
quelle
MATL (nicht konkurrierend),
575554(67-15) = 52 BytesProbieren Sie es online!
Erläuterung
Wieder eine ähnliche Logik wie meine anderen Antworten hier und hier .
quelle
C ++ 11, 176 + 15 (#include) = 191
Ungolfed mit Gebrauch. Ich kann eine Erklärung hinzufügen, wenn ich morgen darum gebeten werde, jetzt ins Bett zu gehen!
quelle
Javascript (ES6), 108 Byte
Gleiche Funktion für Fibonnacci und Lucas. Es ist eine rekursive Funktion, die die ersten beiden Werte als init verwendet.
quelle
Java, 151 Bytes
Man könnte argumentieren, dass Trump diese wichtige Entscheidung niemals auslagern würde, sodass wir die Methode nicht veröffentlichen müssten, um weitere 7 Bytes zu sparen.
Ungolfed inklusive Test-Hauptaufruf
Ich habe bis jetzt keine Möglichkeit gefunden, für 2016 zu testen und "Trump" in Code zurückzugeben, der weniger als 15 Byte Code enthält.
quelle
C (GCC) ,
128120116110 BytesProbieren Sie es online!
Erläuterung
Nennen wir
F(n)
die n-te Fibonacci-Zahl undL(n)
die n-te Lucas-Zahl.a
,b
SindF(n-1)
,F(n)
jeweils.Dann können wir berechnen
L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Diese Funktion berechnet nacheinander die Zahlen von Fibonacci und Lucas bis
n
und prüft, obn
eine davon vorliegt.Wenn
n
es sich um eine Fibonacci-Nummer handelt, wird das 1. Bit vono
auf gesetzt.1
Wenn
n
es sich um eine Lucas-Nummer handelt, wird das 2. Bit vono
auf gesetzt,1
o
um zu bestimmen, welcher Name ausgegeben werden sollBearbeiten
a<b<c
unda<a+c=L(n)
, also( b<=n || a+c<=n ) => a<n
. Ich musste eigentlicha<=n
richtig damit umgehenn=1
c
, gleichF(n+1)
, was nutzlos war, da wir bereitsF(n+1)
mita
und rechnen könnenb
quelle
b+=a
stattdessen vorb=a+b
Perl 5.10, 119 - 15 (Bonus) = 104 Bytes
Ungolfed:
Dies nutzt die Tatsache aus, dass
ist die größte Lucas-Zahl kleiner oder gleich F (n).
quelle
Groovy, 149 Bytes
Testcode:
g
ist ein Abschluss, der eine Liste von Zahlen basierend auf einems
Startwert (m
) und einem Maximalwert ( ) generiert .(g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)
Findet den zu verwendenden Index basierend auf der Zahl "Lucas" oder "Fibonacci".quelle
MATLAB,
122119 BytesKurze Erklärung
Zuerst erstellen wir eine Zellenmatrix mit den Werten drucken:
{'Pippi', 'Lucas', 'Ness', 'Travis'}
. Um herauszufinden, welcher Wert angezeigt werden soll, prüfen wir, obn
es sich um eine Fibonacci-Zahl oder eine Lucas-Zahl handelt.Für Fibonnaci verwenden wir die folgende Formel:
Diese prüft, ob entweder
5*n^2 + 4
oder5*n^2 - 4
sind ein perfektes Quadrat. Wennany
ja, dann ist es eine Fibonacci-Zahl.Die Formel für eine Lucas-Zahl ist sehr ähnlich, mit der Ausnahme, dass wir +/- 20 anstelle von 4 verwenden:
In dieser Lösung habe ich diese beiden Fälle mithilfe der Matrix zu einem zusammengefasst:
Durch Anwenden der gleichen Gleichung wie oben, jedoch
any
unter Berücksichtigung der ersten Dimension, erhalte ich ein logisches Array mit zwei Elementen, wobei, wenn das erste Elementtrue
eine Lucas-Zahl ist und wenn das zweite Elementtrue
eine Fibonacci-Zahl ist .Um dann den Index in mein anfängliches Zellenarray zu berechnen, behandle ich dies als binäre Sequenz, indem ich eine elementweise Multiplikation dieses Booleschen mit
[2^0, 2^1]
oder einfach durchführe[1,2]
. Und summiere die Elemente. Offensichtlich muss ich wegen MATLABs einseitiger Indizierung 1 hinzufügen.Dann muss ich
subsref
undsubstruct
in das anfängliche Zellenarray indizieren, um das Endergebnis zu erhalten.quelle
JavaScript (ES6), 97 Byte
Die
a==1
Prüfung wird benötigt, da ich sonst nicht bemerke, dass 1 eine Lucas-Nummer ist.quelle
Jelly , 47 Bytes - 15 = 32 (nicht konkurrierend ...?)
Probieren Sie es online!
quelle
05AB1E ,
3937 (52 - 15 Bonus) BytesProbieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle