En az hamle freecell çözücü inşa


54

Freecell oyununda, alternatif renklerden aşağıya doğru ineceğiniz bir düzende astan krala uygun dört temel kazık inşa etmekle görevlendiriliyorsunuz. Bununla birlikte, bir seferde yalnızca bir kart oluşturabilirsiniz, bu yüzden size her bir dizinin tamamını taşımanıza yardımcı olacak bir kart içeren dört "boş hücre" verilir. Buradaki fikir, oyunu çözmenize yardımcı olmak için bireysel kartları boş hücrelerin içine ve dışına örmenizdir.

Görevin bu oyunları mümkün olan en az hamleyle çözecek bir program oluşturmak.

Programınız aşağıdaki formatta girdi olarak 52 kartlık bir dizi alacaktır:

2S 9H 10C 6H 4H 7S 2D QD KD QC 10S AC ...

İlk mizanpajda bu sıraya göre ele alınacaktır:

01 02 03 04 05 06 07 08
09 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52

Ve oyunu çözmek için hamlelerin bir listesini döndür. Her hareket bu formatta olacaktır:

  • Kaynak kümesini temsil eden küme sayısını ( 1ila 8) veya serbest hücreyi ( Aila D) temsil eden bir sayı .
  • Hedef kazık veya serbest hücreyi temsil eden başka bir numara veya harf veya Fbu giysinin temeli için.

Çıktı şöyle görünecek:

18 28 3A 8B 8C 85 B5 35 4F etc.

Bir kart temele alındıktan sonra çıkartılamaz. Bir seferde yalnızca bir kart taşındığından, 3 kart dizisini taşımak 5 hamle, 5 kart dizisi 9 hamle gerektirir.

Bir oyun çözülemezse, programınız böyle belirtmelidir. Ancak, programınız çözülebilir herhangi bir oyunu çözebilmelidir.

Programınız, orijinal Microsoft FreeCell programında bulunan 32.768 anlaşma üzerinden değerlendirilecektir. Geçerli olması için, programınız çözülemeyen # 11,982 numaralı anlaşma dışındaki her bir anlaşmayı başarılı bir şekilde çözmelidir . Puanınız, bu 32.767 anlaşmayı çözmek için harcayacağınız toplam hareket sayısı olacak ve daha kısa kod da bir bağlayıcı olacaktır.


Yukarıdaki şartnamenin gerektirdiği biçimde tüm güverteleri içeren bir dosyayı buradan indirebilirsiniz (5.00 MB dosya): https://github.com/joezeng/pcg-se-files/raw/master/freecell_decks


1
Şimdi sadece bu 32.768 oyunu oluşturmak için kullandıkları rasgele sayı üreticisini kullanmam gerekiyor. : S
Joe Z.,


1
İyi bir noktaya değindin. Aynı renk ve sayıdaki iki kartın (7C ve 7S gibi) serbest hücrelerde olduğu durumla nasıl başa çıkardınız? O zaman "C" den siyah 8 e geçerseniz, bu iki karttan biri olabilir.
Joe Z.

2
Tüm çözülebilir anlaşmaların başvuru tarafından çözülmesi gereken kısıtlamayı kaldırarak bazı cevaplar alabilirsiniz. Daha sonra, en az hamle ile çözülen anlaşma sayısına göre puan.
mbomb007

1
Kartlar 0 İndekslenebilir mi?
tuskiomi

Yanıtlar:


22

C 64,643 bayt, Puan: ~ 6,5 milyon

Aşağıdaki Stack Snippet'i (Mego'nun izniyle) tüm kodu tek bir bağımsız C dosyası olarak verir:

Orijinal kaynağı buradan indirin . GCC'yi kullanın ve makedaha sonra benioku içindeki yönergeleri kullanarak çalıştırın .

Biçimlendirmem kötü (tüm farklı dosyalar bir kod bloğunda) ve bu daha çok golf oynayabilir (12k byte tho). Herhangi bir yardım sevilirdi!

Kodun bazıları benim değil. Telif hakkı olmayan bir kaynaktan kullandım. Bununla birlikte, girdi / çıktı yönteminin zorlukla karşı karşıya kalmasına karar verdim (C de (5 saat) korkunç olduğumdan beri uzun bir görev). Ayrıca kodun çoğunu tekrar yazmam ve her şeyde hata ayıklamam gerekiyordu. Babama, lastik ördeğe yardım ettiği ve olduğum için (ve hafıza yönetimi hatalarımı işaret ettiğim) ve TNB'deki segfaults ve C ile ilgili öfkeli rantlarla uğraşan herkese çok teşekkür ederim.


Kullanılacak mümkün olabilir bu cevap uzunluk kısıtlaması etrafında almak ve oldukça harici indirme ihtiyacı yerine, cevap içinde tüm kodu var.
Mego

@Mego evet demek istiyorum ama birkaç dosyada
Christopher

Birden fazla C dosyasını tek bir dosyada birleştirmek kolaydır.
Mego

İşte tek bir dosyada birleştirilen kodu gösteren bir yığın pasajı.
Mego

@ mego bunu düzenleyebilir misiniz? Cep telefonunda
Christopher
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.