CAPL 1.5+; 6 без введення; 10 - 10 = 0 з введенням
Sidenote
Я десь читав [посилання?], Що користувацькі мови заборонені в питаннях про гольф, оскільки вони можуть робити вбудовані функції, які роблять саме те, що задається питанням, однак я зробив CAPL, щоб полегшити гольф в цілому . Якщо ви думаєте, що це заборонено тут, дайте мені знати!
Я отримав кілька ідей від > <> та Befunge (Ви можете переміщатися між рядками та використовувати шістнадцяткові символи для натискання чисел), деякі від Ruby, а деякі з моїх власних, щоб полегшити гольф.
CAPL читає зліва направо і йде вниз на один рядок вниз у кінці рядка. Якщо це як останній рядок, програма вийде.
Оскільки цю мову ніхто ще не знає, я спробую пояснити якомога більше.
Виведення y. 6 байт
bb*.n<
bb*
b
є шістнадцятковим для 11
, так bb*
це 11*11
= 121
, що є еквівалентом UTF-8 y
. Це значення висувається до стека.
.
З'являється найвище значення зі стека та виводиться як UTF-8. Як 121
і вгорі стека, тут індекс ігнорується.
n
Виводить новий рядок
<
Відправляє вказівник назад на початок рядка, повторюючи таким чином цей рядок. Оскільки ми не очікуємо введення, ми можемо це зробити безпечно, не запитуючи про це.
Виведення з вводу. 10 байт, 0 після бонусу
i~a&{X:.)}
i
Здійснює введення даних від користувача, висуває UTF-8 у верхню частину стека і просуває довжину після цього. Тобто [72,101,108,108,111,5]
~
спливає число зі стека, потім повертає цю кількість байтів. Тобто, [111,108,108,101,72]
a
шістнадцятковий для 10
, символ нового рядка
&{...}
робить нескінченну петлю. У нас є вхід, тому ми не можемо відправити покажчик назад до рядка. Я міг би розмістити функцію на рядку внизу, що захистило б мені байт, але нові рядки в цьому виклику заборонені.
X
Вилучає верхнє значення зі стека (Індекс із циклу)
:.
Дублює верхнє значення, а потім виводить як UTF-8
)
Повертає стек праворуч. ( [1,2,3,4,5]
-> [5,1,2,3,4]
)
Як би це не було, це означає, що ми починаємо з нового рядка, потім починаємо виводити вхід, потім новий рядок, потім введення і т. Д. Якщо нам заборонено починати з нового рядка, використовуйте наступний код з 12 байтами або 2 після віднімання. бонус.
iXa#~&{X:.)}
Єдина нова команда тут - #
яка виштовхує кількість елементів у стеку до стека.
Я видалив довжину з i
, тому що додавання 1, а потім заміна на новий рядок довше, ніж видалення та отримання довжини знову.
Просто для розваги, ось програма «Привіт світ»
"Hello World"#~
#?!;.<
?!
Операція така ж , як> <> 's
y
або\n
всередині рядкового літералу"?