Un cierto juego infantil, a menudo llamado "Huckle Buckle Beanstalk", se juega con dos jugadores. Aquí hay una breve descripción de cómo se juega el juego:
- Un jugador es designado el "oculto" y el otro el "buscador".
- El buscador sale de la habitación mientras el ocultador esconde un pequeño objeto preseleccionado, el "tesoro".
- Luego, el ocultante intenta buscar el objeto mientras el buscador le da consejos útiles:
- Si el buscador se acerca al tesoro, el ocultador gritará "¡más cálido!"
- Si el buscador se está alejando del tesoro, el ocultador gritará "¡más fresco!"
- Una vez que el buscador encuentra el tesoro, anuncian que lo han encontrado.
Tus hijos quieren que juegues este juego con ellos, sin embargo, estás muy ocupado respondiendo preguntas en codegolf.SE. Entonces, decides escribir un programa para jugar con ellos. Sin embargo, desea utilizar el menor tiempo posible para escribir, por lo que intenta hacer que el programa tenga la menor cantidad de caracteres posible.
Podemos definir la sala en la que se juega el juego como un campo cuadrado toroidal bidimensional. La coordenada 0,0
es la esquina inferior izquierda y la coordenada 99,99
es la esquina superior derecha. El tesoro se coloca en alguna posición n,m
donde n
y m
son ambos números enteros positivos entre 0 y 99 inclusive.
Su programa obtendrá información del reproductor utilizando su función de entrada de usuario incorporada (p prompt()
. Ej . raw_input()
, Etc.) Si su idioma elegido no tiene una función de entrada de usuario, tome la entrada de STDIN en su lugar. El juego funcionará de la siguiente manera:
- El programa "esconde" el tesoro en una posición
n,m
. - El programa solicita al buscador que ingrese una posición de búsqueda inicial. La entrada vendrá en la forma
x y
dondex
yy
son enteros positivos. - El programa emite "correcto" si la posición de búsqueda inicial
x,y
es igual a la posición del tesoron,m
y termina. De otra manera: - El programa le pedirá al buscador que se mueva. La entrada viene en la forma
a b
dondea
yb
son enteros que pueden ser negativos . Esto representa el vector de dirección en el que se mueve el buscador (a
es la dirección xyb
es la dirección y). - Si la posición resultante del buscador está en el tesoro, el programa sale "correcto" y termina. De otra manera:
- El programa genera "más frío" si el buscador se está alejando del tesoro o "más caliente" si se está moviendo hacia el tesoro.
- Ve al paso 4.
Las palabras "alejarse" y "moverse hacia" pueden ser ambiguas. Para este desafío, si la posición resultante del buscador después de moverse está más cerca del tesoro que su posición antes de moverse, se están moviendo hacia el tesoro. De lo contrario, se están alejando. (Sí, esto significa que si la posición resultante y la anterior están a la misma distancia, el programa debería salir "más frío").
Este es el código de golf, por lo que gana el código más corto. Haga preguntas si la especificación no es clara.
Respuestas:
Javascript,
275279No es un ganador de ninguna manera, pero esto debería comenzar las cosas. Utiliza un truco
eval()
y se define100
como una "constante" para eliminar algunos bytes. Versión sin golf a continuación.Editar: caí víctima de las operaciones de cadena + número de Javascript, por lo tanto, ¿por qué
D()
no funcionaba correctamente? También arreglé un error donde se mostraba "más caliente" antes de "correcto". Esto agrega 4 bytes.fuente
n
ym
se establecen en cero (para propósitos de prueba), y0 1
se introduce como la posición inicial, tanto0 -1
y0 1
de retorno más frío.colder == cooler
Python 3 - 238 bytes
Código:
Sin golf:
Ejecución de muestra:
No diré que mi estrategia para encontrar el tesoro es particularmente rápida ...
fuente
Groovy -
278266262Golfizado:
Sin golf:
Juicio:
fuente
Groovy - 343 caracteres
Derivado algo de la respuesta de LittleChild .
Golfizado:
Sin golf:
Ejecución de muestra, donde el programa emite el objetivo para ilustración. Desde mi entendimiento de OP, la entrada inicial es absoluta, y las entradas posteriores son relativas. Además, la cuadrícula se envuelve.
ejecutar A:
ejecutar B:
fuente
APL, 86 caracteres
El cálculo de la distancia no se ajusta, pero los movimientos sí.
Sin golf:
Ejemplo:
fuente
Python 2.7, 227
Obtuve la función de entrada y la idea de aplicar el módulo en el cálculo de distancia en lugar de la actualización de ubicación de la respuesta de matsjoyce.
Solo necesitamos distancias para las comparaciones: ¿Estamos en la ubicación exacta? ¿Estamos más cerca que antes? Para ambos, obtenemos el mismo resultado al comparar los cuadrados de las distancias como lo haríamos al comparar las distancias. El cálculo de raíz cuadrada requerido para obtener la distancia real es innecesario.
Sin golf:
Ejecución de muestra:
fuente
ECMAScript 6, 262
Sin golf:
fuente
C
193176171Estoy seguro de que debe haber ahorros en la generación de números aleatorios. Aparte de eso, el punto clave es que la lectura en x & y solo se trata como un desplazamiento de 0, por lo que solo necesito un scanf. Sin embargo, significa que tengo que suprimir la impresión más caliente o más fría en la primera iteración.
Cambios:
Coloque la ubicación en x & y directamente y luego vuelva a colocarla en (0,0) en lugar de ponerla en m & n y use x & y para buscarla.
Me di cuenta de que estaba imprimiendo "más caliente" y "correcto", así que tuve que agregar tres caracteres adicionales aquí.
Reescribió la impresión para poner todas las condiciones en ella, guardando una llamada extra a Puts ().
fuente
JavaScript ES6, última versión de Firefox,
177173164 caracteresObviamente, esto no puede vencer al APL. ¡Ese idioma es una locura! Tal vez desarrollado únicamente para preguntas de código de golf: D: P
Pero aquí va mi solución en ES6 JavaScript. Ejecútelo en la última versión de Firefox Nightly (o también puede ser una versión de lanzamiento) en la Consola web o el Bloc de notas.
Me gustaría omitir la versión sin golf por ahora. Comenta si quieres ver la versión sin golf :)
EDITAR : ¡Golfé mucho! reducido 9 caracteres. Todavía viendo si más alcance del golf.
fuente
Python 226
Ese
import
ve muy largo y estúpido, pero en realidad me ahorra 8 caracteres.:D
Juego de ejemplo:
fuente
Sinclair / ZX Spectrum BASIC - 305 bytes
Como Spectrum almacena cada palabra clave como un byte, ayuda a mantener el tamaño bajo. Después de ingresarlo, descubra el tamaño con
fuente