Bản đồ những kẻ gian lận!


10

Sau khi tất cả các bài tập được gửi, một từ điển được tạo để ánh xạ số sinh viên vào hàm băm của tệp của họ.

Từ điển này, hoặc hashmap hoặc ánh xạ (bất cứ thứ gì ngôn ngữ của bạn gọi nó) sẽ trông như sau:

{100: "aabb", 104: "43a", 52: "00ab", 430: "aabb", 332: "43a"}

Chìa khóa là số sinh viên và giá trị là hàm băm.

Nhiệm vụ của chúng tôi là chọn ra những kẻ gian lận! Những kẻ gian lận là những người có băm giống hệt nhau.

Đưa ra đầu vào {100: "aabb", 104: "43a", 52: "00ab", 430: "aabb", 332: "43a"}, hàm sẽ trả về (hoặc in) văn bản sau:

100 has identical files to 430

104 has identical files to 332

Lưu ý cách các tệp trong đó băm là duy nhất không được đề cập.

Ngoài ra, thứ tự rất quan trọng ở đây :

{100: "aabb", 202: "aabb", 303: "ab", 404: "aabb"} nên trả lại (in) văn bản sau:

100 has identical files to 202,404

Không đúng khi in bất kỳ điều nào sau đây:

202 has identical files to 100,404

100 has identical files to 404, 202

Bạn nên in nó theo cách nó xuất hiện trong từ điển. Trong một số ngôn ngữ, việc đi qua một từ điển là ngẫu nhiên, vì vậy trong trường hợp đặc biệt này, bạn được phép thay đổi phương thức nhập liệu để bạn có thể đi qua nó theo cách có trật tự.

Thêm ví dụ:

{} # prints nothing

{100: "ab", 303: "cd"} # prints nothing again

{100: "ab", 303: "cd", 404: "ab"}

100 has identical files to 404

{303: "abc", 304: "dd", 305: "abc", 405: "dd", 606: "abc"}

303 has identical files to 305,606

304 has identical files to 405

Mã ngắn nhất sẽ thắng!


"Bạn nên in nó theo cách nó xuất hiện trong từ điển" - Tôi không hoàn toàn chắc chắn điều này có nghĩa là gì. Nếu không thì tôi thích thử thách.
Giuseppe

3
Tôi có thể đề nghị sử dụng hộp cát trước khi đăng lên trang web chính không? luôn luôn hữu ích để nhận bản sửa đổi cho một câu hỏi trước khi đăng thay vì nhận được một triệu bình luận để làm rõ trên chính :-)
Giuseppe

1
Trong trường hợp tìm thấy nhiều nhóm gian lận, liệu có một trật tự bắt buộc giữa các nhóm không? Ví dụ: trong trường hợp thử nghiệm cuối cùng, "304 có ..." có thể được in trước khi "303 có ..." không?
Kamil Drakari

2
Chúng tôi có được phép đầu ra 303 has identical files to [305, 606]thay vì 303 has identical files to 305,606?
Kevin Cruijssen 7/12/18

1
Trong các ngôn ngữ không tồn tại từ điển, bản đồ hoặc loại hashmap, danh sách các bộ dữ liệu (hoặc tương đương) có được phép không?

Câu trả lời:


2

JavaScript (Nút Babel) , 113 byte

Đưa đầu vào dưới dạng một mảng các [key, value]định dạng. Đi đôi tiện ích FlatMap!

o=>o.flatMap(([x,h],i)=>(a=o.flatMap(([y,H],j)=>j>i&H==h?(o[j]=[,j],[y]):[]))+a?x+' has identical files to '+a:a)

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


JavaScript (Nút Babel) , 114 byte

Đưa đầu vào như một đối tượng JS gốc.

o=>Object.keys(o).flatMap((x,i,a)=>(a=a.filter(y=>i--<0&o[y]==o[x]&&(o[y]=y)))+a?x+' has identical files to '+a:a)

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


1
Thực sự tốt đẹp! Khá là một tập tin lớn nhưng một lần nữa tôi không ngờ vấn đề này lại dễ như những cái khác. Công việc tuyệt vời Tôi sẽ xem xét thêm về điều nàyflatMap
K Split X

@KSplitX flatMapchưa được hỗ trợ rộng rãi. Tôi chắc chắn có những cách ngắn hơn, nhưng nó đã muộn và tôi không thể suy nghĩ nữa. : p
Arnauld


1

Võng mạc 0.8.2 , 71 byte

+m`((:.+)$(¶|.)+?)^(.+)\2$
,$4$1
:.*

G`,
%1`,
 has identical files to 

Hãy thử trực tuyến! Đưa đầu vào vào các dòng riêng biệt nhưng liên kết bao gồm bộ kiểm tra phân tách các ví dụ cho bạn. Giải trình:

+

Lặp lại trận đấu này cho đến khi không thể thay thế nữa.

m`((:.+)$(¶|.)+?)^(.+)\2$
,$4$1

Tìm kiếm các cặp băm phù hợp và nối khóa của trận đấu thứ hai với khớp nối thứ nhất với dấu phân cách dấu phẩy.

:.*

Xóa tất cả các băm.

G`,

Chỉ giữ các dòng bằng dấu phẩy.

%1`,
 has identical files to 

Thay thế dấu phẩy đầu tiên trên mỗi dòng bằng văn bản mong muốn (bao gồm cả dấu cách).


1

R , 145 132 129 126 124 byte

function(m,`!`=names)for(e in !(t=table(m))[t>1])cat(el(n<-!m[m==e]),'has identical files to',paste(n[-1],collapse=','),'
')

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

Nó lấy một vectơ được đặt tên làm đầu vào (tên là các phím)

  • -2 byte nhờ Giuseppe

Nếu ", "dấu phân cách (có khoảng trắng sau dấu phẩy) được cho phép trong trường hợp có nhiều bản sao, chúng ta có thể sử dụng mã này và lưu 10 byte:

R , 114 byte

function(m,`!`=names)for(e in !(t=table(m))[t>1])cat(el(n<-!m[m==e]),'has identical files to',toString(n[-1]),'
')

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


124 byte mặc dù ruột của tôi cho tôi biết một cách tiếp cận khác có thể mang lại thứ gì đó trong phạm vi 115 ...
Giuseppe

0

05AB1E , 34 byte

Σθ}.γθ}vyg1›iy€нć“ÿ€°Ê¼‡œ€„ “?',ý,

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

Σθ}                   # Sort the (implicit) input by the string
.γθ}                  # Then group it by the string
v                     # Loop `y` over each grouped inner list
 yg1i                #  If the group contains more than 1 key-value pairs:
      y€н             #   Only leave the keys
      ć               #   Pop and push the head and rest of the list separately
                      #   (with the head being at the top of the stack now)
       “ÿ€°Ê¼‡œ€„    #   Compressed string "ÿ has identical files to "
                      #   where the "ÿ" is automatically replaced with the top of the stack
                   ?  #   Print it (without trailing newline)
       ',ý           '#   Join the remaining numbers by a comma
          ,           #   And output it as well (with trailing newline)

Xem câu trả lời 05AB1E này của tôi (phần Làm thế nào để sử dụng từ điển? ) Để hiểu tại sao “ÿ€°Ê¼‡œ€„ “"ÿ has identical files to ".




0

C # (Trình biên dịch tương tác Visual C #) , 130 byte

a=>a.GroupBy(x=>x.Value,x=>x.Key).Where(x=>x.Count()>1).Select(x=>x.First()+" has identical files to "+String.Join(",",x.Skip(1)))

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

Điều kỳ lạ về câu hỏi này là các ví dụ được đưa ra ở định dạng JSON dưới dạng các cặp khóa / giá trị thường ngụ ý rằng chúng không có thứ tự ... Tuy nhiên, trong trường hợp này, thứ tự là quan trọng. Như vậy, tôi đang sử dụng một danh sách các bộ dữ liệu cho đầu vào và một danh sách các chuỗi làm đầu ra.

// a is a list of tuples
// (student #, hash)
a=>a
  // group by hash
  // grouped items are the student #'s
  .GroupBy(x=>x.Value,x=>x.Key)
  // remove single student groups
  .Where(x=>x.Count()>1)
  // format the output strings
  .Select(x=>x.First()+
    " has identical files to "+
    String.Join(",",x.Skip(1)))


0

Japt , 34 byte

üÌl>1 ®mgîÎ+` •s ÅÁÈól fÅC ‘ `+ZÅ

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

Ngay bây giờ nó hơi không nhất quán trong thứ tự các dòng, nhưng trong một dòng nó xuất ra chính xác. Nếu các dòng của đầu ra cần phải theo một thứ tự cụ thể, nó sẽ mất thêm một vài byte. Đầu vào chỉ là một mảng các [id, hash]cặp

Giải trình:

üÌ                                    :Group by hash
  l>1                                 :Remove the ones that are unique
      ®mgà                            :Get just the Ids
          ®                           :Generate a string for each hash:
           Î                          : The first Id with that hash
            +` •s ÅÁÈól fÅC ‘ `       : Plus " has identical files to " compressed
                               +ZÅ    : Plus the remaining Ids
                                      : Implicitly comma delimited

0

Perl 6 , 115 110 103 byte

-2 byte nhờ Jo King

{unique map {.[0]~" has identical files to "~join ',',.skip},grep *>1,.map:{.grep(*{*}eq$^p{*})>>.key}}

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

Đưa ra một danh sách các cặp kể từ khi băm không có thứ tự. Một danh sách các danh sách hai thành phần sẽ tiết kiệm một vài byte nhưng có vẻ không phổ biến. Trả về một danh sách các dòng.

95 88 byte nếu thứ tự các dòng trong kết quả không thành vấn đề:

*.classify(*{*}){*}>>.key.grep(*>1).map:{.[0]~" has identical files to "~join ',',.skip}

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


.[1..*]đến.skip
Jo King
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.