The Prime Grid Game

10

Saya senang menyelesaikan ini, jadi saya menawarkan tantangan golf ini.

Tujuan dari golf ini adalah untuk menemukan bilangan prima terbesar yang dapat dibangun menggunakan instruksi yang diberikan.

Anda harus menerima kisi 3x3 digit tunggal sebagai input. (Terserah Anda bagaimana Anda ingin melakukan itu, tetapi tentukan itu di program Anda.)

Anda dapat bergerak di sepanjang grid secara orthogonal (kiri, kanan, atas atau bawah), dan saat Anda bergerak, Anda terus menambahkan angka yang Anda temui.

Misalnya

1 2 3
3 5 6 
1 8 9

Katakanlah kita mulai dari 1, kita dapat membentuk angka 1236589 tetapi tidak dapat membentuk angka 15.

Anda harus mengevaluasi setiap posisi awal.

Jika prime tidak dapat ditemukan, cetak -1, atau cetak prime sendiri.

Kode terpendek menang, pastikan kode itu berjalan dalam 10 detik.

Selamat bersenang-senang!

Sunting: Gunakan satu posisi tepat sekali, di seluruh nomor.

Ini sebuah test case

Memasukkan:

1 2 3
4 5 6
7 8 9

Output: 69854123

st0le
sumber
Saya kira kita tidak bisa mengulangi posisi?
Keith Randall
Tidak Anda tidak bisa. Kalau tidak, itu akan menjadi pencarian yang tak terbatas :) Maaf, lupa menyebutkan itu. Editing.
st0le
Saya dapat menguji kasus haz?
MtnViewMark
@ MtnViewMark, i testcase poste haz, dan mengkonfirmasi jawaban Anda juga. Bersulang! :)
st0le

Jawaban:

4

Haskell, 239 karakter

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

Input diberikan sebagai satu baris sembilan nomor:

$> 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
MtnViewMark
sumber
Saya dapat mengkonfirmasi jawaban Anda :)
st0le
3

Python, 286 274 karakter

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

Ini memang memberi peringatan penghentian bagi argumen float range. Abaikan saja, atau habiskan 5 chars lagi untuk membungkusnya int().

Keith Randall
sumber