เกม Prime Grid


10

ฉันสนุกกับการแก้ปัญหานี้ดังนั้นฉันจึงเสนอความท้าทายกอล์ฟนี้

วัตถุประสงค์ของการเล่นกอล์ฟนี้คือการหาจำนวนเฉพาะที่ใหญ่ที่สุดที่สามารถสร้างขึ้นโดยใช้คำแนะนำที่กำหนด

คุณควรยอมรับ 3x3 ตารางของตัวเลขหลักเดียวเป็นอินพุต (ขึ้นอยู่กับคุณว่าคุณต้องการทำอะไร แต่ระบุไว้ในโปรแกรมของคุณ)

คุณสามารถเลื่อนไปตามกริดแบบ orthogonally (ซ้าย, ขวา, ขึ้นหรือลง) และในขณะที่คุณเคลื่อนที่คุณจะต่อท้ายตัวเลขที่คุณเดินผ่าน

เช่น

1 2 3
3 5 6 
1 8 9

สมมติว่าเราเริ่มต้นที่1เราสามารถสร้างหมายเลข 1236589 แต่ไม่สามารถสร้าง 15

คุณต้องประเมินทุกตำแหน่งเริ่มต้น

หากไม่พบ-1ไพร์มให้พิมพ์มิฉะนั้นพิมพ์ไพร์มเอง

รหัสที่สั้นที่สุดชนะตรวจสอบให้แน่ใจว่าทำงานภายใน 10 วินาที

มีความสุข!

แก้ไข: ใช้หนึ่งตำแหน่งอย่างแน่นอนหนึ่งครั้งในจำนวนทั้งหมด

นี่คือกรณีทดสอบ

การป้อนข้อมูล:

1 2 3
4 5 6
7 8 9

เอาท์พุท: 69854123


ฉันคิดว่าเราไม่สามารถทำซ้ำตำแหน่งได้?
Keith Randall

ไม่คุณไม่สามารถ. มิฉะนั้นจะเป็นการค้นหาที่ไม่มีที่สิ้นสุด :) ขออภัยลืมพูดถึงสิ่งนั้น การแก้ไข
st0le

ฉันสามารถทดสอบเคสได้ไหม?
MtnViewMark

@MtnViewMark ฉันมี postd testcase และยืนยันคำตอบของคุณเช่นกัน ไชโย! :)
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

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

rangeนี้จะให้คำเตือนเลิกใช้สำหรับอาร์กิวเมนต์ลอยไป ไม่ต้องสนใจหรือใช้อีก 5 ตัวอักษรเพื่อพันint()รอบมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.