İmalatta Öncelik Testi


13

Arka fon

Manufactoria programlama ile ilgili bir oyundur. Oynatıcı görevleri tamamlamak için iki boyutlu bir programlama dili formu kullanmalıdır. Daha önce hiç duymadıysanız, öğrenmenin en kolay yolu oyunun ilk birkaç seviyesini denemektir.

Meydan okuma

Sizin zorluğunuz bir sayının önceliğini test eden bir program oluşturmaktır.

Giriş, kuyruktaki bir dizi N mavi işaretçi olacaktır. N asal ise, programınız bunu kabul etmelidir (robotu bitirmek için hareket ettirin). N kompozitse, programınız reddedmelidir (yere bir yere bırakın).

Gönderme Seçenekleri

Bu, tipik Manufactoria meydan okumasından daha karmaşık bir meydan okuma olduğundan, cevaplarınızı göndermenin daha fazla yoluna izin vermeye karar verdim.

Vanilya

Gönderimleri oluşturmak ve test etmek için 13x13 özel bir düzey oluşturdum. Özel test seviyesi aşağıdaki gibidir.

13x13 özel seviye

Oyun sadece özel bir seviyede 8 test senaryosuna izin verir, ancak yaratımınız teorik olarak sadece mevcut hafıza ile sınırlı olan herhangi bir doğal sayı N'yi işleyebilmelidir. Bilgilendirme amacıyla, özel düzeyde sunulan test senaryoları aşağıdaki gibidir:

1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject

Genişletilmiş Izgara

Bazı kullanıcılar 13x13 ızgaradan daha fazla alan isteyebilir. URL'deki bir sayı değiştirilerek oluşturulan oyun içi 15x15 özel düzeyine bir bağlantı:

15x15 özel seviye

Ne yazık ki, ek hücrelere erişilemediğinden daha büyük özel düzeyler çalışmıyor.

Manufactoria Esolang

Manufactoria'nın ASCII tabanlı bir dile uyarlanması olmuştur. Oluşturmanızı tasarlamak / test etmek için farklı bir yol istiyorsanız veya nihai çözümünüzü oyun tahtasına sığdıramıyorsanız, bu esolang'ı kullanabilirsiniz. Bu esolang hakkında bilgi burada bulabilirsiniz:

Manufactoria esolang

Esolang ve gerçek oyun arasında birkaç tutarsızlık var. Örneğin, konveyör geçitleri farklı şekilde ele alınır. Bu tutarsızlıklardan kaçınmaya çalışın.

Test Etmenin Daha Hızlı Bir Yolu

Tamamlanması için binlerce adım atılan programlar söz konusu olduğunda oyun çok yavaş. Kavram kanıtı çözümüm 15'i reddetmek için 28042 adım attı. Oyunda 50x hızda bile, bu çok uzun sürüyor.

Bu çok yararlı web sitesini buldum . Bağlantıyı cevabınıza kopyalayıp yapıştırmanız yeterlidir ve cevabınızı belirli girişlerle test edebilirsiniz. 28042 adımlı işlem bir saniyenin altında gerçekleşti.

Dikkat edilmesi gereken bir şey, makineniz düzgün çalışsa bile, genellikle "yanlış kabul edilmiş" gibi bir şey söyleyeceğidir. Bunun nedeni, web sayfasının yalnızca test senaryolarını bilmesidir. Örneğin, makinem gerçekten doğru olmasına rağmen, çözümümün 3 sayısını "yanlış kabul ettiğini" söyleyebilir.

Nasıl kazanılır

Puanlama ölçütü parça sayısıdır (işgal altındaki hücreler). Bu kod golf, bu yüzden en az parça ile gönderme kazanır.

İlgilenenler için kıyaslama çözümümün 96 parçası var ve 13x13 ızgaraya uyuyor. Daha iyi bir algoritma bulmak muazzam gelişmelere yol açabilir, çünkü alt optimal bir algoritma kullandığımı biliyorum.

Yanıtlar:


10

53 parça - 11x11 ızgara

Ben sadece 2 gün önce Manufactoria oynamayı öğrendim, bu yüzden muhtemelen çok golf için optimize edilmemiş, ama en azından sorunu çözüyor. Elbette tekrarlanan çıkarma yoluyla deneme bölümünü uygular. 2'den N-1'e kadar olan tüm bölücüler kontrol edilir. Zaman karmaşıklığının O (N ^ 3) olması gerektiğine inanıyorum.

53 parçalı çözüm

Çözüm Bağlantısı

Bir konveyör bant kullanmak zorunda kaldım çok hayal kırıklığına uğradım :)

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.