Основная сетка


10

Мне было весело решить эту проблему, поэтому я предлагаю эту игру в гольф.

Цель этого гольфа - найти наибольшее простое число, которое может быть построено с использованием данных инструкций.

Вы должны принять 3x3 сетки однозначных цифр в качестве входных данных. (Это зависит от вас, как вы хотите это сделать, но укажите это в своей программе.)

Вы можете перемещаться по сетке ортогонально (влево, вправо, вверх или вниз), и, двигаясь, вы продолжаете добавлять цифры, по которым вы идете.

Например

1 2 3
3 5 6 
1 8 9

Допустим, мы начинаем 1с 1236589, но не можем 15.

Вы должны оценить каждую стартовую позицию.

Если простое число не может быть найдено, напечатайте -1, иначе напечатайте простое число непосредственно.

Самый короткий код выигрывает, убедитесь, что он работает в течение 10 секунд.

Радоваться, веселиться!

Изменить: использовать одну позицию ровно один раз, во всем номере.

Вот тестовый пример

Входные данные:

1 2 3
4 5 6
7 8 9

Выход: 69854123


Я полагаю, мы не можем повторять позиции?
Кейт Рэндалл

Нет, ты не можешь. В противном случае это будет бесконечный поиск :) Извините, забыл упомянуть об этом. Редактирование.
st0le

Я могу рисковать тестами?
MtnViewMark

@MtnViewMark, я готов опубликовать тестовый сценарий и подтвердил ваш ответ. Ура! :)
st0le

Ответы:


4

Haskell, 239 символов

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

Ввод дан в виде одной строки из девяти чисел:

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

Я могу подтвердить ваш ответ :)
st0le

3

Питон, 286 274 символа

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

Это дает предупреждение об устаревании аргумента float range. Проигнорируйте это, или потратьте еще 5 символов, чтобы обернуть int()это.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.