회전 안전 라틴 사각형


12

라틴 정사각형은 X 또는 Y 열에 반복되는 기호가없는 정사각형입니다 . 예를 들면 다음과 같습니다.

ABCD    
DABC
CDAB
BCDA

그런 광장 중 하나입니다. 모든 열과 행에 동일한 4 개의 순열이 어떻게 포함되어 있는지 확인하십시오.

그러나 라틴어 광장에는 문제가 있습니다. 두 번째 행 ( DABC) 1을 왼쪽 으로 회전하면 ABCD위의 순열과 동일한으로 끝납니다 . 1 개의 열 / 행을 회전시킬 수없고 다른 열 / 행을 얻는 것이 불가능 하다면 , 정사각형이 회전 안전하다고 간주합니다 .

예를 들면 다음과 같습니다.

ABCD
BDAC
CADB
DCBA

회전 안전입니다. 그리드에는 다음과 같은 속성이 있습니다.

  1. 점 [0, N]은 N 번째 기호를 사용합니다.
  2. 포인트 [0, N]과 [N, 0]은 항상 같은 기호 입니다. ([x, y]와 [y, x]도 항상 같은 글자라고 말하고 싶지만 증명할 수는 없습니다)

당신의 임무는 N을 통과했을 때 회전 안전 라틴 사각형 1 개를 인쇄하는 것입니다. 문자, 숫자, 목록 또는 2D 배열을 출력하는지 는 중요 하지 않습니다. 숫자를 사용하는 경우 맨 위 열과 행은 0,1,2,3,...(순서대로) 되어야합니다 . 글자를 사용한다면A,B,C,D,....

예를 들어, 입력이 4 인 경우 다음 중 하나를 인쇄해야합니다.

0,1,2,3            0,1,2,3
1,3,0,2     or     1,0,3,2
2,0,3,1            2,3,1,0
3,2,1,0            3,2,0,1

크기가 4보다 작은 회전 안전 라틴 사각형은 없습니다. N이 4보다 작 으면 프로그램이 수행하는 작업은 중요하지 않습니다. 2,5,5906,(too long to calculate)

이것은 이므로 원하는 언어로 가능한 한 빨리 답변하십시오!


시간 제한이 있습니까? (관련 : 몬테카를로 방법이 N불규칙한 난수 품질로 인해 높은 값으로 종료되는 것을 기술적으로 보장하지 않는 경우 허용 됩니까?)
Doorknob

시간 제한은 없지만 솔루션을 종료해야합니다.
Nathan Merrill

1
1- 인덱스 언어의 경우 첫 번째 행은 1,2,3,...?
마일


@ 마일즈 네, 괜찮습니다
Nathan Merrill

답변:



2

SQL Server 2012-918 바이트

내 상자에서는 16 초가 걸리지 만 @k = 5 동안 실행됩니다.

이것은 코드 작성 코드입니다 (Skynet을 조심하십시오. 경쟁자가 있습니다)

가장 긴 스크립트 가격이 있습니까?

DECLARE @k int = 4;

DECLARE @t VARCHAR(max)='WITH C as(SELECT
top '+left(@k,1)+'row_number()over(order by 1/0)n
FROM sys.messages),D(nÆ)as(SELECT
concat(~),~
FROM Ø
WHERE |)SELECT top 1~ FROM Å
WHERE 1=1',@
varchar(999)=''SELECT @+=','+CHAR(x+65)FROM(values(0),(1),(2),(3),(4),(5))x(x)WHERE x<@k
SELECT
@t=REPLACE(REPLACE(REPLACE(REPLACE(@t,'Æ',@),'Ø',STUFF(REPLACE(@,',',',C '),1,1,'')),'Å',STUFF(REPLACE(@,',',',D
'),1,1,'')),'~',STUFF(REPLACE(@,',','.n,'),1,3,'')+'.n'),@='';WITH C as(SELECT top(@k)x
FROM(values(0),(1),(2),(3),(4),(5))x(x))SELECT @+=' AND
'+char(65+C.x)+'.n<>'+char(65+D.x)+'.n'FROM c,c d WHERE C.x<D.x
SELECT @t=REPLACE(@t,'|',STUFF(@,1,4,''));WITH A
as(SELECT top(@k)x
FROM(values(65),(66),(67),(68),(69),(70))x(x))SELECT @t+='AND
'+char(A.x)+'.'+char(C.x)+'<>'+CHAR(B.x)+'.'+char(C.x)+' AND
'+char(A.x)+'.n+'+char(A.x)+'.n'+'
not like''%''+'+char(B.x)+'.n+''%'''FROM A,A B,A C
WHERE A.x<>B.x and C.x<>B.x
EXEC(@t)

온라인으로 시도하십시오!

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