사기꾼지도!


10

모든 과제가 제출되면 학생 번호를 파일의 해시에 매핑하는 사전이 만들어집니다.

이 사전, 해시 맵 또는 매핑 (언어가 호출하는 방식)은 다음과 같습니다.

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

키는 학생 번호이고 값은 해시입니다.

우리의 임무는 사기꾼을 골라내는 것입니다! 사기꾼은 동일한 해시를 가진 것입니다.

입력이 주어지면 {100: "aabb", 104: "43a", 52: "00ab", 430: "aabb", 332: "43a"}함수는 다음 텍스트를 반환하거나 인쇄해야합니다.

100 has identical files to 430

104 has identical files to 332

해시가 고유 한 파일에 대해서는 언급하지 않았습니다.

또한 순서는 여기에서 중요합니다 .

{100: "aabb", 202: "aabb", 303: "ab", 404: "aabb"} 다음 텍스트를 반환 (인쇄)해야합니다.

100 has identical files to 202,404

다음 중 하나를 인쇄하는 것은 올바르지 않습니다 .

202 has identical files to 100,404

100 has identical files to 404, 202

사전에 표시되는 방식으로 인쇄해야합니다. 일부 언어에서는 사전을 거치는 것이 임의적이기 때문에이 특별한 경우에는 입력 방법을 순서대로 바꿀 수 있도록 입력 방법을 변경할 수 있습니다.

더 많은 예 :

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

최단 코드 승리!


"사전에 표시되는 방식으로 인쇄해야합니다."-이것이 의미하는 바를 완전히 모르겠습니다. 그렇지 않으면 나는 도전을 좋아한다.
주세페

3
기본 사이트에 게시하기 전에 샌드 박스 를 사용 하는 것이 좋습니다 . 항상 :-) 주에 명확한 설명 만 의견을 게시 대신에 도착하기 전에 질문에 대한 개정을 도움을 얻을
주세페

1
여러 그룹의 사기꾼이있는 경우 그룹간에 필요한 순서가 있습니까? 예를 들어, 마지막 테스트 사례에서 "303 has ..."전에 "304 has ..."를 인쇄 할 수 있습니까?
Kamil Drakari

2
303 has identical files to [305, 606]대신에 출력 할 수 303 has identical files to 305,606있습니까?
Kevin Cruijssen

1
사전, 맵 또는 해시 맵 유형이없는 언어에서 튜플 (또는 이에 상응하는) 목록이 허용됩니까?

답변:


2

자바 스크립트 (Babel Node) , 113 바이트

[key, value]형식 의 배열 배열로 입력을 받습니다. 가젯 더블 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)

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


자바 스크립트 (Babel Node) 114 바이트

입력을 기본 JS 오브젝트로 사용합니다.

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)

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


1
정말 좋습니다! 꽤 큰 파일이지만 다시이 문제가 다른 문제만큼 쉬운 것으로 기대하지 않았습니다. 훌륭한 일! 더 자세히 살펴 보겠습니다flatMap
K Split X

@KSplitX flatMap는 아직 널리 지원되지 않습니다. 더 짧은 방법이 있다고 확신하지만 늦어지고 더 이상 생각할 수 없습니다. : p
Arnauld


1

레티 나 0.8.2 , 71 바이트

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

G`,
%1`,
 has identical files to 

온라인으로 사용해보십시오! 별도의 라인에서 입력을 받지만 링크에는 예제를 분리하는 테스트 스위트가 포함되어 있습니다. 설명:

+

더 이상 교체 할 수 없을 때까지이 일치를 반복하십시오.

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

일치하는 해시 쌍을 찾아 두 번째 일치 키를 첫 번째 일치 키에 쉼표 구분 기호로 추가하십시오.

:.*

모든 해시를 삭제하십시오.

G`,

쉼표로 줄만 유지하십시오.

%1`,
 has identical files to 

각 줄의 첫 번째 쉼표를 원하는 텍스트 (후행 공백 포함)로 바꾸십시오.


1

R , 145 132 129 126 124 바이트

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=','),'
')

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

명명 된 벡터를 입력으로 사용합니다 (이름은 키입니다)

  • 주세페 덕분에 -2 바이트

", "여러 번 중복 된 경우 구분 기호 (쉼표 뒤에 공백이있는 경우)가 허용되면이 코드를 사용하고 10 바이트를 절약 할 수 있습니다.

R , 114 바이트

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

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


내 직감이 다른 접근 방식이 115 범위에서 무언가를 산출 할 수 있다고 124 바이트 지만 ...
Giuseppe

0

05AB1E , 34 바이트

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

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

Σθ}                   # 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)

내이 05AB1E 대답을 참조하십시오 (섹션 어떻게 사전을 사용하는 방법을? ) 이유를 이해하는 “ÿ€°Ê¼‡œ€„ “것입니다 "ÿ has identical files to ".




0

C # (Visual C # 대화식 컴파일러) , 130 바이트

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

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

이 질문에 대한 이상한 점은 예제가 JSON 형식으로 키 / 값 쌍으로 제공되어 일반적으로 순서가 정렬되지 않았 음을 의미합니다 ... 그러나이 경우 순서가 중요합니다. 따라서 입력을 위해 튜플 목록과 출력으로 문자열 목록을 사용하고 있습니다.

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

apt , 34 바이트

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

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

지금은 라인 순서가 약간 일치하지 않지만 라인 내에서는 올바르게 출력됩니다. 출력 행이 특정 순서로되어 있어야하는 경우 몇 바이트가 더 필요합니다. 입력은 단지 [id, hash]쌍 의 배열입니다

설명:

üÌ                                    :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

펄 (6) , 115 (110) 103 바이트

Jo King 덕분에 -2 바이트

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

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

해시가 정렬되지 않았으므로 쌍 목록을 가져옵니다. 두 요소로 구성된 목록은 몇 바이트를 절약하지만 단조로운 것처럼 보입니다. 줄 목록을 반환합니다.

결과의 행 순서가 중요하지 않은 경우 95 88 바이트 :

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

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


.[1..*]~.skip
King King
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.