Вдохновленный этим постом на Puzzling. Спойлеры для этой загадки ниже.
Используя три положительных целых числа в качестве входных данных, (x, y, z)
создайте включающий диапазон [x, y]
, объедините этот диапазон вместе, а затем удалите z
необязательно последовательные цифры, чтобы получить самые большие и наименьшие возможные положительные целые числа. Начальные нули не допускаются (т. Е. Цифры должны начинаться с [1-9]
). Выведите эти два числа в любом порядке.
Для примера из загадочного поста, для ввода (1, 100, 100)
, наибольшее число возможно есть 99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
а наименьшее число 10000012340616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
следуя ниже логики от jafe в ответ отправил туда:
- Мы не можем влиять на длину номера (есть фиксированное количество цифр), поэтому для максимизации значения мы берем максимальную первую цифру, затем вторую цифру и т. Д.
- Удалите 84 первых не-девятки (осталось 16 цифр):
999995051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Наибольшее число в следующих 17 цифрах равно 7, поэтому отсюда следующая цифра в ответе может быть не более 7 (мы не можем удалить более 16 цифр). Так что удалите 15 не 7-х ... (1 цифра слева, чтобы удалить):
999997585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Отсюда следующая цифра может быть не более 8, поэтому удалите одну не-8 из середины:
99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Аналогичная логика, но обратная (т. Е. Мы хотим привести
1
s вместо ведущего9
s) для наименьшего числа.
Вот пример меньше: (1, 10, 5)
.
Мы строим диапазон 12345678910
и определяем, какие 5
цифры мы можем удалить, оставляя максимально возможное число. Очевидно, это означает, что мы хотим максимизировать начальную цифру, так как мы не можем влиять на длину вывода. Так что, если мы удалим 12345
, у нас останется 678910
, и это самое большое, что мы можем сделать. Сделать наименьшее немного сложнее, так как вместо этого мы можем вытащить числа из середины, оставив 123410
как можно меньше.
Ибо (20, 25, 11)
результат довольно скучный, как 5
и1
.
Наконец, чтобы исключить ответы, которые пытаются привести нули, (9, 11, 3)
дает, 91011
который в свою очередь дает 91
и10
как самые большие и самые маленькие.
I / O и правила
- Если это проще / короче, вы можете написать две программы / функции - одну для самой большой и одну для самой маленькой - в этом случае ваш результат является суммой обеих частей.
- Вход и выход могут быть заданы любым удобным способом. .
- Вход можно предположить , чтобы поместиться в родном типе номера вашего языка, однако нельзя предположить, что объединенные числа и выходные данные будут соответствовать этому.
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
9, 11, 3
что подойдет.