จัดส่งบุรุษไปรษณีย์


12

ฉันเพิ่งได้งานเป็นบุรุษไปรษณีย์และฉันต้องการความช่วยเหลือจากคุณเพื่อรักษามันไว้ ฉันต้องสั่งซื้ออีเมลจำนวนมากก่อนที่จะออกไปส่ง

ถนนจะถูกกำหนดหมายเลขตามลำดับอย่างเคร่งครัดโดยเริ่มต้นที่ 1 ที่จุดเริ่มต้นของถนนและดำเนินการต่อเพื่อไม่ข้ามหมายเลขจนถึงจุดสิ้นสุดด้วยเลขคี่ทางด้านซ้ายและปรากฏทางด้านขวา บ้านบวกถูกเพิ่มเข้ามาในภายหลังดังนั้นเราอาจมีตัวอักษรต่อท้ายหมายเลขเทศบาล

หีบมีจดหมายทั้งหมดของเมืองดังนั้นฉันต้องเลือกจดหมายจากถนนของฉันเท่านั้น

ฉันต้องการความช่วยเหลือจากคุณในการสั่งซื้ออีเมลได้เร็วขึ้น สิ่งที่ฉันขอให้คุณคือการเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ:
- ชื่อถนน
- รายการหมายเลขพลเมืองสั่งตามเส้นทางของฉัน
- รายการที่อยู่ (แสดงถึงหีบจดหมาย)

และส่งออกรายการที่อยู่ที่มีเพียงถนนของฉันเท่านั้นสั่งซื้อตามรายการหมายเลขพลเมือง

ที่อยู่มีแบบฟอร์ม:

 Person Name/n   
 CivicN Street Name

โดยที่CivicNเป็นตัวเลขที่สามารถตามด้วย '/' และตัวอักษรตัวพิมพ์ใหญ่ (10 10 / B) หากคุณต้องการตัวพิมพ์เล็กก็ยอมรับได้

หากชื่อถนนทับซ้อนกันพวกเขาจะถือว่าเป็นถนนที่แตกต่างกัน:

Church Road  != Saint Lorenz Church Road 

เราไม่ใช้ที่อยู่ที่เหลือเพื่อความเรียบง่าย (สมมติว่าเป็นที่อยู่อีเมลเดียวกันทุกฉบับ)

ต้องส่งจดหมายอย่างรวดเร็วเพื่อให้ได้คำตอบที่สั้นที่สุด

ตัวอย่าง:

เลย์เอาต์:

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

อินพุต:

"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"]

ผลผลิต:

Ms. Polly
2 Tea Avenue  

Mrs. Pie O. Pinky 
6 Tea Avenue 

Ms. Kita I. Omeeha
6 Tea Avenue 

Ollie E.
11 Tea Avenue

อินพุต:

"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"]

ผลผลิต:

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

เครื่องกำเนิดทดสอบ: ลองออนไลน์! เปลี่ยน string_wrapper_left / right และ separator เพื่อแก้ไขการจัดรูปแบบ

กฎ:
- ช่องโหว่มาตรฐานไม่ได้รับอนุญาต
- วิธีการอินพุต / เอาต์พุตมาตรฐาน
- คำตอบสั้น ๆ เป็นไบต์ชนะ


5
ฉันเกรงว่าคุณจะขอให้เราแก้ปัญหาพนักงานขายที่เดินทาง
Jitse

3
@AZTECCO ขอบคุณ! ขอแนะนำอย่างยิ่งให้มีกรณีทดสอบหลายแบบฝังอยู่ในโพสต์ของคุณไม่ใช่เฉพาะในรหัสตัวอย่าง
Jitse

2
คุณไม่ได้หมายความว่า " ใช่พวกเขาสามารถทับซ้อนพวกเขาเป็นถนนที่แตกต่างกัน " หรือ " ไม่พวกเขาไม่สามารถทับซ้อนกันคุณจะไม่ได้รับกรณีทดสอบเช่นนี้ "? ประโยคของคุณขัดแย้งกับตัวเองในขณะนี้ ;) แต่ฉันไม่รังเกียจหากคุณระบุในการท้าทาย หากคุณหมายความว่ากรณีทดสอบเช่นนี้เป็นไปได้ฉันจะแก้ไขคำตอบ 05AB1E ของฉันสำหรับบัญชี และ @Jitse จะต้องเปลี่ยนคำตอบ Python ของเขาเช่นกันในกรณีนี้
Kevin Cruijssen

2
โอ้ .. ฉันหมายถึง "ใช่พวกเขาสามารถทับซ้อนกันพวกเขาได้รับการพิจารณาเป็นถนนที่แตกต่างกัน"
AZTECCO

2
สามารถยืนยันได้ ฉันเคยทำงานเป็นบุรุษไปรษณีย์วันเสาร์มาหลายปีแล้ว :) แม้ว่าในเกือบทุกถนนในเขตการจัดส่งของฉันมันมีเวลามากขึ้นที่จะจอดจักรยานที่ขอบถนนเดินทางเดียวแล้วส่งเลขคี่ทั้งหมดแล้วเดินอีกด้านหนึ่งกลับทำตัวเลขทั้งหมดจบ ขึ้นที่จักรยานของฉันอีกครั้ง จากนั้นอีกครั้งด้วยถนนสายใหญ่ช่วงเวลาที่ยุ่งเช่นคริสต์มาสหรือโฟลเดอร์โฆษณามากมายฉันมักจะต้องเดินกลับไปที่จักรยานของฉันในช่วงเวลาสองสามครั้งเพราะฉันไม่สามารถพกโพสต์ทั้งหมดของถนนได้ในครั้งเดียว .>
Kevin Cruijssen

คำตอบ:


4

เยลลี่ 13 ไบต์

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

โปรแกรมเต็มรูปแบบที่ยอมรับอาร์กิวเมนต์สามตัว ได้แก่ รายการหมายเลขเทศบาลบนถนนที่คุณระบุรายชื่อที่อยู่ในหีบจดหมายและชื่อถนนของคุณซึ่งพิมพ์ที่อยู่ซึ่งคุณต้องแสดงตามลำดับหมายเลขเทศบาลที่กำหนด .

ลองออนไลน์!

อย่างไร?

,⁵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 ไบต์

ε²ðýUʒ¶¡Xk]˜

-2 ไบต์โดย porting @JonathanAllan 's คำตอบวุ้นเพื่อให้แน่ใจว่าจะ upvote เขา!
-1 ขอบคุณไบต์@Grimy

อินพุตอยู่ในลำดับ: [รายการหมายเลขซีวิค], ชื่อถนน, [รายการที่อยู่]

ลองออนไลน์

คำอธิบาย:

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

รอการแก้ไขขอบคุณมากสำหรับความช่วยเหลือ!
AZTECCO

ฉันได้แก้ไขกรณีทดสอบที่มีกรณีทดสอบซ้อนทับเพิ่ม "Billy Ray V. \ n5 Church Roadside East" เขาไม่ควรปรากฏในผลลัพธ์โปรดแก้ไขคำตอบของคุณ ขออภัยในความไม่สะดวกฉันจะให้ความสำคัญกับความท้าทายของฉันในอนาคต
AZTECCO

@AZTECCO ควรแก้ไขโดยใช้คำแนะนำการเล่นกอล์ฟครั้งแรกของGrimy
Kevin Cruijssen

ขอบคุณที่สละเวลา!
AZTECCO

2

JavaScript (Node.js) , 58 ไบต์

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

ลองออนไลน์!

แสดงความคิดเห็น

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

คำตอบแรก! คุณบันทึกงานของฉัน! ขอบคุณสำหรับการปรับปรุง btw
AZTECCO


2

Perl 5 , 51 ไบต์

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

ลองออนไลน์!


ฉันได้แก้ไขกรณีทดสอบที่มีกรณีทดสอบซ้อนทับเพิ่ม "Billy Ray V. \ n5 Church Roadside East" เขาไม่ควรปรากฏในผลลัพธ์โปรดแก้ไขคำตอบของคุณ ขออภัยในความไม่สะดวกฉันจะให้ความสำคัญกับความท้าทายของฉันในอนาคต
AZTECCO

คงที่ + 1byte เพิ่ม$สมอท้าย regex
Nahuel Fouilleul

ขอบคุณสำหรับเวลาของคุณ
AZTECCO


1

Python 3, 79 85ไบต์ (ขอบคุณปลาหมึก )

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)

อายุ:

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 ไบต์ยกเว้นกรณีนี้จะแบ่งเป็นอย่างใด
ปลาหมึก

เจ๋งฉันไม่ทราบว่าคุณสามารถใช้ 'และ' เพื่อสร้างผลลัพธ์เช่นนั้น
Legorhin

1

Python 3 , 65 ไบต์

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

ลองออนไลน์!

ใช้ได้กับ Python 2 ด้วย

สำหรับแต่ละหมายเลขiในรายการหมายเลขพลเมืองnฟังก์ชันจะวนซ้ำที่อยู่ทั้งหมดaในรายการจดหมายmและเก็บหมายเลขที่รวมกันของหมายเลขเทศบาลiและชื่อถนนsเข้าด้วยaกัน ผลลัพธ์นี้ในรายการเรียงลำดับและกรอง


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.