Elimizde bir problem var. Bir sayı dizisi. Öncelikle bu bir ilişki bulma sorusu. Ama bu soruyu bir programlama veya algoritma sorusuna da çevirebiliriz. Soru aşağıdaki gibi.
- 1
- 11
- 21
- 1211
- 111221
Sırada ki sayı kaçtır?
Sorunun çözümünü size bırakıyorum. Ben sırayla yapılan programları örnek olarak ekliyorum. Zamanla daha gelişmiş örneklerini ve farklı dillerde yapımlarını da ekleyeceğim.
Python
En ilkel ve anlaşılır haliyle yapılan program.
def grupla(text):
if not text:
return []
result = []
grup = text[0]
for char in text[1:]:
if char == grup[-1]:
grup += char
else:
result.append(grup)
grup = char
result.append(grup)
return result
def yaz(gruplar):
result = ""
for grup in gruplar:
result += str(len(grup))+grup[0]
return result
string = "1"
for _ in range(10):
print(string)
gruplar = grupla(string)
string = yaz(gruplar
Daha sonra bir rekürsif denemesi.
def say(sonuc = [], dize = []):
if dize == []:
return "".join(map(str, sonuc))
if sonuc == [] or dize[0] != sonuc[-1]:
sonuc.append(1)
sonuc.append(dize[0])
elif dize[0] == sonuc[-1]:
sonuc[-2] += 1
return say(sonuc, dize[1:])
liste = "1"
for _ in range(10):
print(liste)
liste = (say([], list(liste)))
Daha da sadesi ve rekürsifsiz hali.
def say(dize):
sonuc = []
for i in dize:
if sonuc == [] or i != sonuc[-1]:
sonuc.append(1)
sonuc.append(i)
else:
sonuc[-2] += 1
return "".join(map(str, sonuc))
liste = "1"
for _ in range(10):
print(liste)
liste = say(liste)
Bu konu güncellenecektir.
Yorumlar