Definition
a(0) = 0
a(n) = n-a(a(a(n-1)))
für ganze Zahln > 0
Aufgabe
Bei nicht negativer Ganzzahl n
wird ausgegeben a(n)
.
Testfälle
n a(n)
0 0
1 1
2 1
3 2
4 3
5 4
6 4
7 5
8 5
9 6
10 7
11 7
12 8
13 9
14 10
15 10
16 11
17 12
18 13
19 13
20 14
10000 6823
Verweise
code-golf
sequence
number-theory
recursion
Undichte Nonne
quelle
quelle
Antworten:
Haskell,
2322 BytesVerwendet einfach die Definition der Reihenfolge.
f(f$f$n-1)
ist äquivalent zuf (f (f (n-1)))
.Prüfung:
Vielen Dank an Anders Kaseorg für ein Byte!
quelle
(f$f$f$n-1)
=f(f$f$n-1)
speichert ein Byte.Gelee , 8 Bytes
Probieren Sie es online! oder überprüfen Sie die kleineren Testfälle .
Wie es funktioniert
quelle
Mathematica, 20 Bytes
Die Byteanzahl setzt die ISO 8859-1-Codierung (oder eine kompatible Codierung) voraus und wird
$CharacterEncoding
auf einen übereinstimmenden Wert festgelegt, wie in der Windows-StandardeinstellungWindowsANSI
.Dies definiert einen unären Operator
±
.quelle
PlusMinus
. Siehe diesen Beitrag für Details.@
oder[ ]
auch.J,
14-12Bytes2 Bytes dank @ Leaky Nun gespeichert .
Ermittelt das Ergebnis durch den Aufruf selbst rekursiv , wenn n > 0 dreimal auf n -1 und dieses Ergebnis aus der Subtraktion n . Anders sieht es im Basisfall aus, wenn n = 0 . Dort wird n - n berechnet , was 0 entspricht.
Probieren Sie es hier aus.
Erläuterung
quelle
Julia, 16 Bytes
Probieren Sie es online!
Wie es funktioniert
Wir definieren den unären Operator
!
für unsere Zwecke neu.Wenn n = 0 , der Vergleich
n>0
kehrt falsch und so tut!
.Andernfalls wird der Code danach
&&
ausgeführt.~-n
entspricht(n-1)
dem Zweierkomplement,!!!
ruft rekursiv!
dreimal n - 1 auf und der resultierende Wert wird von n subtrahiert .quelle
-!!~-
._ los ist.!
ist einfach der Name der Funktion.Python, 31 Bytes
Rekursionsgrenze und Zeitbeschränkungen machen die obige Funktion unpraktisch, aber theoretisch sollte sie funktionieren (und funktioniert für kleine n).
quelle
JavaScript (ES6), 52 Byte
Ich hätte langweilig sein und die rekursive Version schreiben können, aber diese Version ist viel schneller (leicht mit dem letzten Testfall fertig zu werden) und verwendet sie auch
reduce
, also ist das ein Plus!quelle
Retina ,
4943 BytesProbieren Sie es online!
quelle
CJam,
1312 BytesVielen Dank an Dennis für das Speichern von 1 Byte.
Teste es hier.
quelle
a
.R,
4241 BytesVerwendung:
Dieser rekursive Ansatz ist für größere Werte von
n
allerdings nicht gut skalierbar.quelle
n<1
. Als Folge ist es ohnehin nur für nicht negative ganze Zahlen wirklich definiert.a=function(n)"if"(n,n-a(a(a(n-1))),0)
funktioniert für mehrere Bytes aus.Oase , 6 Bytes
Code:
Erweiterte Version:
Code:
Probieren Sie es online!
quelle
Sesos ,
5855 BytesBehandelt Eingaben bis zu 400 ziemlich gut, aber die Laufzeit steigt danach dramatisch an.
Probieren Sie es online! Überprüfen Sie Debug , um den generierten SBIN-Code anzuzeigen.
Sesos Montage
Die obige Binärdatei wurde durch Zusammenstellen des folgenden SASM-Codes generiert.
quelle
LISP, 61 Bytes
Wahrscheinlich nicht die optimale Lösung, aber es funktioniert.
quelle
Java 7, 42 Bytes
Ungolfed & Testfälle:
Probieren Sie es hier aus.
Ausgabe:
quelle
Ruby, 27 Bytes
Die offensichtliche Umsetzung.
Dies ist eine längere und schnellere Antwort, mit der vorherige Einträge in der Sequenz zwischengespeichert werden. Beide Antworten funktionieren nur für Versionen nach 1.9, als
->
das Stabby Lambda in Ruby eingeführt wurde.quelle
C #, 35 Bytes
quelle
Golfscript,
2625 BytesProbieren Sie es online!
Vor Ort
10000
dauert weniger als eine halbe Sekunde.quelle
C,
3532 Bytes3 Bytes gespart dank @PeterTaylor!
Probieren Sie es auf Ideone!
quelle
a(n){return n?n-a(a(a(n-1))):0;}
:
in Ihrem Code. Sie sollten den nachher herausnehmen?
.Javascript ES6, 22 Bytes
Ich werde langweilig sein und die rekursive Version machen: P
quelle
VBA, 69 Bytes
Arbeitet im Handumdrehen auf dem Test-Set, verlangsamt sich etwas oberhalb von n = 1000000, stößt auf eine Speicherwand etwas oberhalb von n = 25 Millionen.
quelle
Pyth, 10 Bytes
Definiert eine Funktion
y
. Probieren Sie es online aus: DemonstrationDies nutzt eine relativ neue Funktion von Pyth. Mit der Fold-Syntax können Sie eine Funktion mehrfach anwenden. Es speichert eigentlich keine Bytes, ich habe es nur zu Demonstrationszwecken verwendet.
Erläuterung:
quelle
Ahorn,
2826 BytesVerwendung:
quelle
Gleichstrom, 34 Bytes
Die Eingabe erfolgt vom oberen Rand des Stapels. Dies muss das einzige Element auf dem Stapel sein, da die Stapeltiefe als Zähler verwendet wird. Anwendungsbeispiel:
Dies ist eine ziemlich einfache Implementierung der Sequenzdefinition:
Wie auch immer, es begann einfach ... dann geschah das Golfen.
quelle
Common Lisp , 44 Bytes
Probieren Sie es online!
quelle
C ++ (hauptsächlich MSVC)
Normale Version: 40 Bytes
Template Meta-Programmierversion: 130 Bytes
Verwendung :
Die Template-Version ist der schnellste Code, da es nichts schnelleres gibt, als einen Wert in ein Register zu verschieben => mit Optimierung
H<20>::a()
kompilieren Sie als:Bei 10000 stürzt die rekursive Version aufgrund eines Stapelüberlauffehlers ab, und die Vorlagenversion stürzt zur Kompilierungszeit aufgrund der Tiefe der Vorlageninstanziierung ab. GCC geht an 900 (614)
quelle
C
und{
in der Vorlage Meta-ProgrammierversionD , 36 Bytes
Probieren Sie es online!
quelle
APL (Dyalog Unicode) ,
18 bis17 BytesProbieren Sie es online!
Überraschenderweise gibt es keine APL-Antwort auf diese Herausforderung. Dies ist eine wörtliche Implementierung der Funktion im OP.
TIO hat eine Auszeit fürn > 90 .
Dank @ Zacharý ein Byte gespeichert.
quelle
{⍵=0:0⋄⍵-∇⍣3⊢⍵-1}
Python 3, 72 Bytes
Ideone es!
quelle
PowerShell v2 +, 56 Byte
Das PowerShell-Äquivalent eines Lambdas zur Bildung der rekursiven Definition. Führen Sie es über den
&
Call Operator aus, z&$a(5)
. Die Ausführung dauert sehr lange - selbst50
auf meinem Computer (einem neuen i5 mit 8 GB RAM) dauert die Ausführung ungefähr 90 Sekunden.Schnellere iterative Lösung, 59 Bytes
Nur länger, weil wir Eingaben berücksichtigen müssen
0
(das ist*!!$n
das Ende). Ansonsten konstruieren wir das Array nur iterativ bis$n
, fügen jedes Mal ein neues Element hinzu und geben das letzte am Ende aus$o[-1]
. Superschnell - das Rechnen10000
auf meiner Maschine dauert ungefähr 5 Sekunden.quelle
> <> , 55 + 2 = 57 Bytes
Es wird erwartet, dass die Eingabe beim Programmstart auf dem Stack vorhanden ist, also +2 Byte für das
-v
Flag. Probieren Sie es online!Dies ist hecka langsam, da es die Rekursion verwendet, um das Ergebnis zu berechnen. Die Verwendung von TIO
h(50)
dauert mehr als eine Minute. Es gibt die korrekten Ergebnisse <= 30 zurück, daher bin ich zuversichtlich, dass es funktionieren würde. Ich habe esh(10000)
nur nicht ausgeführt, um es herauszufinden!quelle