Antecedentes
En una galaxia (y posiblemente un universo) muy, muy lejos ... había una nave espacial y un montón de planetas. Un mal funcionamiento a bordo hizo que la nave espacial se quedara sin combustible. ¡Ahora se mueve a una velocidad peligrosamente lenta cerca de un grupo de planetas, del cual debe escapar! ¿Cuál será el destino de la tripulación?
El reto
Usted es el programador principal en el USS StackExchange. Como tal, deseas escribir un simulador que revele si estás o no condenado a estrellarte en un planeta, escaparás del sistema planetario o estarás en órbita para siempre.
La explosión en su nave espacial, sin embargo, significa que había recursos computacionales muy limitados. Su programa debe ser lo más pequeño posible. Además, esto significa que la única forma posible de ingresar simulaciones para ejecutar es a través del arte ASCII.
La simulación
En este cuadrante del multiverso, las leyes de la física se modifican ligeramente para acomodar el arte ASCII. Esto significa que el cosmos se divide en células. El movimiento se describirá en unidades de celdas, y el tiempo estará en unidades de pasos de tiempo.
El barco en sí tiene impulso. Si la nave movió +2 celdas en el eje xy -1 celda en el eje y (abreviado como (2, -1)) en el paso de tiempo anterior, y no hay campo gravitacional, entonces la nave se moverá con el exacto misma velocidad en el siguiente paso de tiempo.
Habrá varios planetas, todos los cuales ejercerán un campo gravitacional en las ocho celdas que lo rodean inmediatamente, lo que afectará la velocidad de la nave y acercará la nave al planeta. Estar justo "al norte" de un planeta dará como resultado un campo que arrastrará la nave una célula hacia el "sur" con una fuerza de (-1,0). Estar justo "al noreste" de un planeta dará como resultado una fuerza que arrastrará la nave una célula hacia el "sur" y una unidad hacia el "oeste" con una fuerza de (-1, -1).
Los campos gravitacionales agregan un vector al impulso de la nave al salir de la celda con la gravedad. Si una nave previamente movió (2, -1) celdas y ahora está en un campo gravitacional de (-1,1), en el siguiente paso de tiempo moverá (1,0) celdas. Si la nave está muy cerca de varios planetas, entonces habrá múltiples vectores para agregar.
Entrada
En STDIN, recibirá una representación de arte ASCII del sistema planetario que mostrará las coordenadas de los planetas y la velocidad actual de su nave. Habrá varios planetas en forma de signos @, mientras que habrá una nave espacial en forma de signo av ^ <>. La elección del símbolo para el barco indica la velocidad actual del barco (antes de que se haya agregado la gravedad). Por ejemplo, a <significa la velocidad de una celda hacia el oeste, mientras que a ^ significa la velocidad de una celda hacia el norte. Todo el espacio vacío consistirá en puntos, que rellenan cada línea para que tenga el mismo ancho. Una línea en blanco representa el final de la entrada. Aquí hay un ejemplo de una entrada:
.................
...@[email protected]..
......@..@..@@...
..@..............
.......@..@......
.................
Salida
La salida será una sola palabra en STDOUT, que indicará si la nave escapará de la gravedad, chocará contra un planeta o girará para siempre.
Escapar de la gravedad se define como la nave que se aleja del mapa. Si el barco se escapa, entonces su programa debe imprimir la palabra "escapar".
El aterrizaje forzoso es cuando una nave pasa directamente sobre un planeta o termina en la misma celda durante un paso de tiempo. Tenga en cuenta que no es suficiente calcular simplemente dónde está el barco cada vez que se realiza un paso. Una nave que se mueve a una velocidad de (5,5) se estrellará contra un planeta ubicado en (1,1) a pesar de que el cálculo directo significará que nunca visitará esa celda. Sin embargo, una nave con una velocidad de (5,6) no chocará contra el planeta. Si su nave espacial aterriza, su programa debe imprimir la palabra "crash".
La órbita puede ser la más difícil de detectar. La órbita ocurre cada vez que la nave espacial visita la misma celda dos veces y con la misma velocidad. Si el barco orbita, debe imprimir la palabra "órbita".
Aquí está la salida para el ejemplo anterior:
escape
Explicación
Aquí hay un mapa que muestra dónde viajó la nave espacial en cada paso de tiempo en el ejemplo anterior:
^
.................
...@[email protected]..
....^.@..@..@@...
..@..<.<<<.<.v...
.......@..@......
.................
Se dirigió hacia el sur, giró hacia el oeste, viajó por un corredor, giró hacia el norte y escapó por poco entre planetas con una alta velocidad, todo debido a la gravedad.
Más casos para examen
...
^@.
...
orbit
...........
.>@.@......
.@......@..
....@......
crash (it crashes into the easternmost planet)
...
.@.
.v.
crash (momentum can't overcome gravity)
........
..@.....
..<.....
...@....
........
orbit (it gets trapped in a gravity well between two planets)
Reglas, Regulaciones y Notas
Este es el código de golf. Se aplican las reglas estándar del código de golf. Sus programas deben estar escritos en ASCII imprimible. No se le permite acceder a ningún tipo de base de datos externa.
Fin de transmisión
fuente
Respuestas:
C #
991984La versión no protegida (y ligeramente refactorizada) está disponible en http://pastebin.com/yAKYvwQf
Versión en ejecución: https://compilify.net/1n9 Esto se ha modificado ligeramente para ejecutarse en complify:
new[]{1,2}
return <string>
lugar deConsole.WriteLine
, porque así es como funciona compilify.netfuente