'''Spiral Matrix''' # spiral :: Int -> [[Int]] def spiral(n): '''The rows of a spiral matrix of order N. ''' def go(rows, cols, x): return [list(range(x, x + cols))] + [ list(reversed(x)) for x in zip(*go(cols, rows - 1, x + cols)) ] if 0 < rows else [[]] return go(n, n, 0) # TEST ---------------------------------------------------- # main :: IO () def main(): '''Spiral matrix of order 5, in wiki table markup''' print(wikiTable( spiral(5) )) # FORMATTING ---------------------------------------------- # wikiTable :: [[a]] -> String def wikiTable(rows): '''Wiki markup for a no-frills tabulation of rows.''' return '{| class="wikitable" style="' + ( 'width:12em;height:12em;table-layout:fixed;"|-\n' ) + '\n|-\n'.join([ '| ' + ' || '.join([str(cell) for cell in row]) for row in rows ]) + '\n|}' # MAIN --- if __name__ == '__main__': main()