Zwei Vornamen

14

Eine Person hat zwei Vornamen, wenn ihr Nachname auch ein gebräuchlicher Vorname ist. Sie müssen feststellen, welche vollständigen Namen in einer Liste zwei Vornamen sind.

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

Jeder Name, der in der Vorname-Spalte vorkommt, ist möglicherweise ein Vorname. Wenn die Anzahl der Vorkommen des Namens in der Vorname-Spalte größer ist als die Anzahl der Vorkommen in der Nachname-Spalte, handelt es sich definitiv um einen Vornamen.

In der obigen Liste Johnerscheint zweimal in den Vornamen und einmal in den Nachnamen, so dass es definitiv ein Vorname ist. Ryantaucht einmal im ersten und einmal im letzten auf, es handelt sich also (wahrscheinlich) um einen Vornamen.

Daher hat Tom Johndefinitiv zwei Vornamen und Luke Ryanwahrscheinlich auch.

In Anbetracht der obigen Liste sollte Ihr Code Folgendes ausgeben:

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

Eingang

Wie oben erwähnt, enthält Ihr Code eine Liste mit vollständigen Namen (von der Standardeingabe einen pro Zeile), die durch Leerzeichen getrennt sind. Namen können Bindestriche oder Apostrophe enthalten, aber Sie erhalten niemals einen Vor- oder Nachnamen, der Leerzeichen enthält (dh nein Liam De Rosa, aber Liam De-Rosaoder Liam De'Rosasind faires Spiel. Mit anderen Worten, Namen stimmen überein [-'A-Za-z]+.

Jeder vollständige Name ist eindeutig (dh er John Smitherscheint nicht zweimal).

Ausgabe

Geben Sie die vollständigen Namen (einmal pro Zeile) aus, gefolgt von entweder has two first namesoder definitely has two first nameswenn sie die oben genannten Kriterien erfüllen. Namen sollten nur einmal gedruckt werden.

Namen, die nicht zwei Vornamen sind, müssen nicht gedruckt werden.

Sie müssen die Groß- und Kleinschreibung und die Sonderzeichen des Namens beibehalten.

Beispiele

Eingang

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

Ausgabe

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

Eingang

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

Ausgabe

[no output]

Eingang

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

Ausgabe

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

Notizen und Scoring

  • Das ist Code Golf. Die niedrigste Punktzahl (Bytes) gewinnt.
  • Es gelten Standardlücken .

Viel Glück!

Elch
quelle
Zählt Johnsonals John, oder ist es anders?
NoOneIsHere
2
Johnsonwäre anders als John. Namen müssen genau übereinstimmen.
Elch
1
Wie wählen wir zwischen definitely has two first namesund has two first names? Es kann immer einer von denen sein?
Rod
definitelyWird nur angezeigt, wenn der Name öfter in der Spalte Vorname als in der Spalte Nachname vorkommt. Dieser Fall überschreibt, also nur Anzeige definitely has two first names. Schauen Sie sich die Beispiele an.
Elch
2
Wie flexibel ist das Eingabeformat? Kann es eine Reihe von Zeichenfolgen sein, eine pro Person? Oder ein 2D-Array von Zeichenfolgen?
Luis Mendo

Antworten:

6

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

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");}}

Probieren Sie es online!

Roberto Graham
quelle
Nett! Sie können Ihre Initialisierungen zu reduzieren k=j=q=0. Außerdem werden Ihnen keine Bytes gespart, aber Sie können letztere x+=y?1:0durch ersetzen if(y)x++. Wenn Sie wie ich die Lesbarkeit nach Länge optimieren möchten, ist dies wahrscheinlich der richtige Weg.
Jakob
6

Python 2 , 141 137 132 130 Bytes

-2 Bytes dank @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'

Probieren Sie es online!

ovs
quelle
Ich denke -c<1kann sein ~c, wie ces scheint, nie positiv zu werden.
Jonathan Frech
3

AWK , 127 123 Bytes

{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"}

Speichern von 1 Byte, indem der integrierte NRWert nicht verwendet wird.

Probieren Sie es online!

Robert Benson
quelle
3

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

$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

Probieren Sie es online!

Xcali
quelle
3

Ruby , 105 129 Bytes

+24 Bytes, weil ich einen Teil der Spezifikation verpasst habe

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

Probieren Sie es online!

Wert Tinte
quelle
3

Python 2 , 140 127 122 131 Bytes

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'

Probieren Sie es online!

TFeld
quelle
@ ShreevatsaR, Ah, ich habe falsch gelesen. Danke :)
TFeld
2

05AB1E, 144 Byte (In Arbeit)

|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
quelle
4
Nein, es funktioniert, ich arbeite nur daran, die Anzahl der Bytes zu reduzieren
David Smith
2

05AB1E , 53 51 Bytes

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

Probieren Sie es online!

Erläuterung

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

Oder 51 bis 49 Byte, unter der Annahme von Standard-E / A-Regeln (Ein- und Ausgabe als Arrays)

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

Probieren Sie es online!

kalsowerus
quelle
1

PHP, 172 Bytes

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

Nimmt Namen als separate Befehlszeilenargumente.

Lauf mit -nroder versuche es online .

Titus
quelle
0

Python 3, 187 Bytes

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
quelle
0

R , 207 Bytes

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}

Probieren Sie es online!

NofP
quelle
0

JavaScript (ES6), 149 Byte

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)

E / A enthält nachgestellte Zeilenumbrüche. Weitgehend inspiriert von der Antwort von @ RobertoGraham.

Neil
quelle
0

Haskell , 144 140 139 Bytes

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]

Probieren Sie es online!

Laikoni
quelle
0

PowerShell, 176 Byte

$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
quelle