Вдохновленный этим вопросом ранее сегодня , я хотел бы увидеть интересные способы, которыми различные языки программирования могут превратить цифровую цифру в вероятности. Как правило, игры на основе плиток позволяют вам использовать цифровую клавиатуру для перемещения в любом направлении в зависимости от того, где находится ваш персонаж. При создании ИИ для этих игр Math.random() * 8
этого недостаточно, поэтому мне пришлось проявить немного креативности, чтобы движение выглядело и ощущалось несколько естественным.
Numpad определяется так:
7 | 8 | 9
- - - - -
4 | x | 6
- - - - -
1 | 2 | 3
Обратите внимание, что 5 - недопустимый номер, так как вы не можете перейти на себя.
Все примеры будут использовать эти вероятности: [50, 40, 30, 20, 10]
Если бы я хотел генерировать вероятности вокруг 8
, это выглядело бы так:
40 | 50 | 40
-- | -- | --
30 | xx | 30
-- | -- | --
20 | 10 | 20
Выход будет [20, 10, 20, 30, 30, 40, 50, 40]
(с 5 опущенными) или [20, 10, 20, 30, null, 30, 40, 50, 40]
(с 5 присутствующими)
Если бы я хотел генерировать их вокруг 1
, это выглядело бы так:
30 | 20 | 10
-- | -- | --
40 | xx | 20
-- | -- | --
50 | 40 | 30
Выход будет [50, 40, 30, 40, 20, 30, 20, 10]
(с 5 опущенными) или [50, 40, 30, 40, null, 20, 30, 20, 10]
(с 5 присутствующими)
Вы можете написать полную программу, которая принимает входные данные любым обычным способом (командная строка, stdin) и печатает выходные данные, или вы можете написать функцию с числовым аргументом, которая печатает или возвращает выходные данные. Ваша программа или функция должна принимать одно число - положение, которое нужно генерировать. Вы должны использовать эти вероятности: [50, 40, 30, 20, 10]
(они не должны быть жестко закодированы).
Самый короткий код в байтах побеждает. Стандартные лазейки запрещены. Ответы, размещенные в связанной ветке, запрещены. Трейлинг или пробелы допускаются. Вы можете рассматривать положение 4
как отсутствующее или пустое, в зависимости от ваших предпочтений. Я не слишком требователен к формату вывода - выведите его в виде строк через запятую или в виде массива.
(Это мой первый вопрос, успокойся!)
Питон - 115
a
является массивом со значениями по порядку вокруг цифровой клавиатуры (против часовой стрелки от 1) иb
отображает числа на цифровой клавиатуре в позиции вокруг нее. Основываясь на количестве пробелов вокруг цифровой клавиатуры для входного номера (определяется с помощьюb
), он создает массив, в котором много элементов перемещается от началаa
к концу, а затемb
снова использует для перестановки элементов в соответствии с номерами цифровой клавиатуры.источник
/10
а затем вставив*10
в свой цикл.(a[c:]+a[:c])[e]
то же самоеa[(c+e)%8]
илиa[c+e-8]
? А затем подключениеc
упрощает выражение.Pyth - 38 байт
Использует ту же технику, что и в ответе Python, за исключением базового сжатия для двух массивов.
Попробуйте здесь онлайн .
источник
Ява, 190
String v
содержит вероятности (деленные на 10) в порядке против часовой стрелки с input = 1 по умолчанию 50.int[]i
переводит входные данные в индекс в v. Например,v.charAt(i[1])
является5
. Входы 0 и 5 недопустимы, поэтому и i [0], и i [5] имеют значение заполнителя 8, которое является индексом для '\ 0' в конце v.Я поворачиваю числа в v вправо на значение i [n], а затем печатаю вероятности в виде строк, разделенных запятыми.
источник