Reto
Dada una entrada de una cadena en minúsculas [a-z]
, genera la distancia total entre las letras.
Ejemplo
Input: golf
Distance from g to o : 8
Distance from o to l : 3
Distance from l to f : 6
Output: 17
Reglas
- Lagunas estándar prohibidas
- Este es el código de golf : la respuesta más corta en bytes gana.
- El alfabeto se puede atravesar desde cualquier dirección. Siempre debes usar el camino más corto. (es decir, la distancia entre
x
yc
es 5).
Casos de prueba
Input: aa
Output: 0
Input: stack
Output: 18
Input: zaza
Output: 3
Input: valleys
Output: 35
code-golf
string
number
arithmetic
Daniel
fuente
fuente
æ%
mientras leía los complementos el otro día, y estaba hecho para este (tipo de) problema:OIæ%13AS
æ
son dos).Haskell,
5756 bytesEjemplo de uso:
sum.q.q.(zipWith(-)=<<tail).map fromEnum $ "valleys"
->35
.Cómo funciona:
Editar: @Damien guardó un byte. ¡Gracias!
fuente
q.q
)map
en la definición deq
un byte menosMATL ,
14, 10 bytesPruébalo en línea!
¡Gracias @Suever por guardar 4 bytes!
Explicación:
Versión previa:
fuente
Python 3,
6968 bytesDescompostura:
fuente
for
f=lambda a,b,*s:13-abs(13-abs(ord(a)-ord(b)))+(s and f(b,*s)or 0)
Java,
126120117 bytesGracias a @KevinCruijssen por señalar un error en la versión original y sugerir que se vacíe el bucle for.
El uso de
(26 + z[i] - z[i - 1]) % 26)
está inspirado en un comentario de @Neil sobre otra respuesta.(26 + ...)%26
tiene el mismo propósito queMath.abs(...)
por...? e : 26 - e
.Sin golf :
fuente
[edit] those details into the top of your post, with this markdown:
#Idioma, n bytes`-
antes de une
en tu versión sin golf.e=z[i]-z[i-1];
Entonces necesitas un reparto(byte)
o cambiar ele
aint
. También, puede quitar los soportes de bucle mediante la colocación de todo dentro del ciclo for, así:int f(String s){byte[]z=s.getBytes();int r=0,i=0,e;for(;++i<z.length;r+=(e=z[i]-z[i-1])>0?e<14?e:26-e:-e<14?-e:e+26);return r;}
(PD: La invirtió la for-loop es por desgracia la misma longitud:int f(String s){byte[]z=s.getBytes();int r=0,i=z.length-1,e;for(;i>0;r+=(e=z[i]-z[--i])>0?e<14?e:26-e:-e<14?-e:e+26);return r;}
.JavaScript (ES6),
848279 bytesGuardado 3 bytes gracias a Cyoce:
Explicación:
Ejemplo:
Llamada:
f('golf')
Salida:
17
Soluciones anteriores:
82 bytes gracias a Neil:
84 bytes:
fuente
Math.abs(...)
usted puede usar(26+...)%26
; esto funciona porque está volcando valores superiores a 13 de todos modos. (Creo que así es como funciona la respuesta MATL.)p=parseInt;
y luego usarlo enp()
lugar deparseInt()
Ruby, 73 bytes
fuente
PHP, 93 bytes
fuente
05AB1E , 12 bytes
Explicación
Pruébalo en línea!
fuente
Perl, 46 bytes
Incluye +3 para
-p
(el código contiene'
)Dar entrada en STDIN sin nueva línea final:
stringd.pl
:fuente
Raqueta 119 bytes
Pruebas:
Salida:
Versión detallada:
fuente
(define(f s)
con(lambda(s)
2 bytes más cortos (las funciones anónimas están bien).(λ(s)
también, que si en utf8 es de 6 bytes, creoDO#,
8785 bytesSolución mejorada : se reemplazó Math.Abs () con el truco add & modulo para guardar 2 bytes:
Solución inicial :
Pruébalo en línea!
Fuente completa, incluidos los casos de prueba:
fuente
En realidad, 21 bytes
Basado parcialmente en la respuesta de Rubia de cia_rana .
Hubo un error con
O
(en este caso, map ord () sobre una cadena) donde no funcionaría cond
(quitar el elemento inferior) yp
(pop primer elemento) sin convertir primero el mapa en una lista con#
. Este error se ha solucionado, pero como esa solución es más nueva que este desafío, me he mantenido#
.Editar: Y el recuento de bytes ha estado mal desde septiembre. Whoops
Sugerencias de golf bienvenidas. Pruébalo en línea!
No golfista
fuente
Java 7,128 bytes
Sin golf
fuente
Pyth, 20 bytes
Un programa que toma la entrada de una cadena entre comillas en STDIN e imprime el resultado.
Pruébalo en línea
Cómo funciona
fuente
dc + od, 65 bytes
Explicación:
Como en DC no puedes acceder a los caracteres de una cadena, usé od para obtener los valores ASCII. Estos se procesarán en orden inverso desde la pila (contenedor LIFO) de la siguiente manera:
Correr:
Salida:
fuente
C,
82 86 8376 bytesAsume que la cadena de entrada tiene al menos un carácter de longitud. Esto no requiere
#include<stdlib.h>
Editar: Argh, puntos de secuencia!
Pruébalo en Ideone
fuente
C, 70 bytes
76 bytesfuente
Scala, 68 bytes
La crítica es bienvenida.
fuente
C #, 217 bytes
Golfizado:
Sin golf:
Salida:
'a' es 97 cuando se convierte a bytes, por lo que 97 se resta de cada uno. Si la diferencia es mayor que 13 (es decir, la mitad del alfabeto), reste las diferencias entre cada carácter (valor de byte) de 26. ¡Una adición de último minuto de "retorno de rendimiento" me ahorró algunos bytes!
fuente
Python 3, 126 bytes
Con lista en comprensión.
fuente
abs(x-y)
pory-x
ya que el llamado asorted
hacerx < y
.PHP, 79 bytes
fuente
Java, 109 bytes
fuente