Sie sollten alle bereits mit der Conway-Sequenz (auch bekannt als "Look-and-Say" -Sequenz) vertraut sein :
1
11
21
1211
111221
312211
etc
Sie können auch mit einer beliebigen Zahl als Startpunkt beginnen. Sei f(s)das nächste Element der Sequenz. Jetzt skönnen wir für jede gegebene finden f(s). Das Gegenteil ist nicht so trivial: Es ist nicht für jeden ymöglich, den Vorgänger sso zu finden, dass f(s) = y. ZB weil y = 1wir keinen Vorgänger finden können. Aber wenn yeine hat sogar Länge können Sie ihn in Ziffernpaare unterteilen , die jeweils einen Teil eines Vorgänger beschreiben:
513211 divides in 51,32,11
so: 51 comes from 11111
32 comes from 222
11 comes from 1
put together: 111112221
Auf diese Weise können wir für jede gerade Länge einen eindeutigen Vorgänger definieren y.
Hinweis : Der so sdefinierte 'Vorgänger' erfüllt im Allgemeinen NICHT f(s) = y.
Tor
Schreiben Sie ein Funktions- / Programm-Snippet, das eine Ziffernfolge als Eingabe akzeptiert
- berechnet das nächste Element der Conway-Sequenz, wenn die Länge der Eingabezeichenfolge ungerade ist
- berechnet den Vorgänger der Eingabezeichenfolge wie oben definiert, wenn die Länge der Eingabezeichenfolge gerade ist .
Kürzester Code in Bytes gewinnt.
Aktuelle Fragen zu den Look-and-Say-Sequenzen:
11111111111111? Nach Ihrer Spezifikation wäre es 1111111. Sie sollten Ihre Spezifikation ändern, um eine angemessene Antwort darauf zu definieren.
11111111111111einfach keinen Vorgänger. Es ist eine illegale Eingabe.
513111teilt sich in51,32und11?