L'idée ici est de produire un motif presque répétitif. C'est-à-dire que la séquence en cours de construction change au dernier moment pour éviter la répétition de certaines sous-séquences. Les conséquences de type AA et ABA sont à éviter (où B n'est pas plus long que A).
Exemples:
Je vais commencer et énumérer tous les petits exemples pour rendre ma description plus claire. Commençons par 0.
Valable: 0 Invalide: 00 (motif AA) Valable: 01 Non valide: 010 (modèle ABA) Non valide: 011 (modèle AA) Valable: 012 Valable: 0120 Non valide: 0121 (modèle ABA) Non valide: 0122 (motif AA) Non valide: 01200 (modèle AA) Non valide: 01201 (modèle ABA; 01-2-01) Non valide: 01202 (modèle ABA) Valable: 01203
Maintenant, je crois fermement qu'un a 4
n'est jamais nécessaire, même si je n'ai pas de preuve, car j'ai facilement trouvé des séquences de centaines de caractères qui n'utilisent que 0123
. (Cela est probablement étroitement lié à la façon dont seuls trois caractères sont nécessaires pour avoir des chaînes infinies sans motifs AA. Il y a une page Wikipedia à ce sujet.)
Entrée sortie
L'entrée est un entier unique, positif et non nul n
. Vous pouvez supposer cela n <= 1000
.
La sortie est une n
séquence de caractères sans sous-séquence qui correspond à un motif interdit (AA ou ABA).
Exemples d'entrées et de sorties
>>> 1 0 >>> 2 01 >>> 3 012 >>> 4 0120 >>> 5 01203 >>> 50 01203102130123103201302103120132102301203102132012
Règles
- Seuls les personnages
0123
sont autorisés. - B n'est plus que A. Cela permet d' éviter la situation dans laquelle
012345
doit être suivie6
parce0123451
a ceci:1-2345-1
. En d'autres termes, la séquence serait triviale et sans intérêt. n
peut être entré par n'importe quelle méthode souhaitée, à l' exception du codage en dur.- La sortie peut être une liste ou une chaîne, selon ce qui est le plus facile.
- Pas de force brute ; le temps d'exécution doit être de l'ordre de quelques minutes, au plus une heure sur une machine très lente, pour
n=1000
. (Ceci est destiné à disqualifier les solutions qui ne font que boucler à travers toutes lesn
permutations de longueur{0,1,2,3}
, de sorte que les trucs et astuces similaires sont interdits.) - Les failles standard sont interdites, comme d'habitude.
- La notation est en octets. Il s'agit de code-golf , donc l'entrée la plus courte gagne (probablement - voir bonus).
- Bonus: choisissez le chiffre le plus bas autorisé à chaque étape. Si
1
et3
sont des choix possibles pour le chiffre suivant de la séquence, choisissez1
. Soustrayez 5 octets de votre score. Cependant, prenez note de la note ci-dessous.
Remarque!
Des impasses sont possibles. Votre programme ou fonction doit les éviter. Voici un exemple:
Souche: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103201231021301203102301320312302302 Souche: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103201231021301203102301320312302302 Souche: 0120310213012310320130210312013210230120310213201230210312013023103201230213203102301203210231201302103123013203102130120321023013203123021032012310213012031023013203123020 Souche: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103201231021301203102301320312302302
Chacune de ces séquences ne peut plus être étendue (sans utiliser a 4
). Mais notez également qu'il existe une différence cruciale entre les deux premiers et les deux derniers. Je vais remplacer la sous-séquence initiale partagée par un X
pour rendre cela plus clair.
Souche: X2130120 Souche: X2130123 Souche: X320 Souche: X321301203102130
Les deux derniers chiffres de X
sont 10
, donc les seuls choix possibles pour le chiffre suivant sont 2
et 3
. Le choix 2
conduit à une situation où la séquence doit se terminer. L'algorithme gourmand ne fonctionnera pas ici. (Pas sans retour en arrière, de toute façon.)
n
, mais étant donné que les souches que mon programme trouve ont tendance à s'allonger de 10 chiffres en moyenne à chaque fois, je suis très sûr qu'une séquence infinie existe. Je ne sais pas comment un algorithme semi-gourmand pourrait être testé pour des séquences arbitrairement grandes. Je pourrais limiter l' exigence à n
= 1000 et ne pas m'inquiéter de plus n
.
AA
c'est vraiment taper ABA
où B
est vide. Cela pourrait peut-être aider à rationaliser certaines solutions.
n
? Si quelqu'un donne un algorithme heuristique semi-gourmand, comment vérifierez-vous qu'il ne rencontre pas de problèmes sur une très grande longueur? Le problème général est intéressant, et je n'ai pas pu trouver quoi que ce soit sur l'évitement de modèle où nous limitons la longueur d'une partie du modèle. Si quelqu'un peut produire une recette générale, je m'attends à ce que ce soit la meilleure approche.