Trò chơi lưới tướng


10

Tôi đã vui vẻ giải quyết điều này, vì vậy tôi đưa ra thử thách chơi gôn này.

Mục tiêu của môn đánh gôn này là tìm ra số nguyên tố lớn nhất có thể được xây dựng bằng các hướng dẫn đã cho.

Bạn nên chấp nhận lưới 3x3 gồm các chữ số đơn làm đầu vào. (Tùy bạn muốn làm điều đó như thế nào, nhưng chỉ định điều đó trong chương trình của bạn.)

Bạn có thể di chuyển dọc theo lưới một cách trực giao (trái, phải, lên hoặc xuống) và khi bạn di chuyển, bạn tiếp tục nối các chữ số bạn đi ngang qua.

Ví dụ

1 2 3
3 5 6 
1 8 9

Giả sử chúng tôi bắt đầu vào 1, chúng tôi có thể tạo thành số 1236589 nhưng không thể tạo thành số 15.

Bạn phải đánh giá mọi vị trí bắt đầu.

Nếu một số nguyên tố không thể được tìm thấy, in -1, khác in chính số nguyên tố đó.

Mã ngắn nhất sẽ thắng, đảm bảo nó chạy trong vòng 10 giây.

Chúc vui vẻ!

Chỉnh sửa: Sử dụng một vị trí chính xác một lần, trong toàn bộ số.

Đây là một trường hợp thử nghiệm

Đầu vào:

1 2 3
4 5 6
7 8 9

Đầu ra: 69854123


Tôi đoán chúng ta không thể lặp lại vị trí?
Keith Randall

Không, bạn không thể. Nếu không, nó sẽ là một tìm kiếm vô hạn :) Xin lỗi, quên đề cập đến điều đó. Chỉnh sửa.
st0le

Tôi có thể thử nghiệm haz trường hợp?
MtnViewMark

@MtnViewMark, tôi đã kiểm tra postd và xác nhận câu trả lời của bạn là tốt. Chúc mừng! :)
st0le

Câu trả lời:


4

Haskell, 239 ký tự

p=2:q[3..]
q=filter(#p)
n#(x:y)=n==x||n`mod`x/=0&&(n`div`x<x||n#y)
(n§m)q=n:maybe[](\i->[q-4,q-1,q+1,q+4]>>=(n*10+i)§filter(/=(q,i))m)(lookup q m)
i=[0,1,2,4,5,6,8,9,10]
main=getLine>>=print.maximum.(-1:).q.(i>>=).(0§).zip i.map read.words

Đầu vào được đưa ra dưới dạng một dòng gồm chín số:

$> echo 1 2 3  3 5 6  1 8 9 | runhaskell 2485-PrimeGrid.hs
81356321
$> echo 1 2 3  4 5 6  7 8 9 | runhaskell 2485-PrimeGrid.hs
69854123
$> echo 1 1 1  1 1 1  1 1 1 | runhaskell 2485-PrimeGrid.hs
11
$> echo 2 2 2  2 2 2  2 2 2 | runhaskell 2485-PrimeGrid.hs
2
$> echo 4 4 4  4 4 4  4 4 4 | runhaskell 2485-PrimeGrid.hs
-1

Tôi có thể xác nhận câu trả lời của bạn :)
st0le

3

Python, 286 274 ký tự

I=lambda:raw_input().split()
m=['']
G=m*4+I()+m+I()+m+I()+m*4
def B(s,p):
 d=G[p]
 if''==d:return-1
 G[p]='';s+=d;n=int(s)
 r=max(n if n>1and all(n%i for i in range(2,n**.5+1))else-1,B(s,p-4),B(s,p+4),B(s,p-1),B(s,p+1))
 G[p]=d;return r
print max(B('',i)for i in range(15))

Điều này không đưa ra một cảnh báo phản đối cho đối số float range. Bỏ qua nó, hoặc dành thêm 5 ký tự để bọc int()xung quanh 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.