Usando la siguiente tabla ( fuente ) escriba un código que tome los nombres de dos planetas y devuelva la distancia entre ellos:
+-------------------+---------------+
| Planets | Distance (km) |
+-------------------+---------------+
| Mercury -> Venus | 50290000 |
| Venus -> Earth | 41400000 |
| Earth -> Mars | 78340000 |
| Mars -> Jupiter | 550390000 |
| Jupiter -> Saturn | 646270000 |
| Saturn -> Uranus | 1448950000 |
| Uranus -> Neptune | 1627450000 |
| Neptune -> Pluto | 1405380000 |
+-------------------+---------------+
Ejemplos, entrada y salida:
Mercury, Mars
170030000
Neptune, Jupiter
-3722670000
Earth, Earth
0
Observe el signo negativo allí, ya que Júpiter viene antes que Neptuno. También son todos enteros.
Plutón no tiene que ser incluido (principalmente debido a una órbita extraña que hace que sea difícil calcular la distancia; esa distancia dada es mi propio cálculo, pero como Plutón es famoso ahora ...).
Por distancias entre planetas me refiero a órbitas: no espero una fecha y averiguar dónde están.
Este es el código de golf, el código más corto gana.
Mercury, Mars -> 170030000.0
?Respuestas:
CJam,
545144 bytesPruébelo en línea en el intérprete de CJam .
Idea
Utilizamos una función de hashing simple para identificar los ocho planetas. Al considerar cada nombre como la matriz de sus puntos de código, convertirlos de la base 26 a un número entero y tomar el resultado módulo 93 y luego módulo 8, Mercurio , Venus , Tierra , etc., mapa a 2 , 4 , 0 , 1 , 3 , 5 , 6 y 7 .
Ahora, elegimos un punto que se encuentra 320,000 km detrás de Neptuno y calculamos las distancias de los ocho planetas a ese punto. Después de soltar cuatro ceros finales y reordenar los planetas para que se ajusten a los 8 índices desde arriba, obtenemos la matriz
que, si codificamos cada número entero en la base 70, produce lo siguiente:
Recordando que
(A B)
se pueden reemplazar dos dígitos adyacentes((A-1) (B+70))
, podemos modificar la matriz desde arriba para que todos los enteros se puedan codificar como caracteres ASCII imprimibles:Código
fuente
Python 2,
149147142138128123119 BytesSolo usa una búsqueda simple para determinar qué distancias usar :) Esto define una función anónima, por lo que para usarla deberá darle un nombre.
¡Gracias a Sp3000 por las ideas que ahorraron un montón de bytes!
Sangrado correctamente y sin golf un poco para facilitar la lectura:
Llame así:
fuente
Prólogo,
190174151 bytesGracias a Fatalize por tu orientación.
fuente
s(A, B, R)
lugar de escribirR
? No se especifica nada para las salidas, por lo que un retorno de predicado debería estar bien.g
ag(A,X):-sub_atom(A,2,2,_,B),member(B:X,[rc:0,nu:5029,rt:9169,rs:17003,pi:72042,tu:136669,an:281564,pt:444309]).
y la eliminación de todos los hechos de planetas. Es menos interesante=..
pero es más corto obtener un mapeo de valores claveJavaScript (ES6),
115110 bytesEsta es una función anónima, por lo que deberá almacenarla en una variable (
f=...; f("Earth", "Mercury")
) o usarla como una expresión entre paréntesis ((...)("Earth", "Mercury")
.Esa cadena desordenada son las dos primeras letras de cada planeta, seguidas de la distancia de ese planeta a Mercurio (dividido por 10000, para ahorrar espacio). La función interna
g
hace lo siguiente:k
),k[0]+k[1]
),Ea(\d*)
),1e4
) y devuelve el resultado.Al restar una distancia de Mercurio de la otra, obtenemos la distancia entre los planetas.
fuente
btoa
tienen puntos de código por debajo de 256, por lo que ISO 8859-1 codificará cada carácter utilizando un solo byte.Java,
274272264 bytes (¡incluye Plutón!)De entrada y salida:
Espaciado y con pestañas:
fuente
int
yint[]
en una línea si la matriz es la última: Me gustaint i=0,j=1,k[]={};
10000
con1e4
.e > w
que puede recortar un personaje usando el operador va a:while(e-->w)
que es de 12 caracteres, en lugar defor(;e--!=w;)
lo que es 13.Python, 118 bytes
n
es una función que devuelve la distancia de Mercurio.La cadena
"VeEaMaJuSaUrNe"
son los dos primeros caracteres de todos los nombres de los planetas, excepto Mercurio .find
no puede encontrar Mercurio, por lo que devolverá -1. -1/2 sigue siendo -1, así que este es el último elemento de la tupla, que es 0.Código de prueba simple:
fuente
APL,
979585 bytesEsto crea una función diádica sin nombre que toma el planeta de origen como argumento izquierdo y el planeta de destino como el derecho.
¡Puedes probarlo en línea !
fuente
J-- , 226 bytes
No creo que esto cuente porque estaba haciendo el lenguaje mientras la pregunta estaba fuera, pero fue principalmente una prueba de cuán pequeño podía comprimir el código Java. Esto se basa total y completamente en la respuesta de DeadChex .
Aquí se explica cómo usarlo:
fuente
Pyth -
5953 bytesCodifica la distancia en puntos de código unicode.
La búsqueda de nombres es genial porque se repite. ¡Gracias a @Dennis por sugerir el índice 14 como una búsqueda sin colisiones!
Pruébalo aquí en línea .
fuente
Bash, 140 bytes
fuente
CoffeeScript,
183180 bytesNo minificado:
fuente
Ruby, 168 bytes
Está diseñado como un script para ejecutarse desde la línea de comandos, por lo tanto, utiliza
ARGV
. Correr comofuente
Haskell,
160158157 bytesEjemplo de uso:
Cómo funciona: defino un nuevo tipo de datos
P
donde los nombres de los constructores son los nombres de los planetas. También lo puse en elEnum
clase, es decir, obtengo una asignación a enteros víafromEnum
(en orden de definición, comenzando conMercury
->0
). Este entero puede usarse como índice para la lista de distancia.Editar: @Kritzefitz encontró dos bytes para guardar y @Alchymist otro. ¡Gracias!
fuente
fromEnum x
y guardar dos bytes.Julia,
206203190 bytesEsto crea una función sin nombre que acepta dos cadenas y devuelve un entero. Para llamarlo, dale un nombre.
Ungolfed + explicación:
fuente
Java,
257228 bytesstatic long d(String...s){...}
resuelve el desafío La entrada requiere nombres de planetas para que coincidan exactamente con los nombres de las constantes de la enumeración. Me encanta cómo Java proporciona un método de conversión de cadena a enumeración para mí <3Uso:
Z.d("Mercury","Pluto")
devoluciones5848470000
Z.d("Pluto","Mercury")
devoluciones-5848470000
Z.d("Uranus","Neptune")
devoluciones1627450000
Z.d("Mars","Pluto")
devoluciones5678440000
fuente
Macro de preprocesador C (gcc) , 146 bytes
Pruébalo en línea!
fuente