이제 영국 정보국을 무 찌르기 위해 위험한 퀘스트를 시작할 때입니다. 이 과제의 목표는 노노 그램을 해결하는 가장 짧은 코드를 작성하는 것입니다.
노노 그램이란 무엇입니까?
규칙은 간단합니다. 정사각형 격자가 있으며 검은 색으로 채워지거나 비워 두어야합니다. 그리드의 각 행 옆에는 해당 행의 검은 색 사각형의 길이가 나열됩니다. 각 열 위에는 해당 열에있는 검은 사각형의 길이가 나열됩니다. 당신의 목표는 모든 검은 사각형을 찾는 것입니다. 이 퍼즐 유형에서 숫자는 이산 단층 촬영의 한 형태로, 주어진 행이나 열에 채워진 사각형의 끊어지지 않은 선의 수를 측정합니다. 예를 들어, "4 8 3"의 단서는 연속 된 그룹 사이에 하나 이상의 공백 사각형이있는 순서대로 4, 8 및 3 개의 채워진 사각형 세트가 있음을 의미합니다. [ 1 ] [ 2 ]
위의 Nonogram에 대한 해결책은 다음과 같습니다.
구현 세부 사항
그러나 비노 그램을 나타내도록 선택할 수 있지만 원하는 언어로 입력하십시오. 출력도 마찬가지입니다. 이 과제의 목표는 문자 그대로 작업을 완료하는 것입니다. 프로그램이 제공하는 출력으로 노노 그램을 해결할 수 있다면 유효합니다. 한 가지주의 사항은 온라인 솔버를 사용할 수 없다는 것입니다. :)
이 문제는 완전히 효율적인 해결책이 없다는 점에서 알고리즘 적으로 매우 까다 롭습니다 (np 완료). 따라서 더 큰 해결책을 해결할 수 없다는 처벌을받지 못합니다. 큰 경우를 처리 할 수 있습니다 (보너스 참조). 벤치 마크로 내 솔루션은 5-10 초 내에 최대 25x25까지 작동합니다. 여러 언어 중에서 융통성을 허용하려면 25x25 노노 그램에 5 분 미만의 솔루션이 충분합니다.
퍼즐은 항상 정사각형 NxN 노노 그램으로 가정 할 수 있습니다.
당신이 사용할 수있는 이 솔루션을 테스트하기 위해 온라인 노노 그램 퍼즐 메이커.
채점
물론 원하는 언어를 자유롭게 사용할 수 있으며 코드 골프이기 때문에 항목이 순서대로 정렬됩니다. accuracy -> length of code -> speed.
그러나 코드 골프 언어로 낙심하지 마십시오. 골프를 시도하는 모든 언어의 대답 흥미로운 방식으로 공감 될 것입니다!
보너스
실제로 영국의 지능에 의해 발표 암호화 크리스마스 카드에서 Nonograms에 대해 배웠 여기 . 첫 번째 부분은 기본적으로 거대한 25x25 Nonogram이었습니다. 당신의 솔루션이 이것을 해결할 수 있다면, 당신은 kudos를 얻을 것입니다 :)
데이터 입력 측면에서 귀하의 삶을 편하게하기 위해 무료로 사용할 수있는이 특정 퍼즐의 데이터를 어떻게 표현했는지 알려 드리겠습니다. 처음 25 줄은 행 단서, '-'구분자 라인, 25 개의 줄 단서, '#'구분자 라인, 사각형 단서가 채워진 그리드 표현입니다.
7 3 1 1 7
1 1 2 2 1 1
1 3 1 3 1 1 3 1
1 3 1 1 6 1 3 1
1 3 1 5 2 1 3 1
1 1 2 1 1
7 1 1 1 1 1 7
3 3
1 2 3 1 1 3 1 1 2
1 1 3 2 1 1
4 1 4 2 1 2
1 1 1 1 1 4 1 3
2 1 1 1 2 5
3 2 2 6 3 1
1 9 1 1 2 1
2 1 2 2 3 1
3 1 1 1 1 5 1
1 2 2 5
7 1 2 1 1 1 3
1 1 2 1 2 2 1
1 3 1 4 5 1
1 3 1 3 10 2
1 3 1 1 6 6
1 1 2 1 1 2
7 2 1 2 5
-
7 2 1 1 7
1 1 2 2 1 1
1 3 1 3 1 3 1 3 1
1 3 1 1 5 1 3 1
1 3 1 1 4 1 3 1
1 1 1 2 1 1
7 1 1 1 1 1 7
1 1 3
2 1 2 1 8 2 1
2 2 1 2 1 1 1 2
1 7 3 2 1
1 2 3 1 1 1 1 1
4 1 1 2 6
3 3 1 1 1 3 1
1 2 5 2 2
2 2 1 1 1 1 1 2 1
1 3 3 2 1 8 1
6 2 1
7 1 4 1 1 3
1 1 1 1 4
1 3 1 3 7 1
1 3 1 1 1 2 1 1 4
1 3 1 4 3 3
1 1 2 2 2 6 1
7 1 3 2 1 1
#
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
그리고 여기 귀하의 편의를 위해 약간 다른 버전이 있습니다. 각 요소가 목록의 목록 인 쉼표로 구분 된 튜플 (행, 열)
([[7, 3, 1, 1, 7],
[1, 1, 2, 2, 1, 1],
[1, 3, 1, 3, 1, 1, 3, 1],
[1, 3, 1, 1, 6, 1, 3, 1],
[1, 3, 1, 5, 2, 1, 3, 1],
[1, 1, 2, 1, 1],
[7, 1, 1, 1, 1, 1, 7],
[3, 3],
[1, 2, 3, 1, 1, 3, 1, 1, 2],
[1, 1, 3, 2, 1, 1],
[4, 1, 4, 2, 1, 2],
[1, 1, 1, 1, 1, 4, 1, 3],
[2, 1, 1, 1, 2, 5],
[3, 2, 2, 6, 3, 1],
[1, 9, 1, 1, 2, 1],
[2, 1, 2, 2, 3, 1],
[3, 1, 1, 1, 1, 5, 1],
[1, 2, 2, 5],
[7, 1, 2, 1, 1, 1, 3],
[1, 1, 2, 1, 2, 2, 1],
[1, 3, 1, 4, 5, 1],
[1, 3, 1, 3, 10, 2],
[1, 3, 1, 1, 6, 6],
[1, 1, 2, 1, 1, 2],
[7, 2, 1, 2, 5]],
[[7, 2, 1, 1, 7],
[1, 1, 2, 2, 1, 1],
[1, 3, 1, 3, 1, 3, 1, 3, 1],
[1, 3, 1, 1, 5, 1, 3, 1],
[1, 3, 1, 1, 4, 1, 3, 1],
[1, 1, 1, 2, 1, 1],
[7, 1, 1, 1, 1, 1, 7],
[1, 1, 3],
[2, 1, 2, 1, 8, 2, 1],
[2, 2, 1, 2, 1, 1, 1, 2],
[1, 7, 3, 2, 1],
[1, 2, 3, 1, 1, 1, 1, 1],
[4, 1, 1, 2, 6],
[3, 3, 1, 1, 1, 3, 1],
[1, 2, 5, 2, 2],
[2, 2, 1, 1, 1, 1, 1, 2, 1],
[1, 3, 3, 2, 1, 8, 1],
[6, 2, 1],
[7, 1, 4, 1, 1, 3],
[1, 1, 1, 1, 4],
[1, 3, 1, 3, 7, 1],
[1, 3, 1, 1, 1, 2, 1, 1, 4],
[1, 3, 1, 4, 3, 3],
[1, 1, 2, 2, 2, 6, 1],
[7, 1, 3, 2, 1, 1]])
s=[].fill([].fill(0,0,25),0,25);s[3][3]=s[3][4]=s3[3][12]=s3[3][13]=s3[3][21]=s[8][6]=s[8][7]=s[8][10]=s[8][14]=s[8][15]=s[8][18]=s[16][6]=s[16][11]=s[16][16]=s[16][20]=s[21][3]=s[21][4]=s[21][9]=s[21][10]=s[21][15]=s[21][20]=s[21][21]=1;