EDITAR: Recientemente, mi pregunta ha sido propuesta como un duplicado de 2048 Bot Challenge . Me gustaría enfatizar que esta pregunta es diferente de esa pregunta, y requeriré que las respuestas sean pensadas de manera diferente a esa pregunta. 2048 Bot Challenge le pidió al usuario que creara un bot, y se ejecutaría durante una hora, siendo la puntuación más alta la puntuación del usuario. Además, tenía un límite de 555 bytes. Mi desafío ejecuta el código con mucha menos frecuencia, solo 3 veces. Su puntaje se calcula usando el puntaje promedio de esas tres veces y dividiéndolo por la longitud del carácter de su código de golf. Mi pregunta alienta a las entradas a ser "más inteligentes" y no intentar obtener el puntaje más alto por fuerza bruta.
-
EDITAR: El método get se cambió a getTile, para evitar conflictos con la palabra clave JS get. Además, se agregó una sección de puntaje alto.
Recientemente, creé un sitio que permite controlar el popular juego 2048 usando JavaScript. Mi sitio está vinculado aquí:
Cómo:
Un As Editor está ubicado sobre el tablero. Coloca el código en él, que se ejecuta una vez cada 250 ms, o 4 veces por segundo. Esto se llama ciclo.
Use los siguientes métodos para controlar el tablero. No puedes usar las teclas de flecha.
up(); //move up
down(); //move down
left(); //move left
right(); //move right
move(integer); //integer is a direction. 0:up,1:right,2:down,3:left
getTile(y,x); //gets the value of the tile in position y,x on the board. See diagram
Las siguientes variables se definen para su conveniencia:
eother //boolean, alternates every cycle
frozen //integer, counts how many cycles the board has remained stationary
lastDir //integer, indicates the last direction that was tried to move in
//uses same format as the move method above.
startup //boolean, will always be true when the game first starts
//you can change it as you wish
a
b //a b and c are all persistant variables, they do not change each cycle
c //any other variables defined in the cycle will be reset every time
Reglas:
- Sin aleatoriedad, debes usar la lógica. (Sí, sé que el código de ejemplo usa al azar).
- Sin engancharse a las funciones del juego o hacer trampa de otras maneras
- En general, intente llamar solo a un método de movimiento por ciclo. Está bien si usa más, pero se atornilla con la animación.
- El tablero debe comenzar en un estado aleatorio, sin modificación del estado previo al juego
- Debe proporcionar tanto la versión sin comprimir como la versión golfizada del código en su publicación.
- Debe proporcionar un enlace al sitio que ya carga la versión sin comprimir de su código, que se sirve a través de PasteBin (por ejemplo, ... thatcoolidea.com/2048?i=pH18GWtu carga el código de ejemplo).
Puntuación:
- Tu código será calificado por mí.
- La parte A de su puntaje es un promedio de 3 ejecuciones del código, redondeadas hacia abajo.
- La Parte B de su puntaje es la longitud de los caracteres de su código de golf.
- Su puntaje final es la Parte A dividida por la Parte B
El ganador tendrá su código inmortalizado como el código de ejemplo en el sitio, si así lo elige, y será reconocido en un comentario en el código.
¡Buena suerte! Espero que disfrutes el desafío.
Puntaje alto actual 225.22 - Congelador - user3217109
fuente
Respuestas:
Sinker / Shaker, 65 bytes
Aquí está el mío . Es tan ciego y simple como vienen.
Sin comprimir (ish) ...
Todo lo que hace es repetir abajo, derecha, abajo, izquierda, etc. y golpea una vez si se atasca. No siempre funciona muy bien, pero ocasionalmente obtendrá 512s. Mi puntaje más alto durante las pruebas fue 7520.
fuente
Semáforo -
2321 bytesEste es el enlace.
Esto se moverá alternativamente hacia arriba y hacia la derecha, excepto cuando el tablero haya permanecido estacionario durante los últimos dos movimientos, en cuyo caso se moverá hacia abajo y hacia la izquierda, respectivamente.
Mi presentación original, funcionalmente equivalente, tenía 23 bytes de largo y obtuvo 182.72:
fuente
Whirlpool -
372117 bytes - Puntuación: 211.22Decidí ir con un enfoque de "menos es más". Mi código es un diseño simple que intenta ir hacia arriba, hacia la derecha, hacia abajo, hacia la izquierda ... Trabajaré en una IA de aprendizaje para ver una forma más óptima de abordar el rompecabezas.
Optimizer ayudó a acortar
a
la inicialización.Sam ayudó a acortar
a
la inicialización, eliminadavar
.¿Ungolfed?
Mi puntaje más alto con esta IA es 5120.
Congelador - 12 bytes - Puntuación: 225.22
Este bot tiene prioridad de movimiento. Intenta subir. Si puede 'subir, va a la derecha. Si no puede ir bien, baja. Si no puede bajar, se va hacia la izquierda.
Explicación de James Bond
El código cifrado se descifra para decir:
Optimizer debería haber jugado su código descifrado. Esto podría haber sido # Optimizado.
fuente
a
también. Entonces eso debe agregarse en la longitud del código.a
una vez y olvidarse de él, pero si cierra la pestaña / ventana y vuelve a él, no creo que funcione más. Es por eso que tuve que agregar el bit if (inicio) en el mío.var a=a|0;move(a++%4)
- 21 bytesa
sin hacer nadavar a
Percha - 20 bytes
Puntuación oficial: 224.87 - 2do lugar por 0.35 puntos
Este bot usa el enfoque hacia abajo, izquierda, abajo, derecha, pero con la característica inusual de que nunca se moverá hacia arriba. No estoy seguro de cómo calificar los casos donde se cuelga y no se completa, o si el hecho de que eso ocurra lo hace ilegal. Aquí está, sin embargo:
Patrón de inicialización gracias a @Optimizer.
En mis 3 pruebas, obtuvo 4284, 6352 y 4232, para un promedio de 4956. Actualizaré cuando se ejecute la prueba oficial.
Versión alternativa que se cuelga (27 bytes):
fuente