两个名字


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

输入值

如上所述,您的代码将采用全名列表(标准输入,每行一个),并用空格分隔。名称可以包含连字符或撇号,但是您将永远不会获得包含空格的名字或姓氏(即no Liam De Rosa,但Liam De-Rosa还是Liam De'Rosa公平的游戏。换句话说,名称将匹配)[-'A-Za-z]+

每个全名都是唯一的(即John Smith不会出现两次)。

输出量

打印全名(每行一次),后跟一个has two first namesdefinitely 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

笔记和计分

  • 这是代码高尔夫。最低分(字节)获胜。
  • 适用标准漏洞

祝好运!


是否JohnsonJohn呢,还是有什么不同?
NoOneIsHere

2
Johnson会与有所不同John。名称必须完全匹配。

1
我们如何在definitely has two first names和之间进行选择has two first names?可以永远是其中之一吗?
罗德

definitely当名称在名字列中出现的次数多于姓氏列时才显示。这种情况会被覆盖,因此仅显示definitely has two first names。查看示例。

2
输入格式的灵活性如何?可以是一个字符串数组,一个人一个吗?还是2D字符串数组?
路易斯·门多

Answers:


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:0if(y)x++。如果您喜欢像我一样优化长度后的可读性,那可能就是方法。
雅各布


6

Python 2中141个 137 132 130字节

-2个字节,感谢@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'

在线尝试!


我认为-c<1可以~c,因为c似乎永远不会变得积极。
乔纳森·弗雷希

3

AWK127123字节

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

通过不使用内置NR值来节省1个字节。

在线尝试!


3

Perl 5中120 118 + 2(-al)= 120个字节

$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

在线尝试!


3

红宝石105个 129字节

+24个字节,因为我错过了部分规格

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

在线尝试!


3

Python 2中140个 127 122 131字节

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'

在线尝试!


@ShreevatsaR,啊,我读错了。谢谢:)
TF场

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

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

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

Haskell中144个 140 139字节

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]

在线尝试!


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++}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.