Зараз саме час проявити свої здібності писати поганий код. Я випробовую новий вид головоломки з програмування, найбільш схожу, на мою думку, на нецензурний C-конкурс. Основна відмінність полягає в тому, що це не так вже й ганебно: це лише якась хороша чиста забава. Мета головоломки - запакувати якомога більше помилок у програму. Переможець цього конкурсу - той, хто пише програму з найбільшою кількістю помилок на кожного персонажа.
Щоб уникнути величезної нитки коментарів з проханням роз'яснити, я зараз повинен визначити, що вважаю кваліфікованими помилками.
По-перше, помилка - це не помилка . Якщо це проблема, яку інтерпретатор може визначити як помилку (наприклад, невідповідні деліметри, неправильно сформований синтаксис, доступ до властивості нульового об'єкта тощо) або якщо це заважає програмі виконувати або продовжувати, це не Жук. В іншому випадку ви можете ввести чотири символи, а інтерпретатор може перерахувати вісім помилок синтаксису, і ви можете вимагати співвідношення символів помилки 2.
По-друге, помилка не повинна бути явно помилковою, а клоп - не пасхальне яйце . Це, безумовно, суб'єктивний критерій, але я вважаю, що це важливо для такого роду змагань. Це означає, що ви не можете мати умовний код, який конкретно маніпулює кодом очевидними способами. (Читайте: використовуйте мову твердої ями, бо різниці ніхто не знатиме).
По-третє, помилка повинна бути правдоподібною . Це суб'єктивно, як і вище, але помилка повинна виглядати так, як її міг написати не менш прискіпливий або, можливо, необізнаний, або хтось щойно помилився. Це включає, наприклад, помилки або один синтаксис, що є одним за одним, що є дійсним і виглядає правильним, але викликає небажану поведінку (скажімо, використання квадратних дужок замість дужок).
Помилка може спричинити будь-яку небажану поведінку програми, включаючи, але, звичайно, не бажаний вихід у деяких виняткових випадках, мати різну поведінку, засновану на чомусь, схоже, не пов'язаному (наприклад, вихід відображається по-різному залежно від того, чи закінчується поточний час з непарною або парною кількістю секунд), витоку пам’яті, втратою даних тощо.
Приклад проблеми:
Складіть програму, яка відображає всі символи ASCII у порядку зростання їх числового значення.
Приклад відповіді:
Brainf ***, 5 символів, 1 помилка, 0,2 помилка-коефіцієнт
+[+.]
Помилка: не відображає символ ASCII для 1. Неможливо виправити, змінивши на .+[.+]
.
Гаразд, я вважаю, що ти мав би це до цього часу зрозуміти, ось ваша головоломка:
Розшифруйте шифр Цезаря та відсортуйте слова за алфавітом
Цезарний шифр створюється, беручи ряд букв і перекладаючи їх на n літер в алфавіті. Якщо він іде повністю до початку або кінця алфавіту, A настає після Z, а Z - до A. Наприклад:
Mannequin
Nboofrvjo //Shifted over 1 or -25
Wkxxoaesx //Shifted over 10 -16
Ftggxjnbg //Shifted over -7 or 19
Вам дадуть два входи (ви можете отримати вхід, але це найбільш зручно для вас, в межах причини). Перший вхід - це слова, а другий - значення, на яке воно зміщується. Ваше завдання - вивести декодовані слова, а потім вивести декодовані слова після їх сортування за алфавітом.
Приклад (не ображайтесь на поганих хлопців, це лише приклад):
Перший вхід: gtdx wjbfwiji. ljy Gfi hfssty
Другий вхід: 5
Перший вихід: хлопці нагороджені. стати поганим не може
Другий результат: погані хлопці не можуть бути винагороджені.
Удачі!