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, 4bir 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ı, nyasaklanmış 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
0123izin verilir. - B A. Bu durumu önlemek için daha artık
012345tarafından takip edilecek olan6çünkü0123451bu vardır:1-2345-1. Başka bir deyişle, dizi önemsiz ve ilgisiz olacaktır. nsert 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ümnuzunluk 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
1ve varsa3olası 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 Xnetleş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 Xvardır 10, bu yüzden bir sonraki basamağı için tek olası seçeneklerdir 2ve 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.
AAgerçekten tip olduğu ABAyerlerde Bboş. 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.