Inspirado por essa pergunta hoje cedo , gostaria de ver maneiras interessantes pelas quais várias linguagens de programação podem transformar um numpad em probabilidades. Geralmente, os jogos baseados em blocos permitem que você use um teclado numérico para se mover em qualquer direção com base em onde o seu personagem está atualmente. Ao criar uma IA para esses jogos, Math.random() * 8
não é suficiente, então eu tive que ser um pouco criativo para fazer o movimento parecer um pouco natural.
Um numpad é definido como tal:
7 | 8 | 9
- - - - -
4 | x | 6
- - - - -
1 | 2 | 3
Observe que 5 é um número inválido, pois você não pode avançar para si mesmo.
Todos os exemplos usarão estas probabilidades: [50, 40, 30, 20, 10]
Se eu quisesse gerar probabilidades 8
, ficaria assim:
40 | 50 | 40
-- | -- | --
30 | xx | 30
-- | -- | --
20 | 10 | 20
A saída seria [20, 10, 20, 30, 30, 40, 50, 40]
(com 5 omitidos) ou [20, 10, 20, 30, null, 30, 40, 50, 40]
(com 5 presentes)
Se eu quisesse gerá-los 1
, ficaria assim:
30 | 20 | 10
-- | -- | --
40 | xx | 20
-- | -- | --
50 | 40 | 30
A saída seria [50, 40, 30, 40, 20, 30, 20, 10]
(com 5 omitidos) ou [50, 40, 30, 40, null, 20, 30, 20, 10]
(com 5 presentes)
Você pode escrever um programa completo que recebe a entrada da maneira usual (linha de comando, stdin) e imprime a saída, ou pode escrever uma função com um argumento numérico, que imprime ou retorna a saída. Seu programa ou função deve aceitar um número - a posição a ser gerada. Você deve usar estas probabilidades: [50, 40, 30, 20, 10]
(elas não precisam ser codificadas).
O código mais curto em bytes vence. As brechas padrão não são permitidas. As respostas postadas no encadeamento vinculado não são permitidas. Espaços à direita ou à direita são permitidos. Você pode tratar a posição 4
como ausente ou vazia, dependendo da sua preferência. Não sou muito exigente no formato de saída - imprima-o como sequências separadas por vírgula ou como uma matriz.
(Esta é a minha primeira pergunta, vá devagar comigo!)
Python - 115
a
é uma matriz com os valores em ordem ao redor do teclado numérico (no sentido anti-horário de 1) eb
mapeia os números no teclado numérico para as posições ao redor dele. Com base no número de espaços ao redor do numpad para o número de entrada (determinado usandob
), ele cria uma matriz com muitos elementos movidos da frentea
para o final e depois usab
novamente para reorganizar os elementos para corresponder aos números do numpad.fonte
/10
e depois colocando um*10
no seu loop.(a[c:]+a[:c])[e]
o mesmo que éa[(c+e)%8]
oua[c+e-8]
? E, em seguida, conectarc
simplifica a expressão.Pitão - 38 bytes
Usa a mesma técnica da resposta Python, exceto com a compactação básica para as duas matrizes.
Experimente aqui online .
fonte
Java, 190
String v
mantém as probabilidades (divididas por 10) em ordem horária no sentido horário, com a entrada = 1 sendo o padrão 50.int[]i
converte a entrada em um índice em v. Por exemplo,v.charAt(i[1])
é5
. As entradas 0 e 5 são inválidas, portanto, i [0] e i [5] têm um valor de espaço reservado de 8, que é o índice para '\ 0' no final de v.Giro os números em v para a direita pelo valor i [n] e depois imprimo as probabilidades como seqüências de caracteres separadas por vírgula.
fonte