Учитывая позицию с рядом ладей и / или пустых мест, выведите, сколько возможных ходов ладьи. Ладья может двигаться влево или вправо в пустое пространство, но не в ту, которая требует прохода через другую ладью. Когда ладья движется, остальные ладьи остаются на месте.
Например, из этой позиции возможно 6 ходов :
.R..RRR.
- Первый (крайний левый) ладья может переместиться на 1 пробел влево или на 1 или 2 пробела вправо (3 хода)
- Следующая ладья может двигаться только на 1 или 2 пробела влево (2 хода)
- Третья ладья не может двигаться вообще, потому что она зажата между двумя другими ладьями (0 ходов)
- Последняя ладья может двигаться только на 1 пробел вправо (1 ход)
Обратите внимание, что позиция может вообще не иметь грачей или вообще не иметь пустых мест.
Входные данные: непустой список (строка, массив и т. Д.) Грачей и пустых пространств. Вы можете представить их как True
/ False
, 1
/ 0
, 'R'
/ '.'
или любые два последовательных отдельных однобайтовых символа или однозначные числа на ваш выбор. Вам решать, что означает ладью, а что означает пустое пространство.
Выход: неотрицательное целое число. Целые числа тоже хорошо.
Контрольные примеры
Выходной это число слева.
6 .R..RRR.
0 .
0 R
4 R..RR
3 ...R
8 ..R..R..
0 ......
Для большего количества тестовых случаев здесь представлены все входные данные длиной до 5.
0 .
0 R
0 ..
1 .R
1 R.
0 RR
0 ...
2 ..R
2 .R.
1 .RR
2 R..
2 R.R
1 RR.
0 RRR
0 ....
3 ...R
3 ..R.
2 ..RR
3 .R..
3 .R.R
2 .RR.
1 .RRR
3 R...
4 R..R
3 R.R.
2 R.RR
2 RR..
2 RR.R
1 RRR.
0 RRRR
0 .....
4 ....R
4 ...R.
3 ...RR
4 ..R..
4 ..R.R
3 ..RR.
2 ..RRR
4 .R...
5 .R..R
4 .R.R.
3 .R.RR
3 .RR..
3 .RR.R
2 .RRR.
1 .RRRR
4 R....
6 R...R
5 R..R.
4 R..RR
4 R.R..
4 R.R.R
3 R.RR.
2 R.RRR
3 RR...
4 RR..R
3 RR.R.
2 RR.RR
2 RRR..
2 RRR.R
1 RRRR.
0 RRRRR
Python 3 ,
3029 байтПопробуйте онлайн!
-1 байт благодаря @JoKing
Функция принимает байтовую строку Python в качестве входных данных. Каждое пустое пространство кодируется как вкладка, а каждая ладья кодируется как байт,
b'\x00'
имеющий значение0
.Вычисление эквивалентно
lambda s:(s+s).strip().count(b'\t')
меньшему количеству байтов.источник
JavaScript (ES6),
3833 байтаСохранено 5 байт благодаря @JoKing
Принимает ввод в виде строки. Ожидается пробел для пустого квадрата и любой другой символ для ладьи.
Попробуйте онлайн!
комментарии
Python 2 ,
4033 байтаСохранено 7 байтов благодаря @Grimy
Попробуйте онлайн!
источник
count
вместоsplit
( TIO )Japt , 5 байт
Попытайся
источник
Perl 6 , 16 байт
Попробуйте онлайн!
Регулярное выражение, которое соответствует всем исчерпывающим случаям грачей, за которыми следуют пробелы или пробелы, за которыми следует ладья, и возвращает количество совпадений.
источник
05AB1E , 5 байтов
Попробуйте онлайн!
источник
Сетчатка ,
2315 байтУдвойте количество пробелов между ладьями, добавьте в строки grep хотя бы одну ладью, затем посчитайте количество пробелов.
Попробуйте онлайн!
Хотя в программе вместо пробелов используются пробелы, я добавил префиксный код, чтобы можно было легко вставлять и использовать предоставленные тестовые примеры.
Я надеялся, что смогу использовать перекрывающиеся матчи
(?<=R.*) | (?=.*R)
, но перекрытия не настолько агрессивны. Необходимо будет подсчитать все возможные способы получения соответствия, чтобы получить правильный результат с помощью этого метода.источник
.R.R.R.
хотяR.+R
может помочь изменение первой строки ?Желе , 6 байт
Попробуйте онлайн!
Монадическая ссылка, берущая список
0
для ладьи и1
для пробела и возвращающая целое число с количеством ходов. Ссылка TIO берет вставленный список возможных досок, приведенных в вопросе, преобразует в правильный формат и затем выводит рассчитанные и правильные ответы.объяснение
источник
Japt , 6 байт
Пробелы для пробелов, любой другой символ для ладьи.
Попытайся
источник
Улитки, 7 байт
По крайней мере, это лучше, чем Retina :)
Попробуйте онлайн!
источник
Желе , 5 байт
Попробуйте онлайн!
-1 спасибо Джонатану Аллану .
0
представляет ладью,1
представляет пустое пространство.источник
Ẉ
для получения пяти:ḲẈ+ƝS
Ẉ
ноṣ0
вместо этого использовал ...Stax ,
765 байтЗапустите и отладьте его
Используйте вкладку для пустого квадрата и любой другой символ для ладьи.
источник
C (лязг) , 57 байт
Попробуйте онлайн!
Я понял, что это не работает для пустых списков .. Теперь это работает! Плюс сэкономил несколько байтов!
1 = ладья. 0 = пространство.
for (.. i + = n ++? - i: 1) // подсчитывает пробелы или сбрасывает дополнительные ходы => i = - ~ i ! * n ++ (@ceilingcat)
о + = * п г = 1, г:? г; // добавляет к выводу -i- (дополнительные ходы), когда ладья встречается, плюс устанавливает -r- (ладья встретилась), -i- будет очищен для предложения с приращением.
добавляет -r- для каждого пробела (ладья встречается гарантировано)
источник
Haskell , 36 байт
Попробуйте онлайн!
Использует 1 для пустого пространства, 0 для ладьи. Подсчитывает количество единиц, которых нет в начальном блоке единиц, и добавляет это к результату для обратной строки.
источник
Haskell , 33 байта
Попробуйте онлайн!
Анонимная функция, которая принимает входные данные в виде списка 1s (пробелы) и 0s (грачи). Это обрезает пробелы в начале и конце списка, затем объединяет две версии списка и суммирует их.
При этом используется GHC 8.4.1 или более поздней версии, чтобы иметь доступ к
<>
оператору без его импорта.источник
Python 2 , 59 байт
Попробуйте онлайн!
источник
Japt , 6 байт
Попробуйте онлайн
источник
Wolfram Language (Mathematica) ,
4338 байтПопробуйте онлайн!
Порт сетчатки Нейла . Использует 1 для пробелов и 0 для грачей.
источник
Haskell ,
685854 байтаПопробуйте онлайн!
источник
Красный , 46 байт
Попробуйте онлайн!
Просто красный порт решений Arnauld для JavaScript / Python . Занимает пространство как пустой квадрат.
источник
Java 11,
3532 байтаПорт @Joel 's Python 3 ответа .
-3 байта также благодаря @Joel .
Использует NULL-bytes (
\0
) для Rooks и tabs (\t
) для пробелов.Попробуйте онлайн.
Я попытался использовать
s->(s+s).trim().chars().sum()/9
сначала как 31-байтовый код, но это не работает, потому чтоString#trim
встроенная функция не только удаляет начальные и конечные пробелы / табуляции / новые строки, но также и все другие байты, которые меньше или равныU+0020
(Unicode 32; пробел) поэтому он также удалит NULL-байты.Спасибо Джоэлу за то, что он порекомендовал мне новую
String#strip
встроенную версию Java 11+ (которую я забыл добавить) в качестве альтернативы. Этот также удаляет завершающие / ведущие части, но в этом случае только пробелы , поэтому байты NULL сохраняются.Объяснение:
источник
String.strip()
для удаления только пробелы: 32 байтаPerl 5
-MList::Util=sum -pF/R/
, 40 байтПопробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 27 байт
Сохраненный байт благодаря @someone
Попробуйте онлайн!
источник
Stax ,
76 байт-1 байт благодаря рекурсивному
Запустите и отладьте его
источник
v
, что сэкономит вам байт.Befunge-98 (PyFunge) , 73 байта
Попробуйте онлайн!
источник
C ,
1831561511379691 байтБлагодаря потолку Cat за 91 байт.
R - ладья, все остальное - пробел.
TIO
источник
82
вместо'R'
нее, или короче, чтобы используйтеe+e*d
чемe*(1+d)
,e=0,d=1;else e++; can be changed to
е = -1, д = 1; е ++;, and
b [a] `иb[++a]
может быть заменен на*b
и*++b
Pyth , 7 байт
Попробуйте онлайн!
Принимает строку
R
для грача,(пробел) для пустого пространства
источник
x86-64 - 26 байт
Входные данные представляют собой массив длиной до 32 бит и целое число, представляющее количество квадратов, 1 представляет собой ладью, 0 - пустой.
Копирует биты так, чтобы он был добавлен слева от него, и удаляет завершающие нулевые биты. Затем получает количество начальных нулевых битов и вычитает его из общего числа нулевых битов.
Машинный код x86-64 - 22 байта - только шахматные ряды обычной длины.
Входные данные представляют собой 32-разрядное целое число с наименее значимым байтом из 8 битов, представляющих грачи. 1 - ладья, 0 - пусто.
Копирует биты в следующий значащий байт и удаляет завершающие нулевые биты. Затем получает количество начальных нулевых битов и вычитает его из общего числа нулевых битов.
источник