Ce défi consiste à imprimer la séquence abacaba d'une profondeur spécifique.
Voici un diagramme des 5 premières séquences ( a(N)
la séquence abacaba de profondeur N, les majuscules / minuscules servent simplement à montrer le motif, cela n’est pas nécessaire dans la sortie de votre programme):
a(0) = A
a(1) = aBa
a(2) = abaCaba
a(3) = abacabaDabacaba
a(4) = abacabadabacabaEabacabadabacaba
...
a(25) = abacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaiabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabajabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaia...
Comme vous pouvez probablement le constater, la nième séquence abacaba est la dernière avec la nième lettre et s'ajoute à elle. ( a(n) = a(n - 1) + letter(n) + a(n - 1)
)
Votre tâche consiste à créer un programme ou une fonction prenant un entier et imprimant la séquence abacaba de cette profondeur. La sortie doit être correcte au moins pour les valeurs inférieures ou égales à 15.
Réponses:
Pyth, 11 octets
Réduction simple.
la source
0
devrait être la séquence vide IMO, mais je vais me conformer à la question ...rev-doc.txt
côté de cette réponse et elle devrait facilement se montrer simple.Python, 44 octets
On dirait avec méfiance qu'on pourrait jouer au golf.
la source
Haskell,
3937 octetsExemple d'utilisation:
a 3
->"abacabadabacaba"
.Edit: @Angs a trouvé deux octets à sauvegarder. Merci!
la source
a n=a(n-1)++[97+n]++a(n-1)
marcherait pas ? Je ne peux pas tester maintenant.[97+n]
est une liste deInteger
eta(n-1)
est une liste deChar
(akaString
). Vous ne pouvez pas concaténer des listes avec différents types.toEnum
fait unChar
hors de laInteger
.['a'..]!!n
est 2 octets plus court quetoEnum(97+n)
Pyth,
14 à13 octetsMerci à Jakube d'avoir sauvegardé un octet!
Une solution à 14 Octets
VhQ=ks[k@GNk;k
.Explication:
Essayez-le ici !
la source
V
ligne?hQ
est justeeval(input) + 1
=k
à=
. Pyth attribuera automatiquement le résultat àk
, cark
est la première variable de l'expression+k+@GNk
.Vt^2Q=+k@Gx_.BhN`1)k
(Dans ce cas, il est réglé pour donner les premiers 2 ^ Q-1 caractères comme le défi , il faut, mais vous pouvez voir comment changer cela.)Retina ,
3732 octetsLe retour à la ligne est important. L'entrée est prise en unaire .
Essayez-le en ligne!
la source
Brainfuck, 157 octets
L'entrée est donnée en binaire.
L'idée de base est de dupliquer à plusieurs reprises la séquence en cours (en commençant par "a") et d'incrémenter le dernier élément après chaque itération:
a → aa → ab
ab → abab → abac
abac → abacabac → abacabac
...
Lorsque tout cela a été fait le nombre de fois spécifié, le résultat est imprimé en excluant le dernier élément.
Explication approfondie
La mémoire est organisée de la manière suivante:
Le compte à rebours contient le nombre de cycles de copie à exécuter. La séquence ABACABA est stockée dans des blocs adjacents, chacun composé de 3 cellules. La valeur contient le caractère de l'élément (c'est-à-dire "A", "B", "C" ...). L' indicateur Copier indique si l'élément correspondant doit ou non être copié dans le cycle de copie en cours (0 = copie, 1 = pas). L' indicateur de fin est mis à 0 pour le dernier élément en cours de copie (c'est 1 dans tous les autres cas).
Passons maintenant au programme actuel (légèrement non-golfé):
la source
Haskell , 36 octets
Essayez-le en ligne!
Ceci utilise une méthode récursive différente de la plupart des autres réponses. Pour obtenir la chaîne suivante de la séquence, nous ne joignons pas deux copies de la chaîne précédente avec une nouvelle lettre entre elles, mais au lieu de cela, nous incrémentons toutes les lettres et celles qui les séparent
a
.la source
bcb
au lieu decbc
?05AB1E , 12 octets (non concurrentiel)
Code:
Que je sois damné. J'ai corrigé beaucoup de bugs grâce à ce challenge haha.
Explication:
la source
JavaScript (ES6),
4342 octetsUn octet enregistré grâce à @Neil !
Encore une autre solution récursive simple ...
la source
(n+11).toString(36)
vous sauve 1 octet et travaille pour un maximum de (25)!CJam (14 octets)
Démo en ligne
la source
Ruby (1.9 et plus), 38 octets
?a
est une manière plus golfeuse d’écrire"a"
mais qui a l’air bizarre quand il est mélangé avec ternary?:
la source
R , 48 octets
Essayez-le en ligne!
Récursion simple.
la source
paste0
est équivalent àpaste
withsep=""
, vous évitez ainsi les espaces entre les lettres quipaste
seraient ajoutées par défaut.C #, 59 octets
Juste une autre solution C # ...
la source
Perl, 33 octets
Pas vraiment besoin de dé-golfer. Construit la chaîne en ajoutant de manière itérative le caractère suivant dans la séquence, ainsi que l’inverse de la chaîne jusqu’à présent, en utilisant la valeur ASCII de «a» comme point de départ. Utilise
$\
pour sauver quelques coups, mais c'est à peu près aussi difficile que cela devient.Fonctionne pour à
a(0)
traversa(25)
et même au-delà. Bien que vous passiez à l'ASCII étendu aprèsa(29)
, vous manquerez de mémoire bien avant de manquer de codes de caractères:a(25)
est ~ 64MiB.a(29)
est ~ 1GiB.Pour stocker le résultat de
a(255)
(non testé!), Il faut 2 ^ 256 - 1 = 1,15 x 10 ^ 77 octets, soit environ 1,15 x 10 ^ 65 lecteurs de 1 téraoctet.la source
Java 7, 158 octets
J'aime me promener dans PPCG et j'aimerais pouvoir voter / commenter d'autres réponses.
L'entrée est donnée en tant que paramètres du programme. Cela suit le même format que beaucoup d'autres réponses ici, en ce sens qu'il s'agit d'une implémentation récursive simple. J'aurais commenté l'autre réponse mais je n'ai pas encore le représentant à commenter. Il est également légèrement différent en ce sens que l'appel récursif est effectué deux fois plutôt que de construire une chaîne et de la transmettre.
la source
Mathematica,
3632 octetsAvez-vous déjà regardé TWOW 11B?
la source
"",
et vous pouvez utiliser la notation infix pourFold
.<>
et # 2 ne fonctionne que pour les fonctions binairesPython,
62544645 octetsJ'aimerais penser que ce code peut encore être utilisé d'une manière ou d'une autre.
Edit: correction de bug grâce à Lynn. -1 octet grâce au calmar.
Essayez-le en ligne!
la source
Mathematica, 46 octets
Fonction récursive simple. Une autre solution:
la source
K5, 18 octets
Appliquez de manière répétée une fonction à une valeur transportée (
"A"
) et à chaque élément d'une séquence. La séquence est constituée des caractères alphabétiques de B à un certain nombre N (`c$66+!
). La fonction joint l'argument de gauche de part et d'autre de l'argument de droite ({x,y,x}
).En action:
la source
JavaScript,
6557 1 octetsDémo:
1 - merci Neil d'avoir économisé 8 octets
la source
(i+11).toString(36)
vous sauve 6 octets.s="a";
avant,for
elle devient la valeur de retour par défaut et vous pouvez supprimer la fin;s
pour une sauvegarde supplémentaire de 2 octets.i
ligne et en supprimant l'incrément dans la boucle for. Donc ...for(i=0;i<n;)s+=(i+++11)...
Japt,
2017 octetsTestez-le en ligne!
Comment ça marche
Version non concurrente, 14 octets
La
ô
fonction est commeo
, mais crée la plage[X..X+Y]
au lieu de[X..Y)
. Testez-le en ligne!Je préfère de loin changer le 97 au 94, auquel cas la sortie
5
ressemble à ceci:la source
Java, 219 octets
Ma première tentative de golf de code. Je peux probablement jouer au golf plus loin, mais j'ai faim et je sors déjeuner.
Ungolfed:
Algorithme récursif de force brute assez simple, utilise la
char
manipulation.la source
public
mot - clé dea
etaddLetter
/j
.MATL , 14 octets
Ceci utilise la version 8.0.0 du langage / compilateur, qui est antérieure au défi.
Exemple
Explication
Le secuence est créé d' abord avec des nombres
0
,1
,2
... Ceux - ci sont converties en lettres'a'
,'b'
,'c'
à la fin.modifier
Essayez-le en ligne!
la source
Powershell,
53,46,44, 41 octetsColler dans la console générera une sortie erronée lors de la deuxième exécution car
$d
n’est pas réinitialisé.Économisez 2 octets en utilisant + = Économisez 3 octets grâce à @TimmyD
la source
(
,)
.Gaia , 14 octets
Essayez-le en ligne!
la source
PowerShell , 54 octets
Essayez-le en ligne!
la source
Japt , 8 octets
L'essayer
la source
Husk , 12 octets
Essayez-le en ligne!
Utilise l'indexation 1, ce qui, je l'espère, est OK.
Explication
la source
APL (NARS), 24 caractères, 48 octets
tester:
la source
PHP
-r
, 43 octetsregister_argc_argv
doit être activé pour que cela fonctionne.Essayez-le en ligne!
PHP , 51 octets
Une fonction anonyme qui imprime directement la sortie.
Essayez-le en ligne!
la source