Appelons une liste de chaînes non vide une mesa si les conditions suivantes sont réunies:
- Chaque chaîne répertoriée n'est pas vide et utilise uniquement les caractères qui apparaissent dans la première chaîne.
- Chaque chaîne successive a exactement un caractère de plus que la chaîne précédente.
- Aucune chaîne de la liste n'est une sous- séquence de toute autre chaîne de la liste.
Le terme "mesa" vient de la visualisation comme ceci (où les x
s doivent être différents caractères):
xx..x
xx..xx
xx..xxx
.
.
.
xx..xxx..x
NB: C'est un fait mathématique que seulement un nombre fini de mesas commencent par une chaîne donnée. Notez la distinction entre sous- séquence et sous-chaîne ; Par exemple, 'anna' est une sous-séquence (mais pas une sous-chaîne) de 'banana'.
Défi:
- Écrivez le programme le plus court qui prend une chaîne d'entrée alphanumérique non vide arbitraire et génère le nombre de mesas commençant par cette chaîne.
Entrée (stdin):
- Toute chaîne alphanumérique non vide.
Sortie (sortie standard):
- Nombre de mesas commençant par la chaîne d'entrée.
Notation:
- Le gagnant est le programme avec le moins d'octets.
Exemple mesas
Une seule mesa commence par a
:
a
Une seule mesa commence par aa
:
aa
Beaucoup de mesas commencent par ab
:
ab ab ab ab (and so on)
baa aaa bbb
bbba bbaa
baaaa
aaaaaa
ab
, enbbb
tant que mesa, simplement en m'arrêtant au deuxième trimestre. Est-ce que c'est valable? Ou faut-il toujours les faire le plus longtemps possible? De plus, s'il y a plusieurs réarrangements possibles dunth
terme ( par exemplebaa
,aba
,aab
), ils font tout compte comme mesas séparé, ( à condition bien sûr qu'ils suivent toutes les règles)?ab
,ab/baa
,ab/bbb
,ab/bbb/bbaa
,ab/bbb/bbaa/baaaa
,ab/bbb/bbaa/baaaa/aaaaaa
sont différentes mesas.Réponses:
GolfScript (
106103 caractères)Quelque part dans le cœur, bien sûr, est un code de la chaîne X est une sous-séquence de la chaîne Y?
la source
Rubis, 142 caractères
Cet algorithme est constructif, c'est-à-dire qu'il construit toutes les mesas possibles pour la chaîne d'entrée et les compte. Cela rend le programme vraiment, vraiment lent - mais bon, c'est du codegolf.
L'exemple s'exécute:
la source
aab
) sont de longueur réalisable, mais je ne suis pas sûr - votre programme a fonctionné environ une heure pour cet exemple. NB: Il n'y aura pas de sortie réalisable pour toute entrée impliquant plus de deux lettres distinctes; par exemple, certaines des mesas qui commencent parabc
ont une longueur supérieure au 7000e nombre d'Ackermann .300,000
entrées avec,aab
je voyais toujours les 10 premiers termes tous identiques. Je pense donc que cela pourrait ne pas être possible pour plus de deux caractères. Du moins, non sans intelligence et calculs heuristiques.