Las coordenadas en el mundo de la Tierra plana consisten en latitud (x) y longitud (y), que son enteros en el rango de 0 ... 9999. Al igual que los enteros gaussianos , pero siempre se escriben usando esta notación:
411S 370E
Es decir, con S
o N
anexado a la latitud, E
o W
anexado a la longitud, con espacio (s) entre los dos componentes.
Objetivo
Escriba un programa (no una función) que lea dos coordenadas, separadas por espacios en blanco, y genere su suma. La primera coordenada es un punto de partida, la segunda es un desplazamiento y la salida es la posición resultante.
De entrada y salida
Dado que este desafío tiene que ver parcialmente con el formato, intentaré definir los formatos de entrada y salida sin ambigüedades.
El formato de entrada preferido tiene 1 espacio entre los componentes de coordenadas, sin ceros a la izquierda y un carácter de nueva línea entre las dos coordenadas. El programa debe poder leer el formato preferido.
La salida puede contener cualquier cantidad de espacios en blanco y ceros a la izquierda. Si es diferente del formato de entrada preferido, el programa también debe poder leer este formato.
Solo para que quede claro, la entrada no puede (no contendrá) ningún carácter de formato adicional. Solo espacios y líneas nuevas donde sea necesario.
Puntuación
Este es un experimento en una nueva condición ganadora. Elegiré al ganador aceptando una respuesta en unas pocas semanas. Si después aparece una mejor respuesta, cambiaré la respuesta aceptada.
La puntuación para el programa es su recuento de bytes. El programa ganador es uno que tiene menos de 400 bytes, tiene la menor cantidad de bytes, pero está escrito en el lenguaje de programación más detallado . Para determinar el ganador:
- Eliminar programas con un conteo de bytes 400 o más (pueden participar pero no pueden ganar)
- Considere solo el programa más corto para cada lenguaje de programación
- El programa más largo gana
Los políglotas compiten contra programas en todos los idiomas en los que son válidos (por ejemplo, si un programa es válido en ambos bash
y sh
compite contra programas en ambos idiomas).
Casos de prueba
En los casos de prueba, las dos primeras líneas son la entrada y la tercera línea es la salida.
0S 0E
0S 0W
0N 0E
(la dirección de cero no importa, tanto en entrada como en salida)
0S 9999E
9999N 9999W
9999N 0E
(valores máximos)
42S 314W
42N 2718W
0N 3032W
(la dirección de cero no importa en la salida)
5555N 8888W
7777S 0E
2222S 8888W
(sin valores negativos; cambie la dirección si necesita cambiar el signo)
0001N 4545W
0999N 5454W
1000N 9999W
(si el programa genera ceros iniciales y varios espacios, debe poder leerlos; también debe poder leer la entrada que no los contiene)
8888N 8888W
9999N 9999W
(entrada no válida: cualquier comportamiento es aceptable, incluido el bloqueo y el bucle infinito)
fuente
Respuestas:
ABAP,
377365 bytesSin golf:
En realidad fue un desafío estar dentro de los 400 caracteres.
Algunas notas:
ADD c TO a.
cuál es una de mis declaraciones detalladas favoritas.FORM
yPERFORM
explotó el recuento de caracteres, así que mantuve las macros+
sin un espacio anterior es un operador de desplazamiento, que requiere muchos espacios en el códigoRIGHTPLUS
la expresión tenía que ser un número, por lo que la necesidad de multiplicar con 1, pero luego el formato tiene decimales.DECIMALS
fuente
JavaScript (ES6), 118 bytes
fuente
MATLAB,
327304296290282276267259255253 bytesCreo que me estoy acercando a un límite ahora. Me las arreglé para eliminar
51, 60687274 bytes de una respuesta que pensé que estaba bien. =)Se eliminaron 8 bytes tomando el
input
interiorstrsplit
, gracias a Luis Mendo. Se eliminaron otros 6 bytes tomando toda la entrada en una matriz de celdas en lugar de dos. Se eliminaron otros 8 bytes al tomar las dos últimas declaraciones dentrodisp()
. Se eliminaron 6 bytes eliminandochar
y algunos corchetes. Esto no fue posible en una revisión previa de la respuesta. Dividir los elementos de la celda en cuatro variables costó 15 bytes, pero ahorró 24, ¡por lo tanto, 9 bytes ahorraron! 8 bytes adicionales debido a undisp
esquema mejorado .5*~~s
ahorra dos bytes en comparación con(s>0)*5
. Así 4 nuevos bytes guardados (para syt). Tomar lo contrario de esta última expresión guarda otros 2 bytes,83-5*~s
es más corto que78+5*~~s
Código de golf:
Mismo código, pero con saltos de línea:
Casos de prueba:
Guarde lo anterior como
flat_earth.m
fuente
R, 196 bytes
R es bastante detallado, para los estándares de golf. Veamos...
Sin golf:
Editar para agregar: ¡Acabo de ver las otras respuestas y me sorprende que mi entrada sea una de las más cortas! Quizás R no sea tan detallado como pensaba ...
fuente
Java, 372 bytes
Sin golf
Notas
A.java
, compilar conjavac A.java
, ejecutar conjava A
. Luego ingrese la línea de entradas separada o como dos entradas separadas en stdin.Salidas:
fuente
SQL (PostGreSQL 9.4), 305 bytes
Implementado como una declaración preparada que toma 2 parámetros de caracteres. Un parámetro para cada línea de entrada.
Se llama de la siguiente manera
y genera una fila que contiene una columna de un solo carácter para el resultado.
9999N 0E
fuente
Java, 308 bytes
Una versión más legible:
Jugar al golf en Java es un tipo especial de diversión. Las siguientes dos líneas de código hacen lo mismo, pero la primera es más corta:
El código lee 4 tokens de la entrada estándar. Para cada ficha, la parte hasta el último carácter se convierte
int
y el último carácter opcionalmente cambia su signo.Luego agrega el valor que se leyó hace 2 iteraciones. Java inicializa las matrices a 0, por lo que en las dos primeras iteraciones esto hará lo correcto.
Luego formateará los valores y los imprimirá. Sin embargo, en las dos primeras iteraciones, imprime la cadena vacía en su lugar (por lo que aparecen dos saltos de línea adicionales en la salida).
Utiliza algo de aritmética funky para que la variable de iteración (4,3,2 o 1) y el signo (-1 o 1) se puedan combinar en un índice basado en cero en la cadena
"ENWS"
.fuente
Perl 6, 130 bytes
fuente
Ruby, 186 bytes
Es muy corto, lo siento. Hice mi mejor esfuerzo.
fuente
C - 267 bytes
Pensé que C sería largo ... también podría ponerlo. ; _;
fuente
Befunge-93 , 240 bytes
Tenga en cuenta que el intérprete tiene un cuadro de entrada de línea única. Pegar el formato preferido reemplaza la nueva línea con un espacio. Obtener valores enteros
&
ya consume espacios iniciales y ceros, por lo que el formato preferido se puede leer en la pila&~&~&~&~
solo. Agregando pasos para poner los valores en una línea en blanco para que uno pueda recuperar y comparar los vectores una coordenada a la vez, se puede usar el siguiente programa de 136 bytes (excluyendo las notas a la derecha de la línea):The Catch: la salida fuerza un espacio adicional después de los enteros, por lo que es imposible generar en el formato preferido . Por ejemplo, la salida aparecerá como en
1000 N 9999 W
lugar de1000N 9999W
. Para verificar e ignorar espacios antes de la dirección de cada coordenada en la entrada, se necesitan cuatro bucles adicionales (uno para cada coordenada). A continuación se muestra un solo bucle:El programa resultante puede tener múltiples espacios en cualquier lugar de la entrada (excepto entre dígitos).
Entrada de ejemplo:
0001 N 4545 W 0999 N 5454 W
fuente
Lua,
333328 bytesCuenta con un sistema de entrada inválido de alto nivel y un bucle infinito absolutamente innovador para uso repetido.
Disfrutar;)
Editar: guardado 5 bytes de renombrar
math.abs
comom
yprint
comop
fuente
PHP 291 Bytes.
No hace nada inteligente, simplemente avanza el problema.
Las reglas deben tener una cláusula adicional que indique que solo el idioma con al menos 2 entradas puede ganar.
fuente
PHP, 169 bytes
Inspirado por @Paul Drewett:
Descompostura
PHP,
206197195 bytesliteralmente hablando, "moste verbose" probablemente sería Mathematica o Mathlab?
Ahora, ¿cómo puedo duplicar el tamaño de esto ...
Descompostura
fuente
GolfScript - 111 bytes
Explicación
fuente
Python 2.7 -
232175 bytesFunciona para todos los casos de prueba. Siempre inserta N o W para 0. Estoy seguro de que un mejor jugador de Python que yo podría eliminar unos pocos bytes más.
EDITAR
Aproveché unos poderosos 57 bytes debido a algunos excelentes consejos de @ mbomb007 y @Titus plus al detectar el hecho de que podría combinar las dos entradas_de_ raw con un espacio y luego usar un .split () que se divide en el espacio sin especificarlo. El algoritmo es el mismo pero mucho mejor golfizado.
fuente
...str(x)...
con...`x`...
; reemplazar("E" if q<0 else "W")
con"WE"[q<0]
"S" in i or "E" in i
seguramente puede ser escritoi in "ES"
o similar.