Hemos estado clonando 2048, analizando 2048, pero ¿por qué no lo hemos jugado todavía? Escriba un fragmento de JavaScript de 555 bytes para jugar 2048 automáticamente, el mejor puntaje después de una hora contará (vea la puntuación a continuación).
Preparar:
Ir a 2048 y ejecutar:
a = new GameManager(4, KeyboardInputManager, HTMLActuator, LocalStorageManager);
a
es el objeto para controlar el juego.
Reglas:
Después de la configuración, puede ejecutar 555 bytes de javascript desde la consola para controlar el juego. El código fuente del juego se puede encontrar aquí (incluidos los comentarios).
- Solo puede hacer cosas que sean posibles para el usuario:
a.move(n)
para activar una acción clave en cualquiera de las 4 direcciones.- 0: arriba, 1: derecha, 2: abajo, 3: izquierda
a.restart()
para reiniciar el juego. Se permite reiniciar en el medio del juego.
- Puede encontrar información sobre el estado del juego en
a.grid.cells
. Esta información es de solo lectura - Está permitido engancharse a cualquiera de las funciones, alterar su comportamiento de alguna manera no lo está (o cambiar cualquier otro dato)
- Solo se permite mover una vez cada 250 ms
Ejemplo
Solo un ejemplo muy simple para comenzar. Sin comentarios y entra 181 bytes .
//bind into new tile function and change m(ove) variable when a tile was moved
b = a.addRandomTile.bind(a);
m = !1;
a.addRandomTile = function() { m = !0; b(); };
//number of move fails
mfs = 0;
setInterval(function() {
//set global moved tracking variable to false
m = !1;
a.move(Math.floor(4 * Math.random()));
m || mfs++;
//restart after 10 moves failed
10 < mfs && (mfs = 0, a.restart());
}, 250);
Puntuación y resultados
Ejecutaré los fragmentos durante una hora consecutiva y contaré la mejor puntuación. De hecho, existe la posibilidad de que lo randombot
anterior gane de esa manera, pero 1 hora debería ser suficiente para superarlo:
- Rey
Bottomstacker VII
: 9912 - Reina
Bottomstacker V
: 9216 - Príncipe
Bottomstacker II
: 7520 - Señor
Bottom and Right
: 6308 - Campesino
Randombot
: 1413 Descalificado por hacer dos movimientos en un intervalo (dentro de 250 ms)Bottomstacker IV
: 12320
Preguntas más frecuentes
- ¿Por qué este desafío no es independiente del lenguaje a través del terminal?
- Por la simple razón de que es más divertido así. Ver un juego en sí mismo gráficamente es simplemente mucho más fascinante que ver una consola escupir números. Incluso sin saber javascript, debería poder unirse a este desafío, ya que no se trata principalmente de las características del lenguaje (solo use esta herramienta para minimizar el código)
fuente
...best score after an hour will count...
¿Por qué solo una hora?Respuestas:
No puedo codificar javascript, así que robé tu respuesta.
Utiliza la estrategia que yo también uso.
EDITAR: Bien, solo superó tu puntaje después de unos 5 minutos en mi máquina: D
EDITAR: Olvidé bajar dos veces en lugar de solo una, este es el código que debe usar:
Además, hay un error que se reinicia cuando no es necesario, pero no estoy seguro de cómo solucionarlo. EDITAR: actualmente tiene una puntuación más alta de 3116 (después de 3 minutos). Creo que es seguro decir que este algoritmo es mejor que solo hacer movimientos aleatorios.
EDITAR versión más nueva:
EDITAR: Otra nueva versión, esta se mueve hacia abajo directamente después de subir.
EDITAR: Actualización: acaba de romper mi récord personal con una puntuación bastante loca de 12596.
EDITAR: Hola, soy apostador: D También:
(En realidad no es un cambio, solo comprimido).
¿La quinta vez es un encanto? No estoy seguro. De todos modos:
y:
Otra nueva versión:
y:
(Espero que no sea un gran problema que esto continúe detrás de la pantalla de gameover. Creo que podrías agregar
a.over=0
lugar que se ejecute a menudo. Lo resolveré algún día).EDITAR (nuevamente): abandoné la forma estándar de gameover y volví a la antigua forma de hacer las cosas. Ahora estoy probando una adición que siempre se fusionará si hay 2 fichas de 16 o más juntas:
fuente
mfs=0
adentroaddRandomTile
, de esa manera reiniciará el conteo después de un movimiento exitoso.Bot derecho y abajo: 345 bytes
Version corta
Versión larga
En palabras
Mueva hacia abajo, luego hacia la derecha, si no puede moverse, mueva hacia arriba (o si no puede, mueva hacia la izquierda), si tanto la esquina superior derecha como la inferior derecha están llenas, mueva hacia la derecha; de lo contrario, comience de nuevo.
Puntaje actual
Mi mejor puntaje fue 7668, pero eso se ejecutó a una velocidad mucho mayor que
t=250
(y por lo tanto indirectamente más de una hora).fuente
De alguna manera me encontré con este concurso más antiguo esta mañana, y como amo 2048, amo la IA, y JS es uno de los pocos idiomas que conozco bien, pensé que lo probaría.
GreedyBot (
607536 bytes)Version corta:
Versión larga (obsoleta):
La versión más larga no se jugó en absoluto (aparte de reducir los nombres de las variables), por lo que podría acortarse un poco sin dejar de ser legible. La versión más corta se creó con el Compilador de cierre (¡gracias por el enlace!), Que terminó en 650. Con algunas modificaciones personalizadas de mi parte, pude eliminar otro
43114 bits.Básicamente, busca a través de la cuadrícula posibles movimientos, y cada vez que encuentra uno, agrega su valor al total horizontal o vertical. Después de buscar a través de cada movimiento posible, determina en qué dirección debe moverse, en función de si el total de H o V es más alto y las direcciones que ya ha intentado. Derecha y Abajo son las primeras opciones.
Mirando hacia atrás, ahora me doy cuenta de que si cualquiera de los dos totales no es cero, el primer intento de deslizar las fichas en esa dirección tiene éxito. Quizás podría simplificar la sección de decisión de movimiento hacia el final en base a esto.
Dejé este programa funcionando durante una hora y terminé con un puntaje alto de
6080
. Sin embargo, en una de las ejecuciones de prueba (preminificación), logró un puntaje alto de6492
, solo 128 por detrás de mi mejor marca personal6620
. Su lógica podría mejorarse enormemente haciendo que se mueva hacia la izquierda de vez en cuando, ya que los números tienden a acumularse así:( EDITAR: lo dejé funcionando un poco más y logró algunos
7532
puntos. Maldición, mi programa es más inteligente que yo ...)Otro dato interesante: en uno de mis intentos fallidos de crear algo utilizable, de alguna manera terminó de manera tal que en cualquier momento dos baldosas estaban en la misma fila o columna, que se combinaron. Esto condujo a desarrollos interesantes, ya que los 2 o 4 aleatorios se combinarían repetidamente con el mosaico más alto, duplicándolo cada vez. Una vez, de alguna manera logró anotar más de 11,000 en 15 segundos antes de apagarlo ... XD
¡Cualquier sugerencia para mejorar es bienvenida!
fuente
Limpiaparabrisas: 454 bytes
Simplemente va a la derecha, arriba, izquierda, arriba ... repitiendo (al igual que los limpiaparabrisas de un automóvil) a menos que se atasque. Si se atasca, intentará apagar los limpiaparabrisas y volver a encenderlos. El puntaje más alto que obtuve en una hora fue 12,156. Sin embargo, la mayoría de los puntajes están entre 3k - 7k.
Producirá la puntuación en la consola después de cada intento.
fuente
UpAndLeftBot
Como sugiere el título, se mueve hacia arriba y hacia la izquierda robando el trabajo de David Mulder e intercambiando algunos números (no sé nada sobre Javascript, así que lo mejor que puedo hacer es esto).
fuente