La vidéo de Quiz Knock postée l'autre jour [Université de Tokyo] Défiez l'examen d'entrée de Google au siège de Google! a présenté ** Séquence Look-and-Say **. Il s'agit d'une séquence de nombres qui change selon la règle selon laquelle le premier terme est 1 et les nombres lus à partir du terme précédent sont disposés dans le terme suivant, comme indiqué ci-dessous.
1 =1 vaut 1(One 1) → 1 1
1 1 =2 1s(Two 1s) → 2 1
2 1 =2 est 1,1 vaut 1(One 2, One 1) → 1 2 1 1
1 2 1 1 =1 vaut 1,2 est 1,2 1s...
Je connaissais l'existence de ce nombre de lignes pour la première fois dans cette vidéo, et j'ai trouvé que c'était intéressant J'ai écrit un programme en Python qui génère cette séquence de nombres.
def lookAndSay(initialValues, maxIteration=None):
x = initialValues
yield x
iteration = 1
while True:
if maxIteration is not None and iteration >= maxIteration:
break
new_x = []
prev = x[0]
count = 1
for n in x[1:]:
if n == prev:
count += 1
else:
new_x.append(count)
new_x.append(prev)
prev = n
count = 1
new_x.append(count)
new_x.append(prev)
x = new_x
yield x
iteration += 1
Si vous faites comme ci-dessous, une séquence Look-and-say avec le premier terme comme 1 sera générée jusqu'au 10ème terme et sortie.
>>> for li in lookAndSay([1], 10):
... print(li)
...
[1]
[1, 1]
[2, 1]
[1, 2, 1, 1]
[1, 1, 1, 2, 2, 1]
[3, 1, 2, 2, 1, 1]
[1, 3, 1, 1, 2, 2, 2, 1]
[1, 1, 1, 3, 2, 1, 3, 2, 1, 1]
[3, 1, 1, 3, 1, 2, 1, 1, 1, 3, 1, 2, 2, 1]
[1, 3, 2, 1, 1, 3, 1, 1, 1, 2, 3, 1, 1, 3, 1, 1, 2, 2, 1, 1]
Faites-nous savoir dans les commentaires s'il existe un meilleur moyen!
Recommended Posts