Description binaire récursive
Récemment, j'ai apporté ma toute première contribution à OEIS en étendant et en ajoutant un fichier b à la séquence A049064 . La séquence commence par0
, puis les valeurs suivantes sont dérivées de la fourniture d'une "description binaire" du dernier élément.
Par exemple, le deuxième terme serait 10
, car il y en avait un 0
dans le premier élément. Le troisième terme serait 1110
, car il y en avait un 1
et un 0
. Le quatrième serait 11110
. car il y a trois ( 11
en binaire!) 1
s et un 0
. Voici une ventilation du cinquième mandat pour clarifier ce processus:
> 11110
> 1111 0 (split into groups of each number)
> 4*1 1*0 (get count of each number in each group)
> 100*1 1*0 (convert counts to binary)
> 100110 (join each group back together)
Et voici un exemple pour passer du 6e au 7e trimestre:
> 1110010110
> 111 00 1 0 11 0
> 3*1 2*0 1*1 1*0 2*1 1*0
> 11*1 10*0 1*1 1*0 10*1 1*0
> 111100111010110
Vous pouvez consulter un programme de référence φ j'ai fait pour calculer les termes.
Votre travail
Vous devez créer un programme ou une fonction qui prend un nombre n
via des arguments d'entrée ou de fonction standard , et imprime la séquence du 1st
terme au (n+1)th
terme, séparée par une nouvelle ligne. Si vous souhaitez consulter les chiffres inférieurs, vous pouvez vous référer au fichier b de la page OEIS. Cependant, votre programme / fonction devrait prendre en charge 0 <= n <= 30
, c'est-à-dire jusqu'au 31ème trimestre. Ce n'est pas un mince exploit, car il A049064(30)
comporte plus de 140 000 chiffres δ . Si vous souhaitez voir quel devrait être le 31ème mandat, je l'ai mis sur Pastebin .
Exemple d'E / S
func(10)
0
10
1110
11110
100110
1110010110
111100111010110
100110011110111010110
1110010110010011011110111010110
1111001110101100111001011010011011110111010110
1001100111101110101100111100111010110111001011010011011110111010110
func(0)
0
func(3)
0
10
1110
11110
Il n'y a qu'une seule règle: pas de failles standard!
C'est le code-golf , donc le nombre d'octets le plus bas l'emporte.
φ - Gist peut être trouvé ici , et une démo d'idéone est ici .
δ - Juste au cas où vous vous poseriez la question, mes estimations de la longueur du 100e terme le mettaient à environ 3,28x10 250 caractères, ce qui serait beaucoup pour tout le monde à calculer.
[0]\n[1, 0]\n[1, 1, 1, 0]\n...
Réponses:
CJam,
1817 octetsMerci à @ MartinBüttner pour avoir joué un octet au golf!
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source
Pyth,
1817 octetsEssayez-le en ligne: Démonstration
Merci à @isaacg d'avoir enregistré un octet.
Explication:
Cela utilise le fait que 0 et 1 en binaire sont également 0 et 1.
la source
V
au lieu de.u
:J]0VQjk~JsjR2srJ8
Python 2,
125116110 octets1 octet enregistré grâce à @ Sp3000 et 5 octets en supprimant un redondant
int
appel .Ancienne version:
Beaucoup, beaucoup d'octets enregistrés grâce à @ Vioz-!
Version originale:
la source
Rubis,
807269 octetsEn tant que fonction:
Appelez-le par exemple avec:
f[6]
la source
->m{l=?0;0.upto(m){puts l;l.gsub!(/1+|0+/){$&.size.to_s(2)+$&[0]}}}
upto
et!
- Merci :)Python 2, 102 octets
D'une certaine façon la combinaison d'
itertools
être plus longue quere
et legroupby
retour desgrouper
moyens d'objets que l' utilisation est regex un peu plus court ...la source
Cobra - 128
la source
Haskell,
136130 octetsla source