크리스마스는 빠르게 다가오고 있으며, 매년 가족 Secret Santa을 준비합니다. 나는 이것을 시작하려고 노력하고 싶지만, 부부가 서로를 위해 사지 않도록하는 것은 문제를 일으키는 원인이되며 몇 년 동안이 일을 했음에도 불구하고 여전히 Bob대부분의 선물을위한 선물을 사는데 꽤 쓰레기 문제가 있습니다 , Erin실망 할 것 같지만, 그는 FrankTalisker 를 좋아 한다는 것을 알고 있으므로 그와 잘 어울립니다. 이로 인해 기존의 간단한 솔루션 중 어느 것도 내 요구에 맞지 않습니다.
내 인생을 더 쉽게하기 위해, 당신의 임무는 배열 배열 (또는 선택한 언어에서 가장 가까운 대안)이 주어질 때 '선물'의 쌍을 반환 (또는 출력)하는 함수 (또는 귀하의 언어에서 가장 가까운 대안)를 작성하는 것입니다 다음 조건이 충족되도록 가능한 가장 짧은 코드로 '선물'을 바이트 단위로 표시하십시오.
- 각 이름은 입력 데이터에서 무작위로 선택된 다른 이름과 쌍을 이룹니다 (제공된 조건에 따라 항상 출력을 무작위화할 수있는 것은 아닙니다)
- 이름은 순서가 일관된 인접 행렬 을 나타내는 플래그 목록과 함께 제공 되므로 column
n은 row와 같은 사람을 나타냅니다n. - 조건이 충족되지 않으면 모국어로 잘못된 것을 반환하십시오.
- 여러 솔루션이있는 경우 프로그램은 여러 번 실행되는 경우 솔루션을 모두 생성 할 수 있어야합니다.
당신은 우리가하는 어떤 가족 구성원 말할 수 있어야합니다 당신이 중복 된 이름이 표시되지 않습니다 가정 할 수 있지만 차별화 공백이 포함 된 데이터로 제시 될 수있다 Bob Senior으로부터를 Bob Junior! 소스 데이터에서 100 개의 고유 한 이름과 같이 꽤 큰 제품군의 경우 한 시간 내에 제공된 모든 테스트 사례를 완료해야합니다 (아래의 예제 데이터 세트를 참조하십시오. 할당 된 시간 내에 이들 모두를 구문 분석 할 수 있어야합니다).
입력 예 :
santa([
["Alice", 0, 0, 1, 1, 1, 1, 1],
["Bob", 0, 0, 0, 0, 0, 1, 0],
["Carla", 1, 1, 0, 0, 0, 1, 1],
["Dan", 1, 1, 0, 0, 0, 1, 1],
["Erin", 1, 1, 0, 0, 0, 1, 1],
["Frank", 1, 1, 1, 1, 1, 0, 1],
["Gary", 1, 1, 1, 1, 1, 1, 0]
]);
// might return something like:
[
["Alice", "Erin"],
["Bob", "Frank"],
["Carla", "Alice"],
["Dan", "Gary"],
["Erin", "Bob"],
["Frank", "Dan"],
["Gary", "Carla"]
]
santa([
["Alice", 0, 1, 1, 1, 0, 1],
["Bob", 0, 0, 1, 1, 0, 1],
["Carla", 0, 1, 0, 1, 0, 1],
["Dan", 0, 1, 1, 0, 0, 0],
["Erin", 0, 0, 1, 0, 0, 1],
["Frank", 1, 1, 1, 1, 1, 0]
]);
false
santa([
["Alice", 0, 1, 1],
["Bob", 1, 0, 1],
["Carla", 1, 1, 0]
]);
[
["Alice", "Bob"],
["Bob", "Carla"],
["Carla", "Alice"]
]
언어에 따라 다른 형식으로 입력 할 수 있습니다. 예를 들어 다음과 같은 세부 정보 가 제공 STDIN 될 수 있습니다.
script <<< 'Alice,0,0,1,1,1,1,1
Bob,0,0,0,0,0,1,0
Carla,1,1,0,0,0,1,1
Dan,1,1,0,0,0,1,1
Erin,1,1,0,0,0,1,1
Frank,1,1,1,1,1,0,1
Gary,1,1,1,1,1,1,0'
언어에 가장 적합한 형식으로 출력 할 수도 있습니다. 허용되는 형식에는 위와 같은 Object배열 배열 또는 해시 // 연관 배열 또는 파싱을 STDOUT다음과 같이 인쇄하는 것만 포함됩니다 .
Alice:Dan
Bob:Erin
Carla:Bob
Dan:Alice
Erin:Frank
Frank:Carla
확실하지 않은 경우, 필요한 입력 형식과 예상 출력 형식의 예를 물어보고 답변하십시오.
더 큰 데이터 세트 : 100 , 100 , 200 , 200- 많은 솔루션 , 200- 하나의 솔루션 .
참조 구현은 내 컴퓨터의 <4s에서이 모든 것을 완료합니다.
이 스크립트로 생성 된 위 세트 .
Bob로의 매핑을 제공 Erin합니까? 난 그냥 하나 볼 Erin에 Bob.
1k 번째 subarray의 (n + 1) 번째 요소에서 k 번째 사람이 n 번째 사람에게 줄 수 있다는 것을 의미합니까?