Lassen Sie uns zunächst über Beatty-Sequenzen sprechen . Eine positive irrationale Zahl gegeben r , können wir eine unendliche Folge durch Multiplikation der positiven ganzen Zahlen konstruieren , r , um und unter dem Boden jeder resultierenden Berechnung. Beispielsweise,
Wenn r > 1, haben wir eine spezielle Bedingung. Wir können eine andere irrationale Zahl s als s = r / ( r - 1) bilden. Dies kann dann seine eigene Beatty-Sequenz B s erzeugen . Die unverdünnte Trick ist , dass B r und B s sind komplementär , was bedeutet , dass jede positive ganze Zahl in genau einer der beiden Sequenzen ist.
Wenn wir r = ϕ, den goldenen Schnitt, setzen, erhalten wir s = r + 1 und zwei Spezialsequenzen. Die untere Wythoff-Sequenz für r :
1, 3, 4, 6, 8, 9, 11, 12, 14, 16, 17, 19, 21, 22, 24, 25, 27, 29, ...
und die obere Wythoff-Sequenz für s :
2, 5, 7, 10, 13, 15, 18, 20, 23, 26, 28, 31, 34, 36, 39, 41, 44, 47, ...
Dies sind die Sequenzen A000201 und A001950 auf OEIS.
Die Herausforderung
Bei einer positiven Ganzzahl 1 <= n <= 1000
geben Sie einen von zwei unterschiedlichen Werten aus, die angeben, ob sich die Eingabe in der unteren Wythoff-Sequenz oder in der oberen Sequenz befindet. Die Ausgabewerte könnten -1
und 1
, true
und false
, upper
und lower
usw. sein.
Obwohl Ihr eingereichter Algorithmus theoretisch für alle Eingaben funktionieren muss, muss er in der Praxis nur mit den ersten 1000 Eingabenummern funktionieren.
I / O und Regeln
- Die Eingabe und Ausgabe kann durch jede bequeme Methode erfolgen .
- Es kann davon ausgegangen werden, dass die Eingabe und Ausgabe in den Native-Number-Typ Ihrer Sprache passt.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
quelle
Antworten:
JavaScript (ES6),
5035 BytesAusgänge
1
für unteres und0
für oberes. Erläuterung: Teillisten Boolesche Werte können mit einem Fibonacci-like konstruiert werden Identität: Da zwei Listen, beginnend mit1
und10
jeder nachfolgende Liste ist die Verkettung der beiden vorangegangenen, was101
,10110
,10110101
usw. In diesem Fall Golfier es ist leicht zu haben ein gefälschter 0. Eintrag von0
und benutze diesen, um das zweite Element der Liste zu konstruieren.quelle
Haskell , 26 Bytes
Probieren Sie es online!
Keine Schwimmer, unbegrenzte Präzision. Danke für H.PWiz für zwei Bytes.
quelle
~(x:t)
. Dankeundefined
. Die Tatsache, dass es auch zwei verschiedene definierte gibt, ist nur zufällig.Python , 25 Bytes
Probieren Sie es online!
Verwendet die sehr einfache Bedingung:
Beachten Sie, dass das Modulo-Ergebnis positiv ist, obwohl
-n
es negativ ist. Dies entspricht der Vorgehensweise von Python bei Modulo.Dies entspricht diesem Code:
Probieren Sie es online!
Wir sparen ein Byte, indem wir auf verdoppeln
-(n*2)%(phi*2)<2
.quelle
05AB1E , 9 Bytes
Probieren Sie es online!
0 bedeutet oben, 1 bedeutet unten. Probieren Sie die ersten 100: Probieren Sie es online!
Raw-Befehlsspeicherauszug:
quelle
ï
:)5t>;
zu einem 2-Byte kann es aber nicht wert sein ...ï
und¢
lol :) Alle unsere Lösungen sind so eng miteinander verbundenGelee , 5 Bytes
Probieren Sie es online!
Dank xnors Python-Golf 1 Byte gespart .
Gelee , 6 Bytes
Probieren Sie es online!
Gibt 1 für den unteren und 0 für den oberen Wert zurück.
quelle
Øp
5t>;
Gehirn-Flak , 78 Bytes
Probieren Sie es online!
Gibt nichts für unteres und
0
für oberes aus. Ein Wechsel zu einem sinnvolleren Ausgabeschema würde 6 Byte kosten.quelle
Python 2 ,
393332 Bytes-6 Bytes dank Mr. Xcoder
-1 Bytes dank Zacharý
Probieren Sie es online!
Gibt
False
für unteres undTrue
für oberes zurückquelle
lambda n,r=(1+5**.5)/2:-~n//r<n/r
Spart 6 Bytes.lambda n,r=.5+5**.5/2:-~n//r<n/r
sollte funktionieren auch ein Byte zu rasierenJulia 0,6 , 16 Bytes
Probieren Sie es online!
Beim Herumspielen mit den Zahlen bin ich auf diese Eigenschaft gestoßen: Etage (n / φ) == Etage ((n + 1) / φ), wenn n in der oberen Wythoff-Sequenz ist, und Etage (n / φ) <Etage ( (n + 1) / φ), wenn n in der unteren Wythoff-Sequenz liegt. Ich habe nicht herausgefunden, wie diese Eigenschaft zustande kommt, aber sie liefert die korrekten Ergebnisse mindestens bis zu n = 100000 (und wahrscheinlich darüber hinaus).
Alte Antwort:
Julia 0,6 , 31 Bytes
Probieren Sie es online!
Gibt
true
für die untere undfalse
obere Wythoff-Sequenz zurück.quelle
Pyth , 8 Bytes
Probieren Sie es hier aus!
Gibt 1 für den unteren und 0 für den oberen Wert zurück.
quelle
Wolfram Language (Mathematica) , 26 Byte
Probieren Sie es online!
Eine Ganzzahl
n
befindet sich in der unteren Wythoff-Sequenz iffceil(n/phi) - 1/phi < n/phi
.Beweis dafür, dass
ceil(n/phi) - 1/phi < n/phi
...Ausreichend:
Lassen
ceil(n/phi) - 1/phi < n/phi
.Dann
ceil(n/phi) * phi < n + 1
.Hinweis
n == n/phi * phi <= ceil(n/phi) * phi
.Daher
n <= ceil(n/phi) * phi < n + 1
.Da
n
undceil(n/phi)
ganze Zahlen sind, rufen wir die Definition von Boden und Zustandfloor(ceil(n/phi) * phi) == n
, undn
sind in der unteren Wythoff Sequenz.Notwendig; Beweis durch Kontrapositiv:
Lassen
ceil(n/phi) - 1/phi >= n/phi
.Dann
ceil(n/phi) * phi >= n + 1
.Hinweis
n + phi > (n/phi + 1) * phi > ceil(n/phi) * phi
Daher
n > (ceil(n/phi) - 1) * phi
.Da
(ceil(n/phi) - 1) * phi < n < n + 1 <= ceil(n/phi) * phi
,n
ist in der unteren Wythoff Sequenz nicht.quelle
Japt , 10 Bytes
Gibt true für lower und false für upper zurück.
Probieren Sie es online!
Erläuterung:
quelle
Java 10,
775352 BytesPort von @ Rods Python 2 Antwort .
-1 Byte danke an @ Zacharý .
Probieren Sie es online aus.
Alte
7776 Bytes Antwort:-1 Byte Danke an @ovs 'für etwas, das ich mir letzte Woche empfohlen habe. XD
Kehrt
1
für niedriger zurück;0
für obere.Probieren Sie es online aus.
Erläuterung:
i*Phi
wird mit take berechnet(sqrt(5)+1)/2 * i
und dann durch Umwandlung in eine Ganzzahl, um die Dezimalstelle abzuschneiden, geebnet.quelle
++i<=n
An deiner alten Antwort kann es liegeni++<n
.n->{var r=Math.sqrt(5)/2+.5;return(int)(-~n/r)<n/r;}
Haskell ,
15313912679 BytesUnbegrenzte Präzision!
Probieren Sie es online!
Erläuterung
Anstatt zur Berechnung des Ergebnisses eine Approximation des Goldenen Schnitts zu verwenden, sind sie mit zunehmender Größe der Eingabe fehleranfällig. Diese Antwort gibt es nicht. Stattdessen wird die auf dem OEIS angegebene Formel verwendet, die
a
die eindeutige Sequenz ist, so dassWo
b
ist das bestellte Kompliment?quelle
Brachylog , 8 Bytes
Probieren Sie es online!
Das Prädikat ist erfolgreich, wenn sich die Eingabe in der unteren Wythoff-Sequenz befindet, und schlägt fehl, wenn sich die Eingabe in der oberen Wythoff-Sequenz befindet.
Wenn das Nichtbeenden eine gültige Ausgabemethode ist, kann das erste Byte weggelassen werden.
quelle
φ
es in einem Brachylog-Programm verwendet wird. Letztendlich!MATL , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
K (oK) , 20 Bytes
Lösung:
Probieren Sie es online!
Erläuterung:
quelle
TI-BASIC (TI-84), 18 Byte
Eingang ist in
Ans
.Die Ausgabe erfolgt in
Ans
und wird automatisch gedruckt. Wirdgedruckt,
1
wenn die Eingabe in der unteren Reihenfolge oder erfolgt0
in der oberen Reihenfolge erfolgt.Zufälligerweise läuft dieses Programm nur für0 < N< 1000 .
Beispiel:
Erläuterung:
Hinweis: TI-BASIC ist eine Token-Sprache. Die Anzahl der Zeichen entspricht nicht der Anzahl der Bytes.
quelle
cQuents , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle