Пітон 3 / > <> , 177 173 172 167 байт
Дякуємо @mathmandan за гоління 5 байт!
Ну, це був досвід, і досвідчений теж. Будь-які пропозиції щодо гольфу вітаються, оскільки це досить довго. Я намагався використати текст, але це було досить складно.
Технічно було б Python 3, щоб ця програма виводила (і я міг би змінити це, якби я не відповідав специфікаціям - але в прикладі Python / C Python
було вказано вихід ).
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!" #v "><>"r~/
a=", it was built for "+v#\a
print(aa[-3::-1]+"Pytho" +"n"+a)
# .4b;!?lor"!nohtyP r"~/
Спробуйте його на Інтернет-перекладачі та інтерпретаторі Python 3 ( > <> вимагає ввести код вручну)
Повертається
This program wasn't written in ><>, it was built for Python!
в> <> і
This program wasn't written in Python, it was built for ><>!
в Python.
Пояснення (Python)
Що стосується речей Python, це досить просто. Ось код, який нас хвилює (в основному код без коментарів, який позначається #
в Python). Зауважте, що в Python \
є символом втечі, коли він використовується у рядках, тому \"
оцінюється як "
у рядку.
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"
a=", it was built for "+v
print(aa[-3::-1]+"Pytho" +"n"+a)
Що нас найбільше хвилює, це операції, що виконуються на змінній aa
:
aa[-3::-1]: reverses the string and chops off the quotation marks (thanks to @mathmandan)
Таким чином, заява про друк оцінюється до
"This program wasn't written in " + "Pytho" + "n" + ", it was built for ><>!"
Пояснення (> <>)
Тепер ми переходимо до більш важкої частини. Ще раз: ось код із видаленими непотрібними бітами.
aa=" ni nettirw t'nsaw margorp sihT\"\
v "><>"r~/
a=", it was built for "+v \a
.4b;!?lor"!nohtyP r"~/
Рядок 1:
aa=" ni nettirw t'nsaw margorp sihT\"\
aa= pushes 1 onto the stack (evaluates 10==10, basically)
" ni ... \" pushes the first part plus a \ onto the stack.
\ deflects the pointer downwards
Стек зараз (якщо він надрукований): \This program wasn't written in
Рядок 2:
Зауважте, що рядок 2 починається /
з положення вказівника від рядка 1 і рухається праворуч ліворуч.
v "><>"r~/
/ deflects the pointer leftwards
~r pops the / off the stack and then reverses it
"><>" pushes ><> onto the stack
v deflects the pointer downwards
Стек зараз: ><> ni nettirw t'nsaw margorp sihT
Рядок 3:
Як і в попередньому рядку, і цей починається з пункту \
, де рядок 2 надсилає вказівник. Зауважте, що оскільки вказівник обертається навколо рядка, коли він досягне першого, a
я напишу своє пояснення для того, куди йде вказівник (і таким чином, що виконується)
a=", it was built for "+v \a
\aa= deflect and push 1 onto the stack
", i ... " push the string onto the stack
+v sum the last two values pushed and deflect
Стек зараз ( x
це символ, утворений додаванням "r" та пробілом. - це не власне символ, а просто заповнювач від мене):
xof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
Рядок 4:
Вказівник просто продовжується вниз, тому ця лінія не вимагає додаткового пояснення.
Рядок 5:
Починаючи з /
та йдучи вліво.
.4b;!?lor"!nohtyP r"~/
~"r Python!" pops x off and adds back r and a space
r reverses the stack
o pops and prints a character
l?!; pushes the length of the stack and stops if it's 0
b4. pushes 11 then 4 then moves to that location (where o is)
Стек зараз (вихід зворотний):
!nohtyP rof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
І це повинно бути для пояснення. Повідомте мене, чи є якась невідповідність між поясненням / кодом чи я зробив щось не так; Я ще трохи полегшив свій код, поки я був у середині написання пояснення, щоб я міг змішати шматочки старого та нового коду.