Продуктовий магазин 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.