Це питання натхнене питанням Кевіна Круїссена .
Тепер, коли килим викладений, ми хочемо його прокатати. Ваше завдання - написати програму, яка займає рядок і повертає спіраль, зроблену з цієї рядка (що представляє собою згорнутий килим, поглянути збоку).
Процедура одного кроку прокатки килима така. Є приклад, який ілюструє, що я маю на увазі. Зауважте, що приклад починається з частково згорнутого килима для кращого розуміння:
ac
rpet
- відокремте «голову» від «хвоста» килима: голова - це те, що було згорнуто досі, хвіст - це те, що залишається прокатати.
Head: ac Tail:
rp et
- Поверніть голову на 90 °, за годинниковою стрілкою.
Rotated head: ra Tail (unchanged):
pc et
- якщо ширина нової головки (тут
2) менша або дорівнює довжині хвоста (тут2)- потім покладіть його на хвіст
- інакше килим (як це було на початку кроку) був прокатував
New carpet: ra
pc
et
Повторіть процедуру стільки разів, скільки потрібно.
Два приклади, що показують усі етапи прокатки килима:
carpet
c
arpet
ac
rpet
ra
pc
et
0123456789
0
123456789
10
23456789
21
30
456789
432
501
6789
Деякі заходи:
- Вам не потрібно показувати всі проміжні кроки, лише прокатаний килим (наприклад, якщо ви знайдете неітераційний спосіб обчислення результату, це ідеально). Крім того, вам не потрібно друкувати будь-які провідні пробіли, у наведених вище прикладах я показую їх лише для вирівнювання матеріалів.
- Введення - це рядок, список / масив знаків
- Виведення друкується у stdout або у файл.
- Введення приємно: довжина становить щонайменше 1 char, а щонайбільше - константа достатньо невелика, щоб не викликати проблем, але ви не можете використовувати цю константу у своїй програмі; вміст рядка - це лише приємні символи ([a-zA-Z0-9]), кодування за вашим уподобанням.
- Це код-гольф , тому найкоротша відповідь у байтах виграє. Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з не кодовими гольф-мовами. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування.
- Лазівки за замовчуванням заборонені.
- Якщо можливо, додайте посилання з тестом для вашого коду.
- Також додайте пояснення до своєї відповіді, якщо вважаєте, що це потрібно.
ProgrammingPuzzlesAndCodeGolf- кінцева довжина хвоста, більша за 1, спричинила мене.
printвсередині lambda.