У романі з сильно заниженим Стімпанку "Двигун різниці " еквівалент кінотеатрів поставив пікселізоване рухоме зображення, відображене плитками, які можна було перевернути механічно. Двигун управління для оркестрування руху цих плиток був великою галасливою машиною, керованою колодою перфокарт.
Ваше завдання - емуляція такого двигуна та показ пікселізованої анімації, визначеної вхідним файлом. Вхід складається з рядків у форматі фіксованої ширини, але ви можете вважати, що зручно для індикації закінчення рядка. Формат:
SSSSYYxxXXOA
SSSS: 4 digit sequence no. may be padded by blanks or all blank
YY: the y coordinate affected by this line (descending, top is 0, bottom is m-1)
xx: the starting x coordinate
XX: the ending x coordinate
O: hexadecimal opcode
A: argument (0 or 1)
Вхід явно послідовно (якщо ви коли-небудь скинете колоду карт на підлогу, ви подякуєте мені за цю частину). Це означає, що програма повинна виконувати стабільний тип рядків введення, використовуючи поле послідовності як ключ сортування. Рядки з однаковим порядковим номером повинні підтримувати своє початкове відносне впорядкування. (Це повинно працювати з нестабільним сортуванням, якщо ви додасте фактичний номер рядка до клавіші.) Поле порожньої послідовності повинно бути інтерпретоване як менше, ніж будь-яке число (послідовність співставлення ascii).
Один рядок оператора може впливати лише на одну координату y, але може задавати суміжний діапазон значень x. Значення закінчення x може залишатися порожнім або може бути ідентичним початковому значенню для впливу на один піксель.
Опкод - це шістнадцяткова цифра, яка вказує Універсальний двійковий код функції, який використовується як растероп. Аргумент 0 або 1. Виконана растрова операція є
pixel = pixel OP argument infix expression
--or--
OP(pixel, argument) function call expression
Тож початкове значення пікселя вводиться як X у таблиці UBF, а значення аргументу з оператора вводиться як Y. Результатом цієї функції є нове значення пікселя. І ця операція виконується для кожної пари x, y від xx, YY до XX, YY, зазначених у виписці. Діапазон, визначений xx та XX, включає обидві кінцеві точки. Так
0000 0 010F1
слід встановити пікселі 0,1,2,3,4,5,6,7,8,9,10 у рядку 0.
Вихідні розміри ( m x n ) повинні бути як мінімум 20 x 20, але можуть бути більшими за бажанням. Але зерно повинно показати, знаєте? Він повинен бути пікселізованим . Як графічний, так і ASCII-графічний вихід є прийнятними.
Якщо, наприклад, ми хотіли зробити зображення пікселізованої фігури:
# #
###
##
####
#
#### ####
# #
###
# #
# #
Якщо ми намалюємо його з дещо перегортаючим виглядом, як XOR, він може бути намальований і стертий незалежно від того, екран чи чорний або білий.
00020261
0 6 661
1 3 561
2 3 461
3 3 661
4 4 461
5 0 361
5 5 861
6 3 361
6 5 561
8 3 561
9 3 361
9 5 561
10 3 361
10 5 561
Дублювання цієї послідовності призведе до того, що фігура з’явиться і зникне.
Більшу анімацію можна скласти поза порядком, вказавши в полі послідовності різні "кадри".
100 016F0
101 016F0
102 016F0
103 016F0
104 016F0
105 016F0
106 016F0
107 016F0
108 016F0
109 016F0
110 016F0
111 016F0
112 016F0
113 016F0
114 016F0
115 016F0
200020261
2 0 6 661
2 1 3 561
2 2 3 461
2 3 3 661
2 4 4 461
2 5 0 361
2 5 5 861
2 6 3 361
2 6 5 561
2 8 3 561
2 9 3 361
2 9 5 561
210 3 361
210 5 561
00020261
0 6 661
1 3 561
2 3 461
3 3 661
4 4 461
5 0 361
5 5 861
6 3 361
6 5 561
8 3 561
9 3 361
9 5 561
10 3 361
10 5 561
300020261
3 0 6 661
3 1 3 561
3 2 3 461
3 3 3 661
3 4 4 461
3 5 0 361
3 5 5 861
3 6 3 361
3 6 5 561
3 8 3 561
3 9 3 361
3 9 5 561
310 3 361
310 5 561
00020261
0 6 661
1 3 561
2 3 461
3 3 661
4 4 461
5 0 361
5 5 861
6 3 361
6 5 561
8 3 561
9 3 361
9 5 561
10 3 361
10 5 561
Виробництво:
Це кодовий гольф, тому найкоротша програма (за кількістю байтів) виграє. Бонус (-50), якщо двигун видає шум клацання клацанням.
x
завжди координата закінчення завжди включена?