Skip to content

Instantly share code, notes, and snippets.

@ifnull
Last active February 6, 2016 20:51
Show Gist options
  • Save ifnull/aeff826452352784935c to your computer and use it in GitHub Desktop.
Save ifnull/aeff826452352784935c to your computer and use it in GitHub Desktop.
Print letters from a matrix in a spiral direction inward.
"""Alphabet Matrix.
Usage:
alphabet_matrix.py
Options:
-h --help Show this screen.
--version Show version.
"""
import string
import random
import numpy as np
from docopt import docopt
def main(args):
"""Main."""
grid_height = 50
matrix = generate_matrix(grid_height)
print_matrix(matrix)
result = ""
cols = len(matrix[0])
while True:
# Right
for x in range(0, cols):
result += str(matrix[0][x])
matrix.pop(0)
# Down
for x in range(0, len(matrix)):
result += str(matrix[x][cols - 1])
matrix[x] = np.delete(matrix[x], cols - 1)
cols -= 1
if cols == 0:
break
# Left
last = len(matrix) - 1
for x in reversed(range(0, cols)):
result += str(matrix[last][x])
matrix.pop(last)
# Up
for x in reversed(range(0, len(matrix))):
result += str(matrix[x][0])
matrix[x] = np.delete(matrix[x], 0)
cols -= 1
if cols == 0:
break
print "-- Result --"
print result
def generate_matrix(grid_height):
"""Generate matrix of random characters."""
count = grid_height * grid_height
chars = [random.choice(
string.ascii_uppercase + string.digits) for _ in range(count)]
# grid_height = 5
# chars = list("ABCDEFGHIJKLMNOPQRSTUVWXY")
return np.array_split(chars, grid_height)
def print_matrix(matrix):
"""Print matrix."""
print "-- Matrix --"
for row in matrix:
print ''.join(row)
if __name__ == '__main__':
args = docopt(__doc__, version='0.0.1')
main(args)
12:48 $ python alphabet_matrix.py
-- Matrix --
MUUA5QOBTCCQU3Q0WW0YJK8SUB09CY4K9JZ4L3099AC6EBC7EL
O4HT6YUB4B2IW28ID1KD6U1QD0HA4H9IL3C0HHLQZTHUYK775R
79DRDS4E63R2NHP7SPI01H4485DBJCYXQS6EMI91CLBL78JKQJ
BPOSIE97P7J293WD4UAHXKW678O9WKMDOKBY13DDAIYHM6BTDW
8O1V1TVVZJQMS8QJ25AXT8Z5KK4HVAQF0NBMR854Z6LT259LPD
7SA6YNI7PGH46AEW5NCSJ5EG5GZXP1TYNUY2CGWWXGHAD5T5VW
A67WC0T720KVMU03RDR55AMETKPG0LP32T6N37RRXLDQ3C9ZR7
1LPJHS1KWM15SCNOWCPNEZYJ1XWMYTHMIMIXCA1UL5QJBKE55F
3A7IL64M2NURD8UJRW1BMIN2DO3D4QBD0KPRYB4IWRF55H63SO
2RRZBZ2RHKIDUXOUW5134A65ETZTYBODETIP3A37ED4G4R2B4E
OB7XSOHMHMRKYXWFEWIG4SNX2IK24BTFU58CXKH0G5TAK06SM1
I7NQRY8UBF7FRHG7HPV5R8KYAMH9LL6FK2KVTD89JZ1RCKTA0B
A7TZNGSX9KP7DSQ6JT9Z9RLSKGI17STSGD2QCUCZK7Y5L9KW25
LV3MZGTFLA7GCE1Z54RHC6CZCD6ENCOB7ZJ1HEFPYVQGQUITLE
P04KQ9VPHXGL0LGTHJOIO5T9CSWR1PJ4FVSNO770R4L7DZ03CM
A4KBRD4UHYKB3HZFL13Q9OZ15JRPD5EHEDRF7SUALY7V03XF9D
UOXCB5W9RTJHTOCBRU39PPBJB3DER1C3EFBNI1G818P5B6U0DG
YNSA6060RDSDWUOSHDBPUG2CSQUNDGZBUH4JYPLWFXRPRIKDXV
WQ05XMUQ1UIN3WP0ORHG0CQ4RUD0IAGF0SW8PW7MWUTGV10M1X
FVED3YMQQENLLY46YHA1UOK6NAH3N6BSSIE5AFHGTKTZ89AN0A
FVKJMUUP3OV7HIRBW0CMDLXWVZF8TNEFKWTUNK7K4F3CBW71V0
J8A2OFWQNOUBJ7K99DUYLHJ72BRH3TOURG5DZPHFGLM5TSSN70
VQR7J1MC36AONOZC4OMJNFO1VB6GPLLC0FUB0Q9M54L7MQ50T1
CXKKEJD7ZMZZB2OWPG4ZNNF286K89TIEDMLUG6DS10JSIKQWQ8
0IK63R2COW9X0K54A09U7AG6VAJT9PFDLI57OOUC5WI0YSFVAE
WQ8FAEZBT2VTYJW0YITQD58KN66TQT785PMSNSWL3N4YS6713W
4LP8U9HFHPHJVW09O5R6XDKJSBRQ07WVV3QBM9SHSCMEP9KD9Z
R6X6Q0QSG59KB723861LDNHZBAFLRGT0X0W4NC8PRN7W4Z1K6U
W3N7M7RB8DTN49MS4DNLV7N9PK5I2AJFH8L6ZZSZB0NKEM3F3D
CG2IV71085T3ZHEEMP1UJOLCU1P4UO3MDKF8ZL1VK35E2VY7WP
EWY5CIZZMTS36B8E7W6TD8ROV7FRN85SDQ37DMJ7CG9K95SIAQ
BYST4VCRTBYWR77DEILK1QKM0103FMD05ZQ5KF3N0PR94HOUBQ
PX3VEGFFUZ2R5FCQY05ONBYJCJ8GQAUWVP31H2B5FA9CM8RLEM
2DMPENVVRUA9V5D4XZ2I4EDDXCZ3BR6R815F6B7BXP9W69ZAZ1
DOSELS7PHII8EB2F5P8OXRHP5LX8KK55TMQCWJPYOM5ZXLD6A3
RPB4GVABYSRQ9I8O9OK2UJ0SBGEPYUGONH87D7V2ESYT5CWFNE
YHFYAIGROIJEVLE3W2U3PTVBSGK2KF5D6VMI3AHTBNRN6R6A1H
EAZ3BEEWAWYF9IQFPORBZ3RA20SP9JFP3RGKZ14IM70PYPEZJN
L7Q4AVA0015R19478CC80HUXOG8JS487DTSN2RS65VOJOAUOG5
WWJXZ7Y3OAYB6IA0SWXWLNFX83EJT7ULA6MY6CX16C38SE3Y07
I1SFQR9Y20R9X9U1LYMRUMJW0BMHZ8EIYB98WUEUZH2LHUWYOQ
64RVICK0CBMQGZA6UWC3OR0JI9V6ZA5CJGQWNII38LBKG31Z3W
R3YRQJ1CYZDG6AE79KQYPKD5YUATAWE3I02E91KZZXJAX8WZNX
7NPN6IXT65MJLRENIPTA1EY84JA1Y3YDYSGT2SJILG16W2QGGS
781YG3CUHELSYIPG18D924EB8DHFANQ3KBM1IB4QRPN401ZMHN
H0FIUJODIWWIBEJOE9PT3SGTH6BOE25CTS4MJJM3TKYULD5KLX
20LY2OXAV0TN6WBOJY0AT6PYSHJLFV7DNEMPUS46WOLC4T1KOM
TT3AJOWC7BXTH0X5LTXKCU33LLKC667EBBUFG2LQ0XPQWB3F5C
0GMJ81EFMNQ115S9K6T6T7STSJN16J1QSVLN5WND12ED4ULHSZ
56SUXRADZIB78WLLP8J332HTC5F38OYS5GEJPXWLLJ2P5HFZTC
-- Result --
MUUA5QOBTCCQU3Q0WW0YJK8SUB09CY4K9JZ4L3099AC6EBC7ELRJWDW7FOE1B5EMDGVXA0018EWZUDPQQM13EHN57QWXSNXMCZCTZFH5P2JLLWXPJEG5SYO83F5CTH233J8PLLW87BIZDARXUS650T2H77R6IWLEYRD2PBECWR4W0CVJFFWYUAPLAIO231A78B7O4HT6YUB4B2IW28ID1KD6U1QD0HA4H9IL3C0HHLQZTHUYK775QDPVR5S4M02LC9DX10V7TQA3963WABEZAN1JG0O3NGHLO5SHLU4DE21DNW5NLVSQ1J61NJSTS7T6T6K9S511QNMFE18JMGT008N341W7AHPODXYWG36LQIXQ8VVQNO40V77BRAL6SOP9DRDS4E63R2NHP7SPI01H4485DBJCYXQS6EMI91CLBL78JKTL5Z53BSAWT3F0DMN1N0WV1DKF7IULA6FAZOYYZZGMKKF3BWQPX0QL2GFUBBE766CKLL33UCKXTL5X0HTXB7CWOJA3LF1PYRSJQZFBSM3SY2NXP8KKRAKE0SXK43TN7R7P7A1OSIE97P7J293WD4UAHXKW678O9WKMDOKBY13DDAIYHM6B9T9E626TKI0XUK0A7S5QF7K13YSORZDW6EU3W1WQZ51T4CLOW64SUPMEND7VFLJHSYP6TA0YJOBW6NT0VAXO2YIYNRVFX43Y4EPVT5I768F6K72JD5ACBKMZQXZIJW6V1TVVZJQMS8QJ25AXT8Z5KK4HVAQF0NBMR854Z6LT255CKHR0K9UZ36I19WSQKS69ZMV5H89LCRPAEU3821DLUYKT3MJJM4STC52EOB6HTGS3TP9EOJEBIWWIDOJUG6QIQZABAGLEE4CVMQUA3EJOM3X6BRQZNRSBLHCYNI7PGH46AEW5NCSJ5EG5GZXP1TYNUY2CGWWXGHAD3B54KCLQD0BRV8BTMIYSP4E294M6X56YOSHGXW04NPRQ4BI1MBK3QNAFHD8BE429D81GPIYSLEHUC3IJCR7VEIVSNGVI7709ERJ1FUYM05D9GGYOZ6S0T720KVMU03RDR55AMETKPG0LP32T6N37RRXLDQJ5GAR5G7V5PGZC57S0YEWKEK9CWZTNPJ8LKA61GLIJS2TGSYDY3Y1AJ48YE1ATPINERLJM56TX1K9YAEGA7VFCZ1RQHZ2DMWUMU6W4VTS8H241KWM15SCNOWCPNEZYJ1XWMYTHMIMIXCA1UL5QF4T1YQL7PRTT3MLJI4M7N59R995YR0O32BJXZZK19E20I3EWATAUY5DKPYQK97EA6GDZYC0Y30WRBPVFRZ0BSFBC7CQPQQ09UPFXUMRM2NURD8UJRW1BMIN2DO3D4QBD0KPRYB4IWRD5Z7V4Y8XUKFL40WNCN03GPAPMSN7VCHL83IINWQGJC5AZ6V9IJ0RO3CWU6AZGQMBC2O0AOYHRUTM88GHTOZ3N3Q1RRHHL9BHHKIDUXOUW5134A65ETZTYBODETIP3A37EGJKYRL1FWT4G5153SRBKC0FXOEBM56ZUEUW89BYIE8ZHMB0WJMURMYL1U9X9R0A1WISIUZBT5D5P2WM6OOEUDTYXAKFMRKYXWFEWIG4SNX2IK24BTFU58CXKH09ZP0A8WMGKFMSCLHPZV7N5BY2TI61XC6YM6ALU7TJE38XFNLWXWS0AI6BY5YJRIA2YSTT9HV9ZAUVNISJKG7P7FRHG7HPV5R8KYAMH9LL6FK2KVTD8CF7UGL7H7H9DUWS8S1J3B7PVH4SR2NSTD784SJ8GOXUH08CC87491RFEQ89RW33NKJTXZOB7LNDHBLG7DSQ6JT9Z9RLSKGI17STSGD2QCUE7S1PWFKPQ6OS9CZLMF2BJ7A1ZKGR3PFJ9PS02AR3ZBROPFQI9V9EV5R6Z4BVY0BNJHL3WT30CE1Z54RHC6CZCD6ENCOB7ZJ1HO7IYPANZ0GONMNZZDKH6WD3IMV6D5FK2KGSBVTP3U2W3ELIB5F7BH97WJK2O7IYWUOHLGTHJOIO5T9CSWR1PJ4FVSNFNJ85UDBU7SB468751FC78HNOGUYPEGBS0JU2KO9O82DC78EM20W5OZKR4POCZFL13Q9OZ15JRPD5EHEDRB4WET5UL5MQWLF3Q35QMT55KK8XL5PHRXO8P5F4QDEES3904WC9B60SBRU39PPBJB3DER1C3EFHSIWGFMIP308KQZP18R6RB3ZCXDDE4I2ZXYE7M48OYAP49WYOHDBPUG2CSQUNDGZBU0SKR0DL5VXHDD5VWUAQG8JCJYBNO50IWPD65I0GOD0HRHG0CQ4RUD0IAGFSFUCED8V0FMS0DMF3010MKQ1KL61N1RT94MUCA1UOK6NAH3N6BEOLIF7WTJ358NRF7VOR8DTULL6QUZJYMDLXWVZF8TNTLTPT7GAOU4P1UCLOJVDXD7NNLHJ72BRH3P99Q0R2I5KP9N7ND5ANFO1VB6G8TTQLFABZHK8GF286KJ6RBSJK6VA6N
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment