El juego se compone de dos stacks, llamados a y b.
# Generación de la pila a
from random import sample, seed
seed()
n = 10 # número de elementos de la pila
a = sample(range(10, 2*n+11), n)
a = [2,1,3,6,5,8] # valores de ejemplo
b = []
print('a:', a)
print('b:', b)
a: [2, 1, 3, 6, 5, 8] b: []
# sa : swap a - intercambia los dos primeros elementos encima del stack a. No hace nada si hay uno o menos elementos.
def sa(a,b):
if len(a) > 1:
a[0],a[1] = a[1],a[0]
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = sa(a,b)
print(a)
print(b)
[2, 1, 3, 4] [7, 8, 9]
# sb : swap b - intercambia los dos primeros elementos encima del stack b. No hace nada si hay uno o menos elementos.
def sb(a,b):
if len(b) > 1:
b[0],b[1] = b[1],b[0]
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = sb(a,b)
print(a)
print(b)
[1, 2, 3, 4] [8, 7, 9]
# ss : swap a y swap b a la vez.
def ss(a,b):
sa(a,b)
sb(a,b)
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = ss(a,b)
print(a)
print(b)
[2, 1, 3, 4] [8, 7, 9]
# pa : push a - toma el primer elemento del stack b y lo pone encima del stack a. No hace nada si b está vacío.
def pa(a,b):
if len(b) > 0:
a.insert(0, b[0])
b.pop(0)
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = pa(a,b)
print(a)
print(b)
[7, 1, 2, 3, 4] [8, 9]
# pb : push b - toma el primer elemento del stack a y lo pone encima del stack b. No hace nada si a está vacío.
def pb(a,b):
if len(a) > 0:
b.insert(0, a[0])
a.pop(0)
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = pb(a,b)
print(a)
print(b)
[2, 3, 4] [1, 7, 8, 9]
# ra : rotate a - desplaza hacia arriba todos los elementos del stack a una posición, de forma que el primer elemento se convierte en el último.
def ra(a,b):
if len(a) > 1:
a.append(a.pop(0))
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = ra(a,b)
print(a)
print(b)
[2, 3, 4, 1] [7, 8, 9]
# rb : rotate b - desplaza hacia arriba todos los elementos del stack b una posición, de forma que el primer elemento se convierte en el último.
def rb(a,b):
if len(b) > 1:
b.append(b.pop(0))
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = rb(a,b)
print(a)
print(b)
[1, 2, 3, 4] [8, 9, 7]
# rr : rotate a y rotate b - desplaza al mismo tiempo todos los elementos del stack a y del stack b una posición hacia arriba, de forma que el primer elemento se convierte en el último.
def rr(a,b):
ra(a,b)
rb(a,b)
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = rr(a,b)
print(a)
print(b)
[2, 3, 4, 1] [8, 9, 7]
# rra : reverse rotate a - desplaza hacia abajo todos los elementos del stack a una posición, de forma que el último elemento se convierte en el primero.
def rra(a,b):
if len(a) > 1:
a.insert(0, a.pop())
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = rra(a,b)
print(a)
print(b)
[4, 1, 2, 3] [7, 8, 9]
# rrb : reverse rotate b - desplaza hacia abajo todos los elementos del stack b una posición, de forma que el último elemento se convierte en el primero.
def rrb(a,b):
if len(b) > 1:
b.insert(0, b.pop())
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = rrb(a,b)
print(a)
print(b)
[1, 2, 3, 4] [9, 7, 8]
# rrr : reverse rotate a y reverse rotate b - desplaza al mismo tiempo todos los elementos del stack a y del stack b una posición hacia abajo, de forma que el último elemento se convierte en el primero.
def rrr(a,b):
rra(a,b)
rrb(a,b)
return a,b
a = [1,2,3,4]
b = [7,8,9]
a,b = rrr(a,b)
print(a)
print(b)
[4, 1, 2, 3] [9, 7, 8]