우리는 우리의 이상한 퍼즐을 좋아합니다.


16

영국의 몇몇 신문에는 히다 토 (Hidato )라는 게임이 있습니다 . 행과 블록에 1-9가있는 대신 스도쿠 와 다소 유사 하지만 숫자를 순서대로 연결 01하여 가장 높은 순서로 연결 하므로 수평, 대각선 또는 수직으로 모두 접촉합니다. .

입력은 \n공백으로 구분 된 블록을 포함하는으로 구분 된 여러 줄을 포함 하며 너비는 두 자로 가정 할 수 있습니다. 각 블록은 숫자, 채워질 빈 공간 (로 표시 --) 또는 ( XX) 안에 숫자를 가질 수없는 벽이 됩니다.

숫자가 제공되는 빈 블록이 있지만 출력은 제공된 것과 일치해야합니다. 고유하거나 해결책 이 없을 수도 있습니다. 일부는 스도쿠와 같이 모호성으로 인해 여러 개를 산출 할 수 있으며 일부는 말 그대로 해결할 수없는 경우가 있습니다.이 경우 잘못된 결과를 제공해야 하지만 입력이 다음과 같이 형식화되었다고 가정 할 수 있습니다.

표준 헤더를 사용하십시오 Language: XX bytes. 행복한 골프!

입력 01 XX 03, 01 -- 04, 01 --, 등 모든 반환 뭔가해야 falsey가 .

입력:

01 -- --
-- XX 05

산출:

01 03 04
02 XX 05

입력:

-- 33 35 -- -- XX XX XX    
-- -- 24 22 -- XX XX XX      
-- -- -- 21 -- -- XX XX
-- 26 -- 13 40 11 XX XX
27 -- -- -- 09 -- 01 XX
XX XX -- -- 18 -- -- XX
XX XX XX XX -- 07 -- --
XX XX XX XX XX XX 05 --

산출:

32 33 35 36 37 XX XX XX
31 34 24 22 38 XX XX XX
30 25 23 21 12 39 XX XX
29 26 20 13 40 11 XX XX
27 28 14 19 09 10 01 XX
XX XX 15 16 18 08 02 XX
XX XX XX XX 17 07 06 03
XX XX XX XX XX XX 05 04

입력:

XX XX XX XX -- 53 XX XX XX XX
XX XX XX XX -- -- XX XX XX XX
XX XX 56 -- -- -- 30 -- XX XX
XX XX -- -- -- -- -- -- XX XX
XX -- -- 20 22 -- -- -- -- XX
XX 13 -- 23 47 -- 41 -- 34 XX
-- -- 11 18 -- -- -- 42 35 37
-- -- -- -- 05 03 01 -- -- --
XX XX XX XX -- -- XX XX XX XX
XX XX XX XX 07 -- XX XX XX XX

산출:

XX XX XX XX 52 53 XX XX XX XX
XX XX XX XX 54 51 XX XX XX XX
XX XX 56 55 28 50 30 31 XX XX
XX XX 26 27 21 29 49 32 XX XX
XX 25 24 20 22 48 45 44 33 XX
XX 13 19 23 47 46 41 43 34 XX
14 12 11 18 04 02 40 42 35 37
15 16 17 10 05 03 01 39 38 36
XX XX XX XX 09 06 XX XX XX XX
XX XX XX XX 07 08 XX XX XX XX

이해하기 : 걷기 불가능한 셀이있는 격자가 있으면 미리 채워진 셀에 맞는 해밀턴 경로를 찾으십니까?
Geobits

@AmiRuse 와우. 까다로워 보인다. (물론 이것은 사진 편집을 싫어하는 사람이 제공 한 것입니다.) VG 캐릭터를 로고로 사용하는 다른 사람을 아는 것이 좋습니다. : O
kirbyfan64sos

예제에 대한 해결책을 볼 수 있습니까? 더 많은 예제가 도움이 될 것입니다.
Kade

훌륭한 :). 나중에 발전기 문제를 겪을 수도 있습니다
Beta Decay

3
입력 방법을 단순화 할 수 있습니까? 정수의 2D 배열을 사용하고 -10이 있고 공백이 될 수 있습니까? 따라서 퍼즐 의 실제 과제 에 더 쉽게 집중할 수 있으며 숫자가 0이나 구문 분석 문자열로 채워지는 복잡성이 없습니다.
mbomb007

답변:


1

자바 스크립트 (Node.js) , 482 바이트

이것은 무차별 대입 솔루션으로, 01모든 인접 셀 에서 시작하여 빈 셀 ( --) 또는 원하는 수를 확인하고 완료 또는 불가능한 경로를 확인합니다. 원하는 숫자가 존재하고 이웃이 아닌 경우이 솔루션을 단축시킵니다. 가장 큰 격자 선에 몇 초가 걸립니다.

이것은 아마도 흥미롭지는 않지만 Rosetta Code에 링크 된 답변을보기 전에 솔루션을 만드는 데 손을 대고 약간 더 어려운 도전을 즐겼다 고 생각했습니다!

많은 것이 존재할 때 모든 솔루션을 찾습니다 . body는 2 차원 배열을 허용하고 바닥 글은 입력을 원하는 형식으로 처리하고 결과를 원하는 형식으로 반환하는 함수입니다. 더 많은 정보를 제공하고 관심이있는 경우 골프 구현이 적습니다.

f=a=>{F=(D,n,j)=>[Z=[].concat(...D),z=Z.indexOf(j),z>-1&&[x=z%w,y=z/w|0],z>-1&&[[x-1,y-1],[x,y-1],[x+1,y-1],[x-1,y],[x+1,y],[x-1,y+1],[x,y+1],[x+1,y+1]]][n];C=q=>q.map(Q=>Q.slice());w=a[0][L='length'];l=F(a,0).filter(c=>c!='XX')[L];R=[];r=(s,d)=>{let n=`0${+s+1}`.slice(-2);N=F(d,2,n);n>l?R.push(C(d)):~F(d,1,s)?(p=F(d,3,s),p.filter(P=>P==N+'')[L]?r(n,C(d)):!~F(d,1,n)?p.map(I=>{[x,y]=I,(x<0||x>w-1||y<0||y>d[L]-1)||d[y][x]=='--'&&(D=C(d),r(D[y][x]=n,D))}):0):0};r('01',a);return R}

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

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