Livraison du facteur


12

Je viens de décrocher un emploi de facteur et j'ai besoin de votre aide pour le garder. Je dois commander beaucoup de mails avant de sortir pour les livrer.

Les rues sont numérotées de façon strictement séquentielle, en commençant par 1 au début de la rue, et en continuant dans l'ordre pour ne sauter aucun numéro jusqu'à la fin, avec des nombres impairs sur le côté gauche et les mêmes sur le côté droit. De plus, des maisons ont été ajoutées plus tard afin que nous puissions également ajouter des lettres au numéro civique.

Le coffre contient tout le courrier de la ville donc je dois choisir uniquement les mails de ma rue.

J'ai besoin de votre aide pour commander les courriers plus rapidement. Ce que je vous demande, c'est d'écrire une fonction ou un programme complet en prenant:
- Un nom de rue.
- Une liste de numéros civiques commandés suivant mon chemin.
- Une liste d'adresses (représentant le coffre de courrier).

Et sortir une liste d'adresses ne contenant que celles de ma rue, ordonnées suivant la liste des numéros civiques.

Une adresse a la forme:

 Person Name/n   
 CivicN Street Name

CivicN est un nombre qui peut être suivi d'un '/' et d'une LETTRE MAJUSCULE (10 10 / B). Si vous préférez, les minuscules sont acceptables.

Si les noms de rues se chevauchent, ils sont considérés comme des rues différentes:

Church Road  != Saint Lorenz Church Road 

Nous omettons le reste de l'adresse pour plus de simplicité (en supposant que c'est la même chose pour chaque mail)

Les lettres doivent être livrées rapidement pour que la réponse la plus courte l'emporte.

EXEMPLE:

Disposition :

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

Contribution :

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

Production :

Ms. Polly
2 Tea Avenue  

Mrs. Pie O. Pinky 
6 Tea Avenue 

Ms. Kita I. Omeeha
6 Tea Avenue 

Ollie E.
11 Tea Avenue

Contribution :

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

Production :

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

Générateur de test: essayez-le en ligne! Changez string_wrapper_left / right et séparateur pour modifier la mise en forme.

Règles:
- Les failles standard sont interdites.
- Méthodes d'entrée / sortie standard.
- La réponse la plus courte en octets gagne.


5
J'avais peur que vous alliez nous demander de résoudre le problème des vendeurs ambulants.
Jitse

3
@AZTECCO Merci! Il est fortement recommandé d'avoir plusieurs cas de test intégrés dans votre message, pas seulement dans le code de démonstration.
Jitse

2
Ne voulez-vous pas dire " oui, ils peuvent se chevaucher, ce sont des rues différentes " ou " non, ils ne peuvent pas se chevaucher, vous n'obtiendrez pas de cas de test comme celui-ci "? Votre phrase se contredit en ce moment. ;) Mais cela ne me dérange pas si vous le spécifiez dans le défi. Si vous voulez dire que des cas de test comme celui-ci sont possibles, je vais modifier ma réponse 05AB1E pour en tenir compte. Et @Jitse devrait également changer sa réponse Python dans ce cas.
Kevin Cruijssen du

2
Oh .. Je voulais dire "oui, ils peuvent se chevaucher, ils sont considérés comme des rues différentes"
AZTECCO

2
Peut confirmer. J'ai aussi travaillé comme facteur le samedi il y a de nombreuses années. :) Bien que dans presque toutes les rues de mes quartiers de livraison, il était plus efficace de garer mon vélo au bord de la rue, de marcher dans un sens et de livrer tous les nombres impairs, puis de revenir de l'autre côté en faisant tous les nombres pairs, en terminant à nouveau à mon vélo. Là encore, avec les grandes rues, les périodes chargées comme Noël ou les charges de dossiers commerciaux, je devais généralement retourner à mon vélo entre plusieurs fois parce que je ne pouvais pas transporter tous les messages de la rue en une seule fois ..> .>
Kevin Cruijssen

Réponses:


4

Gelée , 13 octets

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

Un programme complet acceptant trois arguments - une liste de numéros civiques sur votre rue nommée, une liste des adresses dans le coffre de courrier et votre nom de rue - qui imprime les adresses auxquelles vous devez livrer dans l'ordre des numéros civiques donnés .

Essayez-le en ligne!

Comment?

,⁵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 octets

ε²ðýUʒ¶¡Xk]˜

-2 octets en portant la réponse Jelly de @JonathanAllan , alors assurez-vous de lui donner un vote positif!
-1 octet grâce à @Grimy .

Les entrées sont dans l'ordre: [liste des numéros civiques], nom de la rue, [liste des adresses].

Essayez-le en ligne.

Explication:

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

En attente de modification, merci beaucoup pour l'aide!
AZTECCO

J'ai édité un cas de test avec un cas de test de chevauchement en ajoutant "Billy Ray V. \ n5 Church Roadside East", il ne devrait pas apparaître dans la sortie, veuillez corriger votre réponse. Désolé pour le dérangement, je ferai plus attention à mes défis à l'avenir.
AZTECCO

@AZTECCO devrait être corrigé maintenant en utilisant la première suggestion de golf de Grimy .
Kevin Cruijssen du

Merci pour votre temps!
AZTECCO

2

JavaScript (Node.js) , 58 octets

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

Essayez-le en ligne!

Commenté

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

Première réponse! Vous avez sauvé mon travail! Merci pour l'amélioration btw
AZTECCO


2

Perl 5 , 51 octets

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

Essayez-le en ligne!


J'ai édité un cas de test avec un cas de test de chevauchement en ajoutant "Billy Ray V. \ n5 Church Roadside East", il ne devrait pas apparaître dans la sortie, veuillez corriger votre réponse. Désolé pour le dérangement, je ferai plus attention à mes défis à l'avenir.
AZTECCO

fixe + 1 octet, ajout d' $ancre à la fin de l'expression régulière
Nahuel Fouilleul

Merci pour votre temps
AZTECCO


1

Python 3, 79 85 octets (grâce à 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)

vieux:

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 octets à moins que cela ne le casse d'une manière ou d'une autre
calmar

cool, je ne savais pas que vous pouviez utiliser 'et' pour produire des sorties comme ça
Legorhin

1

Python 3 , 65 octets

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

Essayez-le en ligne!

Fonctionne également en Python 2.

Pour chaque numéro ide la liste des numéros civiques n, la fonction itérera sur toutes les adresses ade la liste de courrier met conservera celles où la combinaison du numéro civique iet du nom de la rue scorrespond a. Il en résulte une liste triée et filtrée.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.