27 votes

Code Fibonacci Golf

Générer la suite de Fibonacci en un minimum de caractères. N'importe quel langage est acceptable, sauf celui que vous définissez avec un seul opérateur, f qui imprime les nombres de Fibonacci.

Point de départ : 25 14 caractères en Haskell :

f=0:1:zipWith(+)f(tail f)

f=0:scanl(+)1f

43voto

Krakkos Points 734

18 caractères de l'anglais .

"Séquence de Fibonacci

ok, j'échoue :)

33voto

Chris Jester-Young Points 102876

13 caractères de Golfscript :

2,~{..p@+.}do

Mise à jour pour expliquer le fonctionnement du script :

  1. 2, crée un tableau de [0 1]
  2. ~ place ce tableau sur la pile
  3. Ainsi, au moment où nous exécutons le do Nous commençons la pile avec 0 1 (1 au sommet de la pile)

En do boucle :

  1. Chaque . duplique l'élément supérieur de la pile ; ici, nous le faisons deux fois (ce qui nous laisse avec 0 1 1 1 lors de la première exécution)
  2. p imprime la valeur la plus élevée (ce qui nous laisse avec 0 1 1 )
  3. @ fait pivoter les 3 premiers éléments de la pile, de sorte que le troisième se retrouve au sommet ( 1 1 0 )
  4. + ajoute les 2 premiers éléments de la pile (en laissant 1 1 )
  5. . duplique la valeur supérieure, de telle sorte que la valeur do la boucle peut vérifier sa véracité (pour déterminer s'il faut continuer)

Il suffit de tracer mentalement quelques boucles pour s'apercevoir que l'addition nécessaire à la génération des valeurs de la séquence de Fibonacci est effectuée.

Puisque GolfScript a des bignums, il n'y aura jamais de débordement d'entier, et donc la valeur du sommet de la pile à la fin de la fonction do ne sera jamais égale à 0. Ainsi, le script s'exécutera indéfiniment.

29voto

Callum Rogers Points 6769

RePeNt, 9 , 8 caractères

1↓[2?+1]

Ou 10 caractères avec impression :

1↓[2?+↓£1]

Exécuter en utilisant :

RePeNt "1↓[2?+1]"

RePeNt est un langage jouet basé sur la pile que j'ai écrit (et que je continue d'améliorer) dans lequel tous les opérateurs/fonctions/blocs/boucles utilisent la notation polonaise inversée (RPN).

Command      Explanation                                              Stack
-------      -----------                                              -----

1            Push a 1 onto the stack                                  1
↓            Push last stack value                                    1 1
[            Start a do-while loop                                    1 1
2?           Push a two, then pop the 2 and copy the last 2 stack     1 1 1 1
             items onto the stack
+            Add on the stack                                         1 1 2
↓£           Push last stack value then print it                      1 1 2
1            Push a 1 onto the stack                                  1 1 2 1
]            Pop value (1 in this case), if it is a 0 exit the loop   1 1 2
             otherwise go back to the loop start.

La réponse se trouve sur la pile qui se construit comme suit :

1 1
1 1 2
1 1 2 3
1 1 2 3 5

Il ne se termine jamais (il a l'équivalent d'un programme C#/JAVA). do { } while(true) ) car la séquence ne se terminera jamais, mais une solution terminale peut être écrite ainsi :

N_1↓nI{2?+}

qui est de 12 caractères.

Je me demande si quelqu'un le lira un jour :(

14voto

mpeters Points 3304

Perl 6 - 22 caractères :

sub f{1,1...{$^a+$^b}}

14voto

Eclipse Points 27662

Langue : Erreurs du compilateur C++
Personnages : 205

#define t template <int n> struct 
#define u template <> struct f
t g { int v[0]; };
t f { enum { v = f<n-1>::v + f<n-2>::v }; g<v> x;};
u<1> { enum { v = 1 }; };
u<0> { enum { v = 0 }; };
int main() { f<10> x; }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X