"Bulgar Solitaire" matematiksel bir meraktır. İşaretsiz kartların 45 (herhangi bir üçgen sayı çalışacak) destesi ile oynanır. Onları rasgele boyutlu kazıklara koyun. Ardından, bir tur oynatmak için her bir desteden bir kart çıkarın ve çıkartılan kartlarla yeni bir yığın oluşturun. Bu adımı tekrarlamak, sonunda oyunun sabit bir noktası olan ve böylece solitaire sonu olan 1 2 3 4 5 6 7 8 9
(45 kart için) yapılandırmasını verir. Bu oyunu J.Çalışmayı geliştirin "Bulgar Solitaire" J fiil
'da simüle etmek istedim. Birkaç gün sonra bunu ve J ger'leri hakkında uzun zamandır beklenen bir bakış açısını düşündüğümde, bazı fikirleri almak istediğim bir çözüm buldum. Bu fiilin başlar:
bsol =: ((#~ ~:&0) , #)@:(-&1)^:(<_)
toplamı üçgen pozitif tamsayılar bir vektör göz önüne alındığında, bu fiil sonuçları solitaire mermi gösteren bir rütbe 2 dizisini döndürür. Ben de bir ilk yapılandırmayı oluşturmak için bu fiilin ile geldi, ama onunla daha az mutluyum: Bir vektör pozitif tamsayılar y
Verilen
t =: 45 & - @ (+/) NB. Would work with any triangular number
cards =: (]`(]@,>:@?&[email protected]]))@.(0&<@t)^:_
, t
, yani 45 ila sayısını 45 - +/ y
hatasını döndürür kartlar argüman tarafından temsil edilen yığınlarda hesaba katılmamıştır. t
kullanarak, fiil cards
böyle bir vektör y
kusur 0.
açıkça t
Genişleyen kadar art arda >: i. t y
kadar bir tamsayı, ben,
cards =: (]`(]@,>:@?&(45 & - @ (+/))@]))@.(0&<@(45 & - @ (+/)))^:_
böyle hissediyorum
çok kısa değil almak ekler ve belki aşırı parantez içinde. Ama çalışır ve tam çözüm şimdi şuna benzer:
J deyim hakkında bilmek(((#~ ~:&0) , #)@:(-&1)^:(<_)) @: ((]`(]@,>:@?&(45 & - @ (+/))@]))@.(0&<@(45 & - @ (+/)))^:_)@>:@? 44
değil, bu konuda aynı duygu var: o değil adlandırılmış fiiller olmadan
bsol @ cards @ >: @ ? 44 NB. Choose the first pile randomly from >: i. 44
Çok kısa, kesinlikle gereksiz (t
gibi yerel bir fiili kullanmak daha iyi olurdu, çünkü tekrarlanır, örneğin?) ve muhtemelen aşırı parantez içinde. Bu programı geliştirmek için hangi fırsatlara ihtiyacım var?
Sana J-forumlar bu tür sorular için daha iyi bir yer olduğunu göreceksiniz düşünüyorum . – Eelvex
Teşekkürler. Ben (re-) abone ve orada göndermeden önce bir süre için saklayacaktır. –