Inspirado por esta pregunta el día de hoy , me gustaría ver formas interesantes en que varios lenguajes de programación pueden convertir un teclado numérico en probabilidades. Comúnmente, los juegos basados en mosaicos te permitirán usar un teclado numérico para moverte en cualquier dirección según dónde se encuentre tu personaje actualmente. Al hacer una IA para estos juegos, Math.random() * 8
no es suficiente, así que tuve que ser un poco creativo para que el movimiento se viera y se sintiera algo natural.
Un teclado numérico se define como tal:
7 | 8 | 9
- - - - -
4 | x | 6
- - - - -
1 | 2 | 3
Tenga en cuenta que 5 es un número no válido, ya que no puede pasar a usted mismo.
Todos los ejemplos usarán estas probabilidades: [50, 40, 30, 20, 10]
Si quisiera generar probabilidades 8
, sería así:
40 | 50 | 40
-- | -- | --
30 | xx | 30
-- | -- | --
20 | 10 | 20
La salida sería [20, 10, 20, 30, 30, 40, 50, 40]
(con 5 omitidos) o [20, 10, 20, 30, null, 30, 40, 50, 40]
(con 5 presentes)
Si quisiera generarlos 1
, se vería así:
30 | 20 | 10
-- | -- | --
40 | xx | 20
-- | -- | --
50 | 40 | 30
La salida sería [50, 40, 30, 40, 20, 30, 20, 10]
(con 5 omitidos) o [50, 40, 30, 40, null, 20, 30, 20, 10]
(con 5 presentes)
Puede escribir un programa completo que tome la entrada de la manera habitual (línea de comando, stdin) e imprima la salida, o puede escribir una función con un argumento numérico que imprima o devuelva la salida. Su programa o función debe aceptar un número: la posición para generar. Debe usar estas probabilidades: [50, 40, 30, 20, 10]
(no tienen que estar codificadas).
El código más corto en bytes gana. Las lagunas estándar no están permitidas. Las respuestas publicadas en el hilo vinculado no están permitidas. Se permiten espacios finales o iniciales. Puede tratar la posición 4
como ausente o vacía, según su preferencia. No soy demasiado exigente con el formato de salida: imprímalo como cadenas separadas por comas o como una matriz.
(Esta es mi primera pregunta, ¡sé fácil conmigo!)
Python - 115
a
es una matriz con los valores en orden alrededor del teclado numérico (en sentido antihorario desde 1), yb
asigna números en el teclado numérico a las posiciones a su alrededor. Basado en el número de espacios alrededor del teclado numérico para el número de entrada (determinado usandob
), forma una matriz con tantos elementos movidos desde el frentea
hacia el final, luego se usab
nuevamente para reorganizar los elementos para que correspondan con los números del teclado numérico.fuente
/10
y luego poniendo un*10
en su bucle.(a[c:]+a[:c])[e]
mismo esa[(c+e)%8]
oa[c+e-8]
? Y luego enchufarloc
simplifica la expresión.Pyth - 38 bytes
Utiliza la misma técnica que la respuesta de Python, excepto con la compresión base para las dos matrices.
Pruébalo aquí en línea .
fuente
Java, 190
String v
mantiene las probabilidades (divididas por 10) en el sentido contrario a las agujas del reloj con input = 1 como valor predeterminado 50.int[]i
traduce la entrada en un índice en v. Por ejemplo,v.charAt(i[1])
es5
. Las entradas 0 y 5 no son válidas, por lo que tanto i [0] como i [5] tienen un valor de marcador de posición de 8, que es el índice de '\ 0' al final de v.Roto los números en v hacia la derecha por el valor i [n], y luego imprimo las probabilidades como cadenas separadas por comas.
fuente