Цей виклик слабко натхненний непроведеним езолангом Pada .
Розглянемо масив з 8 біт, усі ініціалізовані до нуля. Ми введемо дуже мінімалістичний набір інструкцій для друку довільних рядків. Є дві команди, обидва з яких беруть параметр , N
який є індексом біта:
t N
для t oggle: Це змінює значення бітаN
.p N
для p rint: Усі 8 біт інтерпретуються як байт, починаючи з бітаN
і обертаючись навколо кінця . Символ, відповідний цьому байту, друкується в STDOUT.
Давайте подивимось приклад. Ми хочемо надрукувати :=
. Наївно ми досягаємо цього наступним чином (0-бітові індекси):
t 2 [0 0 1 0 0 0 0 0]
t 3 [0 0 1 1 0 0 0 0]
t 4 [0 0 1 1 1 0 0 0]
t 6 [0 0 1 1 1 0 1 0]
p 0 [0 0 1 1 1 0 1 0] == 58 == ':'
t 5 [0 0 1 1 1 1 1 0]
t 6 [0 0 1 1 1 1 0 0]
t 7 [0 0 1 1 1 1 0 1]
p 0 [0 0 1 1 1 1 0 1] == 61 == '='
Але замість цього ми можемо скористатися циклічною функцією p
та зберегти дві інструкції:
t 2 [0 0 1 0 0 0 0 0]
t 3 [0 0 1 1 0 0 0 0]
t 4 [0 0 1 1 1 0 0 0]
t 6 [0 0 1 1 1 0 1 0]
p 0 [0 0 1 1 1 0 1 0] == 58 == ':'
t 1 [0 1 1 1 1 0 1 0]
p 7 [0 1 1 1 1 0 1 0] == [0 0 1 1 1 1 0 1] == 61 == '='
^
Тому p 7
просто починає читати значення байта з останнього біта замість першого.
Змагання
Враховуючи непорожній рядок символів для друку ASCII (0x20 до 0x7E включно), складіть оптимальний список вказівок (один рядок на інструкцію) для друку цього рядка з вищевказаною системою. Якщо існує кілька оптимальних рішень (що майже завжди буде так), генеруйте лише одне з них.
Ви можете вибирати між індексацією на основі 0 та 1 на основі бітів, але, будь ласка, вкажіть свій вибір.
Ви можете написати програму або функцію, взявши введення через STDIN (або найближчу альтернативу), аргумент командного рядка або аргумент функції та вивівши результат через STDOUT (або найближчу альтернативу), значення повернення функції або параметр функції (out). Якщо ви не друкуєте результат на STDOUT, він все одно повинен бути одним рядком, розділеним новим рядком.
Це кодовий гольф, тому найкоротша відповідь (у байтах) виграє.
Випробування
Кожен тестовий випадок - це один рядок, що містить вхідний рядок з наступною оптимальною кількістю інструкцій з наступним можливим рішенням.
Ви повинні НЕ виводити число інструкцій у вашому рішенні - це включається тільки тут , так що ви можете перевірити правильність вашого коду , якщо він друкує інший список команд.
?
7 instructions
t 2
t 3
t 4
t 5
t 6
t 7
p 0
:=
7 instructions
t 2
t 3
t 4
t 6
p 0
t 1
p 7
0123456789
26 instructions
t 2
t 3
p 0
t 7
p 0
t 6
t 7
p 0
t 7
p 0
t 5
t 6
t 7
p 0
t 7
p 0
t 6
t 7
p 0
t 7
p 0
t 2
t 3
p 3
t 2
p 3
9876543210
28 instructions
t 2
t 3
t 4
t 7
p 0
t 7
p 0
t 0
t 7
p 5
t 4
p 5
t 0
t 5
p 0
t 7
p 0
t 5
t 6
t 7
p 0
t 7
p 0
t 6
t 7
p 0
t 7
p 0
Hello, World!
39 instructions
t 1
t 4
p 0
t 3
t 7
p 2
t 1
t 6
p 2
p 2
t 0
t 1
p 2
t 0
t 1
t 3
p 2
t 6
t 7
p 2
t 0
t 2
t 6
t 7
p 1
t 0
t 1
t 5
p 0
t 2
t 7
p 3
t 2
t 6
p 0
t 4
p 0
t 1
p 3
The quick brown fox jumps over the lazy dog.
150 instructions
t 1
t 3
t 5
p 0
t 1
t 2
p 1
t 1
t 3
t 7
p 0
t 1
t 5
t 7
p 0
t 1
t 3
t 7
p 0
t 5
p 0
t 3
t 4
t 5
p 0
t 4
t 6
p 0
t 4
p 0
t 1
t 4
t 6
t 7
p 0
t 1
t 6
p 0
t 3
p 0
t 0
t 5
p 4
t 0
t 7
p 0
t 1
p 1
t 3
t 5
t 6
t 7
p 0
t 1
t 5
t 6
p 0
t 4
t 7
p 0
t 1
t 2
p 3
t 5
t 6
t 7
p 2
t 1
t 2
t 6
p 0
t 0
p 7
t 0
t 7
p 5
t 3
t 4
t 6
t 7
p 0
t 6
t 7
p 0
t 1
t 3
t 6
t 7
p 0
t 1
t 4
t 5
t 6
t 7
p 0
t 4
p 4
t 6
p 0
t 1
t 6
p 4
t 5
t 6
t 7
p 0
t 1
t 3
t 5
p 0
t 1
p 1
t 1
t 3
t 7
p 0
t 1
t 5
t 7
p 0
t 1
t 4
t 5
p 0
t 1
p 3
t 3
t 7
p 1
t 1
t 5
p 0
t 1
t 3
t 4
t 7
p 0
t 1
t 5
p 0
t 4
t 6
t 7
p 0
t 4
p 0
t 1
t 4
t 7
p 0
Тестові випадки були згенеровані за допомогою цієї посилання на реалізацію CJam .