커크 먼의 여학생 문제 확장


22

Kirkman의 여학생 문제 는 익숙하지 않은 사람들을 위해 다음과 같이 진행됩니다.

한 학교의 15 명의 젊은 여성이 7 일 연속으로 3 개의 나란히 걸어 다닌다. 두 사람이 나란히 두 번 걷지 않도록 매일 그들을 배치해야한다.

이것을 중첩 된 3 x 5 목록 (또는 행렬) 처럼 볼 수 있습니다 .

[[a,b,c]
 [d,e,f]
 [g,h,i]
 [j,k,l]
 [m,n,o]]

본질적으로, 원래 문제의 목표는 두 글자 가 한 번 이상 한 행을 공유하지 않도록 위의 행렬을 배열하는 7 가지 방법을 찾는 것 입니다. MathWorld (위에서 링크 됨)에서이 솔루션을 찾습니다.

[[a,b,c]   [[a,d,h]   [[a,e,m]   [[a,f,i]   [[a,g,l]   [[a,j,n]   [[a,k,o]
 [d,e,f]    [b,e,k]    [b,h,n]    [b,l,o]    [b,d,j]    [b,i,m]    [b,f,g]
 [g,h,i]    [c,i,o]    [c,g,k]    [c,h,j]    [c,f,m]    [c,e,l]    [c,d,n]
 [j,k,l]    [f,l,n]    [d,i,l]    [d,k,m]    [e,h,o]    [d,o,g]    [e,i,j]
 [m,n,o]]   [g,j,m]]   [f,j,o]]   [e,g,n]]   [i,k,n]]   [f,h,k]]   [h,l,m]]

이제 다른 수의 여학생이 있다면 어떨까요? 여덟째 날 있을까요? † 이것이 우리의 도전입니다.

† 이 경우에는 †† , 그러나 반드시 다른 배열 차원에 대한
†† 우리는 쉽게 때문에,이 보여줄 수있는 a다른 모든 문자와 행에 나타납니다.


도전 과제 :

여중생 (예들의 어레이 (열보다 행) 치수의 입력을 감안 3 x 5, 4 x 4또는 [7,6], [10,10]위의 요건에 맞게 '일'의 최대 가능 세트 등)를 출력한다.

입력 :
여학생 배열의 치수 (원하는 합리적인 입력 양식).

출력 :
위 요구 사항에 적합한 가장 큰 일련의 어레이 (모든 합리적인 형식).

테스트 사례 :

Input:  [1,1]
Output: [[a]]

Input:  [1,2]
Output: [[a,b]]

Input:* [2,1]
Output: [[a]
         [b]]

Input:  [2,2]
Output: [[a,b]  [[a,c]  [[a,d]
         [c,d]]  [b,d]]  [b,c]]

Input:  [3,3]
Output: [[a,b,c]  [[a,d,g]  [[a,e,i]  [[a,f,h]
         [d,e,f]   [b,e,h]   [b,f,g]   [b,d,i]
         [g,h,i]]  [c,f,i]]  [c,d,h]]  [c,e,g]]

Input:  [5,3]
Output: [[a,b,c]   [[a,d,h]   [[a,e,m]   [[a,f,i]   [[a,g,l]   [[a,j,n]   [[a,k,o]
         [d,e,f]    [b,e,k]    [b,h,n]    [b,l,o]    [b,d,j]    [b,i,m]    [b,f,g]
         [g,h,i]    [c,i,o]    [c,g,k]    [c,h,j]    [c,f,m]    [c,e,l]    [c,d,n]
         [j,k,l]    [f,l,n]    [d,i,l]    [d,k,m]    [e,h,o]    [d,o,g]    [e,i,j]
         [m,n,o]]   [g,j,m]]   [f,j,o]]   [e,g,n]]   [i,k,n]]   [f,h,k]]   [h,l,m]]

There may be more than one correct answer. 

* 테스트 사례 3 을 수정 한 @Frozenfrank 에게 감사합니다 . 열이 하나만 있으면 행 순서가 중요하지 않으므로 하루 만있을 수 있습니다.

이것은 경쟁입니다-최단 답변이 이깁니다.


이것은 어떤 방식으로 유한 투영 평면과 관련이 있습니까? 아니면 다른 문제를 생각하고 있습니까?
— Neil

@ 닐 나는 단서가 없다. 대답 할 자격이 없습니다. ;-)
— Scott Milner

시간 제한이 있습니까?
— Artyer

아니 @Artyer,하지만 난 ... 코드를 테스트 할 수 있도록하고 싶습니다
— 스콧 밀너에게

2
@ 닐은 재미있는 위키 백과를 읽었습니다.
— 매직 문어 Urn

답변:


12

매스 매 티카, 935 바이트

Inp={5,4};L=Length;T=Table;ST[t_,k_,n_]:=Binomial[n-1,t-1]/Binomial[k-1,t-1];H=ToExpression@Alphabet[];Lo=Inp[[1]]*Inp[[2]];H=H[[;;Lo]];Final={};ST[2,3,12]=4;ST[2,4,20]=5;If[Inp[[2]]==1,Column[Partition[H,{1}]],CA=Lo*Floor@ST[2,Inp[[2]],Lo];While[L@Flatten@Final!=CA,Final={};uu=0;S=Normal[Association[T[ToRules[H[[Z]]==Prime[Z]],{Z,L@H}]]];PA=Union[Sort/@Permutations[H,{Inp[[2]]}]];PT=Partition[H,Inp[[2]]];While[L@PA!=0,AppendTo[Final,PT];Test=Flatten@T[Times@@@Subsets[PT[[X]],{2}]/.S,{X, L@PT}];POK=T[Times@@@Subsets[PA[[Y]],{2}]/.S,{Y,L@PA}];Fin=Select[POK,L@Intersection[Test,#]==0&];Facfin=T[FactorInteger[Fin[[V]]],{V,L@Fin}];end=T[Union@Flatten@T[First/@#[[W]],{W,L@#}]&[Facfin[[F]]],{F,L@Facfin}]/.Map[Reverse,S];PA=end;PT=DeleteDuplicates[RandomSample@end,Intersection@##=!={}&];If[L@Flatten@PT<L@H,While[uu<1000,PT=DeleteDuplicates[RandomSample@end,Intersection@##=!={}&];If[L@Flatten@PT==L@H,Break[],uu++]]]]];Grid@Final]


이것은 최대 26 여성입니다

편집
나는 약간의 변경을하고 그것이 작동 생각! 이 코드는 현재 [5,4] ( "사회적 골퍼 문제")를 해결하도록 설정되었으며 몇 초 안에 결과를 얻습니다. 그러나 [5,3] 문제는 더 어려워 10-20 분 정도 기다려야 하지만 모든 요일에 맞는 조합을 얻을 수 있습니다. 더 쉬운 경우에는 매우 빠릅니다.

어쨌든 당신이 그것을 시도하고 결과를 볼 수 있습니다
여기에 온라인을 시도
복사 CTRL-V를 사용하여 붙여 넣기
코드 실행 Enter 키를 눌러 이동 +를
사용하면 코드의 시작에 입력을 변경할 수 있습니다 -> INP은 = {5,4}는
을 실행 다른 순열을 얻기 위해 여러 번 코딩


이것은 인상적이며 문제 해결을 위해 많은 진전을 이루지 만 여전히 불완전합니다. 더 작은 테스트 사례에서는 작동하지만 [5,3]이 전체 문제의 기반이 되는 테스트 사례를 포함하여 더 큰 테스트 사례를 해결할 수 없습니다 . 또한 골프를 더 많이 할 수 있습니다. 필요한 것보다 더 큰 변수 이름이 여러 개 있으며 일부 함수는 짧게 @하거나 부호를 사용 하여 표기 할 수 있습니다 . 그래도 계속 일하기를 바랍니다!
— Scott Milner

확인해 주셔서 감사합니다.
— 먼저이

1
당신은 :) 그 변수 기능을 당신의 변수 이름을 한 글자를 만들고, 당신은 변수에 한 번 이상 사용하는 일부 기능을 할당하고 대체하여 바이트을 많이 절약 할 수 있어야한다
— numbermaniac

2
@numbermaniac 변수 이름을 바꾸면 변수를로 바꿀 수있었습니다 914. 850
— Scott Milner

3
테스트 사례를 수정했습니다. 우선 나는 이것이 작동하기를 원합니다. 내가 아직 골프를 치지 않은 이유는 모든 의견에 감사드립니다. 이제 준비가되었다고 생각합니다.
— J42161217
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.