Циклічний левенхін


45

Фон

Оскільки більшість PPCG завсідників будуть відомі, це програма , яка виводить свій вихідний код при запуску; а відстань Левенштейна між двома рядками - це мінімальна кількість вставок, видалень та редагувань, необхідних для зміни однієї рядки в іншу. У цьому виклику ми поєднуємо два поняття в "levenquine": програма, яка видає власний вихідний код, але з одним екземпляром одного символу, вставленого, видаленого або заміненого іншим символом. (Іншими словами, відстань Левенштейна між програмою та її результатом дорівнює 1.)

Задача

Напишіть levenquine таким чином, щоб його вихід був levenquine, вихід цієї програми також є levenquine тощо. Крім того, в певний момент послідовність багаторазового запуску програми, запуску її виводу, запуску виводу його результатів тощо повинна врешті повернутися до початкової програми.

Існує ще одне додаткове обмеження, що робить це набагато складніше: десь у цьому циклі повинні бути дві різні програми, які не мають спільних символів (іншими словами, немає символу, який існує в одній програмі, а також існує в іншій програмі). Тому вашій програмі доведеться поступово перетворюватися на інший набір символів, і повертатися знову.

Якщо ви використовуєте мову програмування, на якій є неминуча табличка котла, необхідна для будь-якої програми, яка виробляє вихід (наприклад, у неї є лише один спосіб написання printзаяви та відсутність інших корисних форм виводу), ви можете трактувати цю коробку як неіснуючу для цієї мети визначення того, які символи мають дві програми. Однак ви все ж повинні рахувати цю котельну плиту для визначення властивості коду Levenquine.

Роз'яснення

  • Кожна з «програм» циклу може бути або повноцінною програмою, або функцією. Вони не повинні бути однаковими, наприклад, деякі можуть бути повноцінними програмами, а деякі - функціями.
  • Не всі програми циклу повинні використовувати однакову форму виводу. Наприклад, деякі можуть виводити за допомогою стандартного виводу, а деякі можуть виводити за допомогою стандартної помилки.
  • Ваші програми запускатимуться без введення даних (або мовами, які потребують введення, щоб зробити що-небудь взагалі, найпростіший можливий ввід).
  • Діють правильні правила квоти ; хоча левенкін не є справжньою королевою, ви не можете робити нічого, що було б протизаконно, коли пишете належну лайку. Зокрема, нульова програма ніколи не є дійсним результатом з належного Levenquine (і, отже, не може бути частиною вашого циклу).
  • Обмеження Levenquine вимірюється символами, а не байтами (наприклад ê, один символ, навіть коли джерело закодовано в UTF-8). Загальне обмеження без символів також вимірюється у вигляді символів. Однак умова перемоги рахується в байтах.

Стан перемоги

Будь ласка, подайте щонайменше три програми з циклу: найкоротша програма (вимірюється в байтах); і дві програми з циклу, які не мають спільних символів. Цілком можливо, що два з них однакові, а також можливо, що всі три є різними. Оцінка базується на довжині в байтах найкоротшої програми, причому коротша буде кращою, що робить це своєрідним змаганням з .


Для людей , які можуть бачити видалені повідомлення: пост Пісочниці був тут .

Я думаю, що також було б добре, щоб відповіді включали тривалість циклу.
mbomb007

Що робити, якщо, скажімо, мова має кілька функцій для виконання результатів, але всі вони попарно діляться символами?
Ørjan Johansen

2
@ ØrjanJohansen: Я думаю, я б не був занадто проти просто вибрати одну з них і дотримуватися її в такому випадку. Однак це, мабуть, неконкурентоспроможне; Я хотів, щоб правило було об'єктивним, бо в іншому випадку люди мають схильність намагатися просунути в ньому лазівки, і якщо ви намагаєтесь зробити правило занадто складним, то, як правило, є аргументи щодо того, що воно означає.

Чи може це бути левенкін біт-мудрий? Як на відстані від вихідного вихідного коду відключений 1 байт?
Magic Octopus Urn

Відповіді:


34

Gol> <> , 252 167 байт

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_

Спробуйте в Інтернеті!

І взаємовизначна програма ( верифікація ):

0<CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

Спробуйте в Інтернеті!

Це здебільшого надихає мою відповідь на виклик взаємно ексклюзивних Quines, кудо також переходить до відповіді Bubbler's Gol> <> .

Ось програма підтвердження, яку можна запустити. На жаль, час вичерпується, але ви можете спостерігати, як один розділ коду будує інший розділ, а потім ви можете скопіювати останню надруковану версію та вставити її у вхід для продовження. Зрештою, ви досягнете першої програми, яку ви введете.

Пояснення

Обидва розділи коду складаються з двох розділів, фактичної частини виконання та даних, що містять інший розділ коду. Вони обидва функціонують практично однаково:

Вони залежать від прапора (перший символ коду, або 1або 0). Якщо прапор встановлений, вони почнуть будувати інший розділ коду, знімаючи 252-й символ, додаючи / віднімаючи 28його та додаючи його до коду.

Наприклад, ось перші дві ітерації коду після першої програми вище:

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_C

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽ

В кінці кінців , коли він досягає кінця поточного розділу, він перевертається другий символ коду ( <до >і назад) до точки до іншої секції.

Ось обидва розділи разом, які збираються перейти від виконання першого розділу до виконання другого.

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

Спробуйте в Інтернеті!

Прапори є протилежними для кожного розділу, тому щойно виконаний розділ почне видаляти інший розділ коду, поки не досягне власного коду. У цей момент він розгортає прапор і цикл повторюється знову.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.