Ты с твоим лучшим другом, Джим, в парке развлечений, и когда твоя любимая поездка становится очевидной, ты и Джим обмениваешься взглядами. Естественно, вы мчитесь, чтобы встать в очередь. К сожалению, он выигрывает, потому что вы гольфист, и он играет в настоящий спорт (извините, друзья). На самом деле, вы так далеко позади, что вы и Джим разделены x
людьми. Предполагая, что длина строки n
и вы находитесь сзади, а линия зигзагирует и загоняет всех j
людей, на каких позициях в линии вы и Джим будете находиться в одном столбце, позволяющем общаться в чате (только в одной строке)?
вход
3 целых числа
n
- длина линии. Это число всегда будет больше или равноj
и будет иметь видy * j
гдеy
положительное целое число (количество строк в очереди).j
- Количество человек в одном ряду строки (количество столбцов в одном ряду). Это число всегда будет больше 0.x
- Количество людей между вами и Джимом такое, что0 <= x < 2j - 1
. Подсказка: если это число нечетное, то ваш вывод должен быть пустым.
Выход
Список целочисленных позиций в строке, в которой Джим находится в том же столбце, что и вы.
1 Эти целые числа могут быть проиндексированы 0 или 1, если вы указали в своем ответе.
2 Эти целые числа могут предполагать, что вы начинаете с позиции 0 или позиции n-1, если вы указали в своем ответе.
пример
В этом примере вход будет n = 9, j = 3, x = 0
. Вывод должен быть, 2, 5
потому что ваша позиция 2 или 5, когда вы находитесь в том же столбце, что и Джим
Тестовые случаи
[9, 3, 0] -> [2, 5]
[12, 3, 0] -> [2, 5, 8]
[9, 3, 1] -> []
[9, 3, 2] -> [1, 4]
[14, 7, 10] -> [1]
[24, 4, 6] -> [0, 4, 8, 12, 16]
счет
Это код-гольф , поэтому выигрывает самый короткий ответ (в байтах).
Ответы:
Python 2 ,
45414037 байтДовольно тривиальное решение. Я просто быстро просмотрел шаблоны и нашел шаблон. 1 индексируется, 1 находится в конце очереди.
-4 байта, избегая троих и используя массив для значений вместо
-1 байта, благодаря некоторому вдохновению от @DeadPossum, используя
and
вместо тернаров или селекторов массива-3 байта, переключаясь
or
в обратном порядке. Работает только из-за 1-индексацииКроме того, вычеркнуто 4 все еще 4 на всех 4s :(
Попробуйте онлайн!
источник
lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
n-j+1
, такlambda n,j,x:x%2-1and range(j-x/2,n-x,j)
что короче еще на 40 байтовПип ,
2221 байт20 байтов кода, +1 за
-p
флаг.Принимает
n
,j
иx
как аргументы командной строки. 0 индексируется, начиная с позиции 0. Попробуйте онлайн!объяснение
Это моя оригинальная 22-байтовая версия, потому что она более понятна.
Формула была получена путем наблюдения за образец для
n=9
,j=3
:Если мы возьмем
x/2
(0
,1
,2
), вычесть его изj-1
(2
,1
,0
), а также добавить , что[0;3]
мы получаем правильный результат во всех случаях.источник
Java 8 лямбда, 101 байт
Почти прямой порт моего Python ответа. Диапазон не существует в Java, хотя.
источник
Haskell, 43 байта
Практически напрямую перенесен из Python-ответа от HyperNeutrino
Более хорошо отформатированный код:
РЕДАКТИРОВАТЬ: забыл упомянуть, что это был один индекс
источник
C # - 91 байт
источник