Dos nombres


14

Una persona tiene dos nombres si su apellido también es un nombre común. Tiene la tarea de determinar qué nombres completos en una lista son dos nombres.

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

Cualquier nombre que aparezca en la columna de nombre es potencialmente un nombre de pila. Si el número de ocurrencias del nombre en la columna de nombre es mayor que el número de ocurrencias en la columna de apellido, definitivamente es un nombre.

En la lista anterior, Johnaparece dos veces en los nombres y una vez en los apellidos, por lo que definitivamente es un nombre. Ryanaparece una vez en el primero y una vez en el último, por lo que es (probablemente) un primer nombre.

Por lo tanto, Tom Johndefinitivamente tiene dos nombres y Luke Ryanprobablemente los tiene.

Dada la lista anterior, su código debería generar lo siguiente:

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

Entrada

Como se mencionó anteriormente, su código incluirá una lista de nombres completos (de entrada estándar, uno por línea) separados por espacios. Los nombres pueden incluir guiones o apóstrofes, pero nunca se le dará un nombre o apellido que incluya espacios (es decir Liam De Rosa, no , pero Liam De-Rosao Liam De'Rosason juegos justos. En otras palabras, los nombres coincidirán [-'A-Za-z]+.

Cada nombre completo será único (es decir John Smith, no aparecerá dos veces).

Salida

Imprima los nombres completos (una vez por línea) seguidos de uno has two first nameso definitely has two first namessi cumplen con los criterios anteriores. Los nombres solo deben imprimirse una vez.

Los nombres que no son dos nombres no necesitan imprimirse.

Debe conservar el caso y los caracteres especiales del nombre.

Ejemplos

Entrada

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

Salida

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

Entrada

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

Salida

[no output]

Entrada

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

Salida

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

Notas y puntaje

  • Este es el código de golf. La puntuación más baja (bytes) gana.
  • se aplican las lagunas estándar .

¡Buena suerte!


¿ JohnsonCuenta como Johno es diferente?
NoOneIsHere

2
Johnsonsería diferente a John. Los nombres deben coincidir exactamente.
Alce

1
¿Cómo elegimos entre definitely has two first namesy has two first names? ¿Puede ser siempre uno de esos?
Rod

Solo se muestra definitelysi el nombre aparece más veces en la columna de nombre que en la columna de apellido. Este caso se anula, por lo que solo se muestra definitely has two first names. Mira los ejemplos.
Alce

2
¿Qué tan flexible es el formato de entrada? ¿Puede ser una serie de cadenas, una por persona? ¿O una matriz 2D de cadenas?
Luis Mendo

Respuestas:


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

Pruébalo en línea!


¡Agradable! Puede contraer sus inicializaciones a k=j=q=0. Además, no le guardará ningún byte, pero podría reemplazar el último x+=y?1:0con if(y)x++. Si desea optimizar la legibilidad después de la longitud como lo hago yo, ese es probablemente el camino a seguir.
Jakob


6

Python 2 , 141 137 132 130 bytes

-2 bytes gracias a @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'

Pruébalo en línea!


Creo que -c<1puede serlo ~c, ya cque no parece ser nunca positivo.
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"}

Guardar 1 byte al no usar el NRvalor incorporado .

Pruébalo en línea!


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

Pruébalo en línea!


3

Ruby , 105 129 bytes

+24 bytes porque me perdí parte de la especificación

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

Pruébalo en línea!


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'

Pruébalo en línea!


@ShreevatsaR, Ah, leí mal. Gracias :)
TFeld

2

05AB1E, 144 bytes (Trabajo en progreso)

|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,}ë\\}}´

44
No, funciona, solo estoy trabajando para reducir el número de bytes
David Smith

2

05AB1E , 53 51 bytes

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

Pruébalo en línea!

Explicación

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

O 51 49 bytes, suponiendo reglas de E / S estándar (entrada y salida como matrices)

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

Pruébalo en línea!


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

toma nombres como argumentos de línea de comando separados.

Ejecutar -nro probarlo en línea .


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

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}

Pruébalo en línea!


0

JavaScript (ES6), 149 bytes

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)

La E / S incluye la nueva línea final. En gran parte inspirado por la respuesta de @ RobertoGraham.


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]

Pruébalo en línea!


0

PowerShell, 176 bytes

$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++}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.