Dua Nama Pertama

14

Seseorang memiliki dua nama depan jika nama belakang mereka juga merupakan nama depan yang umum. Anda ditugaskan menentukan nama lengkap mana dalam daftar yang merupakan dua nama depan.

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

Nama apa pun yang muncul di kolom nama depan berpotensi merupakan nama depan. Jika jumlah kemunculan nama di kolom nama depan lebih besar dari jumlah kemunculan di kolom nama belakang, sudah pasti nama depan.

Dalam daftar di atas, Johnmuncul dua kali dalam nama depan dan sekali dalam nama belakang sehingga jelas merupakan nama depan.Ryanmuncul sekali di depan dan di belakang jadi itu (mungkin) nama depan.

Karena itu, Tom Johnpasti punya dua nama depan danLuke Ryan mungkin memang demikian.

Dengan daftar di atas, kode Anda harus menampilkan yang berikut:

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

Memasukkan

Seperti disebutkan di atas, kode Anda akan mengambil daftar nama lengkap (dari input standar, satu per baris) yang dipisahkan oleh spasi. Nama dapat menyertakan tanda hubung atau apostrof, tetapi Anda tidak akan pernah diberi nama depan atau belakang yang mencakup spasi (yaitu tidak Liam De Rosa, tetapi Liam De-Rosaatau Liam De'Rosamerupakan permainan yang adil. Dengan kata lain, nama akan cocok dengan[-'A-Za-z]+ .

Setiap nama lengkap akan unik (yaitu John Smithtidak akan muncul dua kali).

Keluaran

Cetak nama lengkap nama (satu kali per baris) diikuti oleh salah satu has two first namesataudefinitely has two first names jika memenuhi kriteria di atas. Nama hanya boleh dicetak satu kali.

Nama yang bukan dua nama depan tidak perlu dicetak.

Anda harus menjaga kasing dan karakter khusus nama.

Contohnya

Memasukkan

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

Keluaran

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

Memasukkan

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

Keluaran

[no output]

Memasukkan

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

Keluaran

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

Catatan dan Penilaian

  • Ini golf kode. Skor terendah (byte) menang.
  • celah standar berlaku.

Semoga berhasil!

Moose
sumber
Apakah Johnsondihitung sebagai John, atau berbeda?
NoOneIsHere
2
Johnsonakan berbeda dari John. Nama harus sama persis.
Moose
1
Bagaimana kita memilih antara definitely has two first namesdan has two first names? Itu bisa selalu salah satunya?
Rod
Hanya tampilkan definitelyjika nama tersebut muncul lebih sering di kolom nama depan daripada kolom nama belakang. Kasing ini menimpa, jadi hanya ditampilkan definitely has two first names. Lihatlah contoh-contohnya.
Moose
2
Seberapa fleksibel format input? Bisakah itu array string, satu per orang? Atau deretan 2D string?
Luis Mendo

Jawaban:

6

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

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

Cobalah online!

Roberto Graham
sumber
Bagus! Anda dapat menciutkan inisialisasi Anda ke k=j=q=0. Juga, itu tidak akan menyelamatkan Anda bytes apapun tapi Anda bisa mengganti kedua x+=y?1:0dengan if(y)x++. Jika Anda ingin mengoptimalkan keterbacaan setelah lama seperti yang saya lakukan, itu mungkin cara yang harus dilakukan.
Jakob
6

Python 2 , 141 137 132 130 byte

-2 byte terima kasih kepada @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'

Cobalah online!

ovs
sumber
Saya pikir -c<1bisa ~c, karena ctampaknya tidak pernah menjadi positif.
Jonathan Frech
3

AWK , 127 123 byte

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

Menyimpan 1 byte dengan tidak menggunakan nilai bawaan NR.

Cobalah online!

Robert Benson
sumber
3

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

$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

Cobalah online!

Xcali
sumber
3

Ruby , 105 129 byte

+24 byte karena saya melewatkan bagian dari spec

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

Cobalah online!

Nilai Tinta
sumber
3

Python 2 , 140 127 122 131 byte

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'

Cobalah online!

TFeld
sumber
@ ShreevatsaR, Ah, saya salah membaca. Terima kasih :)
TFeld
2

05AB1E, 144 byte (Bekerja dalam proses)

|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
sumber
4
Tidak berfungsi, saya hanya berusaha mengurangi jumlah byte
David Smith
2

05AB1E , 53 51 byte

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

Cobalah online!

Penjelasan

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

Atau 51 49 byte, dengan asumsi Aturan I / O standar (input dan output sebagai array)

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

Cobalah online!

kalsowerus
sumber
1

PHP, 172 byte

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

mengambil nama sebagai argumen baris perintah terpisah.

Jalankan dengan -nratau coba online .

Titus
sumber
0

Python 3, 187 byte

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

R , 207 byte

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}

Cobalah online!

NofP
sumber
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)

I / O termasuk trailing newline. Sangat terinspirasi oleh jawaban @ RobertoGraham.

Neil
sumber
0

Haskell , 144 140 139 byte

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]

Cobalah online!

Laikoni
sumber
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
sumber