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 4n'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 nsé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
0123sont autorisés. - B n'est plus que A. Cela permet d' éviter la situation dans laquelle
012345doit être suivie6parce0123451a ceci:1-2345-1. En d'autres termes, la séquence serait triviale et sans intérêt. npeut ê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 lesnpermutations 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
1et3sont 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 Xpour rendre cela plus clair.
Souche: X2130120 Souche: X2130123 Souche: X320 Souche: X321301203102130
Les deux derniers chiffres de Xsont 10, donc les seuls choix possibles pour le chiffre suivant sont 2et 3. Le choix 2conduit à 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.
AAc'est vraiment taper ABAoù Best 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.