Deux prénoms

14

Une personne a deux prénoms si son nom est également un prénom commun. Vous devez déterminer quels noms complets dans une liste sont deux prénoms.

John Smith
John Doe
Luke Ryan
Ryan Johnson
Jenna Jackson
Tom John

Tout nom figurant dans la colonne du prénom est potentiellement un prénom. Si le nombre d'occurrences du nom dans la colonne du prénom est supérieur au nombre d'occurrences dans la colonne du dernier nom, c'est définitivement un prénom.

Dans la liste ci-dessus, Johnapparaît deux fois dans les prénoms et une fois dans les noms de famille, c'est donc définitivement un prénom. Ryanapparaît une fois dans le premier et une fois dans le dernier donc c'est (probablement) un prénom.

Par conséquent, a Tom Johncertainement deux prénoms et Luke Ryanprobablement.

Compte tenu de la liste ci-dessus, votre code devrait générer ce qui suit:

Luke Ryan has two first names
Tom John definitely has two first names

Contribution

Comme mentionné ci-dessus, votre code prendra une liste de noms complets (à partir de l'entrée standard, un par ligne) séparés par des espaces. Les noms peuvent inclure des traits d'union ou des apostrophes, mais vous ne recevrez jamais un prénom ou un nom de famille qui comprend des espaces (c'est-à-dire non Liam De Rosa, mais Liam De-Rosaou qui Liam De'Rosasont équitables. En d'autres termes, les noms correspondront [-'A-Za-z]+.

Chaque nom complet sera unique (c'est John Smith-à- dire qu'il n'apparaîtra pas deux fois).

Production

Imprimez les noms complets des noms (une fois par ligne) suivis par has two first namesou definitely has two first namess'ils répondent aux critères ci-dessus. Les noms ne doivent être imprimés qu'une seule fois.

Les noms qui ne sont pas deux prénoms n'ont pas besoin d'être imprimés.

Vous devez conserver la casse et les caractères spéciaux du nom.

Exemples

Contribution

Madison Harris
Riley Hudson
Addison Hills
Riley Phillips
Scott Hill
Levi Murphy
Hudson Wright
Nathan Baker
Harper Brooks
Chloe Morris
Aubrey Miller
Hudson Lopez
Samuel Owen
Wyatt Victoria
Brooklyn Cox
Nathan Murphy
Ryan Scott

Production

Riley Hudson definitely has two first names
Ryan Scott has two first names

Contribution

Owen Parker
Daniel Hall
Cameron Hall
Sofia Watson
Mia Murphy
Ryan Jones
Emily Ramirez

Production

[no output]

Contribution

Olivia Robinson
Jacob van-Dyke
Jacob Ella
Brayden De'Rosa
Levi Brook
Brook Bella
Ella Hill
Ella Anderson
Brook-Anne van-Dyke

Production

Jacob Ella definitely has two first names
Levi Brook has two first names

Notes et notation

Bonne chance!

élan
la source
Est-ce Johnsonque ça compte Johnou est-ce différent?
NoOneIsHere
2
Johnsonserait différent de John. Les noms doivent correspondre exactement.
Moose
1
Comment choisissons-nous entre definitely has two first nameset has two first names? Cela peut toujours être l'un d'entre eux?
Rod
Ne s'affiche que definitelysi le nom apparaît plus de fois dans la colonne du prénom que dans la colonne du nom. Ce cas est prioritaire, donc uniquement affiché definitely has two first names. Découvrez les exemples.
Moose
2
Quelle est la flexibilité du format d'entrée? Peut-il s'agir d'un ensemble de chaînes, une par personne? Ou un tableau 2D de chaînes?
Luis Mendo

Réponses:

6

Java (OpenJDK 8) , 238 222 221 220 212 octets

l->{for(String n:l){int k=0,j=0,q=0;for(String b=n.split(" ")[1];k<l.length;j+=l[k++].matches(b+" .*")?1:0)q+=l[k].endsWith(" "+b)?1:0;if(j>0)System.out.println(n+(j>q?" definitely":"")+" has two first names");}}

Essayez-le en ligne!

Roberto Graham
la source
Agréable! Vous pouvez réduire vos initialisations en k=j=q=0. En outre, cela ne vous fera économiser aucun octet, mais vous pouvez remplacer ce dernier x+=y?1:0par if(y)x++. Si vous aimez optimiser la lisibilité après la longueur comme moi, c'est probablement la voie à suivre.
Jakob
6

Python 2 , 141 137 132 132 130 octets

-2 octets grâce à @JonathanFrech

n=map(str.split,input())
for f,l in n:
 c=cmp(*[x.count(l)for x in zip(*n)])
 if~c:print f,l,'definitely '*c+'has two first names'

Essayez-le en ligne!

ovs
la source
Je pense que cela -c<1peut l'être ~c, car cil ne semble jamais devenir positif.
Jonathan Frech
3

AWK , 127 123 octets

{a[$1]++
b[L[++X]=$2]++
N[X]=$0}END{for(;++i<=X;)if(A=a[L[i]])print N[i],(b[L[i]]<A?"definitely ":"")"has two first names"}

Enregistrement de 1 octet en n'utilisant pas la NRvaleur intégrée .

Essayez-le en ligne!

Robert Benson
la source
3

Perl 5 , 120 118 + 2 ( -al) = 120 octets

$f{$F[0]}++;$l{$k{$_}=$F[1]}++}{map{print$_.' definitely'x($f{$t}>$l{$t})." has two first names"if$f{$t=$k{$_}}}keys%k

Essayez-le en ligne!

Xcali
la source
3

Ruby , 105 129 bytes

+24 octets parce que j'ai raté une partie de la spécification

->a{a.map{|e|l=e[r=/\S+$/];i=a.count{|n|n[/\S+/]==l};e+"#{' definitely'if i>a.count{|n|n[r]==l}} has two first names"if i>0}-[p]}

Essayez-le en ligne!

Encre de valeur
la source
3

Python 2 , 140 127 122 122 131 octets

N=map(str.split,input())
F,L=zip(*N)
for f,l in N:
 if l in F:print f,l,'definitely '*(F.count(l)>L.count(l))+'has two first names'

Essayez-le en ligne!

TFeld
la source
@ShreevatsaR, Ah, j'ai mal lu. Merci :)
TFeld
2

05AB1E, 144 octets (travaux en cours)

|vy#Dθˆн})©gF®®NèQO¯®NèQO-D®¯NèQO¯¯NèQO-D.À>0›s>0›&i0›s0›&i®Nè" "¯Nè" defínítely has two fírst names"J,ë®Nè" "¯Nè" has two fírst names"J,}ë\\}}´
David Smith
la source
4
Non ça marche, je travaille juste sur la réduction du nombre d'octets
David Smith
2

05AB1E , 53 51 octets

|UXv“€°‚•€ÛŒî“D„´Î ì)yð«ìõ¸ìXð¡øεy#θQO}`.S>sèˆ}¯õK»

Essayez-le en ligne!

Explication

|                                                       # Take inputs as array
 UX                                                     # Store in X and push X to stack
   v                                          }         # For each name, do
    “€°‚•€ÛŒî“D                                         #   Push "has two first names" twice
               „´Î ì                                    #   Prepend "definitely " to one of those
                    )yð«ì                               #   Wrap both strings in an array and prepend (name + " ") to each
                         õ¸ì                            #   Prepend " " to array
                            Xð¡øεy#θQO}`                #   Get occurences in input first and last names
                                        .S>             #   0 for not first name, 1 for first name and 2 for definitely first name
                                           sèˆ          #   Get string at that index and push to global array
                                               ¯õK»     # Output global array, 1 string per line

Ou 51 49 octets, en supposant des règles d'E / S standard (entrée et sortie sous forme de tableaux)

UXv“€°‚•€ÛŒî“D„´Î ì)yð«ìõ¸ìXð¡øεy#θQO}`.S>sèˆ}¯õK

Essayez-le en ligne!

kalsowerus
la source
1

PHP, 172 octets

for(;$s=$argv[++$i];$f[$a]++,$l[$n[]=$b]++)[$a,$b]=explode(" ",$s);for(;$b=$n[+$k++];)$f[$b]<$l[$b]||print$argv[$k].($f[$b]>$l[$b]?" definetly":"")." has two first names
";

prend les noms comme arguments de ligne de commande séparés.

Exécutez -nrou essayez-le en ligne .

Titus
la source
0

Python 3, 187 octets

n={}
c=[]
while 1:
 try:a,b=input().split();n[a]=n.get(a,0)+1;n[b]=n.get(b,0)-1;c+=[[a,b]]
 except:[print(a,b,'definitely has two first names'[(n[b]>0)*11:])for a,b in c if n[b]>=0];break
mypetlion
la source
0

R , 207 octets

n=readLines("stdin")
s='definitively has two first names\n'
x=matrix(t(unlist(sapply(n,strsplit,' '))),2)
j=1
for(i in n){a=apply(x[2,j]==x,1,sum)
b=a[2]>=a[1]
if(a[1])cat(paste(i,substr(s,14*b,34)))
j=j+1}

Essayez-le en ligne!

NofP
la source
0

JavaScript (ES6), 149 octets

s=>s.replace(/(.*) (.*)\n/g,(_,t,u)=>g(`
${u} `)>1?t+` ${u}${v>g(` ${u}
`)?` definitely`:``} has two first names
`:``,g=u=>v=`
${s}`.split(u).length)

Les E / S incluent la nouvelle ligne de fin. Largement inspiré par la réponse de @ RobertoGraham.

Neil
la source
0

Haskell , 144 140 139 octets

g.map words.lines
g s=id=<<[n++' ':f++[c|c<-" definitely",t 0>t 1]++" has two first names\n"|[n,f]<-s,let t i=filter(==f)$map(!!i)s,[]<t 0]

Essayez-le en ligne!

Laikoni
la source
0

PowerShell, 176 octets

$n=$args
$s=" has two first names"
$f=$n|%{$_.Split()[0]}
$l=$n|%{$_.Split()[1]}
$i=0
$l|%{switch(($f-match$_).count){{$_-eq1}{$n[$i]+$s}{$_-gt1}{$n[$i]+" definitely"+$s}}$i++}
brendan62269
la source