Le jeu Prime Grid


10

Je me suis amusé à résoudre ce problème, alors je propose ce défi de golf.

L'objectif de ce golf est de trouver le plus grand nombre premier pouvant être construit à l'aide des instructions données.

Vous devez accepter une grille 3x3 de chiffres simples comme entrée. (C'est à vous de décider comment vous voulez faire cela, mais spécifiez cela dans votre programme.)

Vous pouvez vous déplacer le long de la grille orthogonalement (gauche, droite, haut ou bas), et pendant que vous vous déplacez, vous continuez à ajouter les chiffres que vous traversez.

Par exemple

1 2 3
3 5 6 
1 8 9

Disons que nous commençons par 1, nous pouvons former le numéro 1236589 mais pas 15.

Vous devez évaluer chaque position de départ.

Si un amorce est introuvable, imprimez -1, sinon imprimez l'amorce elle-même.

Le code le plus court gagne, assurez-vous qu'il s'exécute dans les 10 secondes.

S'amuser!

Modifier: utilisez une position exactement une fois, dans le nombre entier.

Voici un cas de test

Contribution:

1 2 3
4 5 6
7 8 9

Sortie: 69854123


Je suppose que nous ne pouvons pas répéter les positions?
Keith Randall

Non vous ne pouvez pas. Sinon, ce sera une recherche infinie :) Désolé, j'ai oublié de le mentionner. Édition.
st0le

Puis-je tester des cas?
MtnViewMark

@MtnViewMark, i haz postd testcase, et a confirmé votre réponse également. À votre santé! :)
st0le

Réponses:


4

Haskell, 239 caractères

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'entrée est donnée sur une seule ligne de neuf nombres:

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

Je peux confirmer votre réponse :)
st0le

3

Python, 286 274 caractères

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

Cela donne un avertissement de dépréciation pour l'argument float range. Ignorez-le ou dépensez 5 caractères supplémentaires pour l'enrouler int().

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.