Votre ami n'est pas trop bon avec les ordinateurs, donc comme une plaisanterie pratique, quelqu'un a brouillé les lettres (az) sur son clavier. Quand il s'est assis et a essayé de taper son nom en regardant le clavier, il s'est rendu compte que les lettres étaient brouillées et a demandé votre aide.
Vous êtes intelligent, vous savez donc que s'il tape son nom puis retape à plusieurs reprises ce qui s'affiche à l'écran au lieu de son nom, il réussira à entrer son nom. Vous êtes également gentil et réorganisez les touches, mais vous voulez savoir combien de tours faudrait-il pour réussir.
Votre tâche consiste à écrire un programme ou une fonction qui, compte tenu du brassage des lettres et du nom de l'ami, calcule le nombre de tours.
Détails d'entrée:
- Deux chaînes sont données en entrée dans une structure adaptée à votre langue.
- La première chaîne est la liste des nouvelles lettres minuscules dans l'ordre alphabétique des anciennes. (Le premier caractère est celui qui est à la position de
a
, le dernier est à la position dez
.) Certains changements se produiront toujours dans la chaîne. - La deuxième chaîne est le nom. Il peut contenir n'importe quel caractère ascii imprimable, mais seuls les caractères alphabétiques supérieur et minuscule seront mélangés le cas échéant. Le nom lui-même pourrait ne pas être mélangé à al.
Détails de sortie:
- La sortie est un entier unique, le nombre de tours requis au minimum. La nouvelle ligne est facultative.
Exemples:
Contribution:
'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'
(positions d, e, f modifiées)
Sortie:
3
(Les noms affichés sont: Mr. John Fod
=> Mr. John Eof
=>Mr. John Doe
)
Entrée:
'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'
(le chiffre ROT13 )
Sortie:
2
(Tout nom d'entrée contenant des lettres prendra2
tours pour produire le nom d'origine.)
Contribution:
'aebcdjfghiqklmnopzrstuvwxy' 'John Doe'
Production:
140
Il s'agit de code-golf, donc l'entrée la plus courte l'emporte.
la source
aebcdjfghiqklmnopzrstuvwxy
(sortie 1260 pourMr John Doe
). C'est le maximum possible - il se compose de cycles d'ordre 4, 5, 7, 9 (et un inchangéa
), et chaque nom qui contient au moins une lettre de chaque cycle donnera 1260. Et je suppose que l'alphabet lui-même comme entrée ou l'utilisation d'un nom non affecté sont également des cas marginaux importants.EOF
est totalement incroyable!Réponses:
Pyth, 16 octets
Essayez-le ici.
L'entrée doit être donnée sur deux lignes, nom puis permutation. La permutation doit être citée. Le nom peut être cité ou non. Par exemple:
Donne 140.
Explication:
la source
CJam,
31 27 2524 octetsPrend des informations sous la forme de:
c'est-à-dire première ligne - alphabets, deuxième ligne - nom.
Comment ça marche :
Essayez-le en ligne ici
la source
Rubis, 58
Explication
Enumerable#find
(merci @Ventero!) EtString#tr!
pour remplacer les caractères jusqu'à ce que le remplacementString
corresponde au vrai nom.la source
""+n
est un peu plus court quen.dup
, et vous pouvez enregistrer un autre octet en faisant un usage créatifEnumerable#find
au lieu d'utiliser un compteur explicite:(1..1e4).find{t.tr!(...)==n}
n.downcase!
).A-Z
et+a.upcase
A-Z+a.upcase
etn.downcase!\n
ont la même longueur :)CJam,
3231 octetsTestez-le ici. Il prend la permutation sur la première ligne et le nom sur la deuxième ligne de l'entrée.
Explication
la source
Pyth 26
Essayez-le en ligne ici.
Il y a quelques conséquences malheureuses qui coûtent à ce programme des octets, comme devoir stocker G dans K pour l'utiliser dans la réduction, ainsi que devoir utiliser non (pas (J)) pour démarrer le filtre. Pour cette raison, je m'attends à ce que cela puisse encore être joué.
Ceci est un programme qui prend des entrées comme:
(Notez le manque de guillemets dans le premier argument)
Explication à venir après épuisement paralysant;)
la source
Haskell 131 octets
Appel
f
avec la chaîne de permutation et le nom pour obtenir le résultatExplication
la source
GolfScript (33 octets)
Prend l'entrée comme deux chaînes entre guillemets (simples ou doubles) séparées par n'importe quelle quantité d'espace; par exemple
Démo en ligne
Dissection
La translittération repose sur le fait que tous les caractères sont affectés (c'est
{'ABC'?'abc'=}%
avec leA$
remplacement de la chaîne triée'ABC'
et leA
remplacement de la permutation'abc'
); les alternatives plus générales n'économisent pas suffisamment car le filtre des caractères alphabétiques est très bon marché.Cela dépend également
-1$
de l'accès au bas de la pile, ce qui est une astuce GS relativement rare.la source