Натхненна цією публікацією на головоломки. Спойлери для цієї головоломки нижче.
З урахуванням трьох позитивних цілих чисел як вхідних даних, (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
це зробить.