Hai tên


14

Một người có hai tên nếu họ của họ cũng là tên chung. Bạn có nhiệm vụ xác định tên đầy đủ trong danh sách là hai tên đầu tiên.

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

Bất kỳ tên nào xảy ra trong cột tên đầu tiên đều có khả năng là tên đầu tiên. Nếu số lần xuất hiện của tên trong cột tên đầu tiên lớn hơn số lần xuất hiện trong cột tên cuối cùng, thì đó chắc chắn là tên đầu tiên.

Trong danh sách trên, Johnxuất hiện hai lần trong tên đầu tiên và một lần trong tên cuối cùng để nó chắc chắn là tên đầu tiên. Ryanxuất hiện một lần trong lần đầu tiên và một lần cuối cùng vì vậy nó (có thể) là một tên đầu tiên.

Do đó, Tom Johnchắc chắn có hai tên đầu tiên và Luke Ryancó lẽ.

Đưa ra danh sách trên, mã của bạn sẽ xuất ra như sau:

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

Đầu vào

Như đã đề cập ở trên, mã của bạn sẽ đưa vào một danh sách các tên đầy đủ (từ đầu vào tiêu chuẩn, một tên trên mỗi dòng) được phân tách bằng dấu cách. Tên có thể bao gồm dấu gạch nối hoặc dấu nháy đơn, nhưng bạn sẽ không bao giờ được đặt tên hoặc họ bao gồm khoảng trắng (nghĩa là không Liam De Rosa, nhưng Liam De-Rosahoặc Liam De'Rosalà trò chơi công bằng. Nói cách khác, tên sẽ khớp [-'A-Za-z]+.

Mỗi tên đầy đủ sẽ là duy nhất (tức là John Smithsẽ không xuất hiện hai lần).

Đầu ra

In tên đầy đủ (một lần trên mỗi dòng) theo sau has two first nameshoặc definitely has two first namesnếu chúng đáp ứng các tiêu chí trên. Tên chỉ nên được in một lần.

Tên không phải là hai tên đầu tiên không cần phải in.

Bạn phải bảo vệ trường hợp và các ký tự đặc biệt của tên.

Ví dụ

Đầu vào

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

Đầu ra

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

Đầu vào

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

Đầu ra

[no output]

Đầu vào

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

Đầu ra

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

Ghi chú và chấm điểm

Chúc may mắn!


Johnsonđược tính là John, hoặc nó là khác nhau?
NoOneIsHãy

2
Johnsonsẽ khác hơn John. Tên phải khớp chính xác.
Moose

1
Làm thế nào chúng ta chọn giữa definitely has two first nameshas two first names? Nó có thể luôn luôn là một trong những?
Rod

Chỉ hiển thị definitelynếu tên xuất hiện nhiều lần trong cột tên đầu tiên hơn cột tên cuối cùng. Trường hợp này ghi đè, vì vậy chỉ hiển thị definitely has two first names. Kiểm tra các ví dụ.
Moose

2
Làm thế nào linh hoạt là định dạng đầu vào? Nó có thể là một chuỗi các chuỗi, mỗi người một chuỗi? Hoặc một mảng 2D của chuỗi?
Luis Mendo

Câu trả lời:


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

Hãy thử trực tuyến!


Đẹp! Bạn có thể thu gọn các khởi tạo của bạn để k=j=q=0. Ngoài ra, nó sẽ không tiết kiệm cho bạn bất kỳ byte nào nhưng bạn có thể thay thế cái sau x+=y?1:0bằng if(y)x++. Nếu bạn muốn tối ưu hóa khả năng đọc sau thời gian dài như tôi, đó có lẽ là cách để đi.
Jakob



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

Tiết kiệm 1 byte bằng cách không sử dụng NRgiá trị tích hợp.

Hãy thử trực tuyến!



3

Ruby , 105 129 byte

+24 byte vì tôi đã bỏ lỡ một phần của thông số kỹ thuật

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

Hãy thử trực tuyến!



2

05AB1E, 144 byte (Đang tiến hành)

|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
Không, nó hoạt động, tôi chỉ làm việc để giảm số lượng byte
David Smith

2

05AB1E , 53 51 byte

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

Hãy thử trực tuyến!

Giải trình

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

Hoặc 51 49 byte, giả sử Quy tắc I / O tiêu chuẩn (đầu vào và đầu ra dưới dạng mảng)

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

Hãy thử trực tuyến!


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

lấy tên làm đối số dòng lệnh riêng biệt.

Chạy với -nrhoặc thử trực tuyến .


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

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}

Hãy thử trực tuyến!


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 bao gồm dòng mới. Phần lớn lấy cảm hứng từ câu trả lời của @ RobertoGraham.



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++}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.