郵便配達


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とセパレーターを変更して、フォーマットを変更します。

ルール:
-標準的な抜け穴は禁止されています。
-標準入出力メソッド。
-バイト単位の最短回答が優先されます。


5
巡回セールスマンの問題を解決するように私たちに依頼するのではないかと心配しました。
Jitse

3
@AZTECCOありがとう!デモコードだけでなく、投稿にいくつかのテストケースを埋め込むことを強くお勧めします。
Jitse

2
重複する可能性があり、異なる通りです」または「重複することはできませんこのようなテストケースは取得できません」という意味ではありませんか。あなたの文章は今それ自体と矛盾しています。;)しかし、チャレンジで指定しても構いません。そのようなテストケースが可能であることを意味する場合は、05AB1Eの回答を編集して説明します。その場合、@ JitseはPythonの答えも変更する必要があります。
ケビンクルーイッセン

2
ああ..「はい、重複することができます、異なる通りと見なされます」
-AZTECCO

2
確認できます。私は何年も前に土曜日の郵便配達員として働いていました。:)私の配達地区のほぼすべての道で、通りの端に自転車を駐車し、一方通行ですべての奇数を配達してから、反対側に戻ってすべての偶数番号を実行して終了する方が時間効率が良かったのですが私の自転車で再び。再び、大通り、クリスマスのような忙しい時期、または商業フォルダーがたくさんあるため、私は通常、道路全体のポストを一度に運ぶことができなかったため、数回の間に自転車に戻る必要がありました。 。>
ケビンクルーイッセン

回答:


4

ゼリー、13 バイト

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

3つの引数を受け取る完全なプログラム-指定された通りの市民番号のリスト、郵便箱の住所のリスト、および通りの名前-指定された市民番号の順に配達する必要がある住所を出力します。

オンラインでお試しください!

どうやって?

,⁵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 answerを移植して-2バイトなので、必ず彼に投票してください!@Grimyの
おかげで-1バイト。

入力は、[市民番号のリスト]、通りの名前、[住所のリスト]の順になります。

オンラインでお試しください。

説明:

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

編集を待っています、助けてくれてありがとう!
アステカ

オーバーラップテストケースに「Billy Ray V. \ n5 Church Roadside East」を追加したテストケースを編集しましたが、出力に表示されないはずです。答えを修正してください。ご不便をおかけして申し訳ありませんが、今後の課題にもっと注意を払います。
アステカ

@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」を追加したテストケースを編集しましたが、出力に表示されないはずです。答えを修正してください。ご不便をおかけして申し訳ありませんが、今後の課題にもっと注意を払います。
アステカ

+1バイトを修正し$、正規表現の最後にアンカーを追加
ナウエルフイユル

お時間をいただきありがとうございます
アステカ


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バイト
モニカを

クール、 'and'を使用してそのような出力を生成できるとは知りませんでした
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、機能はメールのリストのすべてのアドレスを反復し、市民番号と通り名の組み合わせが一致するものを保持します。これにより、ソートおよびフィルタリングされたリストが作成されます。amisa


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.