Escreva um programa que aceite uma única palavra em minúscula como entrada e produza o número de pares de letras que possuem o mesmo número de letras entre eles na palavra e no alfabeto.
Por exemplo, na palavra "natureza", temos 4 pares:
- nr: como existem três letras entre eles dentro da palavra (a, t, u) e três letras entre eles no alfabeto (o, p, q)
- ae: como existem três letras entre eles dentro da palavra (t, u, r) e três letras entre eles no alfabeto (b, c, d)
- tu: como não existem letras entre eles dentro da palavra e não há letras entre eles no alfabeto
- tr: como existe uma letra entre eles dentro da palavra (u) e uma letra entre eles no (s) alfabeto (s)
Como existem quatro pares, a saída neste caso deve ser 4.
rjjjnfffr
? Seria um par (nr
) ou dois pares (nr
ern
)? E que talabzab
? São dois pares deab
ou um?Respostas:
Pitão, 19 bytes
Experimente online: Demonstração
Explicação:
fonte
R, 110 bytes
Degolfado:
fonte
Oitava, 41 bytes
fonte
CJam, 36 bytes
Experimente online.
fonte
J, 27 bytes
Uso:
Explicação:
Experimente online aqui.
fonte
CJam, 25 bytes
Experimente online
Explicação:
fonte
JavaScript (ES6), 98 bytes
Uso
Explicação
fonte
Python 2, 91 caracteres
fonte
MATLAB, 84 bytes
Esta linha pede uma string como entrada. Em seguida, ele cria todos os pares possíveis de letras e faz o mesmo para os índices correspondentes. Em seguida, determinamos se a diferença (absoluta) dos valores corresponde para finalmente somar todos os casos em que ocorre. O resultado é exibido na janela de comando.
fonte
JavaScript ES7, 93
Usando compreensão de array . ES6 com
.map.map.map
é 2 bytes mais longo.Teste a execução do snippet abaixo com o Firefox
fonte
PowerShell,
114100 bytesBem direto, mas usa alguns truques.
param(..)
pega nossa entrada e salva$a
.$b
como a.length
nossa entrada. Isso economiza um byte mais tarde.0..($b-1)|%{..}
é o equivalente a umfor($i=0;$i-le($b-1);$i++){..}
loop, mas muito mais curto.$i
para manter isso em ...($_+1)..$b|%{..}
o próximofor
loop, uma vez que$_
é apenas posicional ao loop interno.+
para salvar um monte de bytes) é importante-eq
para a diferença de posição na matriz. Como recebemos explicitamente entradas em minúsculas, não precisamos fazer conversão de casos. Esta declaração retornará umTrue
ouFalse
.$o
, entãoTrue
adicionamos 1, enquantoFalse
adicionamos 0.$o
. Observe que precisamos fazer o mesmo truque de conversão para int+
para evitar a impressãoFalse
se não houver correspondências.fonte
Ruby, 74
Nada super interessante aqui. Eu adoraria usar,
eval("s[i].#{["succ"]*(j-i)*?.}")
mas ... parecia muito longo.fonte
Matlab
(94)(80)A função binomial lança uma exceção estúpida quando k é maior que n e eu não consigo capturar exceções dentro daQuem precisa de uma função integrada ??arraycell
função, caso contrário eu poderia jogar mais.Agora eu poderia fazê-lo manualmente, simplificando o binômio (n, 2) = n / (2 (n-2)!) = N (n-1) / 2. observe que esse último valor representa a soma dos números inteiros de 1 a n-1, isso não gera nenhuma exceção no matlab, Deus abençoe a matemática.
Ps: este método é diferente do slvrbld
Execução
fonte