Натхненний нещасним сортуванням цифр-цифр-без використання-масиву , але я подумав, що це поліпшив гольф коду, ніж питання ТАК.
Давши додатне ціле число, відсортуйте цифри в цьому цілому.
Найнижчий рахунок виграє!
- Почніть з 0 балів.
- Додайте по одній точці на символ.
- Додайте 20 балів за кожен використовуваний масив.
- Додайте 10 балів за кожен багато символьний рядок у своєму коді. (За винятком початкового вводу до тих пір, поки воно перетворене на ціле число без будь-яких інших операцій, виконаних над ним.)
- Додайте 32 бали, якщо максимальна кількість цифр, з якою може працювати ваша програма, обмежена вашою програмою (на відміну від машини).
- Відніміть 10 балів, якщо ваш код може змінити напрямок сортування за допомогою іншого аргументу (що завгодно, але наприклад 0 для низхідного сортування та 1 для висхідного.)
Кожна мова є різною, але ідея полягає в тому, щоб уникнути будь-якого ітерабельного хакерства.
Приклад:
Вхід : 52146729
Вихід : 97654221 або 12245679
Примітки:
- Використовуйте будь-які вбудовані можливості сортування, які надає ваша мова програмування, але якщо ця функція сортування включає рядки чи масиви, приймайте штраф!
- Ви можете написати рішення як функцію, яка приймає ціле число безпосередньо, або як програма, яка бере аргумент з argv, файлу або потоку і перетворює його в ціле число. Поки ви негайно перетворите його на ціле число та відкинете оригінальний вхід char *, не роблячи жодних подальших операцій над ним, штраф не застосовується.
- Штрафи застосовуються не лише до рядкових літералів у тексті програми, але до будь-якої частини функції програми, яка, можливо, вводить або виводить рядок або ітерабельно. Наприклад, JavaScript
String.prototype.split
має щонайменше один рядок як input (this
) та масив як вихід, тому +30 для його використання. - Я намагався змусити ці правила керуватися принципом проектування алгоритму, а не початковим / кінцевим введенням-виведенням (звідси примітка №2). Я не думаю, що покарання повинно застосовуватися,
int(input())
навіть якщоinput
підпис каже, що він повертає рядок, доки цей вираз є початковою точкою входу програми. Так само, якщо кінцевим результатом програми єprint(x)
іx
повинен бути рядок, штраф не застосовується до операції лиття рядка останнього канаву. Коли я говорив, я прямо ніколи не говорив, що це повинна бути програма або там, де введення-виведення повинне бути або прийти. Функція, яка приймаєint
та повертає, послужилаint
б і не зазнала б цих неоднозначностей.
" "
вважається рядом з декількома символами? Одного символу не вважатимуть "мульти" ...