Buradaki fikir, neredeyse tekrar eden bir model üretmektir . Yani, inşa edilmekte olan dizi, bir sonraki alt dizinin tekrarını önlemek için son anda değişir. AA ve ABA tipi alt sıralardan kaçınılmalıdır (burada B, A'dan uzun değildir).
Örnekler:
Devam edeceğim ve açıklamamı daha net hale getirmek için tüm küçük örnekleri listeleyerek başlayacağım. 0 ile başlayalım.
Geçerlilik: 0 Geçersiz: 00 (AA modeli) Geçerlilik: 01 Geçersiz: 010 (ABA şablonu) Geçersiz: 011 (AA modeli) Geçerlilik: 012 Geçerlilik: 0120 Geçersiz: 0121 (ABA şablonu) Geçersiz: 0122 (AA modeli) Geçersiz: 01200 (AA modeli) Geçersiz: 01201 (ABA deseni; 01-2-01) Geçersiz: 01202 (ABA şablonu) Geçerlilik: 01203
Şimdi, 4
bir kanıtım olmamasına rağmen a'nın hiçbir zaman gerekli olmadığına şiddetle inanıyorum , çünkü sadece sadece yüzlerce karakter uzunluğunda diziler buldum 0123
. (Muhtemelen AA kalıbı olmayan sonsuz dizgilere sahip olmak için sadece üç karakterin nasıl gerekli olduğu ile yakından ilgilidir. Bunun üzerinde bir Wikipedia sayfası var.)
Giriş çıkış
Giriş tek, pozitif, sıfır olmayan bir tamsayıdır n
. Bunu varsayabilirsin n <= 1000
.
Çıktı, n
yasaklanmış modelle (AA veya ABA) eşleşen hiçbir alt karakteri olmayan bir karakter dizisidir.
Örnek giriş ve çıkışlar
>>> 1 0 >>> 2 01 >>> 3 012 >>> 4 0120 >>> 5 01203 >>> 50 01203102130123103201302103120132102301203102132012
kurallar
- Yalnızca karakterlere
0123
izin verilir. - B A. Bu durumu önlemek için daha artık
012345
tarafından takip edilecek olan6
çünkü0123451
bu vardır:1-2345-1
. Başka bir deyişle, dizi önemsiz ve ilgisiz olacaktır. n
sert kodlama haricinde istenen herhangi bir yöntemle girilebilir .- Çıktı, hangisinin daha kolay olduğuna bağlı olarak bir liste veya dize olabilir.
- Kaba kuvvet yok ; çalışma süresi gerçekten yavaş bir makinede dakikalar, en fazla bir saat olmalıdır
n=1000
. (Bu, tümn
uzunluk permütasyonları arasında dolaşan{0,1,2,3}
, hile ve benzer numaralara izin verilmeyen çözümleri diskalifiye etmeyi amaçlamaktadır .) - Standart boşluklara her zamanki gibi izin verilmez.
- Puanlama bayt cinsindendir. Bukod golf, bu yüzden en kısa giriş kazanır (muhtemelen - bonusa bakın).
- Bonus: her adımda izin verilen en düşük rakamı seçin. Dizideki bir sonraki basamak için
1
ve varsa3
olası seçeneklerse, öğesini seçin1
. Çıkar 5 puanınızı bayt. Ancak, aşağıdaki notu not edin.
Not!
Çıkmaz sokaklar mümkündür. Programınız veya işleviniz bunlardan kaçınmalıdır. İşte bir örnek:
Güdük: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103203303203203203 Güdük: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103203303203203203 Güdük: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103203203203203203203203203203203203 Güdük: 012031021301231032013021031201321023012031021320123021031201302310320123021320310230120321023120130210312301320310213012032102301320312302103203303203203203203
Bu sekansların her biri daha fazla genişletilemez (a kullanılmadan 4
). Ancak, ilk iki ile ikinci ikisi arasında önemli bir fark olduğunu da unutmayın. Bunu X
netleştirmek için paylaşılan ilk alt diziyi bir ile değiştireceğim .
Güdük: X2130120 Güdük: X2130123 Güdük: X320 Güdük: X321301203102130
Son iki basamak X
vardır 10
, bu yüzden bir sonraki basamağı için tek olası seçeneklerdir 2
ve 3
. Seçmek 2
, dizinin sona ermesi gereken bir duruma yol açar . Açgözlü algoritma olacak değil burada çalışıyorum. (Yine de geri izleme olmadan değil.)
n
, ancak programımın bulduğu kütüklerin her seferinde ortalama 10 basamak uzadıkları göz önüne alındığında, sonsuz bir dizinin var olduğundan eminim. Yarı açgözlü bir algoritmanın keyfi olarak büyük diziler için nasıl test edilebileceğinden emin değilim. Ben sınırlayabilir gereksinimi için n
= 1000 ve daha yüksek ilgili değil endişe n
.
AA
gerçekten tip olduğu ABA
yerlerde B
boş. Bu belki de bazı çözümleri kolaylaştırmaya yardımcı olabilir.
n
? Birisi sezgisel yarı açgözlü algoritma verirse, çok büyük bir süre için sorunlara yol açıp açmadığını nasıl kontrol edersiniz? Genel problem ilginç bir sorundur ve desenden kaçınmak için modelin bir kısmının uzunluğunu kısıtladığımız hiçbir şey bulamadım. Birisi genel bir tarif üretebilirse, bunun en iyi yaklaşım olmasını bekliyorum.