Người đưa thư


12

Tôi vừa có một công việc là một người đưa thư và tôi cần sự giúp đỡ của bạn để giữ nó. Tôi phải đặt hàng rất nhiều thư trước khi ra ngoài để giao chúng.

Các đường phố được đánh số tuần tự nghiêm ngặt, bắt đầu bằng 1 ở đầu phố và tiếp tục theo thứ tự bỏ qua không có số nào cho đến hết, với các số lẻ ở bên trái và xuất hiện ở bên phải. Nhà cộng đã được thêm vào sau đó vì vậy chúng tôi cũng có thể có các chữ cái được gắn vào số dân sự.

Chiếc rương chứa tất cả thư của thành phố nên tôi chỉ phải chọn thư trên đường phố.

Tôi cần sự giúp đỡ của bạn để đặt hàng thư nhanh hơn. Những gì tôi yêu cầu bạn là viết một chức năng hoặc toàn bộ chương trình tham gia:
- Một tên đường phố.
- Một danh sách các số dân được đặt theo con đường của tôi.
- Một danh sách các địa chỉ (đại diện cho rương thư).

Và xuất ra một danh sách các địa chỉ chỉ chứa những địa chỉ trên phố của tôi, được sắp xếp theo danh sách các số dân sự.

Một địa chỉ có dạng:

 Person Name/n   
 CivicN Street Name

Trong đó CivicN là một số có thể được theo sau bởi '/' và LETTER UPETCASE (10 10 / B). Nếu bạn thích, chữ thường là chấp nhận được.

Nếu Tên đường phố trùng nhau, chúng được coi là các đường khác nhau:

Church Road  != Saint Lorenz Church Road 

Chúng tôi bỏ qua phần còn lại của địa chỉ để đơn giản (giả sử nó giống nhau cho mọi thư)

Thư phải được gửi nhanh để câu trả lời ngắn nhất chiến thắng.

THÍ DỤ:

Bố trí :

 1 1/B     3 5 7      9 11 13     
 ==============================    
       2 4       4/B 6           

Đầu vào :

"Tea Avenue"
["1","1/B","2","4","3","5","7","4/B","6","9","11","13"]
["Mrs. Pie O. Pinky\n6 Tea Avenue","Ms. Kita I. Omeeha\n6 Tea Avenue","Mr. Raile A. Lee\n26 Uea Grove","Odd O. Nic\n76 Mira Road","Mrs. Fuel Tee\n78 Uea Grove","Ny O. Ondip\n55 Uea Grove","Mrs. Black\n67 Uea Grove","Ollie E.\n11 Tea Avenue","Mr. Urna Li\n75 Mira Road","Ms. Polly\n2 Tea Avenue"]

Đầu ra:

Ms. Polly
2 Tea Avenue  

Mrs. Pie O. Pinky 
6 Tea Avenue 

Ms. Kita I. Omeeha
6 Tea Avenue 

Ollie E.
11 Tea Avenue

Đầu vào :

"Church Road"
["1","3","5","5/B","2","4","7","7/B","6","9","9/B","11","11/B"]
["Billy Ray V.\n5 Church Roadside East","Ms. Mia\n5 Church Road","Mrs. Dadeos\n9/B Church Road","Dr. Ymin U.\n3 Church Road","Atty. Nerou\n3 Church Road","Ollie A. Chaim\n6 Saint Lorenz Church Road","Ms. Rose\n5 Church Road","Alf Taohy\n79 Berry Road","Ms. Ootr E.\n5 Saint Lorenz Church Road","Lol E.\n21 Berry Road","Ms. Norton\n2 Church Road"]

Đầu ra:

Dr. Ymin U.
3 Church Road

Atty. Nerou
3 Church Road

Ms. Mia
5 Church Road

Ms. Rose
5 Church Road

Ms. Norton 
2 Church Road" 

Mrs. Dadeos
9/B Church Road

Kiểm tra trình tạo: Hãy thử trực tuyến! Thay đổi string_wrapper_left / right và dấu phân cách để sửa đổi định dạng.

Quy tắc:
- Các sơ hở tiêu chuẩn bị cấm.
- Phương pháp đầu vào / đầu ra tiêu chuẩn.
- Câu trả lời ngắn nhất trong byte thắng.


5
Tôi sợ bạn sẽ yêu cầu chúng tôi giải quyết vấn đề nhân viên bán hàng du lịch.
Jitse

3
@AZTECCO Cảm ơn! Rất khuyến khích có một số trường hợp thử nghiệm được nhúng trong bài viết của bạn, không chỉ trong mã trình diễn.
Jitse

2
Ý bạn là " vâng, chúng có thể trùng nhau, chúng là những con đường khác nhau " hoặc " không chúng không thể trùng nhau, bạn sẽ không gặp trường hợp thử nghiệm như thế này "? Câu của bạn mâu thuẫn với chính nó ngay bây giờ. ;) Nhưng tôi không phiền nếu bạn chỉ định nó trong thử thách. Nếu bạn có nghĩa là các trường hợp thử nghiệm như vậy là có thể, tôi sẽ chỉnh sửa câu trả lời 05AB1E của mình để giải thích cho nó. Và @Jitse cũng sẽ phải thay đổi câu trả lời Python của mình trong trường hợp đó.
Kevin Cruijssen

2
Ồ .. ý tôi là "vâng, chúng có thể trùng nhau, chúng được coi là những con đường khác nhau"
AZTECCO

2
Có thể xác nhận. Tôi đã từng làm việc như một người đưa thư thứ bảy cũng như nhiều năm trước. :) Mặc dù ở hầu hết các đường phố trong khu vực giao hàng của tôi, việc đỗ xe đạp của tôi ở rìa đường sẽ hiệu quả hơn, đi bộ một chiều và giao tất cả các số lẻ, sau đó đi về phía bên kia làm tất cả các số chẵn, kết thúc lên xe đạp của tôi một lần nữa. Sau đó, một lần nữa, với những con đường lớn, những khoảng thời gian bận rộn như Giáng sinh hoặc vô số thư mục thương mại, tôi thường phải đi bộ trở lại xe đạp giữa một vài lần vì tôi không thể mang tất cả bài của toàn bộ con đường trong một lần ..> .>
Kevin Cruijssen

Câu trả lời:


4

Thạch , 13 byte

,⁵KỴṪ⁼ɗƇ@ɗ€ẎY

Một chương trình đầy đủ chấp nhận ba đối số - danh sách các số dân sự trên đường được đặt tên của bạn, danh sách các địa chỉ trong rương thư và tên đường phố của bạn - in các địa chỉ mà bạn cần gửi theo thứ tự các số dân sự đã cho .

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

Làm sao?

,⁵KỴṪ⁼ɗƇ@ɗ€ẎY - Main link: civic numbers, addresses
          €   - for each (civic number):
         ɗ    -   last three links as a dyad - i.e. f(civic number, addresses):
,⁵            -     pair (the civic number) with 3rd program input (the street name)
  K           -     join (that) with a space -- i.e. X=civic number+' '+street name
        @     -     with swapped arguments i.e. f(addresses, X):
       Ƈ      -       filter (the addresses) keeping those for which:
      ɗ       -         last three links as a dyad - i.e. f(address, X):
   Ỵ          -           split (address) at newlines
    Ṫ         -           tail (get the second line)
     ⁼        -           equals (X)?
           Ẏ  - tighten (the list of lists to a single list)
            Y - join with newlines

4

05AB1E , 15 13 12 byte

ε²ðýUʒ¶¡Xk]˜

-2 byte bởi porting @JonathanAllan 's Jelly câu trả lời , vì vậy hãy chắc chắn để upvote anh ta!
-1 byte nhờ @Grimy .

Các đầu vào theo thứ tự: [danh sách số dân sự], tên đường phố, [danh sách địa chỉ].

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

Giải trình:

ε       # Map over the (implicit) input-list of civic numbers
 ²      #  Push the second street-input
  ðý    #  And join the two values by a space
    U   #  Pop and store this street + num string in variable `X`
 ʒ      #  Filter the (implicit) input-list of addresses by:
  ¶¡    #   Split on newlines
    Xk  #   Get the index of string `X` (street + num) in this list,
        #   which will be either -1 (not found), 0 (first address-line), or 
        #   1 (second address-line), and only 1 is truthy in 05AB1E
]       # After both the inner filter and outer map:
 ˜      # Flatten the array to remove any empty inner lists
        # (after which the result is output implicitly)

Chờ đợi để chỉnh sửa, cảm ơn rất nhiều vì sự giúp đỡ!
AZTECCO

Tôi đã chỉnh sửa một trường hợp thử nghiệm với trường hợp thử nghiệm chồng chéo thêm "Billy Ray V. \ n5 Church Roadside East", anh ta không nên xuất hiện trong đầu ra, vui lòng sửa câu trả lời của bạn. Xin lỗi vì sự bất tiện này, tôi sẽ chú ý hơn vào những thách thức của mình trong tương lai.
AZTECCO

@AZTECCO nên được cố định bây giờ bằng cách sử dụng cáu bẩn gợi ý chơi golf đầu tiên 's.
Kevin Cruijssen

Cảm ơn vì đã dành thời gian cho tôi!
AZTECCO

2

JavaScript (Node.js) , 58 byte

(s,n,a)=>n.flatMap(n=>a.filter(x=>x.split`
`[1]==n+' '+s))

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

Đã bình luận

(s, n, a) =>          // s = street name, n[] = civic numbers, a[] = addresses
  n.flatMap(n =>      // for each civic number n in n[]:
    a.filter(x =>     //   for each address x in a[]:
      x.split`\n`[1]  //     keep it if the 2nd part is equal to
      == n + ' ' + s  //     n + space + expected street name
    )                 //   end of filter()
  )                   // end of flatMap() (empty entries are discarded)

Câu trả lời đầu tiên! Bạn đã cứu công việc của tôi! Cảm ơn đã cải thiện btw
AZTECCO


2

Perl 5 , 51 byte

sub{my($r,$a,@B)=@_;map{$n=$_;grep/
$n $r$/,@B}@$a}

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


Tôi đã chỉnh sửa một trường hợp thử nghiệm với trường hợp thử nghiệm chồng chéo thêm "Billy Ray V. \ n5 Church Roadside East", anh ta không nên xuất hiện trong đầu ra, vui lòng sửa câu trả lời của bạn. Xin lỗi vì sự bất tiện này, tôi sẽ chú ý hơn vào những thách thức của mình trong tương lai.
AZTECCO

đã sửa + 1byte, thêm $neo vào cuối regex
Nahuel Fouilleul

Cảm ơn thời gian của bạn
AZTECCO


1

Python 3, 79 85 byte (nhờ mực )

d=lambda s,n,a:n and[k for k in a if k.split('\n')[1]==n[0]+' '+s]+d(s,n[1:],a)

cũ:

d=lambda s,n,a:[k for k in a if k.split('\n')[1]==n[0]+' '+s]+d(s,n[1:],a)if n else[]

1
79 byte trừ khi điều này phá vỡ nó bằng cách nào đó
Phục hồi Monica

tuyệt, tôi không biết bạn có thể sử dụng 'và' để tạo đầu ra như thế
Legorhin

1

Python 3 , 65 byte

lambda s,n,m:[a for i in n for a in m if a.endswith('\n%s '%i+s)]

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

Cũng hoạt động trong Python 2.

Đối với mỗi số itrong danh sách số dân sự n, hàm sẽ lặp lại trên tất cả các địa chỉ atrong danh sách thư mvà giữ các địa chỉ có sự kết hợp giữa số dân sự ivà tên đường phố skhớp với a. Điều này dẫn đến một danh sách được sắp xếp và lọc.


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.