Вы являетесь сотрудником в тазобедренном новом продуктовом магазине Половина еды, и это за день до Дня благодарения Рождество Пасха. Поскольку в магазине будет полно покупателей, которые спешат за продуктами, в магазине нужен менеджер по дорожному движению, который отправит всех по соответствующим линиям. Будучи ленивым, вы хотели бы автоматизировать это так, чтобы вы могли пойти в гастроном, пока все не взяли всю ветчину индейки, что угодно. Тем не менее, все, что у вас есть с собой, - это ваш телефон, и написание длинных программ для него - настоящая боль, поэтому вам нужно испытать свои навыки игры в ниндзя -гольф .
Вызов
Давайте представим продуктовый магазин на двухмерной сетке. Вот пример сетки для анализа:
e
s
s
s
Y
# # #s #
#s # #s #
#s # #s #
#s #s #s #
#3 #1 #4 #
x x x x
Сетка начинается с e
, который представляет «выход» для остальной части магазина. Каждое поколение, все выходы в сетке порождают покупателя ( s
) прямо под ним. Покупатели движутся вниз каждое поколение, пока не достигнут вас ( Y
). Когда покупатель достигает того же ряда, что и вы, вы должны телепортировать покупателя в начало строки с наименьшим количеством покупателей. Покупатель сразу же движется к линии, когда он двигается в ряду с Y
, между ними нет поколения. Строки представлены #
s - столбцом, после #
s - строка. Покупатели спускаются до конца строки (представленной выходом x
), а затем превращаются в случайное число между 1
и5
, Каждое поколение вы должны уменьшать пронумерованные покупатели на 1
- когда покупатель достигнет 0
, они заканчивают проверять и покидают магазин.
Учитывая входную сетку, подобную этой, выведите следующее поколение продуктового магазина (переместите всех покупателей одновременно, перенаправьте покупателей, и пусть они уйдут, если они закончили).
образцы
Входные данные:
e
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Выход:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Входные данные:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Выход
e
s
Y
#s # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Входные данные:
e
Y
# # # #
# # # #
# # # #
#s # # #
# # # #
x x x x
(Возможно) вывод:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Входные данные:
e
s
Y
# # # #
# # # #
# # # #
# # # #
#3 # # #
x x x x
Выход:
e
s
Y
# #s # #
# # # #
# # # #
# # # #
#2 # # #
x x x x
Входные данные:
e
Y
# # # #
# # # #
# # # #
# # # #
#1 # # #
x x x x
Выход:
e
s
Y
# # # #
# # # #
# # # #
# # # #
# # # #
x x x x
Это код-гольф , поэтому выигрывает самый короткий код.
Ответы:
Python 2 ,
477463453449423402397396393 байтаПопробуйте онлайн!
Все еще работает над игрой в гольф, но это решает проблему на данный момент
источник
C ++,
898896885841 байтОчень долго кодировать ... но оно есть
-2 байта благодаря Conor O'Brien
-45 байтов благодаря Zacharý
Итак ... некоторые детали:
Вы должны передать
std::vector<std::string>
(они будут изменены с той же длиной, что и самая длинная строка)Все линии
#
начинаются с одинаковых y (вертикальных) координат, имеют одинаковую длину и заканчиваются с одинаковыми y (вертикальными) координатамиПредположим, что сетка имеет по крайней мере 1
#
строку или более, имеет одну буквуe
(один вывод) вверху, одну буквуY
Предположим, что ввод является действительным выводом, поэтому покупатели, ожидающие перенаправления, всегда будут один за другим
Изменить: Только что увидел в комментариях ответа мастера пшеницы, что он должен поддерживать несколько входов, я буду продолжать работать над этим
источник
#define C(e)i[j].find(e)!=string::npos
?C(e)
быть#define C(e)if(i[j].find(e)!=string::npos
и изменить вызовы соответственно.length()
как применяется толькоa
, вы можете изменить,L
чтобы быть определенным какa.length()
, соответственно изменяя вызовы. Кроме того, вы можете переместитьusing namespace std;