#!/usr/bin/env python3 #################### # 0. Pomocné funkce: # Vrací pozici transformovanou o daný počet otočení doprava def poziceDoprava(otoceni, r, s): # Transformace o jedno otočení doprava: # - řádkem je původní sloupec # - sloupcem je původní řádek počítaný od pravého okraje (nejpravější # políčko má index K-1) if otoceni == 0: return(r, s) elif otoceni == 1: return(s, K - 1 - r) elif otoceni == 2: return(K - 1 - r, K - 1 - s) elif otoceni == 3: return(K - 1 - s, r) # Vrací pozici transformovanou o daný počet otočení doleva # Otáčku o k vlevo získáme pomocí (4 - k) % 4 otočení doprava: (0,1,2,3)->(0,3,2,1) def poziceDoleva(otoceni, r, s): return poziceDoprava((4 - otoceni) % 4, r, s) #################### # 1. Načtení vstupu: text = input() K = int(input()) mrizka = [] for i in range(K): mrizka.append(input()) # Doplníme text na délku K*K: # Kolikrát je nutné přidat "KSP" na konec? prodlouzeni = (K * K - len(text)) // 3 + 1 # // je celočíselné dělení text += 'KSP' * prodlouzeni # Není nutné, ale pro preciznost: Prodloužili jsme text ještě o kousek více, # odsekneme přečnívající písmena text = text[0:(K * K)] ############################### # 2. Samotné šifrování mřížkou: # Pro čtyři otočení mřížky (0, 1, 2, 3) ji vždy celou projdeme a za každou díru # zapíšeme do výsledné tabulky znak na správné místo (podle otočení) vysledek = [] znak = 0 for i in range(K): vysledek.append(['.'] * K) # Inicializace výstupu, zatím vyplněného . for otoceni in (0, 1, 2, 3): for r in range(K): for s in range(K): # Otáčíme mřížkou doprava, což je stejné jako kdybychom # souřadné osy otočili o otáčku doleva. (R, S) = poziceDoleva(otoceni, r, s) if mrizka[R][S] == '.': vysledek[r][s] = text[znak] znak += 1 #zapis(otoceni, r, s) ###################################### # 3. Vypsání výsledku ve tvaru mřížky: for i in range(K): print(''.join(vysledek[i]))