Низький навантаження, 196 байт
()()(<svg width="99" height="147">)S(<g transform="translate):S((33,33)">)S((3,0)rotate)*a(*a(~*)*~("><path d="M0h3" stroke="#"/>)~*a(*)**:(-90)a~^~(90)a~^)*::*:**:*^S(</g>)(:*)::*:**:*^S(</svg>)S
Я подумав, що може бути цікаво спробувати цей виклик в малопотужному езоланге; Недостатнє завантаження досить добре для мови з такою низькою кількістю команд.
Вихід - файл SVG з дуже сильно вкладеними тегами та деякими комбінаціями клавіш для гольфу. Поки що я не знайшов браузера, який би міг відображати його (Firefox висить кілька хвилин, намагаючись завантажити його, і Firefox і Chromium дають порожній екран). Більшість програм для обробки зображень також не можуть його завантажити (що ускладнює перетворення в інший формат), але мені вдалося завантажити його в переглядач зображень Eye of Gnome (який є частиною встановлення за замовчуванням на Ubuntu). Тому я зробив скріншот зображення, щоб ви могли його бачити (фактичне зображення має прозорий фон, але ви не можете насправді зробити прозорий знімок екрана):
Нам потрібно чітко вказати розмір зображення. Вибір відповідної орієнтації для зображення, малювання всього в мінімальному законному розмірі та виконання мінімальної кількості ітерацій, визначених викликом, дає нам зображення, яке просто вписується в ширину 99 пікселів, економлячи байт. Приємно, коли все виходить так.
Загальний алгоритм, що використовується для малювання зображення, полягає у підтримці двох змінних (Underload не називає змінних, але я вважав їх як x і y ), обидва спочатку порожні. Потім ми кілька разів замінюємо ( x , y ) на ( x , повертаємо вліво і рухаємося вперед, y ) і ( x , повертаємо праворуч і рухаємося вперед, y ). Після десяти ітерацій і x, і y проводять криву дракона дев'яти ітерацій.
Існує кілька мікрооптимізацій та хитрощів, пов'язаних із недоотриманням. Щоб уникнути занадто великої ворожнечі з вершиною стека, кожної циклічної ітерації, ми починаємо з об'єднання x і y у функцію "повертаємо рядок, створений об'єднанням: x , інструкція повороту, аргумент функції, move- інструкція вперед, і у . " Ця функція займає лише один пробіл у стеці, тому ми можемо дублювати її, викликати її -90
як аргумент, поміняти повернене значення під дублікат та викликати його 90
як аргумент, щоб отримати нові значення для x та yбез жодного разу доторкатися більше, ніж два найголовніші елементи стека (які, безумовно, є найбільш доступними). Ця функція створюється кодом під час виконання. Сам генератор також генерується кодом під час виконання, щоб він міг повторно використовувати рядок, <g transform="translate
який також використовується для встановлення початку зображення. Спочатку ми генеруємо всі відкриті теги, а потім, оскільки всі закриті теги є справедливими </g>
, ми можемо вивести 1024 закритих тегів, просто повторивши рядок, не турбуючись про їх відповідність відкритим тегам. (Ефективне написання чисел у програмі Underload - сама по собі цікава проблема; (:*)::*:**:*
це, мабуть, найефективніший спосіб написання 1024, хоча, перекладаючи «2 на потужність (1 + 2 × 2) × 2»).
У нижньому завантаженні немає графічних бібліотек, тому я створюю SVG, використовуючи комбінацію креслярських ліній у фіксованому положенні та обертаючи зображення навколо заданої точки; замість ручки перевертаємо папір. Ідея полягає в тому, що малюючи лінію, обертаючи все зображення, малюючи іншу лінію, знову обертаючи зображення тощо, ми можемо ефективно імітувати графіку черепахи без необхідності робити арифметику або використовувати будь-які графічні бібліотеки, оскільки всі лінії намальовані в тому самому місці. Звичайно, це означає, що у нас є дуже сильно вкладені теги обертання зображення, що бентежить багатьох глядачів SVG.
Стилізація зображення зараховуватиметься до кількості байтів, тому мені потрібно було надати мінімум стилів, необхідних для відображення зображення. Це виявляється stroke="#"
, що більш-менш перекладається як "лінія повинна бути певного кольору"; це, здається, розширюється, щоб намалювати його чорним кольором. (Зазвичай ви визначаєте колір як, скажімо, "# 000".) Фон за замовчуванням прозорий. Ми не визначаємо ширину обведення, але вибір, вибраний Eye of Gnome, залишає все видиме.
Багато інтерпретаторів Underload борються з цією програмою, наприклад, той, хто випробовує Інтернет, виходить з ладу, оскільки він генерує деякі дуже великі рядки всередині. Однак оригінальний перекладач інтернету Underload працює. (Цікаво, що найперший перекладач був в Інтернеті, тому мова була доступною в Інтернеті, перш ніж її можна було використовувати в режимі офлайн.)
Щось мені трохи неприємно, це те, що тут, здається, є лише 1023 сегмент рядків, і ми очікуємо 1024. Можливо, один із сегментів в кінці не намальований цим алгоритмом (це було б намальовано на наступній ітерації замість цього). Якщо це дискваліфікує, можливо, можливо адаптувати програму, але це може закінчитися значно довше. (Це не так, як цей виклик все одно виграє змагання; вже є кілька коротших заявок.)