Seu amigo não é muito bom com computadores, então, como uma piada prática, alguém embaralhou as letras (az) em seu teclado. Quando ele se sentou e tentou digitar seu nome olhando para o teclado, percebeu que as letras estavam embaralhadas e pediu sua ajuda.
Você é esperto e sabe que, se ele digitar seu nome e digitar repetidamente o que aparece na tela, em vez de seu nome, ele poderá digitar seu nome eventualmente. Você também é gentil e reorganiza as teclas, mas quer saber quantas voltas seriam necessárias para ter sucesso.
Sua tarefa é escrever um programa ou função que, dada a ordem aleatória das letras e o nome do amigo, calcule o número de turnos.
Detalhes da entrada:
- Duas cordas são fornecidas como entrada em uma estrutura conveniente para o seu idioma.
- A primeira string é a lista das novas letras minúsculas em ordem alfabética das antigas. (O primeiro caractere é aquele que está na posição de
a
, o último está na posição dez
.) Alguma mudança sempre ocorrerá na string. - A segunda string é o nome. Ele pode conter qualquer caractere ascii imprimível, mas apenas os caracteres alfabéticos maiúsculos e minúsculos serão embaralhados, se houver. O nome em si pode não ser embaralhado.
Detalhes da saída:
- A saída é um único número inteiro o número de voltas minimamente necessário. Nova linha é opcional.
Exemplos:
Entrada:
'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'
(posições d, e, f alteradas)
Saída:
3
(Os nomes mostrados são: Mr. John Fod
=> Mr. John Eof
=> Mr. John Doe
)
Entrada:
'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'
(a cifra ROT13 )
Saída:
2
(Qualquer nome de entrada que contenha letras será 2
arredondado para produzir o nome original.)
Entrada:
'aebcdjfghiqklmnopzrstuvwxy' 'John Doe'
Resultado:
140
Este é o código-golfe, portanto a entrada mais curta vence.
fonte
aebcdjfghiqklmnopzrstuvwxy
(saída 1260 paraMr John Doe
). Esse é o máximo possível - consiste em ciclos de ordem 4, 5, 7, 9 (e um inalteradoa
), e todo nome que contém pelo menos uma letra de cada ciclo gera 1260. E eu acho que pegar o próprio alfabeto como entrada ou usar um nome não afetado também são casos importantes.EOF
é totalmente incrível!Respostas:
Pitão, 16 bytes
Experimente aqui.
A entrada deve ser dada em duas linhas, nome e permutação. A permutação deve ser citada. O nome pode ser citado ou não. Por exemplo:
Dá 140.
Explicação:
fonte
CJam,
31 27 2524 bytesRecebe entrada na forma de:
ou seja, primeira linha - alfabetos, segunda linha - nome.
Como funciona :
Experimente online aqui
fonte
Ruby, 58
Explicação
Enumerable#find
(obrigado @Ventero!) EString#tr!
para substituir caracteres até que o substitutoString
corresponda ao nome real.fonte
""+n
é um pouco mais curto quen.dup
, e você pode salvar outro byte usando de forma criativa, emEnumerable#find
vez de usar um contador explícito:(1..1e4).find{t.tr!(...)==n}
n.downcase!
).A-Z
e+a.upcase
A-Z+a.upcase
en.downcase!\n
tem o mesmo comprimento :)CJam,
3231 bytesTeste aqui. Leva a permutação na primeira linha e o nome na segunda linha da entrada.
Explicação
fonte
Pitão 26
Experimente online aqui.
Existem algumas conseqüências infelizes que custam bytes de programa, como ter que armazenar G em K para usá-lo na redução, além de precisar usar não (não (J)) para iniciar o filtro. Por causa disso, espero que isso ainda possa ser praticado.
Este é um programa que recebe entradas como:
(Observe a falta de aspas no primeiro argumento)
Explicação para vir após exaustão incapacitante;)
fonte
Haskell 131 bytes
Ligue
f
com a string de permutação e o nome para obter o resultadoExplicação
fonte
GolfScript (33 bytes)
Recebe entrada como duas seqüências de caracteres entre aspas (simples ou duplas), separadas por qualquer quantidade de espaço em branco; por exemplo
Demonstração online
Dissecação
A transliteração se baseia no fato de que todos os caracteres são afetados (é
{'ABC'?'abc'=}%
com a sequência classificadaA$
substituindo'ABC'
e a permutaçãoA
substituindo'abc'
); as alternativas mais gerais não economizam o suficiente, porque o filtro para caracteres alfabéticos é muito barato.Isso também depende do
-1$
acesso à parte inferior da pilha, o que é um truque GS relativamente raro.fonte