2つの名


14

姓も一般名である場合、人には2つの名があります。リスト内のどの氏名が2つの名であるかを判断する必要があります。

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

名の列に現れる名前はすべて名である可能性があります。名の列の名前の出現回数が姓の列の出現回数より大きい場合、それは間違いなく名です。

上記のリストでJohnは、名に2回、姓に1回表示されるため、間違いなく名になります。Ryan最初に1回、最後に1回出現するため、(おそらく)名です。

したがって、Tom John間違いなく2つの名があり、Luke Ryanおそらくそうです。

上記のリストを考えると、コードは以下を出力するはずです。

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

入力

前述のように、コードはスペースで区切られたフルネームのリスト(標準入力から、1行に1つ)を受け取ります。名前にはハイフンまたはアポストロフィを含めることができますが、スペースを含む姓または名は付けられません(つまり、いいえLiam De RosaLiam De-RosaまたはLiam De'Rosa公平なゲームです。言い換えると、名前は一致し[-'A-Za-z]+ます)。

各フルネームは一意です(つまり、John Smith2回表示されません)。

出力

フルネームの名前(1行に1回)を印刷し、その後に、has two first namesまたはdefinitely has two first names上記の条件を満たす場合に続けて印刷します。名前は一度だけ印刷する必要があります。

2つの名ではない名前は印刷する必要はありません。

名前の大文字小文字と特殊文字を保持する必要があります。

入力

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?常にそれらの1つになりますか?
ロッド

definitely名が姓の列よりも名の列に多く出現する場合にのみ表示されます。このケースはオーバーライドするため、displayのみdefinitely has two first namesです。例をご覧ください。
ムース

2
入力形式の柔軟性は?それは文字列の配列で、1人に1つですか?または、文字列の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
いいえ、うまくいきません。バイト数を減らすことに取り組んでいます
David Smith

2

05AB1E53 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バイト、標準I / Oルール(配列としての入力および出力)を想定

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

Python 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)

I / Oには末尾の改行が含まれます。主に@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++}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.