- 23, Oct 2024
- #1
Эта головоломка основана на этот пост Math.SE. Более сложную версию этой проблемы можно найти здесь.
Предположим, у меня есть некоторое количество черных рубашек и некоторое количество белых рубашек, обе не менее 1. Оба цвета рубашек имеют ненулевую прочность. Все рубашки данного цвета имеют одинаковую прочность.
Каждый день я выбираю чистую рубашку, а она становится грязной. Как только у меня заканчиваются все чистые черные рубашки или все чистые белые рубашки, я стираю все свои грязные рубашки обоих цветов и начинаю все сначала. Чистые рубашки не стираются. Каждый раз, когда рубашку стирают, ее долговечность снижается на единицу. Если сразу после стирки износ рубашки достигнет 0, ее необходимо выбросить.
Выбирая рубашку определенного цвета, я всегда выбираю рубашку с самой высокой прочностью этого цвета, чтобы обеспечить равномерный износ рубашек.
Испытание:
Возьмите последовательность из двух символов бесконечной длины (например, b b b w b w w b...), представляющую мой выбор рубашки, которую я надену в этот день. Продолжайте выполнение до тех пор, пока не выбросите мою последнюю черную рубашку или мою последнюю белую рубашку. Как только это произойдет, прекратите использование входных данных и немедленно остановите выполнение. Обратите внимание, что программа не должна потреблять больше входных данных, чем требуется перед остановкой.
Входы:
Количество черных рубашек, количество белых рубашек, долговечность черных рубашек, долговечность белых рубашек и бесконечное количество двух отдельных символов на ваш выбор (например, b и w)
Примечание. Если выбранный вами язык не поддерживать считывая входные данные бесконечной длины (т.е. из потока), предположим, что входные данные имеют произвольную длину, которая, по крайней мере, достаточна для того, чтобы закончился один цвет рубашки.
Выход:
Никто. Программа должна просто немедленно остановиться, когда будет выброшена последняя рубашка любого цвета.
Примечание: если ваш язык не поддерживает ввод бесконечной длины для чтения, то вместо этого вам следует вывести количество обработанных символов.
Тестовые случаи:
Следующие тестовые примеры представляют объем входных данных, которые программа должна обработать перед остановкой. Последовательность w и b бесконечна. Последующие скобки не являются частью ввода или вывода, а просто представляют собой конечное состояние того, сколько рубашек каждого цвета не было выброшено.
1 1 1 1 b
(0 b, 1 w left)
1 999 1 999 b
(0 b, 999 w left)
1 999 1 999 w w w w w w w w b
(0 b, 999 w left)
2 999 1 999 b w w w b
(0 b, 999 w left)
2 999 2 999 b w w w b w b w w w b
(0 b, 999 w left)
5 6 3 1 w w w w w b b b b b b b b b b b b b b w
(5 b, 0 w left)
Общие правила:
- Это , поэтому побеждает самый короткий ответ в байтах.
- Правила ввода по умолчанию применяются к первым четырем аргументам. Для входной последовательности произвольной длины после первых четырех аргументов входные данные должны поступать из источника, который может предоставлять ввод по одному символу или байту за раз, теоретически бесконечной длины, например STDIN или какой-либо другой поток. Если выбранный вами язык не поддерживает эти функции, см. выше.
#код-гольф #код-гольф #математика