Cửa hàng tạp hóa Quản lý vi mô


14

Bạn là một nhân viên tại cửa hàng tạp hóa mới Half Food, và đó là một ngày trước Lễ Tạ ơn Giáng sinh Phục sinh. Vì cửa hàng sẽ chật cứng khách hàng đổ xô đi lấy thực phẩm, nên cửa hàng cần một người quản lý giao thông để gửi mọi người đến các hàng thích hợp. Lười biếng, bạn muốn tự động hóa này để bạn có thể đi nhấn deli trước khi tất cả mọi người có tất cả các gà tây ham bất cứ điều gì. Tuy nhiên, tất cả những gì bạn có với bạn là điện thoại của bạn, và mã hóa các chương trình dài trên đó là một nỗi đau thực sự - vì vậy bạn cần phải vượt qua các kỹ năng ninja của mình.

Thử thách

Hãy hình dung cửa hàng tạp hóa trên lưới hai chiều. Đây là một lưới mẫu để phân tích:

                             e
                             s
                             s
                             s
                               Y

#           #                #s           #
#s          #                #s           #
#s          #                #s           #
#s          #s               #s           #
#3          #1               #4           #
 x           x                x            x

Lưới bắt đầu với một e, đại diện cho một "cửa hàng" cho phần còn lại của cửa hàng. Mỗi thế hệ, tất cả các cửa hàng trong lưới đều sinh ra một người mua sắm ( s) ngay bên dưới. Người mua hàng di chuyển xuống dưới mỗi thế hệ cho đến khi họ tiếp cận với bạn ( Y). Khi một người mua hàng đến cùng hàng với bạn, bạn phải dịch chuyển người mua hàng đến đầu hàng với số lượng người mua sắm ít nhất trong đó. Một người mua sắm ngay lập tức di chuyển đến hàng khi họ sẽ di chuyển vào hàng với Y, không có thế hệ ở giữa. Các dòng được biểu thị bằng #s - cột sau #s là một dòng. Người mua hàng đi xuống cuối dòng (được biểu thị bằng một lối ra x), sau đó biến thành một số ngẫu nhiên giữa 15. Mỗi thế hệ, bạn phải giảm số người mua hàng được đánh số bởi 1- khi một người mua hàng tiếp cận 0, họ đã hoàn tất việc kiểm tra và họ rời khỏi cửa hàng.

Đưa ra một đầu vào của lưới như thế này, tạo ra thế hệ tiếp theo của cửa hàng tạp hóa (đồng thời di chuyển tất cả người mua hàng xuống, chuyển hướng người mua hàng và để họ rời đi nếu họ hoàn thành).

Mẫu

Đầu vào:

                e

                     Y


#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
 x           x                x            x

Đầu ra:

                e
                s 
                     Y


#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
 x           x                x            x

Đầu vào:

                e
                s 
                     Y


#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
 x           x                x            x

Đầu ra

                e
                s 
                     Y


#s          #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
 x           x                x            x

Đầu vào:

                e

                     Y


#           #                #            #
#           #                #            #
#           #                #            #
#s          #                #            #
#           #                #            #
 x           x                x            x

(Có thể) Đầu ra:

                e
                s 
                     Y


#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
#3          #                #            #
 x           x                x            x

Đầu vào:

                e
                s 
                     Y


#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
#3          #                #            #
 x           x                x            x

Đầu ra:

                e
                s 
                     Y


#           #s               #            #
#           #                #            #
#           #                #            #
#           #                #            #
#2          #                #            #
 x           x                x            x

Đầu vào:

                e

                     Y


#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
#1          #                #            #
 x           x                x            x

Đầu ra:

                e
                s 
                     Y


#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
#           #                #            #
 x           x                x            x

Đây là , vì vậy mã ngắn nhất sẽ thắng.


1
Tôi thực sự không nhận được định dạng đầu vào.
Vụ kiện của Quỹ Monica

@QPaysTaxes Đầu vào có thể là một chuỗi nhiều dòng hoặc một chuỗi các chuỗi đơn theo mặc định của chúng tôi để lấy nhiều dòng đầu vào.
một spaghetto

Không, ý tôi là tôi không gặp thử thách, thật đấy.
Vụ kiện của Quỹ Monica

Thay vì dựa vào các ví dụ, có thể đáng nói rõ rằng người mua hàng không bao giờ có thể ở cùng hàng với Y, khi chuyển xuống hàng Y và được dịch chuyển đến đầu hàng đợi có liên quan xảy ra trong một bước duy nhất.
trichoplax

Nó cũng sẽ giúp có một mô tả về cách hàng đợi di chuyển, với một trường hợp thử nghiệm làm ví dụ. Nếu có 3 người mua hàng liền kề theo hàng dọc và hàng thấp nhất có thể di chuyển xuống, liệu cả 3 có di chuyển xuống cùng nhau trong một bước hay không gian có sẵn di chuyển lên một hàng khi mỗi người mua hàng di chuyển vào đó?
trichoplax

Câu trả lời:


4

Python 2 , 477 463 453 449 423 402 397 396 393 byte

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))

Hãy thử trực tuyến!

Vẫn đang làm việc trên sân golf này nhưng nó giải quyết vấn đề cho đến bây giờ


Bạn có thể loại bỏ vết lõm và ngắt dòng quá mức (các khối dòng đơn có thể đi trên cùng một dòng với điểm bắt đầu của khối)
Solomon Ucko

@SolomonUcko Bạn đang nói về đâu?
Đăng Rock Garf Hunter

1. Các tab 8 khoảng trắng để python? 2. Tôi nghĩ rằng bạn có thể loại bỏ các ngắt dòng sau 2 vòng cuối cho các vòng lặp.
Solomon Ucko

1
1. Tab là thứ của riêng họ trong Python. 2. Bạn không thể loại bỏ ngắt dòng đó.
Đăng Rock Garf Hunter

1. Con trăn chỉ đếm mức thụt đầu tiên trong một khối là mức thụt cho khối đó? 2. Bạn có biết tại sao không? Tôi đã thử nó và nó không hoạt động.
Solomon Ucko

4

C ++, 898 896 885 841 byte

Rất lâu để viết mã ... nhưng nó ở đó

-2 byte nhờ Conor O'Brien
-45 byte nhờ 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;};

Vì vậy, ... một số chi tiết:

  • Bạn phải vượt qua một std::vector<std::string>(chúng sẽ được thay đổi kích thước ở cùng độ dài chuỗi dài nhất)

  • Tất cả các dòng #bắt đầu ở cùng tọa độ y (dọc), có cùng độ dài và kết thúc tại cùng tọa độ y (dọc)

  • Giả sử rằng lưới có ít nhất 1 #dòng trở lên, có một chữ cái e(một ổ cắm) ở trên cùng, một chữ cáiY

  • Giả sử rằng đầu vào là đầu ra hợp lệ, do đó, người mua hàng đang chờ chuyển hướng sẽ luôn luôn là người khác

Chỉnh sửa: Chỉ cần thấy trong các nhận xét về câu trả lời của Wheat Wizard rằng nó sẽ hỗ trợ nhiều lối vào, tôi sẽ tiếp tục làm việc trên đó


Có lẽ bạn có thể làm cho macro C được #define C(e)i[j].find(e)!=string::npos?
Conor O'Brien

Câu trả lời của tôi hỗ trợ nhiều lối vào như một tác dụng phụ, của nó là golf. Quartata nói rằng nó sẽ được yêu cầu, nhưng tôi không thấy nó trong câu hỏi, theo như tôi lo ngại, bạn chỉ được hỗ trợ một lối vào duy nhất.
Đăng Rock Garf Hunter

@WheatWizard Vâng, nếu tôi đọc câu hỏi, nó nói: "Lưới bắt đầu với một e, đại diện cho một lối thoát" và "tất cả các cửa hàng", do đó đề nghị đó có thể có nhiều lối vào
HatsuPointerKun

Bạn có thể thay đổi định nghĩa C(e)trở thành #define C(e)if(i[j].find(e)!=string::nposvà thay đổi các cuộc gọi tương ứng.
Zacharý

Và vì length()chỉ được áp dụng trên a, bạn có thể thay đổi Lđể được xác định là a.length(), sửa đổi các cuộc gọi cho phù hợp. Ngoài ra, bạn có thể di chuyển using namespace std;xuống dưới cùng, tiết kiệm một byte bằng cách xóa dòng mới
Zacharý
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.