¡Bienvenido a mi primer desafío de código de golf! :) Vamos directo a ello.
Desafío:
Dados dos vectores de coma flotante, O (origen) y T (objetivo), debe crear un programa para imprimir los valores L y R en STDOUT.
- O es una esquina de la plaza
- T es una esquina del cuadrado que se encuentra enfrente de O
- L es el punto 2D (esquina) que marca el otro punto del cuadrado incompleto
- R es el punto 2D (esquina) opuesto a L
Reglas
- Los valores para O y T deben leerse desde STDIN (ver entradas de ejemplo).
- Nuevamente, los valores de L y R deben imprimirse en STDOUT.
Puntuación y bonificaciones
- Cuenta los bytes de tu programa.
- Si su programa dibuja líneas que se conectan entre O a L y T a R , reste 15 bytes del recuento de bytes.
Ejemplos
La primera línea cubre entradas (primeros corchetes para O y siguientes corchetes para T ) y otra línea representa la salida esperada.
- [0, 0] [3, 3] Esperado: [0, 3] [3, 0]
- [0, 0] [-2, -2] Esperado: [-2, 0] [0, -2]
- [1, -1] [4, 2] Esperado: [1, 2] [4, -1]
- [0, -1] [0, 1] Esperado: [-1, 0] [1, 0]
AVISO : ¡las entradas y salidas pueden ser puntos flotantes!
¡Información importante!
- Los valores O y T pueden tomarse en cualquier formato, siempre que provengan de STDIN (ej. Dentro [] o () ...), use el formato que desee.
- L y R se pueden imprimir en cualquier orden.
- Recuerde: cuando (O-> L-> T-> R-> O) están conectados, ¡cada lado debe tener la misma longitud!
Victorioso
- ¡Este es el código de golf, por lo que gana la menor cantidad de bytes!
- La respuesta del ganador se aceptará el domingo 15.11.2015 20: 00-22: 00 (hora de Finlandia) (si no me equivoco, esa fecha está escrita como 11.15.2015 en los Estados Unidos, no se confunda).
¡Feliz golf!

Respuestas:
En serio , 11 bytes
Un puerto de mi respuesta TI-BASIC. Calcula
mean(X)+i*(X-mean(X)).Explicación:
Entrada como una lista de dos números complejos:
[1-1j,4+2j]y salida en el mismo formato:[(4-1j), (1+2j)].fuente
æmedia de la lista y causó queî(multiplicar por i) se vectorizara, lo que permitió una solución de 9 bytes no competitiva. En serio está empezando a convertirse en un lenguaje realmente bueno.Σ2 bytes?Σtiene el punto de código 0xF4.En serio , 25 bytes
,i││-++½)+-+½)++-½)±+++½)Toma la entrada como una lista:
[x1,y1,x2,y2]La misma estrategia que mi respuesta de Python, ¡pero en serio!
Explicación:
Pruébalo en línea
fuente
TI-BASIC, 16 bytes
Para una calculadora de la serie TI-83 + u 84+.
A menos que haya entendido mal, OP dijo que estaban bien con tomar entradas y salidas como números complejos. los
iaquí es la unidad imaginaria, no la variable estadística.TI-BASIC tiene una
mean(función, pero molestamente no funciona con listas complejas, arrojando unERR:DATA TYPE.Ingrese el formulario
{1-i,4+2i}para[[1,-1],[4,2]]. La salida está en la forma{4-i 1+2i}para[[1,2][4,-1]].fuente
Matlab,
5145464542 bytesAhora se espera la entrada en un vector de columna:
[x0;y0;x1;y1](salida en el mismo formato) Acabo de modificarlo para que sea un programa completo.O alternativamente
Vieja solución:
La entrada espera vectores de columna, p. Ej.
f([0;0],[3;3])También devuelve dos vectores de columna (como una matriz de 2x2).
fuente
Japt,
2928 bytesJapt es una versión abreviada de Ja vaScri pt . Interprete
Tenga en cuenta que las funciones de flecha requieren un navegador compatible con ES6, como las versiones más recientes de Firefox. La entrada entra como una matriz de 4 elementos, por ejemplo
[1,-1,4,2].Cómo funciona
Cómo fue golfizado
Primero intenté simplemente copiar el enfoque Python de @ Mego. Esto me dejó con este monstruo de 48 bytes:
(Nota: la entrada no debe estar envuelta actualmente en una matriz).
Dado que cada uno de estos elementos debe dividirse entre 2, es más corto asignar toda la matriz con
mY=>Y/2:¿Ahora que? Bueno, la matriz ahora simplemente agrega tres de las entradas y resta la cuarta, siguiendo el patrón
1,2,3,0. Entonces, podríamos empacar las entradas en una matriz, luego sumarlas, dividirlas por 2 y restar el elemento necesario:¡Bien guardado un byte! Pero, ¿es posible reducir la matriz al principio? Intentemos empaquetarlo en una cadena, luego dividirlo en una matriz con
a:Mira eso, otro byte guardado. ¿Pero hay una manera aún mejor? Bueno, podemos usar el hecho de que
[1,2,3,0] ≡ [1,2,3,4] mod 4:¡Otros dos bytes! Ahora vamos a alguna parte. Pero eso
Ug0 +Ug1 +Ug2 +Ug3está acaparando mucho espacio. ¿Qué pasa si reducimos la matriz con la suma?Wow, eso realmente ayudó! Ahora tenemos 29 bytes. Y gracias a @ ן nɟuɐɯɹɐ ן oɯ, incluso pude jugar golf a otro byte de la reducción. Pero si pudiéramos usar un incorporado para sumar la matriz, sería mucho más corto:
19 bytes! ¡Increíble! Desafortunadamente, Japt aún no tiene tales incorporaciones. Agregaré esto cuando tenga la oportunidad. ¡Las sugerencias son bienvenidas, ya sea para el programa o el idioma!
Bueno, a partir de la v1.4.4, he implementado muchas más funciones en Japt de lo que había planeado originalmente. Comenzando con el plan original para la versión más corta:
Primero necesitamos cambiar algunas cosas: las funciones se definen con
{, y la función de suma esx. Esta versión funciona como está:Ahora,
@es una forma abreviada deXYZ{, que nos permite guardar un byte cambiando deZaX. Además,£es un atajo param@guardar otro byte:Recientemente implementé una función
Uen la que al principio del programa generalmente se puede omitir. Sin embargo, debido a un error de implementación, esto también funciona con funciones:Finalmente, la
gfunción ahora se ajusta si el índice ha pasado el final de la cadena, lo que nos permite eliminar el%4total de 13 bytes :Y pensé que 19 era increíble ;-) ¡ Pruébelo en línea!
fuente
eval(U.join`+`).evalequivalente, ¡eso realmente ahorra un byte!Javascript (Node.js / ES6), 154 bytes
Obtener stdin es la parte más larga del código. La entrada debe ser los puntos separados por comas:
fuente
ngn APL, 21 bytes
Esto toma la entrada como un par de números complejos (por ejemplo,
1J¯1 4J2) e imprime la salida de la misma manera (por ejemplo,4J¯1 1J2). Pruébelo en línea en la demostración ngn / apl .fuente
1 ¯1para entrada0J¯1 0J1, que es la respuesta correcta. ¿Que estas obteniendo?Pyth, 12 bytes
Esto toma la entrada como un par de números complejos (por ejemplo,
1-1j, 4+2j) e imprime la salida como una matriz (por ejemplo,[(4-1j), (1+2j)]). Pruébalo en línea.fuente
𝔼𝕊𝕄𝕚𝕟, 29 caracteres / 43 bytes
Try it here (Firefox only).
fuente
CJam, 30 bytes
Pruébalo en línea
Esto toma la entrada como una lista de listas, por ejemplo, para el último ejemplo:
Explicación:
fuente
Prólogo, 118 bytes
Ligeramente más legible:
Para iniciar el programa:
Ejemplo de entrada cuando las esquinas conocidas son [1, -1] [4, 2]:
[1, -1,4,2]
Ejemplo de salida, donde X e Y contendrán las esquinas desconocidas:
X = [1.0, 2.0],
Y = [4.0, -1.0]
Pruébelo en línea aquí
Editar: modificado para leer la entrada de STDIN
fuente
Python 3, 102 bytes
La entrada se toma en forma
x1 y1 x2 y2, en una sola línea.Pruébalo en línea
fuente
Python 2, 56 bytes
La entrada puede ser
x1,y1,x2,y2o(x1,y1,x2,y2)fuente