İki İlk İsim


14

Bir kişinin soyadı da ortak bir adsa iki adı vardır. Bir listedeki hangi tam adların iki ad olduğunu belirlemekle görevlisiniz.

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

Ad sütununda oluşan herhangi bir ad, potansiyel olarak bir addır. İlk isim sütunda adının gerçekleşme sayısı ise daha büyük soyad sütunu olaylar sayısından daha, öyle kesinlikle bir ilk isim.

Yukarıdaki listede, Johnilk adlarda iki kez ve soyadlarında bir kez görünür , bu yüzden kesinlikle bir ilk isimdir. Ryanilk kez bir kez ve sonda bir kez görüntülenir, bu nedenle (muhtemelen) bir addır.

Bu nedenle, Tom Johnkesinlikle iki ilk adı vardır ve Luke Ryanmuhtemelen vardır.

Yukarıdaki liste göz önüne alındığında, kodunuz aşağıdaki çıktıyı vermelidir:

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

Giriş

Yukarıda belirtildiği gibi, kodunuz boşluklarla ayrılmış tam adların (standart girişten satır başına bir tane) bir listesini alacaktır. İsimler tireler veya kesme işaretleri içerebilir, ancak asla boşluklar içeren bir ad veya soyadı verilmeyecektir (yani hayır Liam De Rosa, ancak Liam De-Rosaveya Liam De'Rosaadil bir oyun. Başka bir deyişle, adlar eşleşecektir [-'A-Za-z]+.

Her tam ad benzersizdir (yani John Smithiki kez görünmez).

Çıktı

Tam ad adlarını (her satıra bir kez) ve ardından ya has two first namesda definitely has two first namesyukarıdaki ölçütleri karşılıyorsa yazdırın . İsimler sadece bir kez basılmalıdır.

İki ad olmayan adların yazdırılması gerekmez.

Vakayı ve adın özel karakterlerini korumalısınız.

Örnekler

Giriş

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

Çıktı

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

Giriş

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

Çıktı

[no output]

Giriş

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

Çıktı

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

Notlar ve Puanlama

İyi şanslar!


Does Johnsonsayılır John, yoksa farklı mı?
NoOneIsHere

2
Johnsonfarklı olacaktır John. İsimler tam olarak eşleşmelidir.
Geyik

1
Nasıl arasında seçim definitely has two first namesve has two first names? Her zaman bunlardan biri olabilir mi?
Çubuk

Yalnızca definitelyad, ad sütununda soyadı sütununa göre daha fazla görüntüleniyorsa görüntülenir . Bu durum geçersiz kılındığından yalnızca görüntüleme definitely has two first names. Örneklere göz atın.
Moose

2
Giriş formatı ne kadar esnektir? Kişi başına bir dizi olabilir mi? Veya 2B dizeler dizisi?
Luis Mendo

Yanıtlar:


6

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

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

Çevrimiçi deneyin!


Güzel! İlklendirme işlemlerinizi şu konuma daraltabilirsiniz k=j=q=0. Ayrıca, bu size herhangi bayt tasarruf olmaz ama ikincisi yerini alabilir x+=y?1:0ile if(y)x++. Benim gibi uzun süre sonra okunabilirliği optimize etmek istiyorsanız, muhtemelen bu yol.
Jakob


6

Python 2 , 141 137 132 130 bayt

@JonathanFrech sayesinde -2 bayt

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'

Çevrimiçi deneyin!


Bence -c<1olabilir ~cgibi chiç olumlu olsun görünmüyor.
Jonathan Frech

3

AWK , 127 123 bayt

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

Yerleşik NRdeğeri kullanmadan 1 bayt kaydetme .

Çevrimiçi deneyin!


3

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

$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

Çevrimiçi deneyin!


3

Yakut , 105 129 bayt

+24 bayt çünkü spesifikasyonun bir kısmını kaçırdım

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

Çevrimiçi deneyin!


3

Python 2 , 140 127 122 131 bayt

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'

Çevrimiçi deneyin!


@ShreevatsaR, Ah, yanlış okudum. Teşekkürler :)
TFeld

2

05AB1E, 144 bayt (Yapım aşamasında)

|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
Hayır işe yarıyor, sadece bayt sayısını azaltmaya çalışıyorum
David Smith

2

05AB1E , 53 51 bayt

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

Çevrimiçi deneyin!

açıklama

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

Veya standart I / O Kuralları (diziler olarak giriş ve çıkış) varsayarsak 51 49 bayt

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

Çevrimiçi deneyin!


1

PHP, 172 bayt

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

adları ayrı komut satırı bağımsız değişkenleri olarak alır.

Birlikte çalışın-nr veya çevrimiçi deneyin .


0

Python 3, 187 bayt

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 bayt

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}

Çevrimiçi deneyin!


0

JavaScript (ES6), 149 bayt

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)

G / Ç sondaki yeni satırı içerir. @ RobertoGraham'ın cevabından büyük ölçüde ilham aldı.


0

Haskell , 144 140 139 bayt

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]

Çevrimiçi deneyin!


0

PowerShell, 176 bayt

$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++}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.