Escriba un programa que acepte una sola palabra en minúscula como entrada y genere la cantidad de pares de letras que tienen la misma cantidad de letras entre ellas en la palabra que en el alfabeto.
Por ejemplo, en la palabra 'naturaleza', tenemos 4 pares:
- nr: dado que hay tres letras entre ellas dentro de la palabra (a, t, u) y tres letras entre ellas en el alfabeto (o, p, q)
- ae: dado que hay tres letras entre ellas dentro de la palabra (t, u, r) y tres letras entre ellas en el alfabeto (b, c, d)
- tu: ya que no hay letras entre ellas dentro de la palabra y no hay letras entre ellas en el alfabeto
- tr: dado que hay una letra entre ellos dentro de la palabra (u) y una letra entre ellos en el alfabeto (s)
Como hay cuatro pares, la salida en este caso debería ser 4.
rjjjnfffr
? ¿Sería un par (nr
) o dos pares (nr
yrn
)? ¿Y de quéabzab
? ¿Son dos pares deab
o uno?Respuestas:
Pyth, 19 bytes
Pruébelo en línea: demostración
Explicación:
fuente
R, 110 bytes
Degolfed:
fuente
Octava, 41 bytes
fuente
CJam, 36 bytes
Pruébalo en línea.
fuente
J, 27 bytes
Uso:
Explicación:
Pruébelo en línea aquí.
fuente
CJam, 25 bytes
Pruébalo en línea
Explicación:
fuente
JavaScript (ES6), 98 bytes
Uso
Explicación
fuente
Python 2, 91 caracteres
fuente
MATLAB, 84 bytes
Esta línea solicita una cadena como entrada. Luego crea todos los pares de letras posibles y hace lo mismo para sus índices correspondientes. Luego determinamos si la diferencia (absoluta) de los valores coincide para finalmente sumar todos los casos en los que lo hace. El resultado se muestra en la ventana de comandos.
fuente
JavaScript ES7, 93
Usando la comprensión de la matriz . ES6 con
.map.map.map
es 2 bytes más largo.Pruebe a ejecutar el fragmento a continuación con Firefox
fuente
PowerShell,
114100 bytesBastante sencillo, pero usa un par de trucos.
param(..)
toma nuestra entrada, la guarda en$a
.$b
para que sea la.length
de nuestra entrada. Esto ahorra un byte más tarde.0..($b-1)|%{..}
es el equivalente de unfor($i=0;$i-le($b-1);$i++){..}
bucle, pero bastante más corto.$i
para mantener eso en ...($_+1)..$b|%{..}
el siguientefor
ciclo, ya$_
que solo es posicional al ciclo interno.+
para guardar un montón de bytes) es-eq
ual a la diferencia posicional en la matriz. Dado que se nos proporciona explícitamente una entrada en minúsculas, no necesitamos hacer la conversión de mayúsculas y minúsculas. Esta declaración devolveráTrue
oFalse
.$o
, porTrue
lo que agregaremos 1, mientrasFalse
que agregaremos 0.$o
. Tenga en cuenta que debemos hacer lo mismo con tricksy-cast-to-int+
para evitar imprimirFalse
si no hay coincidencias.fuente
Rubí, 74
Nada súper interesante aquí. Me hubiera encantado usarlo
eval("s[i].#{["succ"]*(j-i)*?.}")
pero ... parecía demasiado largo.fuente
Matlab
(94)(80)La función binomial produce una estúpida excepción cuando k es mayor que n y no puedo detectar excepciones dentro de la¿Quién necesita una función incorporada?arraycell
función, de lo contrario podría jugar más.Ahora podría hacerlo a mano, simplificando binomial (n, 2) = n / (2 (n-2)!) = N (n-1) / 2. observe que este último valor representa la suma de enteros de 1 a n-1, esto no arroja ninguna excepción en matlab, que Dios bendiga las matemáticas.
Ps: este método es diferente al de slvrbld
Ejecución
fuente