Wszyscy powinniście już znać sekwencję Conwaya (czyli sekwencję „look-and-say”) :
1
11
21
1211
111221
312211
etc
Możesz także zacząć od dowolnej liczby jako punktu początkowego. Niech f(s)będzie kolejnym elementem sekwencji. Teraz dla każdego, co smożemy znaleźć f(s). Odwrotna sytuacja nie jest tak trywialna: nie jest ymożliwe znalezienie stakiego poprzednika f(s) = y. Np. y = 1Nie możemy znaleźć poprzednika. Ale jeśli yma parzystą długość, możesz podzielić ją na pary cyfr, które opisują każdą część poprzednika:
513211 divides in 51,32,11
so: 51 comes from 11111
32 comes from 222
11 comes from 1
put together: 111112221
W ten sposób możemy zdefiniować unikalnego poprzednika dla każdej yrównej długości.
Uwaga : Tak szdefiniowany „poprzednik” zasadniczo NIE spełnia wymagań f(s) = y.
Cel
Napisz fragment funkcji / programu, który przyjmuje ciąg cyfr jako dane wejściowe
- oblicza następny element sekwencji Conwaya, jeśli długość ciągu wejściowego wynosi nieparzysta
- oblicza poprzednika ciągu wejściowego, jak zdefiniowano powyżej, jeśli długość ciągu wejściowego jest równa .
Najkrótszy kod w bajtach wygrywa.
Ostatnie pytania oparte na sekwencjach typu look-and-say:
11111111111111? Zgodnie z twoją specyfikacją byłoby 1111111. Powinieneś zmodyfikować specyfikację, aby zdefiniować rozsądną odpowiedź na to pytanie.
11111111111111po prostu nie ma poprzednika. To nielegalny wkład.
513111dzieli51,32i11?