Два імені


14

У людини є два імені, якщо їх прізвище також є загальним прізвищем. Вам доручено визначити, які повні імена в списку - це два імені.

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

Будь-яке ім'я, що зустрічається у стовпці з іменем, потенційно може бути іменем. Якщо кількість зустрічей імені в стовпці з іменем більше, ніж кількість зустрічей у стовпці з прізвищем, це, безумовно, ім’я.

У наведеному вище списку Johnдва рази відображається в іменах та один раз в прізвищах, так що це, безумовно, ім’я. Ryanз'являється один раз у першому та один раз в останньому, тому це (ймовірно) ім'я.

Тому, Tom Johnбезумовно, є два прізвища і, Luke Ryanмабуть, є.

Враховуючи наведений вище список, ваш код повинен виводити наступне:

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

Вхідні дані

Як було сказано вище, ваш код буде містити список повних імен (від стандартного вводу, по одному на рядок), розділених пробілами. Імена можуть включати в себе дефіс або апостроф, але ви ніколи не буде дано ім'я або прізвище , яке включає прогалини (тобто немає Liam De Rosa, але Liam De-Rosaі Liam De'Rosaчесна гра. Іншими словами, імена будуть збігатися [-'A-Za-z]+.

Кожне повне ім’я буде унікальним (тобто John Smithне з’явиться двічі).

Вихідні дані

Роздрукуйте імена повних імен (один раз на рядок) з наступним has two first namesабо definitely has two first namesякщо вони відповідають критеріям, наведеним вище. Імена слід надрукувати лише один раз.

Імена, які не є двома іменами, друкувати не потрібно.

Ви повинні зберегти регістр та спеціальні символи імені.

Приклади

Вхідні дані

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

Вихідні дані

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

Вхідні дані

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

Вихідні дані

[no output]

Вхідні дані

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

Вихідні дані

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

Примітки та озвучення

Удачі!


Чи Johnsonвважається таким John, чи відрізняється?
NoOneIsHere

2
Johnsonбуло б інакше, ніж John. Імена повинні точно відповідати.
Мус

1
Як ми обираємо між definitely has two first namesта has two first names? Це завжди може бути одним із таких?
Стержень

Відображається лише в тому definitelyвипадку, якщо ім'я в стовпці з іменем зустрічається більше разів, ніж стовпчик з прізвищем. Цей випадок відміняється, тому відображається лише показ definitely has two first names. Ознайомтеся з прикладами.
Мус

2
Наскільки гнучким є формат введення? Чи може це бути масив рядків, по одній на людину? Або 2D масив рядків?
Луїс Мендо

Відповіді:


6

Java (OpenJDK 8) , 238 222 221 220 212 байт

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

Спробуйте в Інтернеті!


Приємно! Ви можете згортати свої ініціалізації до k=j=q=0. Крім того , це не заощадить вам будь-які байти , але ви можете замінити його x+=y?1:0з if(y)x++. Якщо ви хочете оптимізувати читабельність за такою довжиною, як я, це, мабуть, шлях.
Якоб







2

05AB1E, 144 байт (незавершене виробництво)

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

4
Нічого не працює, я просто працюю над зменшенням кількості байтів
Девід Сміт

2

05AB1E , 53 51 байт

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

Спробуйте в Інтернеті!

Пояснення

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

Або 51 49 байт, якщо прийняти стандартні правила вводу / виводу (введення та виведення як масиви)

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

Спробуйте в Інтернеті!


1

PHP, 172 байти

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

приймає імена як окремі аргументи командного рядка.

Запустіть -nrабо спробуйте в Інтернеті .


0

Пітон 3, 187 байт

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

JavaScript (ES6), 149 байт

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)

Введення / виведення включає в себе наступний новий рядок. Багато в чому надихнув відповідь @ RobertoGraham.



0

PowerShell, 176 байт

$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++}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.