Prime Grid Oyunu


10

Bunu çözerken eğlendim, bu yüzden bu golf meydan okuma sunuyoruz.

Bu golfün amacı verilen talimatlar kullanılarak yapılabilecek en büyük asal sayıyı bulmaktır.

Giriş olarak tek basamaklı 3x3 ızgarayı kabul etmelisiniz. (Bunu nasıl yapmak istediğiniz size bağlıdır, ancak bunu programınızda belirtin.)

Izgara boyunca dikey olarak (sol, sağ, yukarı veya aşağı) hareket edebilir ve hareket ettikçe, üzerinde yürüdüğünüz rakamları eklemeye devam edersiniz.

Örneğin

1 2 3
3 5 6 
1 8 9

Biz başladığınızı düşünelim 1biz numarayı 1236589 oluşturabilir ancak, olamaz 15 oluştururlar.

Her başlangıç ​​pozisyonunu değerlendirmelisiniz.

Asal bulunamazsa, yazdırın -1, asalın kendisini yazdırın.

En kısa kod kazanır, 10 saniye içinde çalıştığından emin olun.

İyi eğlenceler!

Düzenleme: Bir sayıyı tam olarak bir kez kullanın.

İşte bir test örneği

Giriş:

1 2 3
4 5 6
7 8 9

Çıktı: 69854123


Sanırım pozisyonları tekrar edemeyiz?
Keith Randall

Hayır yapamazsın. Aksi takdirde sonsuz bir arama olacaktır :) Üzgünüm, bundan bahsetmeyi unuttum. Düzenleme.
st0le

Test senaryolarını tehlikeye atabilir miyim?
MtnViewMark

@MtnViewMark, ben postd testcase haz ve cevabınızı da doğruladı. Şerefe! :)
st0le

Yanıtlar:


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

Giriş dokuz sayının tek bir satırı olarak verilir:

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

Cevabınızı onaylayabilirim :)
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))

Bu, şamandıra argümanı için bir kullanımdan kaldırma uyarısı verir range. Yoksayın veya int()etrafına sarmak için 5 karakter daha harcayın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.