Üç tam sayı, genişlik w
, yükseklik h
ve adım sayımı alan bir program veya işlev yazın s
. Bir sigara kendini kesen çizim olacaktır rasgele yürüyüş s
bir uzun adımlar 5*w
ile 5*h
piksel her 5 5 tarafından piksel hücresi ya boş (saf bej) 'dir görüntü veya bu oniki basit "boru" biri:
Yukarıdaki resim ayrıntı göstermek için büyütülmüş. İşte gerçek boyuttaki borular:
(Gri çizgiler sadece boru tiplerini ayırmak içindir.)
Rastgele yürüyüş, bir boru uç noktasında (dört dört boru tipinden biri) başlayıp başka bir boru uç noktasında biten tek bir kesintisiz boru yolu olacaktır.
Boş bir başla w
ile h
ızgara ve rasgele başlangıç noktası olduğu bir hücre seçin. Ardından, başlamak ve karşılık gelen boru uç noktasını çizmek için dört yönden birini rasgele seçin. Bu başlangıç hücresi yürüyüşünüzdeki ilk adımı işaretler ve her yeni bir hücre çizdiğinizde veya mevcut bir adımın üzerine yazıldığında, atılan başka bir adım olarak sayılır.
Şimdi, art arda, seçilen yön geçerliyse uygun boru hücresini çizerek rasgele sağa, sola veya düze gitmeyi seçin. Tam s
adım yolu oluşuncaya kadar bir yönün geçerli olup olmadığını geri izleyin ve yeniden seçin . Yol, yolun izlediği rotaya bağlı olarak, şebekenin herhangi bir yerinde olabilecek bir boru uç noktasıyla bitmelidir.
Sadece iki düz boru hücresinin üzerine yazılabileceğini ve bunun tersi yöndeki düz boru hücresi tarafından yazılabileceğini not etmek çok önemlidir, sonuç kesişme hücresidir. Aksi takdirde, tüm borular boş hücrelere yerleştirilmelidir.
Bir kavşak çizildiğinde, yolun başlangıç hücresinden daha ileride olan kısmı üstüne çizilmelidir.
Size kalmış olup olmadığı ızgara vardır periyodik sınır şartları (PBC), yani ızgara bir tarafını çıkan bir boru diğer tarafta çıkacaktır olsun. PBC olmadan şebeke sınırı, diğer borular gibi koyabileceğiniz bir engel olarak sayılır.
Özel durumlar
s
0 olduğunda , hiçbir boru çizilmemeli ve çıktı görüntüye5*w
göre boş olmalıdır5*h
(yani tüm bej).s
1 ne zaman bir tek boru sapırastgele seçilen başlangıç hücresinde çizilmelidir.
Diğer detaylar
s
En fazlaw*h
bunun bir yolun her zaman mümkün olacağı varsayılabilir . (Kesişimler nedeniyle daha uzun yollar mümkün olsa da)w
veh
her zaman olumlu olacak.- Tüm rastgele seçimler eşit olarak rasgele olmalıdır . örneğin, problemi kolaylaştırsa bile, mümkün olduğunda kavşak yapmaktan kaçınmamalısınız. Sözde rasgele sayı üreteçlerine izin verilir.
- Siyah, mavi ve bej yerine görsel olarak farklı üç renk kullanılabilir.
- Çıktı resimleriniz, pozitif bir tamsayı
5*w*k
olan5*h*k
pikseller şeklinde olacak şekilde büyütülebilirk
. (Gönderdiğiniz örnekleri büyütmek, 1’iniz olsa bile önerilirk
.) - Yaygın kayıpsız herhangi bir görüntü dosyası formatı kullanılabilir ve görüntü bir dosyaya kaydedilebilir, görüntülenebilir veya stdout'a işlenmemiş olarak serpilir.
Bayt cinsinden en kısa kod kazanır.
Örnekler
(Hepsi% 500 oranında büyütüldü.)
Giriş ise w=2, h=1, s=0
o zaman çıkış her zaman olacaktır:
Girdi w=2, h=1, s=1
o zaman çıktı eşit şansla bu görüntülerden biri olacaktır:
Giriş ise w=2, h=1, s=2
o zaman çıkış olacaktır.
veya muhtemelen
Kılavuzun PBC olduğu varsayılırsa.
(Gibi yolu başlatmak, ikinci bir adım imkansız yapacağını unutmayın .)
w=3, h=2, s=6
PBC'nin farz ettiği olası bazı çıktılar :
w=3, h=3, s=9
PBC'nin varsayıldığı gibi olası bir çıktı şöyledir :
Kesişim iki basamak olarak sayıldığından yolun tüm hücreleri kapsaması gerekmediğine dikkat edin. Ayrıca, köşe kesişme noktasının başlangıç hücresi olduğunu anlayabiliriz, çünkü kesişme üst geçidi daha sonra çizilmiş olmalıdır. Böylece yapılan rastgele seçimler dizisini çıkartabiliriz:
start at top left, facing east
go straight
go right
go right
go right
go straight
go left
go right
end
Son olarak, burada örnekleridir w=4, h=5, s=20
ve w=4, h=5, s=16
:
You will be drawing a non-self-intersecting random walk
... kendini kesişen mi yoksa değil mi?