Arka fon
Fibonacci döşemesi, (1D) çizgisinin iki segment kullanan bir döşemesidir: kısa bir, S ve uzun bir L, (uzunluk oranı altın orandır, ancak bu zorlukla ilgili değildir). Bu iki protokolü kullanan bir döşemenin aslında bir Fibonacci döşemesi olması için aşağıdaki koşulların yerine getirilmesi gerekir:
- Döşeme, SS alt dizisini içermemelidir .
- Döşeme, alt LLL içermemelidir .
- Aşağıdaki değişikliklerin tümünü gerçekleştirerek yeni bir döşeme oluşturulursa, sonuç yine de bir Fibonacci döşeme olmalıdır:
- LL → S
- S → L
- L → (boş dize)
Bazı örneklere bakalım:
SLLSLLSLLSLS
Bu geçerli bir döşeme gibi görünüyor, çünkü iki * S * veya üç * L * içermiyor, ancak kompozisyonu gerçekleştirelim:
LSLSLSLL
Bu hala iyi gözüküyor, ama bunu tekrar oluşturursak,
LLLS
ki bu geçerli bir Fibonacci döşemesi değildir. Bu nedenle, önceki iki dizi de geçerli eğimler değildi.
Öte yandan, eğer
LSLLSLSLLSLSLL
ve tekrar tekrar kısa dizilere
LSLLSLLS
LSLSL
LL
S
tüm sonuçlar geçerli Fibonacci eğimleridir, çünkü bu dizelerin içinde hiçbir zaman SS veya LLL elde edemeyiz .
Daha fazla okuma için, bu döşemeyi Penrose eğimlerine basit bir 1D benzetmesi olarak kullanan bir tez vardır.
Meydan okuma
Negatif olmayan bir tamsayı N verildiğinde , tüm geçerli Fibonacci döşemelerini N karakterleri ( S
veya L
) içeren dizeler biçiminde döndüren bir program veya işlev yazın .
Girdi işlev argümanı STDIN veya ARGV aracılığıyla alınabilir ve sonucu döndürülebilir veya yazdırılabilir.
Bu kod golf, en kısa cevap (bayt cinsinden) kazanır.
Örnekler
N Output
0 (an empty string)
1 S, L
2 SL, LS, LL
3 LSL, SLS, LLS, SLL
4 SLSL, SLLS, LSLS, LSLL, LLSL
5 LLSLL, LLSLS, LSLLS, LSLSL, SLLSL, SLSLL
...
8 LLSLLSLS, LLSLSLLS, LSLLSLLS, LSLLSLSL, LSLSLLSL, SLLSLLSL, SLLSLSLL, SLSLLSLL, SLSLLSLS
LSLSL
->LL
?