Aquí hay un programa de Python para enumerar todos los números deseados (método de fuerza bruta lenta, pero lo hace en unos segundos. Una solución más rápida sigue más adelante) …
# brute force program to enumerate strictly increasing 6 digit numbers def isAscending(num):
num_list = [int(y) for y in str(num)]
for x in range(len(num_list)-1):
if num_list[x] >= num_list[x+1]:
return False
return True ascen_nums = [x for x in range(100000, 1000000) if isAscending(x)] print len(ascen_nums)
print ascen_nums
# brute force program to enumerate strictly increasing 6 digit numbers def isAscending(num):
num_list = [int(y) for y in str(num)]
for x in range(len(num_list)-1):
if num_list[x] >= num_list[x+1]:
return False
return True ascen_nums = [x for x in range(100000, 1000000) if isAscending(x)] print len(ascen_nums)
print ascen_nums
# brute force program to enumerate strictly increasing 6 digit numbers def isAscending(num):
num_list = [int(y) for y in str(num)]
for x in range(len(num_list)-1):
if num_list[x] >= num_list[x+1]:
return False
return True ascen_nums = [x for x in range(100000, 1000000) if isAscending(x)] print len(ascen_nums)
print ascen_nums
- ¿Cuántos estados únicos tiene un cubo de Rubik?
- ¿Cuál es la respuesta al problema lógico de Singapur? ¿Cuándo es el cumpleaños de Cheryl?
- ¿Es posible resolver un cubo de Rubik cara a cara?
- Cómo escribir código que modele la situación descrita en el rompecabezas ‘isleño de ojos azules’
- ¿Alguien puede resolver el siguiente enigma y si lo has visto, entonces dónde?
# brute force program to enumerate strictly increasing 6 digit numbers def isAscending(num):
num_list = [int(y) for y in str(num)]
for x in range(len(num_list)-1):
if num_list[x] >= num_list[x+1]:
return False
return True ascen_nums = [x for x in range(100000, 1000000) if isAscending(x)] print len(ascen_nums)
print ascen_nums
Y si estaba interesado, aquí está el resultado …
84
[123456, 123457, 123458, 123459, 123467, 123468, 123469, 123478, 123479, 123489, 123567, 123568, 123569, 123578, 123579, 123589, 123678, 123679, 123689, 123789, 124567, 124568, 124569, 124578, 124567, 124568, 124569, 124578 , 124589, 124678, 124679, 124689, 124789, 125678, 125679, 125689, 125789, 126789, 134567, 134568, 134569, 134578, 134579, 134589, 134678, 134679, 134689, 134789, 135678, 135679, 135689, 135789, 135678, 135679, 135689, 135789 , 145678, 145679, 145689, 145789, 146789, 156789, 234567, 234568, 234569, 234578, 234579, 234589, 234678, 234679, 234689, 234789, 235678, 235679, 235689, 235789, 236789, 245678, 24568, 245678, 24568, 245679 , 246789, 256789, 345678, 345679, 345689, 345789, 346789, 356789, 456789]
Lo sé, lo sé … la fuerza bruta es demasiado mala para resolver cualquier problema. Entonces, aquí hay otra solución en python. Espero que ames la recursividad …
def gen_asc_number(start, numdigits):
scale = 10**(numdigits-1)
for x in range(start, 10-numdigits+1):
if numdigits > 1:
for rest in gen_asc_number(x+1, numdigits-1):
yield x*scale + rest
else:
yield x
resultado = lista (gen_asc_number (1, 6))
imprimir len (resultado)
resultado de impresión
Esta solución es asintóticamente la mejor … solo supera los números que se ajustan a los criterios y no otros. Por supuesto, está en Python, por lo que no es difícil superar su tiempo de ejecución. Demonios, una fuerza bruta C podría acercarse para vencer a esta solución recursiva (aunque en realidad no …).