pasosB
por el nuevo método: buscando el hueco¶a_original = [11, 20, 9, 27, 12, 21, 19, 28, 16, 30, 26, 14, 15, 5, 25, 8, 29, 23, 24, 3, 31, 6, 4, 32, 22, 2, 17, 13, 1, 7, 10, 18]
a = [3, 31, 6, 4, 32, 22, 2, 17, 13, 1, 7, 10, 18, 12, 28, 30]
b = [26, 25, 24, 23, 21, 20, 19, 16, 15, 14, 11, 9, 8, 5, 29, 27]
deberia_ser_pasosB = [-2, -2, -3, -2, -2, 4, -2, 7, -6, -2, -3, -5, 7, -6, -1, -2]
target_manual = [29,29,5,29,29,21,29,16,11,29,5,9,16,11,27,29]
def necesariosB_nuevo(a, b): # crea el target que es el número de B que se ha de poner el primero de B, para cada valor de A
pasosB = []
for i in range(len(a)):
if a[i] < min(b) or a[i] > max(b):
target = max(b)
else:
for j in range(len(b)-1):
if a[i] < b[j] and a[i] > b[j+1]:
target = b[j+1]
elif a[i] < b[-1] and a[i] > b[0]:
target = b[0]
# en este momento ya tenermos el target completamente calculado
# ahora toca calcular pasosB
if b.index(target) < len(b)/2:
pasosB.append(b.index(target))
else:
pasosB.append(-(len(b)- b.index(target)))
return pasosB
print(necesariosB_nuevo(a, b))
print(necesariosB_nuevo(a, b) == deberia_ser_pasosB)
[-2, -2, -3, -2, -2, 4, -2, 7, -6, -2, -3, -5, 7, -6, -1, -2] True
########## CÓDIGO ANTIGUO ############
def necesariosB(a, b): # array pasosB calcula los pasos de B necesarios para colocar cada elemento de A dentro de su sitio en B
target = [None]*len(a)
for i in range(len(a)): # objetivo_primero es el número que se ha de poner en la primera posición de la pila B
if a[i] < min(b): # si el elemento de A considerado es menor que el mayor de B entonces
objetivo_primero = max(b) # el objetivo_primero será el mayor de B
target[i] = objetivo_primero
else: # objetivo_primero en este caso será el maximo de los inferiores en B al valor iésimo de A
objetivo_primero = min(b) #se inicializa en el valor mínimo de la pila B
target[i] = objetivo_primero
for j in range(len(b)):
if b[j] < a[i] and b[j] > objetivo_primero:
objetivo_primero = b[j]
target[i] = objetivo_primero
# el objetivo_primero se ha de situar el primero de la pila B
if b.index(objetivo_primero) < len(b)/2:
pasosB.append(b.index(objetivo_primero))
else:
pasosB.append(-(len(b)- b.index(objetivo_primero)))
print(target)
print(a)
print(b)
print()