Considérons une séquence basée sur les relations de récurrence f(n) = f(n-1)+f(n-2)
, en commençant par f(1) = x1, f(2) = x2
. Pour x1 = 2, x2 = 1
, la séquence commence comme ceci:
2 1 3 4 7 11 18 29 47 76 123 199 322 521 843
La concaténation en une chaîne donnera:
213471118294776123199322521843
Maintenant, divisez cette liste en le plus petit nombre possible qui donne y(n) > y(n-1)
. Commencez par le premier numéro, puis le deuxième, etc. Le premier numéro de sortie doit toujours être un seul chiffre. Remplissez le dernier numéro avec le nombre de zéros requis.
2 13 47 111 829 4776 12319 93225 218430
Vous obtiendrez deux nombres, (x1, x2)
en entrée, sur n'importe quel format pratique, et le défi est de sortir la liste triée.
Règles:
- La fonction et les programmes sont OK
- La séquence initiale doit comporter exactement 15 chiffres (le dernier est
f(15)
). x1
etx2
sont non négatifs (zéro est possible).- La sortie peut être dans n'importe quel format pratique
- Le vecteur de sortie
y
doit être créé pour celay2 > y1
.- D'abord le plus petit possible
y1
, puis le plus petit possibley2
,y3
et ainsi de suite.
- D'abord le plus petit possible
- Si
x1 = x2 = 0
alors sortez 15 zéros (sur le même format que les autres sorties, c'est-à-dire pas000000000000000
).
Exemples :
Input: 1 1
Output: 1 12 35 81 321 345 589 1442 3337 7610
Input: 3 2
Output: 3 25 71 219 315 0811 3121 23435 55898 145300
|
Optional leading zero
Input: 0 0
Output: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Le code le plus court en octets gagne. Veuillez inclure un lien vers un interprète en ligne si possible.
code-golf
math
arithmetic
Stewie Griffin
la source
la source
5467
?54 67
?5 46 70
?Réponses:
Pyth, 56 octets
Suite de tests
Explication:
Tout d'abord, nous vérifions si l'entrée est précise
0, 0
. Si oui, imprimez 15 zéros.Sinon, nous produisons la séquence, avec
jkhM.u,eNsN14Q
. Ceci est similaire à l'algorithme Pyth standard pour la séquence de Fibonacci.Ensuite, nous réduisons cette chaîne. L'accumulateur est une liste de chaînes, représentant chaque nombre dans la séquence divisée. À chaque étape de réduction, nous prenons le caractère suivant et vérifions si l'accumulateur est en ordre, en utilisant la fonction d'assistance
y
, définie avecLsgM.:sMb2
, qui est vraie si l'entrée n'est pas en ordre. S'il est en ordre, nous ajoutons le caractère suivant à la liste comme son propre numéro. Sinon, nous ajoutons le caractère suivant à la fin de la dernière chaîne. Ceci est accompli avecu?yGX_1GHaGH ... Y
.Ensuite, nous effectuons une boucle while fonctionnelle. La boucle continue jusqu'à ce que la liste en cours soit en ordre, en réutilisant la fonction d'assistance. À chaque étape, un
0
est ajouté à la fin de la dernière chaîne de la liste. Ceci est accompli avec.WyHX_1Z`0
.Enfin, les chaînes sont converties en entiers, avec
sM
et imprimées.Pyth, 51 octets
Je crois que cela fonctionne, mais il est beaucoup trop lent à tester - c'est une solution de force brute pour diviser la chaîne.
Je vais apporter quelques améliorations à la
X
fonction, mais le code ci-dessus fonctionne dans la version de Pyth qui était la plus récente lorsque la question a été publiée.la source
JavaScript ES6, 127
135Tester
la source
JavaScript ES6,
187180187184182179175172165160155154 octetsJ'obtiens des résultats similaires lorsque je l'exécute
1,1
et3,2
teste des cas.0,0
a pris un excès de 26 octets ...De-golf + converti en ES5 + démo:
la source
n <= 15
.f(n) = f(n-1)+f(n-2)
a une valeur maximale d'exactement 15. Le nombre de valeurs de sortie est déterminé sur la base de l'algorithme, rien d'autre.f(1)=x1
etf(2)=x2
peuvent être supérieures à 15. Le nombre de valeurs de sortie est déterminé sur la base des valeurs d'entrée. Car3 2
ce sera 10.JavaScript (ES6), 162 octets
Explication
Tester
Afficher l'extrait de code
la source
Mathematica, 192 octets
Cas de test:
La longueur des noms de fonction me tue.
la source
Haskell,
165159152142141 octetsExemple d'utilisation:
3 % 2
->[3,25,71,219,315,811,3121,23435,55898,145300]
.Démo en ligne (avec un
main
wrapper).Comment ça fonctionne:
la source
PowerShell,
167166 octetsEnregistrement d'un octet en éliminant la
$s
variable et en alimentant directement la boucle de sortie directement.Non golfé et commenté:
la source
Perl 6 , 107 octets
Usage:
Explication
crée une séquence de type Fibonacci, en commençant par les arguments (
@_
) glissé (|
) dansprend les 15 premiers éléments de cette séquence
combine cela en une seule chaîne (
.join
), la divise en une séquence de caractères individuels (.comb
) et la stocke dans le scalaire "par défaut" ($_
) après avoir contraint la séquence dans un tableau mutable, en la stockant d'abord dans un tableau anonyme (@
)il trouve la somme des valeurs dans le scalaire par défaut, et si c'est zéro retourne le scalaire par défaut, qui contiendra un tableau de 15 zéros
si la somme n'est pas nulle, elle crée une liste en décalant d'abord le premier élément du scalaire par défaut
suivi de la génération du reste des valeurs, en le comparant à la précédente (
$^b
)si le scalaire par défaut manque de valeurs, utilisez 0 à la place (
//0
)arrêt lorsqu'il n'y a plus d'éléments dans le scalaire par défaut
la source
until (my$a...
? N'est-ce(
pas un délimiteur spécial?until
, qui n'existe pas.