Hay un juego que me gusta jugar. Sucede en una cuadrícula de tamaño finito (pero está envuelta, como una esfera). En esa cuadrícula, se selecciona un punto aleatorio (solo entero). Luego, a mí, el usuario, se me solicita una entrada de coordenadas. Si mi entrada coincide exactamente con el punto aleatorio, me dicen que he ganado. De lo contrario, me informan la distancia de punto entre mi entrada y el punto aleatorio. Por ejemplo, si supuse que (2,2)
el punto aleatorio estaba en (4,3)
, entonces la distancia sería sqrt[(3-2)^2 + (4-2)^2] = sqrt[5]
.
El juego continúa hasta que el jugador llega a la ubicación correcta del punto.
Objetivo Crear una versión funcional del juego descrita anteriormente. Debe crear un programa completo para hacerlo. Esto es lo que debe hacer su programa:
- Solicite dos entradas: la altura y el ancho de la placa. El origen está en la esquina superior izquierda del tablero. Estas entradas no excederán
1024
. - Seleccione un punto aleatorio en ese tablero; este será el punto a adivinar.
- Aceptar entrada simulando un giro. La entrada será un par de enteros separados por espacios o dos entradas enteras separadas. En respuesta a esta entrada, el programa hará una de dos cosas:
- Si la entrada coincide con el punto aleatorio seleccionado, envía un mensaje que indica la victoria del usuario. Sugeriría "¡Ganaste!".
- De lo contrario, muestre la distancia entre el punto de entrada del usuario y el punto aleatorio.
- Una vez que el usuario haya logrado la victoria, muestre el número de turnos que tomó el usuario. El programa se cierra.
Bonos
Los bonos se aplican en el orden en que aparecen en esta lista
- -150 bytes si su programa toma un entero de entrada
D
que describe la dimensión en la que se desarrolla el juego. Por ejemplo, siD = 3
crea un punto aleatorio de3
enteros, toma3
entradas enteras y genera la distancia entre esos puntos. - -50% (o + 50% si
score < 0
) si proporciona una representación gráfica del tablero (ASCII o imagen) que muestra dónde el usuario ha adivinado previamente en la cuadrícula de dimensiones dadas y el contador de giros. (Si opta por el primer bono, este bono solo se aplica a los modos2D
y1D
. Si agrega una salida gráfica en 3D, obtendrá un -50% adicional). - -60 bytes si puede proporcionar un modo de juego (seleccionado por una entrada al principio; es decir, cuando se le dé
0
, realice el modo de juego normal; cuando se le dé1
, realice este modo de juego) en el que el punto se mueve 1 unidad en una dirección ortogonal aleatoria por turno
Más sobre envoltura
El ajuste ocurre solo cuando, en el tercer bono, el punto de movimiento se mueve a través de cualquiera de los límites; en este caso, el punto móvil se deforma al punto respectivo, así:
... ...
..R (move right) R..
... ...
Este comportamiento de ajuste no afecta la suposición del usuario, además del hecho de que el punto ha cambiado de dirección.
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
10x10
, el punto aleatorio es (9,4)
, y supongo (2,2)
, ¿es la distancia sqrt(13)
o sqrt(53)
? (Nota para el futuro: si está haciendo algo extraño, no incluya la aleatoriedad porque hace que sea casi imposible suministrar casos de prueba). 2. En el tercer bono, ¿se debe calcular y generar la distancia antes o después de que se mueva el punto?