Chúng tôi yêu những câu đố kỳ lạ của chúng tôi, chúng tôi Brits


16

Trong một vài tờ báo của Anh có một trò chơi được gọi là Hidato . Nó có phần giống với Sudoku , mặc dù thay vì có 1-9 trong một dòng và khối, đó là về việc đặt các số sao cho chúng kết nối theo thứ tự từ 01cao nhất đến cao nhất, vì vậy chúng đều chạm theo chiều ngang, đường chéo hoặc chiều dọc .

Các đầu vào sẽ chứa nhiều dòng được phân tách bằng \n, chứa các khối được phân tách bằng khoảng trắng, mà bạn có thể giả sử là rộng hai ký tự. Mỗi khối sẽ là một số, một khoảng trống cần điền (được biểu thị bằng --) hoặc một bức tường không thể có số trong ( XX).

Đầu ra của bạn phải khớp với một được cung cấp mặc dù với các khối trống được cung cấp với các số. Lưu ý rằng có thể không có một giải pháp duy nhất, hoặc thậm chí là sự tồn tại của một giải pháp - một số có thể mang lại nhiều kết quả do sự mơ hồ của chúng, giống như Sudoku và một số có thể không thể giải quyết được, trong trường hợp đó bạn nên đưa ra một sản phẩm falsey , nhưng bạn có thể giả định đầu vào được định dạng như dưới đây.

Sử dụng một tiêu đề tiêu chuẩn Language: XX bytes. Chúc bạn chơi golf vui vẻ!

Ví dụ

Đầu vào 01 XX 03, 01 -- 04, 01 --, vv nên tất cả trở lại một cái gì đó falsey .

Đầu vào:

01 -- --
-- XX 05

Đầu ra:

01 03 04
02 XX 05

Đầu vào:

-- 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 --

Đầu ra:

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

Đầu vào:

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

Đầu ra:

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

Hãy chắc chắn rằng tôi hiểu: Đưa ra một lưới có một số ô không thể đi được, tìm đường dẫn Hamilton phù hợp với các ô được điền sẵn?
Geobits 04/08/2015

@AmiRuse Wow. Điều đó có vẻ khó khăn. (Tất nhiên, điều này đến từ một người ghét chỉnh sửa ảnh.) Thật tuyệt khi biết một người khác ở đây có ký tự VG làm biểu tượng của họ. : O
kirbyfan64sos

Chúng ta có thể thấy một giải pháp cho ví dụ? Nhiều ví dụ sẽ hữu ích là tốt.
Kade

Xuất sắc :). Bạn cũng có thể có một thử thách máy phát điện sau
Beta Decay

3
Phương pháp đầu vào có thể được đơn giản hóa? Có thể sử dụng một mảng số nguyên 2D, và có -1một bức tường, và 0để trống? Điều đó sẽ giúp bạn dễ dàng tập trung hơn vào thử thách thực sự của câu đố, và sau đó không có sự phức tạp của các số đệm với số không hoặc chuỗi phân tích.
mbomb007

Câu trả lời:


1

JavaScript (Node.js) , 482 byte

Đây là một giải pháp vũ phu, nó bắt đầu tại 01và kiểm tra mọi ô lân cận kiểm tra các ô trống ( --) hoặc số lượng mong muốn và theo đường dẫn đến hoàn thành hoặc không thể thực hiện được. Nếu số lượng mong muốn tồn tại và không phải là hàng xóm, nó sẽ tắt giải pháp này. Mất vài giây cho lưới lớn nhất.

Điều này có lẽ không đặc biệt thú vị, nhưng tôi nghĩ tôi đã thử đưa ra giải pháp trước khi xem các câu trả lời được liên kết trên Rosetta Code và tôi rất thích giải quyết một thử thách khó khăn hơn một chút!

Tìm tất cả các giải pháp khi nhiều tồn tại . Phần thân là một hàm chấp nhận một mảng hai chiều và chân trang xử lý đầu vào thành định dạng mong muốn và cũng trả kết quả về định dạng mong muốn. Rất vui được cung cấp thêm thông tin (và triển khai ít chơi gôn hơn nếu có hứng thú).

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}

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.