- Alice (A) y Bob (B) decidieron tener una batalla.
- Cada combatiente tiene 10 de salud.
- Se turnan para tirar un dado de 6 lados por daños.
- Ese daño se elimina de la salud de su oponente.
- Al final, ya sea Alice o Bob, vencerán a su enemigo.
Muéstrame cómo fue la batalla. Salida de estos códigos para las acciones que han tenido lugar.
Ataque
B a A
^ Combatant
^ Action (attack)
^ Target
Rodar
B r 4
^ Combatant
^ Action (roll)
^ Value
Cambio de salud
A h 6
^ Combatant
^ Attribute (health)
^ Value
Ganar
A w
^ Combatant
^ Action (win)
Salida de ejemplo:
A a B
A r 4
B h 6
B a A
B r 6
A h 4
A a B
A r 6
B h 0
A w
Estas son las reglas:
- Escribe en cualquier idioma.
- Una sola tirada del dado debe tener la misma probabilidad de resultar en cualquiera de los números 1, 2, 3, 4, 5 o 6.
- Alice siempre comienza (Bob es caballeroso, a la antigua).
- Produce una acción para cada turno.
- Debes informar el ataque, tirar, dañar y ganar acciones.
- Los combatientes son mayúsculas, las acciones son minúsculas.
- No debe producir constantemente el mismo resultado.
- Debe haber al menos un carácter de espacio en blanco entre un combatiente de salida, acción y valor.
- La acción ganadora tiene lugar cuando el oponente tiene cero o menos salud.
- Todas las partes de una acción deben estar en la misma línea.
- Debe haber una acción por línea.
- Pocos bytes ganan.
¡Tienen en él!
Respuestas:
05AB1E , 49 bytes
Pruébalo en línea!
Explicación
fuente
Python 3 , 131 bytes
Pruébalo en línea!
-8 bytes gracias a officialaimm
-2 bytes gracias a ChooJeremy
fuente
p=print
le ahorrará alrededor de 8 bytes.randint(1,6)
podría reemplazarseid(X+Y)//3%6+1
, aunque la distribución no es bastante uniforme.C (gcc) ,
146141 bytesPruébalo en línea!
De-golf:
fuente
a=65+t,b=66-t
?A*B>0
te ahorrará unos pocos bytes.A*B
ahorrará aún más, pero estoy un poco apurado. Actualizaré por la nochePython 3 , 127 bytes
Esta es una mejora en la respuesta de @HyperNeutrino que no cabe en un comentario. Vea la explicación a continuación.
Pruébalo en línea!
Una búsqueda épica para un lanzamiento de dados de pitón más corto
TL; DR: es posible eliminar 4 bytes de la tirada de dados estándar de Python mediante el cifrado RSA.
Quería ver si la tirada de dados estándar de Python ( 32 bytes ) podría acortarse un poco:
En particular,
id(x)
es bastante conveniente aportar algún valor no determinista al programa. Mi idea era, de alguna manera, hash este valor para crear una aleatoriedad real. Intenté algunos enfoques, y uno de ellos valió la pena: cifrado RSA .Cifrado RSA, debido a su simplicidad, sólo requiere unos pocos bytes:
m**e%n
. El siguiente valor aleatorio se puede crear cifrando el anterior. Suponiendo que la(e,n)
clave esté disponible, la tirada de dados se puede escribir con 22 bytes :Eso significa que tenemos unos 10 bytes para definir una clave RSA válida. Aquí tuve suerte. Durante mis experimentos, comencé a usar el Mersenne prime M67 solo para darme cuenta más tarde de que Mersenne cometió un error al incluir el M67 en su lista. Resulta ser el producto de
p=193707721
yq=761838257287
. Había encontrado mi módulo:Ahora, el exponente y el paciente de Charmichael
(p-1)*(q-1)
deben ser coprimos. Afortunadamente, el primer número primo que no divide el total de n tiene solo un dígito de largo: 7. La tirada de dados se puede escribir usando 28 bytes (4 bytes menos que el enfoque estándar):Una buena cosa con M67 es que el valor aleatorio generado tiene 66 bits, que es más que el RNG habitual de 64 bits. Además, el uso de RSA hace posible retroceder en el tiempo descifrando el valor actual varias veces. Aquí están las claves de cifrado y descifrado:
Definitivamente no soy un experto en estadística o criptografía, por lo que realmente no puedo decir si este RNG verifica o no los criterios de "buena aleatoriedad". Hice escribir un pequeño punto de referencia que compara la desviación estándar de las ocurrencias de los 1 a 6 dados rollos utilizando diferentes generadores de números aleatorios. Parece que la solución propuesta funciona igual que otras.
fuente
JavaScript (ES6), 122 bytes
Pruébalo en línea!
fuente
Java (JDK 10) , 180 bytes
Pruébalo en línea!
Créditos
fuente
var
? o.Ô Realmente necesito investigar algunas de las nuevas especificaciones pronto ... De todos modos, puedes jugar golf 4 bytes cambiando el conjunto de caracteres a int-array:v->{var r="";int P[]={65,66},p=0,H[]={10,10},h=0;for(;H[0]*H[1]>0;)r+=r.format("%3$c a %4$c%n%3$c r %d%n%4$c h %d%n",h+=Math.random()*6-h+1,H[p]-=h,P[p],P[p^=1]);return r+=P[p^1]+" w";}
65 w
lugar deA w
. Por eso lo extraje de laint ...
declaración: jugar al golf unos pocos bytes ;-)v->{var r="";int p=0,H[]={10,10},h=0;for(;H[0]*H[1]>0;)r+=r.format("%3$c a %4$c%n%3$c r %d%n%4$c h %d%n",h+=Math.random()*6-h+1,H[p]-=h,p+65,(p^=1)+65);return r+(p<1?"B":"A")+" w";}
( 181 bytes )Perl 5 ,
938887 bytesPruébalo en línea!
fuente
Ruby ,
122 120 96 9291 bytesGuardado 1 byte gracias a Asone Tuhid .
Pruébalo en línea!
fuente
["A", "a", "B"]
? Si es así, tengo esta solución de 96 bytes.?(p [x,?w]):
con?p([x,?w]):
Java 8, 230 bytes
Nota: ya hay una respuesta Java mucho más corta, ¡así que asegúrate de votar la suya ! Sin embargo, uso un enfoque completamente diferente, así que pensé que valía la pena publicarlo también.
Explicación:
Pruébalo en línea.
fuente
C (gcc) , 142 bytes
Pruébalo en línea!
fuente
Lote, 174 bytes
Explicación:
%
las referencias variables se sustituyen en el tiempo de análisis. Esto tiene dos beneficios útiles:%d%-=r
restar
de la variable nombrada pord
(es decir, referencia indirecta)set c=%d%&set d=%c%
es simplemente un intercambio directo.fuente
PHP 7.1: 159 bytes
Ejecútelo en el navegador aquí!
PHP 5.6: 156 bytes
Ejecútelo en el navegador aquí!
Así es como se ve la solución PHP 5.6 con formato y comentarios:
fuente
Bash, 178 bytes
fuente
F #,
238235 bytes¡Pensé que me estaba yendo bien, pero todos ustedes me han superado!
Pruébalo en línea!
Gracias a Rogem por los brillantes consejos para usar A * B> 0 en lugar de A> 0 && B> 0 (quita 3 bytes).
Gracias también a officialaimm, cuya sugerencia sobre la predefinición de printf en la respuesta de Python también me ayudó a eliminar algunos bytes.
fuente
A*B>0
te ahorrará un par más.Haskell , 204 bytes
Mi intento con Haskell, lamentablemente no pude hacerlo más competitivo
Pruébalo en línea!
Explicaciones:
fuente
where m=b-x
se puede poner en guardia:|m<-b-x=
.main=putStr=<<q"A "10"B "10.randomRs(1,6::Int)<$>getStdGen
. También puede usar una lista y concatenarla para deshacerse de la redefinición(++)
. El último lugar no parece ser beneficioso para usarlo enb-x
todas partes.Julia 0.6 , 175 bytes
Pruébalo en línea!
Versión larga y sin golf:
fuente
VBA,
222185179 BytesEsta solución recursiva involucra 3 subs
p es más corto que Debug.Print cuando se usa más de 3 veces (solo 4 en esta solución)Editar: Ahora que aprendí queDebug.?
es una alternativa aceptableDebug.Print
,Debug.?x
es más corto que llamar a un Sub para imprimir.Este fue un desafío divertido. Si conoce a un intérprete en línea como TIO para VB6 / VBScript / VBA, deje un comentario. Entonces puedo publicar un enlace a una solución de trabajo.
Si desea probar este código y tiene instalado Microsoft Excel, Word, Access o Outlook (solo Windows), presione Alt + F11 para abrir el IDE de VBA. Inserte un nuevo módulo de código (Alt + I, M) y borre la Opción explícita. Luego pegue el código y presione F5 para ejecutarlo. Los resultados deberían aparecer en la ventana Inmediato (presione Ctrl + G si no lo ve).
Edición 1: Espacio en blanco eliminado que el editor de VBA agregará automáticamente. Reducido en 37 bytes
Edición 2: Eliminado Sub p () * para guardar 6 bytes después de aprender
Debug.?
es una alternativa aceptableDebug.Print
. Llamar a un Sub para que manejeDebug.?
solo guarda bytes después de más de seis llamadas.fuente