Introducción
Clarence es un empleado de entrada de datos que trabaja en un proveedor de servicios de internet. Su trabajo es ingresar manualmente las direcciones IP de todos los clientes del ISP en la base de datos. Lo hace usando un teclado que tiene el siguiente diseño:
1
2
3
4
5
6
7
8
9
.
0
La distancia entre el centro de las teclas adyacentes horizontal o verticalmente es exactamente un centímetro. Por ejemplo, la distancia entre los centros de 3y 9sería dos centímetros. La distancia entre los centros de 3y 5sería √2cm. El teorema de Pitágoras es suficiente para calcular la distancia entre dos claves.
Clarence, como es de esperar de alguien que trabaja en un ISP, utiliza un sistema de escritura muy lento e ineficiente. Utiliza un solo dedo y busca la tecla, luego mueve el dedo hacia la tecla, luego la presiona y repite todos los dígitos del número. Es posible que conozca este estilo como el "sistema de búsqueda de águilas", ya que el dedo busca por encima del teclado la tecla correcta antes de presionar la tecla, como un águila que cae para matar.
Por ejemplo, así es como Clarence escribiría el número 7851
:
- Empieza su dedo 7y empuja la llave.
- Mueve su dedo hacia la derecha 1 cm 8y empuja la tecla.
- Mueve su dedo hacia arriba 1 cm 5y empuja la tecla.
- Mueve su dedo diagonalmente hacia arriba y hacia la izquierda √2cm 1y empuja la tecla.
Por lo tanto la distancia total que Clarence movió su dedo para escribir 7851
es 1 + 1 + √2
que es aproximadamente 3.41cm.
Su tarea es escribir un programa que calcule la distancia que Clarence debe mover su dedo para escribir direcciones IP arbitrarias.
Descripción de entrada
La entrada es una cadena que tendrá el formato
().().().()
donde cada uno ()
es un entero en el rango 0
- 999
. Esto representa la dirección IP que Clarence debe escribir. Una entrada de ejemplo podría ser:
219.45.143.143
También me gustaría señalar que las entradas como 0.42.42.42
o 999.999.999.999
son entradas válidas, a pesar de que son direcciones IP no válidas. Por lo tanto, no necesita incluir ningún código de verificación de dirección IP en su programa.
Descripción de salida
Muestra la distancia que Clarence debe mover su dedo para escribir la dirección IP especificada. Redondea las respuestas a dos decimales cuando sea necesario, y usa la cm
unidad en tu salida. La salida para la entrada de ejemplo es 27.38cm
(1 + √8 + √5 + 2 + 1 + √5 + 3 + 1 + √5 + √13 + 3 + 1 + √5).
Respuestas:
CJam,
464443383734 bytesGracias a @ user23013 por sugerir
mh
, lo que hizo posible guardar 5 bytes.Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
{3fmd~@-@@-mh}%
.mh
siquiera tenía idea de que existía.Pyth,
383534 bytesDemostración.
Indexación en la cadena de una idea flotante gracias a @Dennis.
Explicación, en la entrada falsa
15.0
:z
. '15 .0 'Estamos mapa esta lista de la siguiente manera:
m.jF.Dx`ciUTT1k3z
.UT
: Generamos la lista[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
.iUTT
: Luego, tratamos esta lista como un número base 10 que nos da123456789
.ciUTT1
: Luego, convertimos este número en un flotador por coma flotante dividiéndolo por 1, dando123456789.0
.`
: Convertir a una cadena.'123456789.0'
x k
: Tome el índice del carácter de entrada en esa cadena.[0, 4, 9, 10]
..D 3
:.D
es la función divmod, que genera su primera entrada dividida y modulada por la segunda entrada. La segunda entrada es 3, aquí. Esto proporciona la ubicación física del personaje en el teclado numérico.[(0, 0), (1, 1), (3, 0), (3, 1)]
..jF
:.j
es el constructor de números complejos.F
lo aplica a la tupla.[0j, (1+1j), (3+0j), (3+1j)]
..: 2
: Ahora, tomamos las 2 subcadenas de entrada de esta lista para que podamos encontrar las distancias por pares.[[0j, (1+1j)], [(1+1j), (3+0j)], [(3+0j), (3+1j)]]
.-M
: Toma la diferencia de los dos números complejos.[(-1-1j), (-2+1j), -1j]
..aM
: Toma el valor absoluto del resultado. Esta es la distancia entre las ubicaciones del teclado.[1.4142135623730951, 2.23606797749979, 1.0]
s
: Suma las distancias.4.650281539872885
..R 2
: Redondear a 2 decimales.4.65
.+ "cm
: Agregar'cm'
al final e imprimir.4.65cm
.fuente
PHP - 108 bytes
La entrada se toma de stdin. El
-.987654321
enviado a lastrpos
función se evalúa'-0.987654321'
en un contexto de cadena.Uso de la muestra:
fuente
C,
192177159 bytesVersión actualizada, ahora complete el programa usando el argumento de la línea de comando. Al mismo tiempo, mejorado para ser aún más corto que la versión anterior:
Sin golf:
La versión de golf utiliza un preprocesador
#define
para acortar parte del código repetido en la versión completa.fuente
s
antes de verificar que*s
no es cero. 3. El OP dicho programa en su post. No estoy seguro de si se acepta una función. 4. Con GCC, no necesita incluir. 5.sqrt
es más corto quesqrtf
. 6.pow(u-p,2)
es más corto que(u-p)*(u-p)
. 7. No estoy seguro, pero creo que almacenar ambas coordenadas en una sola cadena y configuraciónu=x[c]/3
yv=x[c]%3
debería ser más corto.int
podían usarse sin declarar. Pero, de hecho, el sonido metálico también lo acepta con una advertencia, así que me deshice de él.p=u,q=v,G,r+=...
.JavaScript ( ES6 ), 132
E / S a través de una ventana emergente. Ejecute el fragmento para probar (solo Firefox)
fuente
Python 3, 108 bytes
Es cierto que no está muy bien golfizado, pero al menos está vinculado con PHP.
fuente
Rubí 135
139Pruébelo en línea: http://ideone.com/2CIQa5
fuente
Python
199 171166Hay un código Python más corto (108) para esto por SP3000:
https://codegolf.stackexchange.com/a/50854/41163
Uso de la muestra:
Ejecutar en línea: http://codepad.org/h9CWCBNO
Código comentado
fuente
if
cláusulas en una línea, comoif i<1:c=3,1
<!-- language: lang-python -->