Masala #Q1THHMORIL

Xotira 32 MB Vaqt 1000 ms
14

Ekranni qulflash naqshlari

Siz geometrik naqshni xavfsizlik chorasi sifatida ishlatishga imkon beruvchi ko'plab smartfonlar bilan tanish bo'lishingiz mumkin. Qurilmani qulfdan chiqarish uchun ekran bo‘ylab naqshni o‘tkazayotganda barmog‘ingizni ko‘tarmasdan surish orqali to‘rdagi nuqta/nuqtalar ketma-ketligini ulashingiz kerak.

Quyidagi rasmda 7 nuqta/nuqta namunasi mavjud: (A -> B -> I -> E -> D -> G -> C).

lock_example.png

Sizning vazifangiz ma'lum uzunlikka ega bo'lgan birinchi nuqtadan boshlab mumkin bo'lgan naqshlar sonini qaytaradigan funktsiyani amalga oshirishdir.

Aniqroq qilib aytganda, countPatternsFrom(firstPoint, uzunlik) funksiyasi uchun firstPoint parametri naqshlaringiz boshlanadigan to‘rdagi nuqtaga (masalan: “A”) mos keladigan bitta belgidan iborat qatordir va parametr uzunligi butun sonni ko‘rsatadi. har bir naqshda bo'lishi kerak bo'lgan nuqtalar soni (uzunligi).

Masalan, countPatternsFrom("C", 2), "C" dan boshlab ikkita ikkita nuqtaga ega naqshlar sonini qaytarishi kerak. Bu holatda qaytarish qiymati 5 bo'ladi, chunki 5 ta mumkin bo'lgan naqsh mavjud:

(C -> B), (C -> D), (C -> E), (C -> F) va (C -> H).

Shuni yodda tutingki, bu kata naqshlarning o'zini emas, balki naqshlar sonini qaytarishni talab qiladi, shuning uchun siz ularni faqat hisoblashingiz kerak. Bundan tashqari, funksiyaning nomi ishlatiladigan dasturlash tiliga qarab har xil bo'lishi mumkin, ammo g'oya bir xil bo'lib qoladi.


Kiruvchi ma'lumotlar:

Birinchi qatorga HARF va SON


Chiquvchi ma'lumotlar:

Masalada so'ralgan javobni chop eting


Misollar
# input.txt output.txt
1
A 0
0
2
A 10
0
3
E 4
256
Izoh:

Qoidalar
Naqshda nuqta/nuqtalarni takrorlab bo'lmaydi: ular faqat bir marta, ko'pi bilan ishlatilishi mumkin.
Naqshda har qanday keyingi ikkita nuqta/nuqta to'g'ridan-to'g'ri to'g'ri chiziqlar bilan faqat quyidagi usullardan birida ulanishi mumkin:
Gorizontal: namunadagi rasmdagi (A -> B) kabi.
Vertikal: misol naqsh tasviridagi (D -> G) kabi.
Diagonal bo'yicha: misol naqsh tasvirida (I -> E), shuningdek (B -> I) kabi.
Ularning orasidagi "ishlatilgan" nuqtadan o'tish: misol namunasi tasvirida (G -> C) E orqali o'tish kabi. Bu eng qiyin qoida. Odatda, siz G ni C ga ulay olmaysiz, chunki E ular orasida, ammo E siz kuzatayotgan naqshning bir qismi sifatida ishlatilgan bo'lsa, siz E dan o'tuvchi G ni C ga ulashingiz mumkin, chunki E e'tiborga olinmaydi, chunki u allaqachon bir marta ishlatilgan.

Namuna testlarida kodingizni tekshirishga yordam beradigan ba'zi holatlar uchun kombinatsiyalar soniga misollar mavjud.

Haskell Eslatma: Vertex ma'lumotlar turi bitta belgili satrlar o'rniga taqdim etiladi. Batafsil ma'lumot uchun yechimni sozlash kodiga qarang.

Qiziqarli fakt:

Agar qiziqib qolgan bo'lsangiz, Android qulflangan ekrani uchun yaroqli naqshlar 4 dan 9 gacha nuqta/nuqta bo'lishi kerak. Jami 389112 ta mumkin boʻlgan yaroqli naqshlar mavjud; ya'ni uzunligi 4 va 9 nuqta/nuqta orasidagi naqshlar.