Das Prime Grid-Spiel

10

Ich hatte Spaß daran, das zu lösen, also biete ich diese Golf-Herausforderung an.

Das Ziel dieses Golfs ist es, die größte Primzahl zu finden, die unter Verwendung der gegebenen Anweisungen konstruiert werden kann.

Sie sollten ein 3x3-Raster mit einzelnen Ziffern als Eingabe akzeptieren. (Es liegt an Ihnen, wie Sie das tun möchten, aber geben Sie dies in Ihrem Programm an.)

Sie können sich orthogonal entlang des Gitters bewegen (links, rechts, oben oder unten), und während Sie sich bewegen, hängen Sie die Ziffern an, über die Sie gehen.

Z.B

1 2 3
3 5 6 
1 8 9

1Angenommen, wir beginnen bei , wir können die Nummer 1236589 bilden, aber nicht 15.

Sie müssen jede Startposition bewerten.

Wenn eine Primzahl nicht gefunden werden kann, drucken Sie -1, andernfalls drucken Sie die Primzahl selbst.

Der kürzeste Code gewinnt, stellen Sie sicher, dass er innerhalb von 10 Sekunden ausgeführt wird.

Habe Spaß!

Bearbeiten: Verwenden Sie eine Position genau einmal in der gesamten Zahl.

Hier ist ein Testfall

Eingang:

1 2 3
4 5 6
7 8 9

Ausgabe: 69854123

st0le
quelle
Ich nehme an, wir können Positionen nicht wiederholen?
Keith Randall
Nein, du kannst nicht. Sonst wird es eine unendliche Suche sein :) Entschuldigung, ich habe vergessen, das zu erwähnen. Bearbeitung.
st0le
Ich kann Haz Testfälle?
MtnViewMark
@MtnViewMark, ich habe einen Testfall veröffentlicht und auch Ihre Antwort bestätigt. Prost! :)
st0le

Antworten:

4

Haskell, 239 Zeichen

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

Die Eingabe erfolgt als einzelne Zeile mit neun Zahlen:

$> 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
quelle
Ich kann Ihre Antwort bestätigen :)
st0le
3

Python, 286 274 Zeichen

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

Dies gibt eine Verfallswarnung für das float-Argument an range. Ignoriere es oder gib 5 weitere Zeichen aus, int()um es zu umwickeln .

Keith Randall
quelle