두 개의 이름


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, 아니면 다른가요?
NoOneIsHereHere

2
Johnson와 다를 것 John입니다. 이름이 정확히 일치해야합니다.
Moose

1
우리는 어떻게 사이에서 선택 definitely has two first names하고 has two first names? 항상 그 중 하나 일 수 있습니까?
Rod

definitely이름 열에서 성 열보다 이름이 여러 번 나타나는 경우 에만 표시 하십시오. 이 경우는 무시되므로 표시 만합니다 definitely has two first names. 예제를 확인하십시오.
Moose

2
입력 형식은 얼마나 유연합니까? 한 사람당 하나의 문자열 배열 일 수 있습니까? 아니면 2D 문자열 배열입니까?
Luis Mendo

답변:


6

자바 (오픈 JDK 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++있습니다. 내가 한 것처럼 길이 후에 가독성을 최적화하고 싶다면 아마도 그 방법 일 것입니다.
Jakob







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

또는 표준 I / O 규칙 (입력 및 출력 배열)을 가정하여 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

R , 207 바이트

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}

온라인으로 사용해보십시오!


0

자바 스크립트 (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.