Défi
Écrivez une fonction ou un programme qui accepte une ligne d'entrée, exécute un mélange très spécifique et étrangement familier sur ses caractères et génère le résultat.
Le brassage requis peut être décrit à l'aide de l'algorithme suivant:
- Étiquetez chaque caractère dans l'entrée avec un index basé sur 1.
- Écrivez le caractère numéro 1 en sortie.
- En commençant par le caractère numéro 2, écrivez tous les autres caractères dans la sortie dans l'ordre, à l' exclusion du caractère 2 lui-même. En d'autres termes, écrivez les caractères 4, 6, 8, 10, etc. en sortie.
- En commençant par le numéro de caractère suivant n non encore écrit en sortie, écrivez chaque nième caractère dans la sortie, en excluant le caractère n lui-même et en excluant tout autre caractère (par étiquette numérique) que vous avez peut-être déjà écrit dans la sortie.
- Répétez l'étape 4 tant qu'elle continue d'ajouter de nouveaux caractères à la sortie.
- Écrivez les caractères restants à afficher, dans l'ordre.
Exemple
- Étiquetez les caractères.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 OLDDOCYAK 'SBEAUTYCORNER
2. Écrivez le premier caractère à afficher:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27OLDDOCYAK 'SBEAUTYCORNER O
3. Écrivez tous les autres caractères commençant par 2, à l'exception de 2.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNER O OA 'EUYCRE
4. Le caractère suivant non encore écrit est le caractère numéro 3; écrire tous les 3 caractères commençant par 3, mais excluant le caractère 3 lui-même et tout caractère déjà écrit.
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA «EUYCRE YB R
5. Répétez l'étape 4 en utilisant le caractère suivant, le caractère 5.
4. Le caractère suivant non encore écrit est le caractère numéro 5; écrire tous les 5 caractères commençant par 5, mais excluant le caractère 5 lui-même et tout caractère déjà écrit. (Cela ne représente que le caractère 25).
12 3456789101112131415161718192021222324252627OLDDOCYAK'SBEAUTYCORNEROOA «EUYCREYB R N
5. Le caractère suivant est 7; mais 14, 21 ont déjà été écrits, donc plus de caractères ne seront sortis si nous répétons l'étape 4. Ainsi, nous en avons terminé avec 5.
6. Écrivez les caractères restants dans l'ordre.
12 3456789101112131415161718192021222324252627OLD DOCYAK'SBEAUTYCORNEROOA «EUYCREYB RN LDDCKSATO
Règles
L'entrée et la sortie peuvent se faire via une entrée / sortie standard, des chaînes ou des tableaux de caractères.
Si vous lisez en tant qu'entrée standard, vous pouvez, à votre convenance, supposer qu'il y a une nouvelle ligne de fin ou que la totalité de l'entrée contient la ligne. Les caractères de nouvelle ligne ne participent pas au shuffle.
De même, à votre convenance, votre sortie peut avoir une nouvelle ligne de fin ou non.
Les failles standard ne sont pas autorisées.
Il s'agit d'une compétition de golf à code. Le plus petit code en octets gagne.
Cas de test
123456789ABCDEF -> 1468ACE9F2357BD
OLD DOC YAK'S BEAUTY CORNER -> O O A' EUYCREYB RNLDDCKSATO
Blue boxes use a 2600hz tone to convince telephone switches that use in-band signalling that the caller is actually a telephone operator.
->
Bebxsuea20h oet ovnetlpoesice htuei-adsgaln httecle satal eehn prtre 0ncce ha nng aiuapootnt ihyon atallu o s 6z oi ehwstsnbilt lr clee.
Réponses:
Gelée , 10 octets
TryItOnline
Comment?
la source
Mathematica, 61 octets
Fonction sans nom prenant une liste de caractères en entrée et renvoyant une liste de caractères.
FactorInteger[#][[1,1]]
donne le plus petit facteur premier de#
(et retourne1
si#
égal1
).FactorInteger[#][[1,1]]PrimeQ@#
Donne donc une expression étrange: [#
le plus petit facteur premier]False
si#
n'est pas premier, et# True
si#
est premier (ce sont des produits non évalués d'un nombre et d'un booléen).Range@Length@#
donne une liste des nombres jusqu'à la longueur de l'entrée.SortBy
Trie ensuite ces nombres par la fonction amusante décrite ci-dessus. Mathematica est vraiment sensible au type à bien des égards, mais les mélange joyeusement d'autres façons: les expressions de la forme [nombre]False
sont triées alphabétiquement avant les expressions de la forme [numéro]True
, tandis que les liens sont rompus en triant les nombres numériquement. Cela produit exactement la permutation que nous voulons ici et#[[...]]
permute les caractères de l'entrée en conséquence.la source
C, 164 octets
Cela prend l'entrée comme premier paramètre de commande et réimprime sur stdout. Au fur et à mesure que nous traitons chaque personnage, nous l'effaçons, permettant la passe finale.
la source