Перекриття поліглотів


37

На відміну від багатьох проблем, пов'язаних з C&R, для цього не потрібен окремий розбійний пост; мета розбійників - зламати попередню відповідь, а потім опублікувати нову як поліцейський.

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

Language:  1  2  3  4  5  6  7  8  ...
Answer 1:  0  1  2
Answer 2:     1  2  3
Answer 3:        2  3  4
Answer 4:           3  4  5
Answer 5:              4  5  6
Answer 6:                 5  6  7
...

(порожні пробіли означають, що в такому випадку поведінка не потрібна).

Кожна відповідь має працювати на 3 -х мовах і друк 3 різних послідовних номерів, кожен з яких один більше , ніж цифри , надрукованих попереднім відповіддю (перший відповідь друкує 0, 1і 2). Кожна відповідь використовує дві мови з попереднього подання та третю нову мову. Відповідач повинен спробувати придушити, що це за третя мова.

Щоб опублікувати нову відповідь, слід:

  • Розломіть останню відповідь, знайшовши, що це третя мова.
  • Переважно, додайте пояснення своєї тріщини та повідомте про відповідь афіші. Після того, як ваше подання було зламано, вам слід також додати пояснення.
  • Напишіть поліглот, що складається з другої та третьої мов відповіді, а також іншої мови на ваш вибір. Розкрийте свої перші дві мови, але не розкривайте свою нову. Наступною метою плаката буде знайти цю мову (або будь-яку іншу мову, на якій вона працює), тому вам слід спробувати її придушити.

Технічні умови

  • Критерії для дійсної мови програмування такі ж, як і у Вікторині мови програмування, Марк II - Копи :

  • Кожна відповідь повинна працювати менш ніж за хвилину на розумному ПК.

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

Критерій виграшу

Відповідна виграш - це залежність від того, на яку відповідь пішло більше часу. Виклик ніколи не закінчиться, тому завжди можна змінити виграшну відповідь.


2
Відкрили чат для обговорення можливих тріщин та будівництва поліглотів.
Бубон

1
Чи може відповідь вивести інші речі, крім бажаного числа?
NieDzejkob

1
@NieDzejkob Ні, програма повинна виводити лише кількість, і так, я вважаю за краще, якщо б програми працювали менше хвилини.
Esolanging Fruit

3
Ось запит SEDE, який обчислює кількість часу, коли відповіді залишалися в безпеці (у годинах).
NieDzejkob

1
@EmbodimentofIgnorance Так, ви можете вимагати прапори командного рядка, оскільки вони по суті визначають окремі інтерпретатори, і так, програма повинна надрукувати лише число. Програма може виводити на STDERR, але релевантним є лише вихід на STDOUT.
Esolanging Fruit

Відповіді:


11

Гексагоні, Кляйн (101) та ???

  xx={puts/}
gets87!@xx=p

main\

>9.*5,6v

Це друкується 7у Гексагонії , 8у Кляйн (101) та 9???.

9Чи не працює , якщо новий рядок додається в кінці коду. Будьте уважні, якщо ви тестуєте місцево.

Редагувати: Бути в прямому ефірі протягом 20 годин - це вже запис, тому я зараз дам кілька підказок. (Також тому, що мова, про яку йде мова, IMO ще не відома.)

Підказки

  1. " 9Не працює, якщо в кінці буде доданий новий рядок" є дуже значним, як і перші два пробіли (які ігноруються і Гексагоні, і Клейном).
  2. Мова на TIO.
  3. Перші два пробіли змушують програму перейти до останнього рядка. (Це не двомісна мова.)
  4. Немає явної команди виводу, і vкоманда завершує програму.

Пояснення ( зламаний пост )

У вихідному коді

abcd={} -- a gaffe avoiding tactic in C++/C#
abcd[!1]=   1+2+3+4+5+6+7+8+9+10+11+12+13+17!
print(abcd[0>1+2+3 and 4+8+6<0-0]//35)
if 0>1 then a.next=';' en\
                    >1+6.@.@

Відповідні інструкції в Кляйн (101):

IP->.....................^...........IP->/
.........................|...................
.........................8
.........................\<-.............IP<-
                         @

Клайн - це невід'ємна 2D мова, де перетинання межі кодової області (яка є квадратом) залежить від топології Кляйна. /і\ є дзеркалами.

IP починається у верхньому лівому куті правою стороною. Він зустрічається дзеркалом у напрямку до верхньої межі та знову входить у область коду з правого боку, як показано вище. Потім він знову вдаряється в дзеркало, 8 штовхається, а потім (пройшовши через кордон кілька разів) зупиняється на@ . Потім вміст стеку друкується в stdout, який є одиничним 8.



9

Befunge-96, Hexagony і ???

abcd={} -- a gaffe avoiding tactic in C++/C#
abcd[!1]=   1+2+3+4+5+6+7+8+9+10+11+12+13+17!
print(abcd[0>1+2+3 and 4+8+6<0-0]//35)
if 0>1 then a.next=';' en\
                    >1+6.@.@

Це друкується 6у Befunge-96 , 7у шестикутнику та 8???.

Пояснення

Шестикутний код, коли "попередньо очищений":

       a b c d = { } - 
      - a g a f f e a v 
     o i d i n g t a c t 
    i c i n C + + a b c d 
   [ f a l s e ] = 1 + 2 + 
  3 + 4 + 5 + 6 + 7 + 8 + 9 
 + 1 0 + 1 1 + 1 2 + 1 3 + 1 
7 ! p r i n t ( a b c d [ 0 > 
 1 + 2 + 3 a n d 4 + 5 + 6 < 
  0 - 0 ] / / 3 5 ) i f 0 > 
   1 t h e n a . n e x t = 
    ' ; ' e n d > 1 + 6 . 
     @ . . . . . . . . . 
      . . . . . . . . . 
       . . . . . . . . 

Шлях страти починається у верхньому лівому напрямку, що прямує на Схід. Верхній ряд не робить багато. -змінює поточний край пам'яті, таким чином, значення в ньому є 0. Виконання продовжується в напрямку середнього ряду на схід, де 7!завантаження 7поточного краю пам'яті та друкуються як ціле число. [змінює вказівник інструкцій на Північний Схід, починаючи з о 7. Після цього 7+3виконується виконання, [яке змінює вказівник інструкції на Північний Захід, починаючи з південно-східного кута. Нарешті, шлях , ..@де @завершує програму.



8

Луа, епізод, ???

abcd = {} - гаф уникнення тактики у C ++
abcd [false] = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14
друк (abcd [0> 1 + 2 + 3 і 4 + 5 + 6 <0-0] // 35)
якщо 0> 1, то a.next = ';' кінець

Друкує 3 в Луа, 4 в епізоді і 5 в ???.

Пояснення про зламану посаду :

a = 1 + 2 + 3 + 3 + 4 + 5 + 6 + 7 + 8 + 9
b = 1 + 1 + 1
f = 3 - (- 1)
c = 7 + 9 + 13 + 11 + 12 + 3--1
g = a + b + c + 1 + 2 + 3 + 4 + 5
j = 9 + 7 + g + c + b + a + g + g + g + g + g + g + 1 + 2 + 3 + 4 + 1 + 1
h = 1 + 1 + 1 + 1 + 333 + 1 + 1 + 1 + 111 + 1 + 1 + 1 + 333 + 1 + 1 + 1 + 1 + 1.
друк (f)
  • У Python 3 3--(-1)є 2, тому print(f)друкується 2 (інші речі зайві)
  • У Луа --знову коментар, так 3--(-1)само 3, тому print(f)друкує 3 (інші речі знову непотрібні)
  • У "мозговому ебані" є 57 плюсів і 5 мінусів, які встановлюють першу комірку на стрічці до 52, а .вихідний символ 52 - 4.


8

Тригер , JavaScript та ???

[ //aТ/\\ ][ //е"6
console.log(111-111+12)]
//!'!/-²6-²52

Друкується 11в Trigger , 12в JavaScript та 13в REDACTED.

Оскільки досі це не було зламано довше, ніж будь-яка інша відповідь, ось деякі підказки:

  • У разі , якщо ви не помітили, то Ті ена першому рядку багатобайтові символи.
  • [ //і \\ ][ //не є.
  • Другий рядок, як і -²52, є мертвим кодом.
  • Мова не має поняття закінчення, тому ²6утворює нескінченну петлю.
  • Якщо конкретніше, другий байт кодування UTF-8 ²разом із 6, утворює нескінченний цикл.
  • Виведене число кодується символом /!'!/
  • Мова не ввімкнути "Try it Online", "Rosetta Code" або "Esolangs".
  • Єдина доступна форма виводу - це 1bpp екран.
  • Співвідношення сторін екрана - 2.
  • Хоча мова спочатку не передбачалася машинним кодом, реалізація FPGA існує.
  • За даними Вікіпедії, цільовим призначенням мови були відеоігри.
  • Єдиний спосіб отримати доступ до екрану - це спеціальна інструкція, яка приймає координати у вибраних регістрах, а також висоту як негайну, а XOR - 8 на n бітну карту на екран. Щоб полегшити виявлення зіткнень, а також зробити можливим очистити екран, один із регістрів буде встановлений, коли будь-який піксель буде відключений.

Пояснення

Ну, на це знадобилося певний час, щоб зламатись. Подивимося, як виглядає код:

0200 5b20    SE VB, V2   ; Skip the next instruction if VB = V2. Since all
0202 2f2f    CALL 0xF2F  ; registers start at 0, this call will be skipped. This
                         ; hides the bytecode from JavaScript.
0204 61d0    LD V1, 0xD0 ; A useless load. Necessary to use a UTF-8 continuation
0206 a22f    LD I, 0x22F ; byte as an instruction and load the address of
                         ; the sprite.
0208 5c5c    SE VC, V5   ; A red herring supposed to suggest symmetry is
                         ; important, as well as a totally intended eliminator
                         ; of inaccurate implementations. Most documentation
                         ; claims that the lowest nibble must be zero, but in
                         ; the original COSMAC VIP implementation it's
                         ; a don't-care.

Це означає, що, хоча багато доступних емуляторів ведуть себе правильно, реалізація підзаконних правил пов'язана з другим реченням сторінки Вікіпедії . Звичайно, його не можна запустити безпосередньо на середньому ПК, але я знайшов емулятор Emma 02, пов’язаний з ним на VIP-сторінці COSMAC, щоб він працював найкраще.

020A 205d    CALL 0x05D    ; Skipped.
020C 5b20    SE VB, V2     ; Same as with the very beginning. Red herring.
020E 2f2f    CALL 0xF2F
0210 d0b5    DRW V0, VB, 5 ; Draw the sprite pointed to by I. Since V0 and VB
                           ; haven't been written to yet, the sprite will be drawn
                           ; in the top-left corner of the screen. The height is
                           ; an immediate.
0212 2236    CALL 0x236    ; Jump over the JavaScript and Trigger code. It doesn't
                           ; matter that we never return.
0214-022E *never used*
022F 2f      DB %00101111  ; Sprite data.
0230 21      DB %00100001
0231 27      DB %00100111
0232 21      DB %00100001
0233 2f      DB %00101111
0234-0235 *never used*
0236 b236    JP V0, 0x236  ; Since V0 is still zero, this is an infinite loop.
0238-023C *never used*     ; Together with the previous two lines, it's the
                           ; -²6-²52. It's a red herring supposed to suggest
                           ; prefix, or Polish, notation.

Не кажіть мені, що це машинний код на якомусь процесорі.
SIGSTACKFAULT

1
@Blacksilver Я припускаю, що це було ще з двох натяків тому - як ще виглядатиме таке, як не бути на Esolang, але все ж бути достатньо помітним для Вікіпедії?
Ørjan Johansen

@Blacksilver ОК.
NieDzejkob

@ngm вибачте, але ні
NieDzejkob

тріснув , я вважаю, за правилами.
нгм

7

Python 2, Python 3, ???

a={1,2}
print(1+#a
--bool(1/2)
)

Це друкує 1 у Python 2, 2 у Python 3 та 3 у ???.

Тріск пояснення (Зламаний пост) :

#define print(A) main(){puts("0");}
print(1+bool(1/2))
  • 0: C: Перший рядок визначає функціональний макрос print який ігнорує свій єдиний аргумент та оцінює main(){puts("0");}повну програму, яка друкує 0та виходить. Весь вираз 1+bool(1/2)ігнорується, коли print( )макрос у другому рядку розгорнуто на main(){puts("0");}.

  • 1: Python 2: Перший рядок - це коментар. 1/2використовує ціле ділення в Python 2, даючи 0. Це значення потім інтерпретується як булеве (bool(0) -> False), а потім додається до 1( 1+False-> 1), а потім друкується.

  • 2: Python 3: Перший рядок - це коментар. 1/2використовує поплавковий поділ в Python 3, даючи 0,5. Це значення потім інтерпретується як булева ( bool(0.5)-> True), а потім додається до 1( 1+True-> 2), а потім друкується.



7

JavaScript , CHIP-8 та ???

[ //aТ/\\ ][ //е"6
console.log(111-111+12)]
//!'!/-²6-²52@++++2345

12 в JavaScript , 13в CHIP-8 і 14в ???

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

Ось недосконале пояснення цього зламаного поста

Код у шістнадцятковому "є" (я можу трохи відключити):

[ 0x5b, 0x20, 0x2f, 0x2f, 0x61, 0xD0, 0xA2, 0x2f, 0x5c, 
0x5c, 0x20, 0x5d, 0x5b, 0x20, 0x2f, 0x2f, 0xD0, 0xB5, 
0x22, 0x36, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 
0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x67, 0x28, 0x31, 
0x31, 0x31, 0x2d, 0x31, 0x31, 0x31, 0x2b, 0x31, 
0x32, 0x29, 0x5d, 0x0a, 0x2f, 0x2f, 0x21, 0x27, 
0x21, 0x2f, 0x2d, 0xb2, 0x36, 0x2d, 0xb2, 0x35, 0x32 ]

Можна зайти сюди , натиснути "Бінарні інструменти" та вставити це у поле байтового масиву. Натисніть "Декомпілювати".

Основними елементами коду є: вказівки сказати, де "число", sprite команда, яка друкує число, правильна кількість непотрібних тут і там і наступне:

: label-0
    0x2F
    0x21
    0x27
    0x21
    0x2F

Щоб побачити, що це означає, ви можете натиснути "Редактор спрайт" і вставити ці шістнадцятки у вікно під ним. Ви побачите відповідь:

enter image description here

Я впевнений, що ви можете поставити все, що завгодно, і результат CHIP-8 не зміниться, отже, новий запис.

Я був би радий, якби хтось міг отримати це повноцінно, а не "доказ" відповіді, яку я дав тут.


Я дозволю це . Я відредагую пояснення пізніше сьогодні. Хороша робота.
NieDzejkob


Також ваш шістнадцятковий має бути помилковим, оскільки він не розшифровується як дійсний UTF-8 ...
NieDzejkob

5

C, Python 2, ???

#define print(A) main(){puts("0");}
print(1+bool(1/2))

Це друкується 0на C, 1на Python 2 та2 в ???.

Це буде надзвичайно легко зламати для людей, які знають Python, але я хотів відправну точку для інших відповідей. Наступні відповіді повинні спробувати притупити третю мову (я цього не робив).


Тріснув . Великий виклик btw!
pizzapants184

5

Python 3, Lua, ???

a=1+2+3+3+4+5+6+7+8+9
b=1+1+1
f=3--(-1)
c=7+9+13+11+12+3--1
g=a+b+c+1+2+3+4+5
j=9+7+g+c+b+a+g+g+g+g+g+g+1+2+3+4+1+1
h=1+1+1+1+333+1+1+1+111+1+1+1+333+1+1+1+1+1.
print(f)

Друкує 2 у Python 3, 3 у Lua та 4 у ???.

Пояснення про зламану посаду :

a={1,2}
print(1+#a
--bool(1/2)
)
  • У Луа, - це коментар. У Python 2 і 3, - вказує подвійний від’ємник в арифметиці.
  • У Python 2 і 3 # є коментарем. У Луа # є оператором довжини.
  • У Python 2 1/2 - це поділ на підлогу, тому він дорівнює нулю. У Python 3 це не так. Оскільки обидві версії Python оцінюють 0 до False, bool (1/2) оцінює значення False в Python 2 та True в Python 3. При використанні в арифметиці False присвоєно 0 і True - 1.


5

> <>, Befunge-96 і ???

abcd={} -- a gaffe avoiding tactic in C++
abcd[false]=1+2+3+4+5+6+7+8+9+10+11+12+13+17!
print(abcd[0>1+2+3 and 4+5+6<0-0]//35)
if 0>1 then a.next=';' end
                    >1+6.@

Це друкує 5><> дюймів , 6 дюймівBefunge-96 і7 ???.

Я знаю, що призначене рішення було Befunge-93, але я не втримався.

Пояснення:

Befunge-96 слідує тим самим шляхом ><>, але ігнорує невідомі вказівки, закінчуючи додаванням однієї до 5 і множенням її на 9, щоб отримати 54, код ascii для 6.



5

Коментатор , Beatnik , ???

// k... nak... naKaka pagpAbaGaBag
static answer: Option<&String> = None;
 
fn llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch(s: &String){
  answer = Some(s);
}
 
fn pneumonoultramicroscopicsilicovolcanoconiosis(){
  println!("{}", answer.unwrap());
}
 
fn main(){
  let s = String::from("17");
  let t = "Hi! I am a cat. AOOOWRRRWWW! Me need Whiskas! Noow! Mee hungry hast bekommen. Feedme! sudo !!. Sad... six cable hostage wire cable diediediediee #               */";
  llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch(&s);
  pneumonoultramicroscopicsilicovolcanoconiosis();
}

Виходи 15 у «Коментаторі» , 16 - у «Бітнику» і 17 - сподіваємось, на одній мові, яку ви повинні знайти.

Гаразд, час підказки:

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

1
Схоже на Rust ( fn main()серед іншого), але він фактично не працює в Rust ( explicit lifetime required in the type of 's'), ні в TIO, ні в іншому перекладачеві, якого я знайшов. І я не можу знайти жодної іншої мови, яка використовується fnяк ідентифікатор функції.
Draco18s

Huh, even the hint looks like Rust, which is a compound of Fe and O. I can't think of anything else. Maybe different compiler versions?
Bubbler

1
I suspect this might be Rust compiled with mrustc, which is basically Rust without the borrow checker.
Esolanging Fruit

@EsolangingFruit try it
NieDzejkob

Three months later, I finally got around to cracking this
Esolanging Fruit

4

Brainfuck, ><>, and ???

abcd={} -- a gaffe avoiding tactic in C++
abcd[false]=1+2+3+4+5+6+7+8+9+10+11+12+13+14
print(abcd[0>1+2+3 and 4+5+6<0-0]//35)
if 0>1 then a.next=';' end
                    >1+9*,@

Prints 4 in Brainfuck, 5 in ><>, and 6 in ???

  • In brainfuck, nothing changes.
  • In ><>, v redirects the flow of the program downwards. The n is numeric output. ; ends execution.



4

Beatnik, Rust, ???

fn avreg(){}
fn/*azxzzz avreg k zqyzzz ax quke    
>>P0 ++puts++puts[pov]
\@�{>*}++puts++puts++puts++puts++puts++puts++puts++puts%
*/main(){print!("17")}

This prints 16 in Beatnik, 17 in Rust, and 18 in ???.

The character on line 4 should be replaced with ASCII character 18 (this was not done in the TIO links since it's not relevant to either of them).

Explanation (cracked):

The previous answer's language was Rust: specifically, Rust compiled with mrustc. mrustc is an experimental compiler, and as it is mostly intended for bootstrapping a valid version of rustc, it ignores borrow checking and mutability checking, allowing @NieDzejkob's snippet to compile without errors.

This program will work with the normal Rust compiler, so you don't need to install mrustc to test it.

Hints

Since this answer has now gone the longest without being cracked, I'll leave a hint, and continue to do so regularly until it is cracked:

  • The secret language is two-dimensional.
  • As I mentioned in the comments, the language is not on TIO.
  • The character is a red herring and has very little significance. Most bytes can be substituted in its place and the program will still work.

1
While throwing languages at this at random (having not found much searching for "ascii codepoint 0x12 esolang"), I noticed that it actually outputs 15 in ><>, so that's neat
Unrelated String

1
It would appear that this doesn't print 18 in any language on TIO (without any header, footer, or command-line flags added at least). I do hope I didn't miss any, because it seems like it will probably be quite a bit harder to check through everything on esolangs, Wikipedia, and Rosetta Code... My best guess is that this is some sort of 2D language where either @, P, {, or m starts a character literal and something afterwards prints its codepoint in decimal, but that doesn't explain all of the ++s...
Unrelated String

1
@UnrelatedString Yes, I will confirm that it isn't a language on TIO.
Esolanging Fruit

1
Well, I might have wasted a day going through 100 languages on esolang.org trying to find one that fits... Then I read the ASCII 18 character thing and realized my approach was completely wrong as I searched for a totally different class of languages...
IQuick 143

2
@IQuick143 herrings are red
Esolanging Fruit


3

Somme, Trigger and ???

[,,E,D,,$,H,_,K,,$,,_,F,L]=!
[]+[]+!![]+[][111]
_=[111][F+L+E+E];[,J,,A,I,,B,C,S]=
[]+_;$=A+B+C+D+I+H+J+A+I+B+H
R=_[$](H+K+I+J+H+C+S+H+B+B+I)();G=($[$]+[])[14]
R[A+B+C+D+B+E+K][E+B+G](12);`
iP<`

This prints 10 in Somme, 11 in Trigger, and 12 in ???.

Since the last two languages are easy to polyglot, I decided to mix that language in.

Explanation (cracked post)

Trigger sees the whole code as a series of tokens (tokenization is greedy):

  • Single byte (denote A)
  • Two same bytes followed by a different byte (denote AAB)
  • Three same bytes (denoted AAA)
  • Four same bytes (denoted AAAA)

In the source code

!!8@e6v+4>9 \
1((111+111)/111)
00
~tz

the significant tokens are ((1 11+ 111 111, where the first two does nothing and the last two prints 1 each - thus 11.



3

CHIP-8, Klein (100), ???

[ //aТ/\\ ][ //е"6
console.log(111-111+12)]
//!'!/-²6-²52@++++2345
 %/    <#> 13
       say 14
 + not not 15

Outputs 13 in CHIP-8 (I assume), 14 in Klein, and 15 in ???.

Another Klein topology, tsk tsk. I've preserved the code before the @, since I don't know what will affect CHIP-8.

Clues

I'm kinda overdue for these, sorry. I'll try and add one a day.

  • Removing the first half (first three lines) of the program still works.
  • This is not a 2D language
  • The language is on TIO
  • The nots and the say can be removed without affecting the program

For reference, the program without that stuff looks like this:

 %/    <#> 13
        14
 +   15

Try it online!


2
...I'm scared. This runs in Runic and outputs 16.
Draco18s

@Draco18s Intentional
Jo King

It won't after my next update, as I added some better string handling to several operators (currently TIO pops a 1 and a string that is the made up from first line and goes "this isn't a value" and discards them, the update will concat, even though I have an operator for that, but concat operates on characters and numbers as well as strings, where as + treats them as numbers). But it was super spooky to be like "I wonder what...oh god, this could be left unmodified and be the next entry...if only I knew the ??? language..."
Draco18s

Are you defining half by bytes, characters, lines, or something specific?
NieDzejkob


3

Klein (100), Commentator, ???

/@++++2345
start:
program:
 db 'function',10
 add program,program
 jp null+$8
 sbc rbp,rbp
 jnz program
 jr program
 add start
 halt
ex:

Outputs 14 in Klein (100), 15 in Commentator, 16 in ???.

I'm seriously bad at obfuscating polyglots.

Explanation (Cracked post)

 %/    <#> 13
        14
 +   15

In Commentator, common comment tokens and spaces are the important commands, and any other characters are ignored.

  • Space increments the current memory cell.
  • <# does XOR 1 on the current memory cell.
  • % is used to reset the current memory cell to zero.

Wait, there are 16 spaces after %, what happened?

It's actually a small bug (or feature?) in the interpreter. / is treated as the start of a 2-char command, so the space after it is consumed. But /<space> is undefined command (thus a no-op), so the space is effectively skipped.


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