邮递员送达


12

我刚刚获得了邮递员的工作,我需要您的帮助才能保留它。我必须先订购大量邮件,然后再出去递送。

街道严格按顺序编号,从街道开始处的1开始,然后继续以不跳过任何数字的方式一直到结尾,左侧为奇数,右侧为偶数。加上房屋是在以后添加的,因此我们可能还会在公民编号后附加字母。

箱子中包含城市的所有邮件,因此我只能选择街道上的邮件。

我需要您的帮助才能更快地订购邮件。我要你写的是编写函数或完整程序:
-街道名称。
-按照我的路线订购的公民编号列表。
-地址列表(代表邮件箱)。

并输出仅包含我街道地址的地址列表,并按照公民编号列表进行排序。

地址的格式为:

 Person Name/n   
 CivicN Street Name

其中CivicN是“/”可以遵循由一个数字和一个大写字母(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和分隔符以修改格式。

规则:
-禁止出现标准漏洞。
-标准输入/输出方法。
-以字节为单位的最短答案获胜。


5
恐怕您会要求我们解决旅行推销员的问题。
吉特(Jitse)

3
@AZTECCO谢谢!强烈建议在您的帖子中嵌入多个测试用例,而不仅仅是演示代码。
吉特(Jitse)

2
您不是要说“ 是的,它们可以重叠,它们在不同的街道上 ”还是“ 不,它们不能重叠,您不会得到像这样的测试用例 ”?您的句子现在自相矛盾。;)但是我不介意您在挑战中指定它。如果您确实认为可以进行类似的测试,我将编辑我的05AB1E答案以解决该问题。在这种情况下,@ Jitse也必须更改他的Python答案。
凯文·克鲁伊森

2
哦..我的意思是“是的,它们可以重叠,它们被认为是不同的街道”
AZTECCO

2
可以确认。多年前,我曾经担任过星期六邮递员。:)尽管在我派送区的几乎所有街道上,将自行车停在路边,单向走并提供所有奇数,然后再走回另一侧进行所有偶数,可以节省更多时间再次抬起我的自行车。再说一次,在大街道上,圣诞节等繁忙时期,或大量的商业资料夹中,我通常不得不在几次之间回到我的自行车上,因为我不能一口气把整条街道的所有职位都拿走。 。>
Kevin Cruijssen

Answers:


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

05AB1E15 13 12 字节

ε²ðýUʒ¶¡Xk]˜

通过移植@JonathanAllan的Jelly答案 -2个字节,因此请确保对他进行投票
-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的第一个高尔夫建议来解决。
凯文·克鲁伊森

谢谢你的时间!
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)

第一个答案!你救了我的工作!顺便感谢您的改进
-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

固定+1个字节,$在正则表达式末尾添加锚点
Nahuel Fouilleul,

感谢您的时间
AZTECCO


1

Python 3,79 85个字节(感谢squid

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,该函数会遍历邮件列表中的所有地址am并保留公民号码i和街道名称组合s匹配的地址a。这将导致排序和筛选列表。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.