Підступ або лікуй поліглот


160

Оскільки Хеллоуїн підходить, я подумав, що я можу почати веселий маленький гольф-код!

Виклик досить простий. Ви повинні написати програму, яка виводить trickабо treat.
"Скрут?" ви можете запитати. Дозвольте пояснити:

Ваша програма повинна робити наступне:

  • Будьте комбінованими / керованими двома різними мовами. Різні версії однієї мови не враховуються.
  • Коли ви запускаєте програму однією мовою, вона повинна виводити, trickа інша повинна виводити treat. Випадок не має значення і дозволено набивання рядків символами пробілу (див. Приклади).
  • Це , тому рішення з найменшими байтами виграє.

Кілька пояснень:

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

"trick"

"Treat"

"    TReAt"

"
     tRICk          "

Недійсні результати :

"tri ck"

"tr
eat"

"trck"

Мені цікаво подивитися, що ви можете придумати! Щасливого гольфу!

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

Табло лідерів

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

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:

# Language Name, N bytes

де Nрозмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:

# Ruby, <s>104</s> <s>101</s> 96 bytes

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

# Perl, 43 + 2 (-p flag) = 45 bytes

Ви також можете зробити ім'я мови посиланням, яке потім з’явиться у фрагменті таблиць лідерів:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


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

2
@ mbomb007. Це дублікат чого ?
TRiG

3
точно не дублікат. Єдине, що те саме щодо цього іншого, це те, що це також поліглот-виклик із заданим результатом.
Брайан Мінтон

3
... 3 сторінки ... Я дійсно вважаю, що це отримує велику активність на основі поточної вартості сезонного варіанту.
wizzwizz4

2
Яке чудове запитання! Мені подобається, як деякі відповіді висвітлюють і використовують, як прості фрагменти коду означають різні речі на різних мовах - наприклад, правдивість / хибність та асоціативність потрійного оператора.
Дон Хетч

Відповіді:


145

2 Використовуваний / пл , 8 байт

0000000: 74 72 65 61 74 93 d0 cb                          treat...

Обидві програми були протестовані локально з тим самим 8-байтним файлом, тож це правильний поліглот.

2 пристосування: трюк

Це програма на кодовій сторінці 1252 .

treat“ÐË

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

pl: пригощати

Це програма в кодовій сторінці 437 .

treatô╨╦

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

Як це працює

2 пристосування: трюк

t         Square root. Errors since there is no input. The exception is caught, the
          stack left unaltered, and the interpreter pretends nothing happened.
 r        Reverse stack.
          Reversed empty stack is still empty stack. ;(
  e       Compute nCr. Errors since there is no input.
   a      Alphanumeric test. Errors since there is no input.
    t     Square root. Errors since there is no input.
     “    Begin a lowercase string literal.
      Ð     Excluding ‘, ’, “, and ”, Ð is the 71st non-ASCII character in CP1252.
       Ë    Excluding ‘, ’, “, and ”, Ë is the 66th non-ASCII character in CP1252.
          (implicit) End string literal.
          Both characters together fetch the dictionary word at index
          71 * 100 + 66 = 7166, which is 'trick'.

pl: пригощати

treat     Bareword; push the string "treat" on the stack.
     ô    Unimplemented. Does nothing.
      ╨   Flatten the stack. This doesn't affect the output.
       ╦  Unimplemented. Does nothing.

15
Але я мушу визнати, що ця відповідь очевидно смішна! Що далі? Відповідь коротша, ніж самі слова?
BrainStone

45
Ця відповідь надзвичайно вражає. Дивно, що вам вдалося написати програму коротшу, ніж довжина двох слів.
DJMcMayhem

1
Так? Це 2 програми
FireCubez

1
@FireCubez Це той самий код, байт на байт. Візуальне подання залежить від кодової сторінки.
Денніс

200

Пакет Python / Windows, 25 байт

print"trick"#||echo.treat

Все після # трактується як коментар python, тоді як || - АБО у пакетній формі, кажучи, що як попередня команда не вдалася, виконайте цю.

Мені також подобається використання АБО, оскільки він майже читає "трюк чи лікування" :)


33
TBH Я підкреслив це лише за коментар щодо АБО.
Джмонс

7
TBH Я ніколи не очікував, що моє перше повідомлення тут отримає 65 результатів :)
nephi12

11
TBH дозволяє не просто говорити про нагороди. It’s not Quora
S Andrew

3
@SAndrew як абсолютно новий член цієї спільноти, я не очікував, що я вийду на пост, який би це добре сприйняв це незабаром, і я радий, що зміг зробити свій внесок. Я не намагаюся похвалитися, будь ласка, не розумійте. Я просто щасливий, що мене так добре сприйняли, як я такий новий. дякую за ваш коментар :)
nephi12

2
Консенсус спільноти @YotamSalmon говорить, що STDERR ігнорується за замовчуванням; вважається тільки STDOUT. Спробуйте команду ще раз із 2>nul.
Conor O'Brien

153

Пробіл / Зоряний, 135 байт

Ось до ясного нічного неба на Хеллоуїн!

  + + + + + 
    +

* + + * + *

   + *           
     + +        

 + * +   



 + * +. +. + + * + + *. . .

Зауважте, що пробіли в порожніх рядках можуть не зберігатися, якщо ви копіюєте з наведеного вище коду

Пробіли виходять "TRICK". Спробуйте в Інтернеті!
Зоряні виходи "TREAT". Спробуйте в Інтернеті!

Пояснення

Зоряний

Зірка ігнорує всі вкладки та нові рядки, тому код, який він читає, наступний

         + + + + + +  * +   +*   +  *   +  *       + +   +* +   +* + .  + .   +      +* +   +* . . .

З іншого боку, значення натискання є дуже дорогим порівняно зі стеками та арифметичними операціями в Starry. Код починається з натискання та дублювання 4 і виконує на ньому ряд операцій, а потім натискання 2 та 1 виробляє всі необхідні значення ASCII.

Анотований код

Stack (after op)    Code        Operation
4                            +  Push 4
4 4 4 4 4 4          + + + + +  Duplicate top of stack 5 times
4 4 4 4 16            *         Multiply top two items
4 4 4 4 16 16        +          Duplicate top of stack
4 4 4 16 4 16          +        Rotate top three items on stack right
4 4 4 16 20         *           Add top two items
4 4 20 4 16            +        Rotate...
4 4 20 64             *         Multiply...
4 64 4 20              +        Rotate...
4 64 80               *         Multiply...
4 64 80 2                  +    Push 2
4 64 80 2 2          +          Duplicate...
4 64 2 80 2            +        Rotate...
4 64 2 82           *           Add...
4 64 2 82 82         +          Duplicate...
4 64 82 2 82           +        Rotate...
4 64 82 84          *           Add...
4 64 82 84 84          +        Rotate...
4 64 82 84           .          Pop and print as character (T)
4 64 84 82            +         Swap top two items on stack
4 64 84              .          Pop and print... (R)
84 4 64                +        Rotate...
84 4 64 1                 +     Push 1
84 4 65             *           Add...
84 4 65 65           +          Duplicate...
84 65 4 65             +        Rotate...
84 65 69            *           Add...
84 65                .          Pop and print... (E)
84                   .          Pop and print... (A)
                     .          Pop and print... (T)

Пробіл

Як випливає з назви, Whitespace аналізує лише три символи пробілу - пробіл, вкладку та новий рядок. В відміну від Starry, то Прогалини просто виштовхує значення ASCII з T, R, I, Cі Kта друкує їх.

Анотований код

<Space><Space><Space><Tab><Space><Tab><Space><Space><Tab><Space><LF> Push the ASCII value of R
<Space><Space><Space><Tab><Space><Tab><Space><Tab><Space><Space><LF> Push the ASCII value of T
<Tab><LF><Space><Space> Pop and print the T
<Tab><LF><Space><Space> Pop and print the R
<Space><Space><Space><Tab><Space><Space><Tab><Space><Space><Tab><LF> Push the ASCII value of I
<Tab><LF><Space><Space> Pop and print the I
<Space><Space><Space><Tab><Space><Space><Tab><Space><Tab><Tab><LF>   Push the ASCII value of K
<Space><Space><Space><Tab><Space><Space><Space><Space><Tab><Tab><LF> Push the ASCII value of C
<Tab><LF><Space><Space> Pop and print the C
<Tab><LF><Space><Space> Pop and print the K
<LF><LF><LF>            Terminate the program. The following line is not run.
<Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><Space><LF>

Переплетення натискань та відбитків було вибрано виключно з естетичних причин, оскільки це не впливає на кількість байтів.


11
так красиве небо
lois6b

8
це, безумовно, найкраща відповідь, така креативна. Я вражений винахідливістю. і майстерність. браво!
nephi12

137

Файл Linux ELF x86 / DOS .COM, 73 байти

00000000  7f 45 4c 46 01 00 00 00  1a 00 00 00 1a 00 43 05  |.ELF..........C.|
00000010  02 00 03 00 1a 00 43 05  1a 00 43 05 04 00 00 00  |......C...C.....|
00000020  eb 0c b4 09 ba 41 01 cd  21 c3 20 00 01 00 b2 05  |.....A..!. .....|
00000030  b9 3b 00 43 05 cd 80 2c  04 cd 80 74 72 69 63 6b  |.;.C...,...trick|
00000040  00 74 72 65 61 74 24 eb  d9                       |.treat$..|
00000049

Джерело NASM:

ORG 0x05430000

BITS 32                                         ;
                                                ;   ELF HEADER    --   PROGRAM HEADER
; ELF HEADER                                    ; +-------------+
DB 0x7f,'E','L','F'                             ; | magic       |    +--------------------+
                                                ; |             |    |                    |
; PROGRAM HEADERS                               ; |             |    |                    |
DD 1                                            ; |*class 32b   | -- | type: PT_LOAD      |
                                                ; |*data none   |    |                    |
                                                ; |*version 0   |    |                    |
                                                ; |*ABI SysV    |    |                    |
DD 0x01a        ; offset = vaddr & (PAGE_SIZE-1); |*ABI vers    | -- | offset             |
                                                ; |             |    |                    |
entry:  DD 0x0543001a                           ; |*PADx7       | -- | vaddr = 0x0543001a |
DW 2                                            ; | ET_EXEC     | -- |*paddr LO           |
DW 3                                            ; | EM_386      | -- |*paddr HI           |
DD 0x0543001a                                   ; |*version     | -- | filesz             |
;       inc     ebx     ; STDOUT_FILENO         ; |             |    |                    |
;       mov     eax, 4  ; SYS_WRITE             ; |             |    |                    |
DD 0x0543001a                                   ; | entry point | -- | memsz              |
DD 4                                            ; | ph offset   | -- | flags: RX          |
                                                ; |             |    |                    |
        jmp     short skip                      ; |*sh offset   | -- |*align              |
BITS 16                                         ; |             |    |                    |
treat:  mov     ah, 9                           ; |             | -- |                    |
        mov     dx, trick + 0x100 + 6           ; |*flags ______|    |                    |
        int     0x21                            ; |______/      |    +--------------------+
        ret                                     ; |*ehsize      |
BITS 32                                         ; |             |
DW 32                                           ; | phentsize   |
DW 1                                            ; | phnum       |
skip:                                           ; |             |
        mov     dl, 5   ; strlen("trick")       ; |*shentsize   |
        mov     ecx, trick                      ; |*shnum       |
                                                ; |*shstrndx    |
                                                ; +-------------+
        int     0x80
        sub     al, 4   ; SYS_EXIT
        int     0x80


trick:  DB      "trick/treat$"

BITS 16
        jmp     short treat

Для цього використовується той факт, що заголовок ELF починається з 7F 45, що, інтерпретується як код x86, є стрибком.

Відповідні частини для DOS .COM:

-u100 l2
07D2:0100 7F45          JG      0147
-u147 l2
07D2:0147 EBD9          JMP     0122
-u122 l8
07D2:0122 B409          MOV     AH,09
07D2:0124 BA4101        MOV     DX,0141
07D2:0127 CD21          INT     21
07D2:0129 C3            RET
-d141 l6
07D2:0140     74 72 65 61 74 24   -                           treat$

4
Браво, сер. Браво.
Драконіс

9
Моє серце пропустило такт.
Джон Кітс

muppetlabs.com/~breadbox/software/tiny/teensy.html є корисним для читання для всіх, хто зацікавлений у фокусі перекриття заголовка тут.
Спарр

4
Це одна з найкращих відповідей, яку я коли-небудь бачив на цьому сайті. Codegolf трохи занадто часто перетворюється на езотеричні мови, створені спеціально для гри в гольф, а не розумні відповіді. Це прекрасно.
Кнетик

Це чудові речі.
Гусьман

103

зло / ZOMBIE , 109 байт

Ще одна моторошна відповідь!

xf is a vampire summon task f say "trick" stumble say "jzuueeueeawuuwzaeeaeeaeawuuuuwzuueeueeaw" animate bind

ZOMBIEКод визначає vampireімені xfякого тільки завдання fактивується при створенні екземпляра і вихід буде trickодин раз перед тим , як деактивується stumble. Інший sayвиклик - це мертвий код (наскільки це доречно!) Для ZOMBIE, але містить більшу частину evilкоду.

Для evil, то xfім'я виклику , щоб перейти до наступного j, який передує zuueeueeawuuwzaeeaeeaeawuuuuwzuueeueeawзомбі стогнати , що вироби і вихід treat. Наступний код або виконується (малі літери), або ігнорується, але оскільки немає wжодного результату, не слід виробляти.


1
@KevinCruijssen дякую, мені сподобалось, що я потрапив у деякі маловідомі езотеричні мови :)
Аарон

Ну, з чотирьох, яких ви використовували, я бачив Агонію кілька разів раніше, і я смутно пам'ятаю, як бачив ZOMBIE один раз. Однак ніколи не чув про HashHell або зла. :)
Кевін Кройсейсен

Тематика цього Хеллоуїна вражає! Я ніколи навіть не чув про ці дві мови
ejfrancis

95

Python / Perl, 28 байт

print([]and"trick"or"treat")

Пояснення

Оскільки []це ArrayRef в Perl, це truthy, але це порожній масив в Python, отже, хибний.


7
Аналогічно print({}and"trick"or"treat")в Python / Lua.
користувач200783

1
@ user200783 Це може мати такий же ефект і в Perl, оскільки {}це HashRef!
Дом Гастінгс

2
Також майже однаковий для Python / Ruby, але вимагає додаткового пробілу:print ([]and"trick"or"treat")
Value Ink

2
Любіть це! Це чудовий коментар до того, що неявна конверсія в bool робить для читабельності.
Дон Хетч

Це може бути поліглот у Луї, Перлі та Пітоні, якби він був print({}and"trick"or"treat")!
ckjbgames

48

PHP / JavaScript, 32 30 байт

Відображається trickв PHP та treatJS.

NaN?die(trick):alert('treat');

Невідома NaNконстанта неявно перетворюється на рядок PHP, роблячи її правдоподібною. Це фальшивість в JS.

Альтернативний метод, 38 байт

(1?0:1?0:1)?die(trick):alert('treat');

Потрійний оператор є право-асоціативним в JS:

                1 ? 0 : 1 ? 0 : 1
 is parsed as:  1 ? 0 : (1 ? 0 : 1)
 which equals:  0

І ліво-асоціативний у PHP:

                1 ? 0 : 1 ? 0 : 1
 is parsed as:  (1 ? 0 : 1) ? 0 : 1
 which equals:  1

1
Ти маєш рацію, моя погана
Гарет Паркер

alert () - JavaScript у HTML, однак це не JavaScript з консолі.
peter ferrie

1
Альтернативний метод: '\ 0' == "\ 0"? Die (хитрість): попередження ("лікувати"); `.
Ісмаїл Мігель

3
Налагодження ланцюгових потрійних операторів у PHP повинно бути дуже цікавим.
Роберт Фрейзер

3
@Robert Налагодження чого-небудь у PHP - це дуже цікаво.
sampathsris

39

HTML / HTML + JavaScript, 53 байти

treat<script>document.body.innerHTML='trick'</script>

treat- це текстовий вміст документа в HTML.
Якщо JS увімкнено, він замінить вміст HTML на trick.


3
Цікаве рішення. Мені це подобається
BrainStone

1
Ви повинні використовувати document.write()замість цього. -8 байт
darrylyeo

@darrylyeo document.writeне замінить вихід HTML, а додасть його.
Тит

1
Тестували в Chrome. Повністю працює. Увімкнення та вимкнення Javascript змінює вміст на оновлення.
Tatarize

@Tatarize: Тестується в Firefox 49, Opera 41, Safari 5.0, Chrome 54, Edge 38 у Windows, Firefox 5.3 та Safari 5.0 на iOS, Firefox 49 та Dolphin 11.5 на Android. Замінює лише Firefox у Windows; всі інші додаються.
Тит

33

C / Java 7, 165 155 128 123 122 120 103 байт

//\
class a{public static void main(String[] s){System.out.print("treat"/*
main(){{puts("trick"/**/);}}

// \ робить наступний рядок також коментарем на C, але це звичайний коментар на одному рядку в Java, тому ви можете зробити код ігнорування C, призначений для Java, а додавши / * у другому рядку, ви можете зробити коментар для Java, тобто розбирається як код С.

Редагувати: я трохи покращив її, переорганізувавши рядки та коментарі.

Edit2: Я дещо реорганізував і ще більше скоротив її.

Edit3: Я додав виправлення, запропоновані BrainStone, щоб видалити 5 байт, дякую :)

Edit4: Один новий рядок виявився непотрібним, тому я його видалив.

Edit5: я змінив printf на ставки.

Edit6: Я додав виправлення, запропоноване Реєм Хамелем.


1
Ви можете захистити 1 байт, змінивши C на C ++ і замінивши #include<stdio.h>на #include<cstdio>. Не багато, але байт - це байт. І додатково видаляючи int передню частину mainбезпечних 4 байтів. intмається на увазі на C і C ++
BrainStone

Дякую, я змінив код відповідно до ваших пропозицій :)
I_LIKE_BREAD7

1
Приємно! Мені було важко придумати щось для Java, і я сам опинився на Java 7 + Whitespace . До речі, ви можете пограти ще на один байт, видаливши місце в String[]s.
Кевін Кройсейсен

29

Jolf + Chaîne, 12 байт

Оскільки Chaîne не може прийняти файл для завантаження з кодуванням, я припускаю UTF-8. (Якби я міг припустити ISO-8859-7, це було б 11 байт, але це було б несправедливо.)

trick«treat

У Chaîne «починається коментар, а решта друкується дослівно. У Джольфа «починається струна. На щастя, trickне робить нічого шкідливого (в 10; range(input, parseInt(input))основному) і treatдрукується.

Спробуйте Джольфа тут!

Спробуйте Chaîne тут!

Вони обидва працюють у моєму браузері (Firefox, остання версія), але те саме не можна сказати для інших браузерів.


2
Я маю на увазі, що в описі багатьох незрозумілих мов є свої переваги ...
Conor O'Brien

1
Приємно бачити, що ми наближаємось до рішень, майже лише витрачаючи слова. Цікаво, чи може хтось повторно використовувати це tr.
BrainStone

1
@BrainStone Я особисто сумніваюся, що trйого можна повторно використати в будь-якому гольфі - це невеликий фрагмент інформації, який потребує хоча б оператора для кодування в гольф-мовах, тоді мова, яка є специфічною. Це, мабуть, виходило б або однакової довжини, або довше. Однак це лише моя думка;)
Conor O'Brien

Давай дізнаємось. Але я повинен погодитися. Кількість байтів, що становить 10 і менше, було б шалено!
BrainStone


27

#hell / Агонія , 43 байти

Стільки ><>скрізь, що це, виклик першотравневих дурнів? Ось відповідь з відповідними тематичними мовами.

--<.<.<.<.<.$
io.write("trick")--+<~}~@+{+<

#hell- це підмножина, LUAяка, на щастя, приймає io.writeвихідні дзвінки. Ми використовуємо LUA«s --коментарі так , що він виконує тільки цей фрагмент.

Agonyє Brainfuckпохідною, яка має особливість мати свій код і робочу пам'ять на одній стрічці. Перший рядок друкує лише 5 символів (10 комірок) з кінця сегмента коду, де я кодується treatяк Agonyкоманди. LUAВідкриття коментаря --змінює значення комірки, яка не використовується.


Треба сказати, що ваші тематичні на Хеллоуїн найкращі імхо. Дуже креативно!
BrainStone

@BrainStone Спасибі, мені було весело їх робити!
Аарон

27

Cubix / шестикутник , 31 байт

t;./e;_a]"kcirt">o?@;=v=./r;\;/

Обманюй! Лікуйте це в Інтернеті!

Хеллоуїн тематичний ? Зверніть увагу на жахливі факти про ці мови та код:

  1. Якщо і навіть якщо ви нічого не зробите (просто поставте no-ops), ви ніколи не зможете вийти з циклу, який визначено, що він працює назавжди ...
  2. І застряг посеред 3D-та двовимірної мови програмування (О, агонія ...)
  3. Всередині розмірів ви поступово втратите там, де ви були ... де ви були ...
  4. І є =v=посмішка на вас, яка діє без опосередкованої дії в коді

Давайте зануримося в таємницю прихованого 31-байтового протоколу зв'язку розмірів і терору ...

хитрість

Коли код складається або розгортається сам ... Тобто cubifiedмакет виглядає приблизно так:

      t ; .
      / e ;
      _ a ]
" k c i r t " > o ? @ ;
= v = . / r ; \ ; / . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

І головна частина - це ця частина посередині:

" k c i r t " > o ? @ .
. . . . . . . \ ; / . .

Він натискає k,c,i,r,tна стек і oвиводить і ;вискакує в циклі, обмеженому відбивачами, і ?який спрямовує вас залежно від значення у верхній частині стека ...

пригощати

Раптом код перетворюється з куба в шестикутник. (Уяви що)

   t ; . /
  e ; _ a ] 
 " k c i r t 
" > o ? @ ; = 
 v = . / r ;
  \ ; / . .
   . . . .

І головна частина - це ця частина:

   t ; . /
  e ; _ a ] 
 . . . . . . 
. . . . @ ; = 
 . . . / r ;
  . . . . .
   . . . .

Він працює, t;який друкує tі потрапляє в дзеркало, і повертає його напрямок на NW, починаючи з кута SE, і потрапляє на інше дзеркало. Це запускається r;і завертається до e;_aта ]приводить його до Інструкційного покажчика 1, який починається з кута NE, що вказує на SE, і потрапляє, /який відображається горизонтально до того ;часу t.

Потім він обтікає =, ;і @закінчується безлад.

Отже ... Що _там роблять?

Чому він знаходиться всередині t e a(перші 3 букви в коді)?

Ось і закінчується історія -

воно нічого не робить .

Це звучить як кінець історії жахів?


Приємно, дуже приємно! Складно створити поліглот із двох двовимірних мов. Мені подобається історія жахів, яка йде разом із нею;)
ETHproductions

Не впевнений, чи відповідь ця чи ELF / .COM є більш вражаючою. Хороша робота!
val

24

SQL / Javascript, 54 байти

select('trick')
--a;function select(){alert("treat")}

Той самий підхід, як і у моїй відповіді QB / JS : Перший рядок має оператор SQL, у другому рядку є "коментар" для SQL та NOP для JS. Потім ми визначаємо оператор SQL selectяк дійсну функцію JS.


3
Це дуже розумний спосіб поєднання цих двох мов. Майте +1!
ETHproductions

22

/Brainf..k/, 143 + 3 = 146 байт

Ця відповідь вимагає, щоб -Aпрапор виводився в ASCII для Brain-Flak, і, на щастя, Brainfuck не переймається цим прапором, тому він не впливає на вихід у Brainfuck.

(((((()(()()()){})({}){}){}){})+++++++[<+++<(((()()()())((((({}){}){}){}){}()))[][][][]())>>-])<[<++++>-]<.--.---------.------.>++[<++++>-]<.>>

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

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

Як це працює

Єдине перекриття між синтаксисом Brain-Flak та Brainfuck - це символи <>[]. Для головного мозку це здебільшого означає, що програма повинна забезпечити рівну кількість комутаторів стеків <>. А для Brainfuck це означає, що нам потрібно уникати нескінченних циклів, викликаних використанням []монади.

Код Brain-Flak такий:

(((((()(()()()){})({}){}){}){})[<<(((()()()())((((({}){}){}){}){}()))[][][][]())>>])<[<>]<>[<>]<>>

Крім [<<...>>]біта в середині та <[<>]<>[<>]<>>в кінці, цей код є цілком рівним для курсу, наскільки йде програма Brain-Flak. Мінус навколо нуля ( [<...>]) є, щоб створити цикл для Brainfuck. Внутрішня <...>використовується для переміщення Brainfuck до порожньої комірки до того, як вона зустрінеться з тією, [][][][]яка б циклічно виводилась нескінченно.

Код Brainfuck такий:

+++++++[<+++<[][][][]>>-]<[<++++>-]<.--.---------.------.>++[<++++>-]<.>>

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


Мені подобається цей: D
Conor O'Brien

9
Є ще БАГАТО більше двох мов , які відповідають регулярному виразу /brainf..k/, так що ви повинні використовувати один і той же формат заголовка , як і всі інші.
mbomb007

13
@ mbomb007 Єдина інша мова, яку я міг би знайти, що відповідає цьому регулярному вираженню - це brainfork . Зручно, коли ви працюєте в brainfork, це друкує "TRICK", тому я покину регекс на час.
Sriotchilism O'Zaic

For brain-flak this mostly means the program has to ensure an even number of stack switchesВи впевнені в цьому? Це не має значення, оскільки <>це НОП у моззі
DJMcMayhem

@DJMcMayhem він повинен закінчуватися на тому ж стеку, ми ставимо все, інакше він нічого не надрукує.
Sriotchilism O'Zaic

21

> <> / Риболовля , 38 байт

_"kcirt"ooooo;
[+vCCCCCCCC
   `treat`N

Заради виготовлення ><>/ Fishingполіглота.

Це мій перший фрагмент Fishingкоду після того, як я довго грав у ><>.
Перше моє враження: як і в природі, рибалка має менше фізичних можливостей, ніж молиться, але доповнює це своїм інструментом!

Тут код надзвичайно простий: ><>виконує лише перший рядок, де _знаходиться вертикальне дзеркало і не має ефекту, оскільки риба починає плавати горизонтально. Він просто натискає trickна стек, після чого роздруковується перед зупинкою.
Для Fishing, що _інструктує йти вниз. Рибалка буде стежити за колодою, яка є другою лінією, під час лову символів третього рядка. Вони натискатимуть treatна стрічку, після чого надрукують її, зупиняючись, коли вона досягне кінця колоди.

Якщо помилка дозволена, ви можете знизитись до 35 байт із наступним кодом, який призведе до помилки при запуску, як ><>тільки trickдрук буде виведений зі стека:

_"kcirt">o<
[+vCCCCCCCC
   `treat`N

Ви також повинні перевірити мої відповіді на тематичні мови, #hell / Агонія та зло / ZOMBIE !


Ах, я хотів зробити рибу / риболовний поліглот :) Ти мене до цього побив. Хороший!
Емінья

+1 за " як у природі, рибалка має менше фізичних можливостей, ніж молиться, але компенсує це своїм інструментом! "
Кевін Круїйсен

20

05AB1E / Насправді 10 байт

"trick"’®Â

Пояснення

05AB1E

"trick"     # push the string "trick"
       ’®Â  # push the string "treat"
            # implicitly print top of stack (treat)

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

Насправді

"trick"     # push the string "trick"
       ’®Â  # not recognized commands (ignored)
            # implicit print (trick)

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


Ви знаєте, я можу чітко прочитати trick, але як ’®Âлікувати? ..
Кевін Круїйсен

1
Зараз люди знають цю особливість. Наступного разу ми отримаємо запитання, такі як " hQq3k або bvM; p polyglot " ...
jimmy23013

3
@KevinCruijssen: '®Â перекладається як "взяти слово із індексу 3757 зі словника", що є "лікувати".
Емінья

@Emigna Добре ... Тож усі ~ 1,1 млн англійських слів доступні в 05AB1E?
Kevin Cruijssen

1
@KevinCruijssen: Ні, всього 10 к (кожен представлений у вигляді двох символів). Весь список ви можете знайти тут .
Емінья

16

Haskell / Standard ML , 56 байт

fun putStr x=print"treat";val main=();main=putStr"trick"

Вид Haskell

Точки з комою дозволяють кілька оголошень в одному рядку і діють як розриви рядків, тому ми отримуємо

fun putStr x=print"treat"
val main=()
main=putStr"trick"

Програма Haskell виконується за допомогою виклику mainфункції, тому в останньому рядку putStr"trick"виконується яка просто друкує trick.
Перші два рядки інтерпретуються як оголошення функцій за шаблоном <functionName> <argumentName1> ... <argumentNameN> = <functionBody>. Отже, у першому рядку funоголошується функція з ім'ям , яка приймає два аргументи з ім'ям putStrта xі функцією print"treat". Це дійсна функція Haskell з типом fun :: t -> t1 -> IO (), це означає, що вона бере аргумент довільного типу, tа другий якогось типу t1a потім повертає IO-дію. Типи tі t1неважливо, оскільки аргументи не використовуються в тілі функції. Результат типу IO-дії print"treat", який друкує "treat"до StdOut (зауважте ", саме томуputStrзамість printвикористовується в main). Однак, оскільки це лише декларація функції, нічого насправді не друкується так, funяк не викликається main.
Те ж саме відбувається у другому рядку val main=();, valоголошується функція , яка приймає довільний аргумент, іменований mainі повертає одиницю , порожній кортеж (). Це тип val :: t -> ()(Обидва значення і тип блоку позначені ()).

Спробуйте це на Ideone.


Стандартний вид ML

Стандартний ML - це перш за все функціональна мова з синтаксисом, пов'язаним з, але не тим же, що і з Haskell. Зокрема, декларації функцій мають префікс ключового слова, funякщо вони беруть аргументи, та ключового слова, valякщо вони не відповідають цим. Також можливий вираз на верхньому рівні (мається на увазі не в будь-якій декларації), який виконується під час запуску програми. (У написанні Haskell 1+2поза декларацією кидається naked expression at top levelпомилка). Нарешті, символ перевірки рівності знаходиться =замість ==Haskell. (Є ще багато відмінностей, але це єдині, що мають значення для цієї програми.)
Отже, SML бачить дві декларації

fun putStr x=print"treat";
val main=();

слідом за виразом

main=putStr"trick"

яка потім оцінюється. Щоб визначити, чи mainдорівнюють рівні putStr"trick", обидві сторони повинні бути оцінені, і обидві повинні мати один і той же тип, оскільки SML (як і Haskell) статично набирається. Давайте спочатку подивимось на праву сторону: putStrце не функція бібліотеки в SML, але ми оголосили функцію, названу putStrв рядку fun putStr x=print"treat";- вона бере аргумент x(це рядок "trick"у нашому випадку) і негайно знову забуває її, як це не відбувається в організмі функції. Тоді print"treat"виконується тіло , яке друкує treat(без додавання ", SML printвідрізняється від Haskell print).
printмає тип string -> unit, тому putStrмає тип a -> unitі тому putStr"trick"має просто типunit. Для того, щоб бути добре набраним, mainмає бути також тип unit. Значення для одиниці в SML таке ж, як і в Haskell (), тому ми заявляємо val main=();і все добре набрано.

Спробуйте це на кодування.
Примітка. Вихід у консолі є

val putStr = fn : 'a -> unit                                   
val main = () : unit                                                    
treatval it = true : bool

оскільки в SML \ NJ значення та тип кожного оператора відображаються після кожної декларації. Таким чином , перші типи putStrі mainпоказані, то вираження отримують оцінку в результаті чого treatбуде надруковано, то значення виразу ( trueтак як обидва сторін =є ()) пов'язано з неявним змінним результатом , itякий потім також відображається.


1
Я завжди думав, що fun ... ... =це синтаксичний цукор для val rec ... = fn ... =>. Але знову ж таки минули десятиліття, як я використовував ML.
Ніл

@Neil Ви маєте рацію, funчи пов'язаний синтаксичний цукор для анонімної функції val( recпотрібен лише, якщо функція є рекурсивною), і тому формулювання "повинно бути встановлено" неправильно вибрано, я відредагую відповідь. Як правило, використання funє найкращою практикою, особливо в гольф-коді, оскільки це набагато коротше.
Лайконі

15

Ruby / C, 64 62 51 48 байт

#define tap main()
tap{puts(0?"trick":"treat");}

Що бачить Рубі:

tap{puts(0?"trick":"treat");}

tapМетод приймає блок і виконує його один раз. Це короткий ідентифікатор, для якого ми можемо створити #defineмакрос в C. Він також дозволяє нам поставити блок, що вкладається в дужки, до спільного коду, хоча Ruby не дозволяє {}s у більшості контекстів.

Єдиними хибними значеннями в Ruby є falseі nil. Зокрема, 0 є правдою. Таким чином, Рубі надрукує "трюк".

Що бачить C (після попереднього процесора):

main(){puts(0?"trick":"treat");}

0 є хибним у C, тому C надрукує "частування".

2 байти збережено завдяки daniero.


1
Приємно. Ви можете використовувати putsзамість цього, printfщоб зберегти два байти
daniero

Дякую! Я так звик просто завжди використовувати printfC, що забув, що він також має putsфункцію.
m-chrzan

Дві ідеї: Ви не можете використовувати щось коротше tap? І чому ти не позбувся простору? p ? "trick":"treat"=>p?"trick":"treat"
BrainStone

tapнасправді служить двом цілям. Це короткий ідентифікатор, який #defineпотрібно зафіксувати, але він також дозволяє мені вставити дужки безпосередньо в код Ruby. {}блоки в Ruby , не працюють , як вони це роблять в C і подібних мов, але tap робить приймати блок, і виконує його один раз.
m-chrzan

Імена методів у Ruby можуть закінчуватися знаком питання, тому після цього потрібно пробіл p. ?<character>є літеральним символом, тому після ?. потрібно пробіл .
m-chrzan

15

QBasic / JavaScript, 51 44 байт

'';PRINT=a=>{alert("Treat")}
PRINT("Trick")

У QBasic він друкує другий рядок і не виконує перший рядок, тому що це вважається коментарем (спасибі '). У JS він називає функцію PRINT, яка визначена в першому рядку, відразу після JS NOP '';.


1
Дуже розумний підхід!
BrainStone

14

ShapeScript / Foo , 13 байт

'trick'"treat

Спробуйте в Інтернеті! хитрість | пригощати

Як це працює

ShapeScript розбирається за символом. Коли EOF потрапляє, не стикаючись із завершальною цитатою, на стек ніколи нічого не натискають. 'trick'не просуває рядок всередині лапок, який друкується в STDOUT неявно.

Foo не має ніяких команд, призначених для символів є 'trick', так що ця частина мовчки ігнорується. Однак він надрукує що-небудь між подвійними лапками негайно на STDOUT, навіть якщо відсутня цитата закриття.


14

Ruby / Perl, 21 байт

print"trick"%1||treat

Perl

Розраховую , "trick" % 1що 0 % 1таким чином ||посилає treatдо printнатомість, так як Perl приймає barewords.

Рубін

Форматує рядок "trick"з аргументом 1, в результаті "trick"якого є truthy, тому ||не обробляється.


14

MATL / CJam , 17 байт

'TRICK'%];"TREAT"

У MATL це виводиться TRICK . У CJam він виводить TREAT .

Пояснення

MATL

'TRICK'         Push this string
%];"TREAT"      Comment: ignored
                Implicit display

CJam

'T              Push character 'T'
R               Push variable R, predefined to empty string
I               Push variable I, predefined to 18
C               Push variable C, predefined to 12
K               Push variable K, predefined to 20
'%              Push character '%'
]               Concatenate stack into an array
;               Discard
"TREAT"         Push this string
                Implicit display

Ви там відсутні 3 символи! (EAT)
Зруйнований лимон

@DestructibleWatermelon Дякую! Відредаговано
Луїс Мендо

Тепер вам не вистачає трьох у поясненні MATL!
Руйнуючий лимон

@DestructibleWatermelon Aww. Ще раз дякую :-D
Луїс Мендо

12

Желе / пл , 12 байт

0000000: 74 72 65 61 74 0a 7f fe 00 ba 49 fb                 treat.....I.

Це програма, що відображається за допомогою кодової сторінки Jelly .

treatµ
“¡ṾI»

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

Це програма, яка відображається на кодовій сторінці 437 .

treat
⌂■␀║I√

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

Обидві програми були протестовані локально з тим самим 12-байтним файлом, тож це правильний поліглот.

Як це працює

У Jelly кожен рядок визначає посилання (функцію); останній рядок визначає основне посилання , яке виконується автоматично під час запуску програми. Якщо код до останнього 7fбайта (посилання рядка на кодовій сторінці Jelly) не містить помилки аналізатора (яка б негайно припинила виконання), вони просто ігноруються. Останній рядок, “¡ṾI»просто індексується у словнику Jelly, щоб отримати слово трюк , який друкується неявно в кінці програми.

Я мало знаю про pl, але, здається, що інтерпретатор вибирає лише один рядок коду і ігнорує все, що з’являється після нього. Як і в Perl, бареври трактуються як рядки, тому treatдрукується саме так.


12

Objective-C / C, 50 байт

puts(){printf("trick");}main(){printf("treat\n");}

Objective-C отримав частування цукерками та відбитками , але C не зробив і друкує фокус .

Як це працює

Я мало що знаю про Objective-C , але він робить те, що ми розумно очікували б у цій ситуації. Повторне визначення putsзначення не впливає на вихід, оскільки ми ніколи не викликаємо функцію, а mainдрукує обробку та передачу ліній у STDOUT.

Ви можете очікувати, що C зробить те саме, але принаймні gcc 4.8, gcc 5.3 та clang 3.7 цього не роблять.

Так як ми не потребуємо реальний Printf (яка приймає рядок формату і додаткові аргументи) і рядок для друку закінчується перекладом рядка, ми можемо використовувати пута замість цього. ставить трохи швидше, ніж printf (який повинен проаналізувати його аргументи перед друком), тому, якщо ми також не визначимо також функцію printf , компілятор оптимізує та замінить виклик до printf викликом до ставки . Мало хто знає компілятор, що виклик putsз аргументом замість цього "treat"виведе трюк !

Тут не включається stdio.h має вирішальне значення, оскільки для визначення ставок потрібно буде використовувати той самий тип, який він має у файлі заголовка ( puts(const char*)).

Нарешті, примітно, що виклик до printf in put передає рядок без зворотного каналу. В іншому випадку компілятор також "оптимізує" цей виклик, що призведе до помилки сегментації.


10

Пакет / ш, 30 байт

:;echo Treat;exit
@echo Trick

Пояснення. Batch бачить перший рядок як мітку, яку він ігнорує, а виконує другий рядок, який друкує Trick. @ Пригнічує Batch за замовчуванням відлуння команди stdout. (Мітки ніколи не лунають.) Тим часом sh бачить таке:

:
echo Treat
exit
@echo Trick

Перший рядок нічого не робить (це псевдонім true), другий рядок друкує Treat, а третій рядок виходить із сценарію, тому @echo Trick ніколи не досягається.


10

sed / шестикутник 32 байти

/$/ctrick
#$@$a</;r;e;/t;....\t;

sed

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

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

Приклад виконання:

$ echo | sed -f TrickOrTreat.sed
trick

Шестикутник

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

Перший /переспрямовує вказівник інструкції вгору та вліво, тому він загортає нижній лівий, пропускаючи текст, використаний для sed. Він повторно використовує r з коду sed і запускає декілька інших безрезультатно. Розширений шестигранник виглядає приблизно так:

   / $ / c 
  t r i c k
 # $ @ $ a <
/ ; r ; e ; /
 t ; . . . . 
  \ t ; . .
   . . . .

Вихід:

treat

Я бачив повідомлення в шестикутнику, які містять зображення шляху виконання, чи легко їх створити?
Райлі


1
Ваш шестигранний код друкує провідний нульовий байт. Не впевнений, чи вважається це пробілом для цілей цього виклику.
Мартін Ендер

@MartinEnder Здається, що це дозволено. Дякую за те, що я вказав на це, я завжди чомусь пропускаю їх ...
Райлі

Мені вдалося виправити це, заощадивши кілька байтів (ціною друку верхнього регістру A, хоча ви могли зробити це менш потворним, змінивши всі літери на верхній регістр): hexagony.tryitonline.net/…
Martin Ender

10

C # / Java

Це, ймовірно, не кваліфікується, оскільки воно не працює самостійно, але проблема нагадувала мені химерність того, як C # і Java по-різному обробляють порівняння рядків, з якими можна повеселитися за обфускуванням коду.

Наступна функція дійсна в C # та Java, але поверне інше значення ...

public static String TrickOrTreat(){
    String m = "Oct";
    String d = "31";
    return m + d == "Oct31" ? "Trick" : "Treat";
}

Дійсно цікавий химер.
BrainStone

10

Brain-Flak / Brain-Flueue, 265 253 219 165 139 115 113 101 байт

Включає +1 для -A

Завдяки Wheat Wizard за те, що я повертався туди-сюди, зі мною граючи в декілька байтів.

((((()()()))([]((({}{}))({}([((({}()())))]([](({}{}){}){}{})))[]))[])[()()])({}()()){}({})({}[][]){}

Brain-Flak: Спробуйте в Інтернеті!
Brain-Flueue: Спробуйте в Інтернеті!

Пояснення:
У першому розділі перераховані значення, які бачить Brain-Flak.
Коли він переходить на «Мозок-димохід», я починаю перераховувати значення у міру того, як їх бачить «Мозок-димохід».

# Brain-Flak
(
 (((()()()))             # Push 3 twice
  ([]                    # Use the height to evaluate to 2
   (
    (({}{}))             # Use both 3s to push 6 twice
    ({}                  # Use one of those 6s to evaluate to 6
     ([((({}()())))]     # Use the other 6 to push 8 three times and evaluate to -8
      ([](({}{}){}){}{}) # Use all three 8s to push 75
     )                   # The -8 makes this push 67
    )                    # The 6 makes this push 73
   [])                   # Use the height and the 6 to push 82
  )                      # Use the 2 to push 84

# Brain-flueue
 [])     # Use the height and 3 to push 84
[()()])  # Push 82
({}()()) # 67 is at the front of the queue, so use that to push 69
{}       # Pop one from the queue
({})     # 65 is next on the queue so move to the end
({}[][]) # 74 is next, so use that and the height to push 84
{}       # Pop that last value from TRICK


9

PowerShell / Foo, 14 байт

'trick'#"treat

У 'trick'PowerShell створюється рядок і залишає його на конвеєрі. #Починає коментар, тому програма завершується , і неявні Write-Outputвідбитки trick.

У Foo, (Спробуйте його в Інтернеті!) , 'trick'Ігнорується, #змушує програму спати 0секунди (оскільки в покажчику масиву нічого немає), потім "treatпочинається рядок. Оскільки EOF досягнуто, існує неявне "закриття рядка, і воно друкується для stdout.


Також працює в J / Foo.
Conor O'Brien

@ ConorO'Brien Чи пояснення таке? Я ніколи не використовував J і не знайомий з ним.
AdmBorkBork

Ні, це не працює в J. #- це функція копіювання, і вона бере лише негативні складні ліві аргументи, а не рядки. Символ коментаряNB.
Adám

@ Adám правий ти. Забув#
Conor O'Brien

9

PHP / Perl, 28 байт

print defined&x?trick:treat;

defined&x
дає щось по-справжньому в PHP (не маю поняття, чому, але це робить).
У Perl він перевіряє, чи xвизначена функція - що ні.
-> trickв PHP, treatв Perl.


@jmathews Ви намагалися вставити символ керування зворотним простором у свою версію Windows? Про що CLS?
Тіт

`- це правдоподібне значення визначеного & x або d & x, запитайте мене, чи не ви отримаєте
Jörg Hülsermann
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.