Escriba un programa que muestre una bola ASCII en movimiento *
dentro de un rectángulo (20 por 10 caracteres, incluido el borde). La pelota no debe cruzar el rectángulo, por ejemplo, golpearse cuando golpea la pared. La escena se debe borrar y volver a dibujar cada 0.1 segundos y la bola debe moverse 1 char en dirección x e y cada cuadro. El programa más corto escrito en cualquier idioma gana.
Ejemplo de salida (cuadro 1)
+------------------+
|* |
| |
| |
| |
| |
| |
| |
| |
+------------------+
Ejemplo de salida (marco 2)
+------------------+
| |
| * |
| |
| |
| |
| |
| |
| |
+------------------+
Ejemplo de salida (cuadro 8)
+------------------+
| |
| |
| |
| |
| |
| |
| |
| * |
+------------------+
Ejemplo de salida (cuadro 9)
+------------------+
| |
| |
| |
| |
| |
| |
| * |
| |
+------------------+
1080x1920
resolución :)Respuestas:
Ruby 1.9, 115 caracteres
La lógica del movimiento es bastante similar a la respuesta de Danko .
Esta versión ha sido probada solo en Linux.
fuente
puts"\e[2J"
solo imprime←[2J
(y una nueva línea) en la pantalla.cls
no funciona para mí, perosystem ("cls")
sí.Powershell, 144 caracteres
Basado en la excelente respuesta de Joey , usando el hecho de que las coordenadas de la bola son una función del índice de cuadro (i), por lo que si tiene algo como
x=n-abs(n-(i mod (2*n)))
, x irá de 0 a n, volverá a 0, y así sucesivamente ...fuente
if(-1,18-eq$x){$a*=-1;$x+=2*$a}if(-1,8-eq$y){$b*=-1;$y+=2*$b}
que reemplazó cuatroif
s antes ;-). Sin embargo, estaba seguro de que tenía que haber una fórmula.Pitón 2, 234
Estoy seguro de que esto se puede jugar más, pero tengo que irme, así que esto es lo que tengo sofar. trabajará más en eso más tarde
nota: funciona en la consola de comandos de Windows. Otros sistemas operativos pueden usar un comando diferente
cls
al de borrar la pantalla, comoclear
fuente
print "\e[H\e[2J"
funcionar en Windows?Rubí (
179174147)EDIT eliminó algunos caracteres más:
EDIT afeitado algunos caracteres, ahora 174:
Sin golf:
fuente
sleep .1
funcionar también?SyntaxError: (irb):1: no .<digit> floating literal anymore; put 0 before dot
. Pero volveré a eso si lo necesito en el futuro, ¡gracias!?*
lugar de'*'
, etc.←[2J←[f+------------------+
la primera línea.$> << "\e[2J\e[f"+f
a'cls';$><<f
(use backticks paracls
)JavaScript (275
283)Demostración: http://jsfiddle.net/eKcfu/2/
Escribí esto bastante rápido, así que estoy seguro de que todavía hay bastante margen de mejora. Las sugerencias son bienvenidas :)
Edición 1 : elimine la llamada de función separada innecesaria, incrustar directamente en
setInterval
.fuente
Haskell, 212 caracteres
Utiliza un enfoque más funcional para calcular las coordenadas, haciendo la secuencia infinita para cada coordenada por separado y luego comprimiéndolas (líneas 2 y 3). El resto es código de dibujo.
fuente
PowerShell, 184
185215Solo semi-golf ya que mi cerebro no funciona correctamente cuando estoy enfermo ...
Sin embargo, hay algunos buenos trucos.
[Editar]: recorrer el campo es mucho más corto.
fuente
QBasic (QB64),
178173 bytes-5 bytes gracias a DLosc
fuente
DO ... LOOP
en lugar deWHILE 1 ... WEND
y guardar 5 bytes.Perl 5, 141 caracteres
No comienza en la esquina superior izquierda como lo hace la salida de ejemplo, pero eso no se establece como un requisito.
fuente
Ruby 1.9, 162 caracteres
35 caracteres menos que la respuesta de @Ventero, pero me impresionó poder llegar hasta aquí sin dejar de utilizar un enfoque relativamente sencillo de la lógica real. El ^ [es un ESC literal (1 carácter).
fuente
R, 233 caracteres
fuente
Otra entrada de bash:
213204 caracteresNo es realmente un ganador del premio, pero de todos modos fue divertido. Utiliza secuencias de caracteres vt100 para el dibujo. (el código reportado aquí usa 215 caracteres para facilitar la lectura, se pueden eliminar 2 caracteres escapando, por ejemplo, '*' -> \ *
fuente
Powershell, 139 bytes
Inspirado por la respuesta de Danko Durbić .
Este script usa el
-replace
operador para dibujar*
dentro del rectángulo.Menos guión de golf para explicar cómo funciona:
fuente
Bash 278
300, 296El \ e en la línea
echo -e "\e[$2;$1H$3"
puede ser producido porpara reemplazarlo Como binario 0x1b es 3 caracteres más corto; Cuento solo 1 para "\ e", porque solo el software de diseño me obliga a usar
\e
.fuente
$
símbolos en el interior((...))
y reemplazanx=$(($x+$p))
con((x+=p))
y de manera similar en la línea siguiente. (También sugirieron usar\e
para el personaje de escape).\*
podría funcionar como un reemplazo para"*"
.1,337
necesidades debe estar permanentemente bloqueado en su lugar: PTI Basic,
169167 bytesHorriblemente lento, pero funciona.
fuente
(X=20)→S
puede ser(X=20→S
, y puede aprovechar Ans para guardar algunos bytes en el For final (bucle. Estoy seguro de que las líneas 8 y 9 se pueden jugar, pero no estoy seguro de cómo hacerlo en este momento."| \ Output(O,1,Ans \ Output(O,20,Ans
Deberia trabajar.Ans
es un token de un byte , escrito con2nd
(-)
. Eso terminará ahorrando un byte, ya que el|
token tiene dos bytes en la calculadora.PHP,
196186148bytesEliminé evitando un desbordamiento de enteros para guardar 6 bytes. Se ejecutará durante 29 mil millones de años antes del desbordamiento; Todavía 6.8 años en un sistema de 32 bits. Yo diría que eso es aceptable.
Calcular la posición en lugar de ajustarla ahorró mucho, preparando la plantilla completa en otro lote.
Corre con
-nr
. Requiere PHP 7.1.desglose :
fuente