Продуктовий магазин Micromanagement


14

Ви працівник у новій продуктовій крамниці Half Foods, і це за день до Дня Подяки на Різдво . Оскільки в магазині буде багато людей, які поспішають діставати свої продукти, магазину потрібен менеджер з трафіку, щоб відправити всіх у відповідні лінії. Будучи ледачим, ви хочете автоматизувати це, щоб ви могли влучити в делікатес, перш ніж усі візьмуть всю шинку з індичкою . Однак все, що у вас є, - це ваш телефон, і кодування довгих програм на ньому - справжній біль - тому вам потрібно розрушити навички ніндзя .

Виклик

Давайте візуалізуємо продуктовий магазин на двовимірній сітці. Ось зразок сітки для розсічення:

                             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

Це , тому найкоротший код виграє.


1
Я дійсно не отримую формату введення.
Фонд позову Моніки

@QPaysTaxes Input може бути або багаторядковою рядком, або масивом однорядних рядків відповідно до наших значень за замовчуванням для отримання декількох рядків введення.
спагетто

Ні, я маю на увазі, що я просто не отримую цього виклику, насправді.
Фонд позову Моніки

Замість того, щоб покладатися на приклади, можливо, варто чітко заявити, що покупець ніколи не може знаходитись у тому ж рядку, що і Y, оскільки переміщення вниз до рядка Y та перевезення вгору відповідної черги відбуваються за один крок.
трихоплакс

Це також допоможе скласти опис того, як рухається черга, із прикладом тесту. Якщо в черзі є 3 покупці, вертикально розташовані поруч, і найнижчий може рухатися вниз, чи всі 3 переміщуються разом в один крок або чи наявний простір переміщується вгору на один ряд, коли кожен покупець переміщується в нього?
трихоплакс

Відповіді:


4

Python 2 , 477 463 453 449 423 402 397 396 393 байт

t=input()
e=enumerate
q,r=" s"
for i,L in list(e(t))[:0:-1]:
 for j,c in e(L):
	a=t[i-1][j]
	if"0"<c<"6":L[j]="0 1234"[int(c)]
	if(r==a)*q==L[j]:t[i-1][j],L[j]=q+r
	if"e"==a:L[j]=r
	if r==L[j]and"x"==t[i+1][j]:L[j]="5"
 if"Y"in L:x=L.count(r);t[i]=[p.replace(r,q)for p in L]
for i,l in list(e(t))[::-1]:
 for j,c in e(l):
	if"#"==c and(q==l[j+1])*x:x-=1;l[j+1]=r
print"\n".join(map("".join,t))

Спробуйте в Інтернеті!

Все ще працюю над гольфом, але наразі це вирішує проблему


Ви можете видалити зайвий відступ та розриви рядків (однорядкові блоки можуть переходити на ту саму лінію, що і початок блоку)
Соломон Учко

@SolomonUcko Де ти говориш?
Опублікувати Rock Garf Hunter

1. Чи є вкладки 8 пробілами до пітона? 2. Я думаю, ви можете видалити розриви рядків після останніх 2 циклів.
Соломон Учко

1
1. Вкладки - це власна річ у Python. 2. Ви не можете видалити цей розрив рядка.
Опублікувати Rock Garf Hunter

1. Чи підраховує python перший рівень відступу в блоці як рівень відступу для цього блоку? 2. Чи знаєте ви, чому ні? Я перевірив це, і він не працює.
Соломон Учко

4

C ++, 898 896 885 841 байт

Дуже довго кодувати ... але воно є

-2 байти завдяки Conor O'Brien
-45 байт завдяки Zacharý

#include<vector>
#include<string>
#include<algorithm>
#include<ctime>
#define B begin()
#define L length()
#define C(e)if(i[j].find(e)!=string::npos&&!
#define S's'
#define T size()
#define U i[x][a]
using namespace std;auto g=[](auto&i){int e=i[0].find('e'),n=0,y=0,h=0,o,j,c,x,t=0;for(auto&a:i)t=a.L>t?a.L:t;for_each(i.B,i.end(),[&i,t](string&s){s.resize(t);});srand(time(0));vector<int>s,l;for(j=0;j<i.T;++j){C(S)y)++n;C(89)0)y=j;C(35)h){h=j;for(int d=0;d<i[j].T;++d)if(i[j][d]==35)l.push_back(d+1);s.resize(l.T);}if(h)for(c=0;c<l.T;c++)if(i[j][l[c]]!=32)++s[c];C('x')0)x=j;}--x;for_each(l.B,l.end(),[&i,&x,h](int&a){if(U!=32)--U;if(U==10)U=32;for(int b=x;b>h;--b){if(i[b][a]==32&&i[b-1][a]==S){i[b][a]=S;i[b-1][a]=32;}}if(U==S)U=49+rand()%5;});if(i[y-1][e]==S)i[h][l[min_element(s.B,s.end())-s.B]]=S;for(j=1;j<n+2;++j)if(j<y)i[j][e]=S;};

Отже ... деякі деталі:

  • Ви повинні пройти std::vector<std::string>(вони будуть змінені на однаковій довжині, найдовший рядок)

  • Всі лінії початку #починаються з однакових y (вертикальних) координат, однакової довжини і закінчуються однаковими y (вертикальними) координатами

  • Припустимо, що сітка має принаймні 1 #рядок або більше, мати одну букву e(одну розетку) вгорі, одну буквуY

  • Припустимо, що вхід - це дійсний вихід, тому покупці, які чекають переадресації, завжди будуть один за одним

Редагувати: Щойно побачив у коментарях відповіді Wheat Wizard, що він повинен підтримувати кілька входів, я продовжуватиму працювати над цим


Можливо, ви могли б зробити цей макрос C #define C(e)i[j].find(e)!=string::npos?
Conor O'Brien

Моя відповідь підтримує декілька входів як побічний ефект, з них - гофрований. Квартата сказав, що це буде потрібно, але я не бачу цього в питанні, тому що стосується мене, ви можете підтримувати лише один вхід.
Опублікувати Rock Garf Hunter

@WheatWizard Добре, якщо я прочитаю питання, він говорить: "Сітка починається з електронної пошти, яка являє собою розетку" та "всіх торгових точок", так що припускають, що у неї може бути кілька входів
HatsuPointerKun

Ви можете змінити визначення " C(e)бути" #define C(e)if(i[j].find(e)!=string::nposта відповідно змінити дзвінки.
Zacharý

Оскільки length()він застосовується лише увімкнено a, ви можете змінити, Lщоб їх було визначено як a.length(), відповідно змінюючи виклики. Крім того, ви можете перемістити на using namespace std;дно, зберігаючи байт, видаливши новий рядок
Zacharý
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.