The Prime Grid Game


10

Mi sono divertito a risolverlo, quindi offro questa sfida di golf.

L'obiettivo di questo golf è quello di trovare il numero primo più grande che può essere costruito utilizzando le istruzioni fornite.

È necessario accettare una griglia 3x3 di singole cifre come input. (Sta a te decidere come farlo, ma specificalo nel tuo programma.)

Puoi muoverti lungo la griglia ortogonalmente (sinistra, destra, su o giù) e mentre ti sposti, continui ad aggiungere le cifre che attraversi.

Per esempio

1 2 3
3 5 6 
1 8 9

Supponiamo che iniziamo da 1, possiamo formare il numero 1236589 ma non possiamo formare 15.

Devi valutare ogni posizione iniziale.

Se non è possibile trovare un numero primo, stampa -1, altrimenti stampa il numero primo stesso.

Il codice più corto vince, assicurati che venga eseguito entro 10 secondi.

Divertiti!

Modifica: usa una posizione esattamente una volta, nell'intero numero.

Ecco un caso di prova

Ingresso:

1 2 3
4 5 6
7 8 9

Uscita: 69854123


Presumo che non possiamo ripetere posizioni?
Keith Randall,

No, non puoi. Altrimenti sarà una ricerca infinita :) Scusa, ho dimenticato di menzionarlo. La modifica.
st0le

Posso testare i casi?
MtnViewMark,

@MtnViewMark, ho postd testcase e anche confermato la tua risposta. Saluti! :)
st0le

Risposte:


4

Haskell, 239 caratteri

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

L'input viene dato come una singola riga di nove numeri:

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

Posso confermare la tua risposta :)
st0le

3

Python, 286 274 caratteri

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

Ciò fornisce un avviso di deprecazione per l'argomento float a range. Ignoralo o spendi altri 5 caratteri per avvolgerlo int().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.