Peter Leow
Решил использовать это как упражнение, чтобы сблизиться с моей новообретенной любовью к питону. Решение простое, я имею в виду. Просто дополните список целых чисел нулями до максимального количества цифр, доступных в списке, отсортируйте их в порядке убывания, а затем объедините исходный список целых чисел в соответствии с этим порядком. Оказалось, что я весело флиртую со списком и словарем на Python, результат показан:
"""
largest_possible_integer.py
by Peter Leow
Coding challenge: arrange numbers to form the largest possible integer
"""
import random
# Create a list of x number of random integers from 0 to 255
x = 50
list_int = random.sample(range(0,256), x)
print("List of {} positive integers (0 to 255): {}".format(x, list_int))
# Find the max integer in the list
max_int = max(list_int)
print("Max integer = {}".format(max_int))
# Find number of digits for this max integer
max_digit_count = len(str(max_int))
print("Most number of digits = {}".format(max_digit_count))
# Create a dictionary with list elements as keys and
# their zero-padded values up to max_digit_count as values
dict_int = {}
for int in (list_int):
dict_int[int] = int * 10**(max_digit_count - len(str(int)))
print("Dictionary = {}".format(dict_int))
# Sort the original integer list based on the descending order
# of their padded values in the dictionary
sorted_list_int = sorted(list_int, key=dict_int.__getitem__, reverse=True)
print("Sorted integer list to form the largest integer = {}".format(sorted_list_int))
largest_integer = ''.join(str(int) for int in sorted_list_int)
print("The largest integer is {}".format(largest_integer))
Попробуйте это сделать вот так
игровая площадка[
^]. Измените значение x и получайте удовольствие! Отказ от ответственности: переполнение на свой страх и риск!
Два примера выходных данных:
List of 10 positive integers (0 to 255): [93, 185, 191, 48, 209, 26, 36, 42, 25, 107]
Max integer = 209
Most number of digits = 3
Dictionary = {48: 480, 209: 209, 42: 420, 36: 360, 25: 250, 185: 185, 26: 260, 107: 107, 93: 930, 191: 191}
Sorted integer list to form the largest integer = [93, 48, 42, 36, 26, 25, 209, 191, 185, 107]
The largest integer is 934842362625209191185107
и
List of 50 positive integers (0 to 255): [26, 2, 246, 241, 107, 92, 215, 173, 119, 176, 156, 235, 125, 165, 129, 13, 19, 74, 227, 81, 248, 159, 102, 180, 90, 63, 123, 232, 217, 133, 224, 219, 98, 57, 95, 179, 245, 140, 151, 68, 254, 250, 117, 203, 9, 52, 222, 34, 41, 11]
Max integer = 254
Most number of digits = 3
Dictionary = {129: 129, 2: 200, 107: 107, 133: 133, 9: 900, 11: 110, 140: 140, 13: 130, 19: 190, 151: 151, 26: 260, 156: 156, 159: 159, 34: 340, 165: 165, 41: 410, 173: 173, 176: 176, 179: 179, 180: 180, 57: 570, 117: 117, 52: 520, 68: 680, 74: 740, 203: 203, 81: 810, 215: 215, 217: 217, 90: 900, 219: 219, 92: 920, 222: 222, 95: 950, 224: 224, 98: 980, 227: 227, 102: 102, 232: 232, 63: 630, 235: 235, 241: 241, 245: 245, 246: 246, 119: 119, 248: 248, 250: 250, 123: 123, 125: 125, 254: 254}
Sorted integer list to form the largest integer = [98, 95, 92, 90, 9, 81, 74, 68, 63, 57, 52, 41, 34, 26, 254, 250, 248, 246, 245, 241, 235, 232, 227, 224, 222, 219, 217, 215, 203, 2, 19, 180, 179, 176, 173, 165, 159, 156, 151, 140, 133, 13, 129, 125, 123, 119, 117, 11, 107, 102]
The largest integer is 9895929098174686357524134262542502482462452412352322272242222192172152032191801791761731651591561511401331312912512311911711107102
++ + + + [Раунд 2]+++++
Насторожил пполиморф. Нашел озорство, которое вызвано одиночными цифрами. Увидеть исправленный код:
"""
largest_possible_integer.py
by Peter Leow
Coding challenge: arrange numbers to form the largest possible integer
"""
import random
# Create a list of x number of random integers from 0 to 255
x = 50
# list_int = random.sample(range(0,256), x)
list_int = [26, 2, 246, 241, 107, 92, 215, 173, 119, 176, 156, 235, 125, 165, 129, 13, 19, 74, 227, 81, 248, 159, 102, 180, 90, 63, 123, 232, 217, 133, 224, 219, 98, 57, 95, 179, 245, 140, 151, 68, 254, 250, 117, 203, 9, 52, 222, 34, 41, 11]
print("List of {} positive integers (0 to 255): {}".format(x, list_int))
# Find the max integer in the list
max_int = max(list_int)
print("Max integer = {}".format(max_int))
# Find number of digits for this max integer
max_digit_count = len(str(max_int))
print("Most number of digits = {}".format(max_digit_count))
# Create a dictionary with list elements as keys and
# their zero-padded values up to max_digit_count as values
dict_int = {}
for int in (list_int):
length = len(str(int))
if length == 1: # if single digit
# make it the max in its range e.g. 2 to 299
dict_int[int] = (int + 1) * 10**(max_digit_count - length) - 1
else:
dict_int[int] = int * 10**(max_digit_count - length)
print("Dictionary = {}".format(dict_int))
# Sort the original integer list based on the descending order
# of their padded values in the dictionary
sorted_list_int = sorted(list_int, key=dict_int.__getitem__, reverse=True)
print("Sorted integer list to form the largest integer = {}".format(sorted_list_int))
largest_integer = ''.join(str(int) for int in sorted_list_int)
print("The largest integer is {}".format(largest_integer))
Проверить это:
Питон Playround[
^] и выход:
List of 50 positive integers (0 to 255): [26, 2, 246, 241, 107, 92, 215, 173, 119, 176, 156, 235, 125, 165, 129, 13, 19, 74, 227, 81, 248, 159, 102, 180, 90, 63, 123, 232, 217, 133, 224, 219, 98, 57, 95, 179, 245, 140, 151, 68, 254, 250, 117, 203, 9, 52, 222, 34, 41, 11]
Max integer = 254
Most number of digits = 3
Dictionary = {129: 129, 2: 299, 107: 107, 133: 133, 9: 999, 11: 110, 140: 140, 13: 130, 19: 190, 151: 151, 26: 260, 156: 156, 159: 159, 34: 340, 165: 165, 41: 410, 173: 173, 176: 176, 179: 179, 180: 180, 57: 570, 117: 117, 52: 520, 68: 680, 74: 740, 203: 203, 81: 810, 215: 215, 217: 217, 90: 900, 219: 219, 92: 920, 222: 222, 95: 950, 224: 224, 98: 980, 227: 227, 102: 102, 232: 232, 63: 630, 235: 235, 241: 241, 245: 245, 246: 246, 119: 119, 248: 248, 250: 250, 123: 123, 125: 125, 254: 254}
Sorted integer list to form the largest integer = [9, 98, 95, 92, 90, 81, 74, 68, 63, 57, 52, 41, 34, 2, 26, 254, 250, 248, 246, 245, 241, 235, 232, 227, 224, 222, 219, 217, 215, 203, 19, 180, 179, 176, 173, 165, 159, 156, 151, 140, 133, 13, 129, 125, 123, 119, 117, 11, 107, 102]
The largest integer is 9989592908174686357524134226254250248246245241235232227224222219217215203191801791761731651591561511401331312912512311911711107102
++ + + + [раунд 3]+++++
Я вернулся. Это было время моего сна после напряженного дня подготовки к наступающему Китайскому Новому году. Понимая, что дискуссии, которые вливаются в него, и интересы, которые его порождают, не могут просто уйти от него. Потратьте некоторое время, чтобы поразмыслить над тем, как исправить это одноразрядное озорство. Кажется, на этот раз я все понял. Видеть это:
"""
largest_possible_integer.py
by Peter Leow
Coding challenge: arrange numbers to form the largest possible integer
"""
import random
# Create a list of x number of random integers from 0 to 255
x = 50
# list_int = random.sample(range(0,256), x)
list_int = [26, 2, 246, 241, 107, 92, 215, 173, 119, 176, 156, 235, 125, 165, 129, 13, 19, 74, 227, 81, 248, 159, 102, 180, 90, 63, 123, 232, 217, 133, 224, 219, 98, 57, 95, 179, 245, 140, 151, 68, 254, 250, 117, 203, 9, 52, 222, 34, 41, 11]
print("List of {} positive integers (0 to 255): {}".format(x, list_int))
# Find the max integer in the list
max_int = max(list_int)
print("Max integer = {}".format(max_int))
# Find number of digits for this max integer
max_digit_count = len(str(max_int))
print("Most number of digits = {}".format(max_digit_count))
# Create a dictionary with list elements as keys and
# their zero-padded values up to max_digit_count as values
dict_int = {}
for int in (list_int):
length = len(str(int))
if length == 1:
temp = int
for i in range(1, max_digit_count):
temp += int * 10**i
dict_int[int] = temp
else:
dict_int[int] = int * 10**(max_digit_count - length)
print("Dictionary = {}".format(dict_int))
# Sort the original integer list based on the descending order
# of their padded values in the dictionary
sorted_list_int = sorted(list_int, key=dict_int.__getitem__, reverse=True)
print("Sorted integer list to form the largest integer = {}".format(sorted_list_int))
largest_integer = ''.join(str(int) for int in sorted_list_int)
print("The largest integer is {}".format(largest_integer))
Выход таков:
List of 50 positive integers (0 to 255): [26, 2, 246, 241, 107, 92, 215, 173, 119, 176, 156, 235, 125, 165, 129, 13, 19, 74, 227, 81, 248, 159, 102, 180, 90, 63, 123, 232, 217, 133, 224, 219, 98, 57, 95, 179, 245, 140, 151, 68, 254, 250, 117, 203, 9, 52, 222, 34, 41, 11]
Max integer = 254
Most number of digits = 3
Dictionary = {129: 129, 2: 222, 107: 107, 133: 133, 9: 999, 11: 110, 140: 140, 13: 130, 19: 190, 151: 151, 26: 260, 156: 156, 159: 159, 34: 340, 165: 165, 41: 410, 173: 173, 176: 176, 179: 179, 180: 180, 57: 570, 117: 117, 52: 520, 68: 680, 74: 740, 203: 203, 81: 810, 215: 215, 217: 217, 90: 900, 219: 219, 92: 920, 222: 222, 95: 950, 224: 224, 98: 980, 227: 227, 102: 102, 232: 232, 63: 630, 235: 235, 241: 241, 245: 245, 246: 246, 119: 119, 248: 248, 250: 250, 123: 123, 125: 125, 254: 254}
Sorted integer list to form the largest integer = [