Initial release

This commit is contained in:
Francois JUMELLE
2021-05-03 22:32:40 +02:00
commit 20526d93c8
928 changed files with 452368 additions and 0 deletions

101
Matrix reloaded.py Normal file
View File

@@ -0,0 +1,101 @@
# input = "otDexiRif.rel dMdaea"
# operations = (('PC',2,4), ('PL',1,3), ('RC',6,2), ('RL',1,4))
# cols = 7
# input = "iuB anC ePeid vgeUnon"
# operations = (('PC',2,4), ('PL',1,3), ('RC',6,2), ('RL',1,4))
# cols = 7
input = "lire dsVl t'e:slaue lS ah!dceelenr Geseviat1un Lcvavhrh le'tzne nspi ne sp oe s ulo3gstraseesoocacala eo doi0iu g rtbhipeore!riCTaovcur ert"
operations = (('RC',8,5), ('PC',3,13), ('RL',11,7), ('RC',10,7), ('PC',12,4), ('RL',6,5), ('PL',2,8), ('PC',1,6), ('PL',3,7), ('RC',2,8), ('RL',1,6), ('PL',4,10), ('RL',9,5), ('PC',11,5), ('RL',5,9), ('PC',7,9), ('RC',11,4), ('PL',11,1), ('RC',11,5), ('PC',8,11))
cols = 13
rows = len(input) // cols
if cols*rows != len(input):
raise ValueError("cols*rows error")
min_cols = 0
min_rows = 0
for operation in operations:
ope = operation[0]
arg1 = operation[1]
arg2 = operation[2]
if ope == "PC":
min_cols = max(min_cols, arg1, arg2)
elif ope == "PL":
min_rows = max(min_rows, arg1, arg2)
elif ope == "RC":
min_cols = max(min_cols, arg1)
elif ope == "RL":
min_rows = max(min_rows, arg1)
else:
raise ValueError("incorrect operation " + ope)
if cols < min_cols:
raise ValueError("min cols error")
if rows < min_rows:
raise ValueError("min rows error")
def print_table(table):
for row in range(len(table)):
for col in range(len(table[row])):
print(table[row][col], end=" ")
print("")
print("")
def pc(col1, col2):
global table
for row in table:
c = row[col1-1]
row[col1-1] = row[col2-1]
row[col2-1] = c
return
def pl(row1, row2):
global table
row = table[row1-1].copy()
table[row1-1] = table[row2-1].copy()
table[row2-1] = row.copy()
return
def rc(col, rot):
global table
s = list()
for row in table:
s.append(row[col-1])
s = s[rot:]+s[:rot]
for row in range(len(table)):
table[row][col-1] = s[row]
return
def rl(row, rot):
global table
table[row-1] = table[row-1][rot:] + table[row-1][:rot]
return
table = list()
for row in range(rows):
table.append([None,]*cols)
for i in range(len(input)):
y = i//rows
x = i%rows
table[x][y] = input[i]
print_table(table)
for i in range(len(operations)):
operation = operations[len(operations) - i - 1]
print(operation)
ope = operation[0]
arg1 = operation[1]
arg2 = operation[2]
if ope == "PC":
pc(arg1, arg2)
elif ope == "PL":
pl(arg1, arg2)
elif ope == "RC":
rc(arg1, arg2)
elif ope == "RL":
rl(arg1, arg2)
print_table(table)