Я не та мова, яку ти шукаєш!


181

Чи не прикро, коли ви знайдете фрагмент коду і не знаєте, на якій мові він написаний? Цей виклик намагається дещо вирішити це.

Виклик

Вам доведеться написати програму, яка при запуску двома різними мовами виведе рядок:

This program wasn't written in <language program compiled/interpreted in>, it was built for <other language the program can be run in>!

  • У висновку назви мов повинні мати офіційну велику літери. наприклад: CJam, C ++

  • Жодна програма не повинна брати будь-які дані від користувача.

  • Під час запуску на обох мовах вихід повинен бути stdout або еквівалентним.

  • Ні в одній програмі не повинно бути виводу на stderr.

  • Ви можете використовувати коментарі на будь-якій мові.

  • Дві різні версії однієї мови вважаються різними мовами.

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

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

Приклад виводу:

Perl і Ruby:

  • Perl: This program wasn't written in Perl, it was built for Ruby!

  • Ruby: This program wasn't written in Ruby, it was built for Perl!

Пітон і С:

  • Пітон: This program wasn't written in Python, it was built for C!

  • C: This program wasn't written in C, it was built for Python!

Python 2 і Python 3:

  • Пітон 2: This program wasn't written in Python 2, it was built for Python 3!

  • Пітон 3: This program wasn't written in Python 3, it was built for Python 2!

Python 2.4 та Python 2.7:

  • Python 2.4: This program wasn't written in Python 2.4, it was built for Python 2.7!

  • Python 2.7: This program wasn't written in Python 2.7, it was built for Python 2.4!

Це код гольфу, тому найкоротший код у байтах виграє.


2
"Дві різні версії однієї мови вважаються різними мовами." Тож хитрість, як із C до попередніх та 99 коментарів, чи дійсна? легкий ^^
Zaibis

1
Додано це, це здається парадоксальним, але відповідає вашим правилам.
Zaibis

1
Ніхто не робить поліглот Whitespace / Python?
Не те, що Чарльз

не звертай уваги. Побачила реалізацію 23
Не те, що Чарльз

Чи покладається на програму, яку потрібно запустити з певним перекладачем, вважати вхідним? тобто включення argv[0]?
кіт

Відповіді:


86

Foo / CJam, 70 байт

"This program wasn't written in ""Foo"", it was built for ""CJam"\@"!"

У Foo, як багато хто з'ясував, він просто друкує все в подвійних лапках і ігнорує більшість інших символів або робить щось, що не впливає на вихід у більшості випадків. Коротше кажучи, \@нічого не робить, а рядки друкуються як є.

У CJam поміняйте місцями \два верхніх пункти і @перемістіть 3-й елемент до верху, який впорядкує рядки в потрібному порядку. І після закінчення програми все, що залишилося в стеку, автоматично надрукується.


7
І тільки для задоволення, є аналогічне 75-байтне рішення для Fission / CJam:R"This program wasn't written in ""Fission"", it was built for ""CJam"\@'!O
Мартін Ендер

3
Приємно. Я мав "This program wasn't written in Clip, it was built for CJam!"3{4-_36+e\}/для Clip / CJam.
Денніс

5
Я ввійшов у цю тему, щоб опублікувати рішення Foo, мав би зрозуміти, що всі вже знають, наскільки легко написати поліглот Foo.
гістократ

Чи є посилання на специфікацію мови програмування Foo?
justhalf

1
@ErikE Додав пояснення.
jimmy23013

140

C89 / C99, 171 152 136 114 111 107 105 байт

Дякуємо @Hurkyls, @Qwertiys, @ jimmy23013 та @MD XF за ваші підказки.

версія для гольфу:

c;main(){c=-4.5//**/
-4.5;printf("This program wasn't written in C%d, it was built for C%d!",90-c,98+c);}

неозорений варіант:

c;

main()
{
    c = -4.5//**/
    -4.5;
    printf("This program wasn't written in C%d, it was built for C%d!",90-c,98+c);
}

Маленький опис:

Версії C попереднього C99 просто мали коментар із багаторядковим записом:

/*foo*/

з C99 було введено коментар до одного рядка. подобається це:

//foo

тому якщо ви складете такий рядок:

c =-4.5//**/
-4.5;

для компілятора c99, пов'язаний із компіляцією, буде:

c = -4.5 -4.5;

тоді як відповідним кодом для компілятора c89 буде:

(оскільки перша /частина не входить до коментаря та стосується оператора)

c = -4.5 / -4.5;

10
+1 для дивовижної відповіді. Трохи пояснень для незнайомих із С було б непогано.
ace_HongKongIndependence

4
@ace Я вважаю, що це спирається на коментарі у стилі C99. У четвертому рядку зверніть увагу на //**/. У C89, це оператор відділу, а потім порожній коментар. У C99 //починається однорядковий коментар, тому решта рядка порожня. Тому в C89 він стає (90-(-4.5/-4.5)), що становить 89, а в C99 - стає (90-(-4.5-4.5)), а це 99.
kirbyfan64sos

14
Щоб зберегти кілька байтів, використовуйте 188-cзамість c==99?89:99.

1
Я не думаю, що вам потрібен простір та зовнішні дужки з призначенням.
PurkkaKoodari


88

JavaScript / Ruby, 170 байт

Може бути тільки 2.0, не працює, як мінімум, 2.1.5 ... Редагувати: оновлення відповідно до порад від @Jordan сподіваємось, що це працює ще в декількох версіях!

a='1';c=console=console||eval('def c.log s;$><<s end;c');c.log("This program wasn't written in "+(d=['JavaScript','Ruby'])[b= ~(a=~/1/)]+', it was built for '+d[b+1]+'!')

Зловживає ~оператором у тому, що Ruby розглядає =~як збіг регулярних виразів, повертаючи позицію першого збігу в рядку (0 ), але JavaScript буде вважати це таким, = ~/1/яким є -1(оскільки /1/перетворюється на NaNчислові операції, які мають 0значення).


Ця відповідь для мене не працює в Ruby 2.1.5. Я отримую:NoMethodError: undefined method `log' for :log:Symbol
ЕМБЛЕМ

@EMBLEM Моє тестування проводилось на Ruby 2.0, вбудованому в OS X, я нічого не випробовував, але я обов'язково додаю коментар із зазначенням, що це може бути зламано в іншій версії!
Дом Гастінгс

В останніх версіях Ruby визначення методу повертає ім'я методу як символ, тому ваш evalповертається :log. Я думаю, ви могли б це виправити, відклавши ;cпісля end. Хоча =~/ = ~трюк чудовий!
Йорданія

Ви також можете заощадити. Кілька байтів, використовуючи $><<sзамість puts sі подвійні лапки, щоб ви могли скинути зворотну косу рису wasn\'t.
Йорданія

@Jordan Дякую! Не впевнений, як я не помітив видалення \'подвійних лапок, і $><<означає, що я можу застосувати вказане вами виправлення та зберегти той самий підрахунок байтів!
Дом Гастінгс

82

Python 2 / Python 3, 92

Використовується "стандартна" перевірка версії Python (ціле чи поплавкове ділення).

print("This program wasn't written in Python %d, it was built for Python %d!"%(3/2*2,4-3/2))

3
Про це йшлося в пісочниці, і консенсус полягав у тому, щоб дозволити подібне
Blue

14
@flawr Чи дозволять Python і Cobra? ;)
бета-розпад

7
@flawr Python насправді названий на честь комедії ~~ group ~~ богів, Monty Python.
Mutantoe

@Mutantoe Вам може здатися, що "Монти" не є іменем тварини, каламбур не працює.
П'єр Арло

57

Риболовля / > <> 233 217 байт

v++C-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC+CCCCCCC-CCCCCCCCCCCCCCCCCCC+CCCCCC
\   "This program wasn't written in ""><>"  ", it was built for Fishing!"
>r!`ol?!;32.                         Fishing                     ><>!`N

Риболовля - це мова, заснована на рибалці, який ходить навколо лову риби. Скласти програму цією мовою, хто спочатку повинен визначити док, на якому він ходить. Док-станція забезпечує лише потік управління програмою. Док-станція в цій програмі:

v++C-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC+CCCCCCC-CCCCCCCCCCCCCCCCCCC+CCCCCC

Щоразу, коли Cкоманда знайдена, рибалка викидає свою лінію, щоб зловити інструкцію. +І -інструкції зменшити і збільшити довжину його лінії відповідно. vзмінює напрямок кидка вниз. Риба, яку він ловить у цій програмі:

`This program wasn't written in Fishing, it was built for ><>!`N

> <> - мова, заснована на рибі, що рухається по воді. vКоманда запускає рибу рухатися вниз, де вона потім відбивається вправо з \командою. Все між цитатами висувається на стек. Після того, як струна буде висунута на стек, риба загортається на ту сторону, де вона відбивається вниз \. Потім він виводить вміст стеку за допомогою:

>r!`ol?!;32.

Ви можете зменшити свій код на 13 байт, помістивши свою петлю друку для> <> у пробіл на третьому рядку (що, на мою думку, не заважатиме рибальській частині, хоча я не знаю цієї мови). Я не впевнений, як цей коментар буде обробляти весь код, тож ось посилання на hastebin: hastebin.com/quqinozizi (я, можливо, зіпсував інтервал у третьому рядку, але думаю, що все вирівняно правильно).
Коул

@Cole Це працює. Насправді ваша пропозиція фактично видаляє 16 символів.
TheNumberOne

14
Риба та риболовний поліглот ... можливо, перший у своєму роді!
Марк К Коуан

це так смішно, що!
D.Tate

55

23 / Malbolge, 5688 байт

                    bCBA@?>=<;:987
                                                                                        6543210/.-,+*)
                                                                                          ('&%$#"!~}|{zy
                                                                                               xwvutsrqponmlk
                                                                                                  jihgfedcba`_^]
                                                                                     \[ZYXWVUTSRQPO
                                                                                               NMLKJIHGFEDCBA
                                                                                    @?>=<;:9y76543
                                                                210/(L,l*)(!E}
                   |B"!~}|{zyxwvu
                                                                                                     tsrqponmlkjiha
                                                                                                  fed]#a`_^]?zZY
                                                                                         XWVUTSRQ3ONMLK
                   JIHGFEDCBA:^>=
                                                                                                       <;:98705.R21q/
                                                                                               .-,+*#G'&%${"!
                                                                                            x>|{zyxwYutm3k
                                                                                                        ponmlkjihg`&^c
                                                                                     ba`_^]\[ZYXWVO
                   sSRQPONMLEi,HG
                                                                                                      FEDCBA@?>=6Z:9
                                                                                    y76543210/.-,+
                                                                                                          *)('&%$#"y?w|u
                   ;sxwvutm3qSonm
                                                                                                       fkjiha'edcba`_
                                                                                            ^]\[ZYXWVUTSRQ
                   PONM/EiIHGFEDC
                               BA@?>7[;:987w5
                                      432+O/o-,%I)('
                                     &}$#z@~}|{zsxw
                   vutsrqponmlkji
                                                                                                 ha'&dFba`_^]\U
                                                                                            yYXWVUTMRQPONM
                   LKDhH*F?DCBA@?
                                                                                                 8\<;:98765432r
                                                                                        0/.-&J*)('&f$#
                                                                                                       "!~}|{zyxwvuts
                                                                                                       rqj0nmOkjihaf_
                                                                                            %cE[!_^]\[=SwW
                                                                                                     VU7SLpPONMLEJI
                                                                                                          HAeEDC%A@?>=<;
                   :9876543210/.-
                                                                                                       ,+$H('&}${A!xw
                          ={]yxwvutsrk1o
                                                                                                 nmOejib(fedcE"
                                                                                                      `_^]?[ZYRvVUT6
                                                                                     RKo2HMLKJIHAe
                                                                                                           EDCBA@?>=<;:9
                    87w5432+O/.-,
                                                                                                 +*)('&%e#"y?w
                                                                                     |{zs9wvun4rqp
                                                                                                      onmlNjib(fedc
                                                                                           ba`_^]\[ZYXWV
                                                                                                   8TMqKPONMLKDh
                                                                                                      +GFEDCB;_?>=<
                                                                                                    ;:9y7654321*N
                    .-,+*)('&f|{A
                                                                                                       !~}|{]yxwvo5s
                                                                                             rqpinmlkjihg`
                                                                                            &dcbD`_^]\[Tx
                                                                        ;WVUTMRQJnN0F
                                                 KDhH*FEDC<A@?
     >=<5Y92765.R?

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

Перевірка

Щоб перевірити код Malbolge в цьому інтернет-перекладачі , вставте його в область коду Malbolge і натисніть Load/Reset, а потім Execute.

Для перевірки 23 коду в цьому онлайн - перекладача , вставте його в вихідної області, натисніть , Enterщоб вставити косу новий рядок, введіть 23в консолі області (щоб перейти від за замовчуванням 23.dezsy нотації для автоматичного виявлення) і натисніть кнопку Run Interpreter!.


20
Чувак ... це схоже на те, що в коді пішла бомба!
D.Tate

8
o_0 як ти написав код Malbolge
Павло

55

Lua / C - 182 164 байти

#if 0
print"This program wasn't written in Lua, it was built for C!"--[[
#endif
main(){printf("This program wasn't written in C, it was built for Lua!\n");}/*]]--*/

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

Для гоління байтів я покладаюсь на неявну поведінку, яка випромінює лише попередження в GCC та Clang: неявна декларація int для основного та неявного визначення printf.


3
Дуже спритно зроблено!
Корови кракають

2
Якщо видалення "включати <stdio.h>" занадто екстремальне, я скасую відповідь.
бенпоп

2
Чому б не використати //коментар у частині С? Економить 2 байти.
BrainStone

54

JavaScript / Haskell, 158 байт 147 байт

Загальна ідея: прокрасти синтаксис коментарів кожного до іншого.

В одному рядку:

u="This program wasn't written in ";v=", it was built for ";j="JavaScript";h="Haskell";{-console.log(u+j+v+h+"!")}//-}main=putStrLn$u++h++v++j++"!"

Як це схоже на Haskell:

-- some variable definitions
u = "This program wasn't written in "
v = ", it was built for "
j = "JavaScript"
h = "Haskell"

-- a comment
{-console.log(u+j+v+h+"!")}//-}

-- the main method that does the dirty deed
main = putStrLn $ u ++ h ++ v ++ j ++ "!"

Як виглядає JavaScript:

/* variables can be declared without `var` */
u = "This program wasn't written in ";
v = ", it was built for ";
j = "JavaScript";
h = "Haskell";

/* hey look, an anonymous block! */
{ 
  /* we negate the `undefined` that comes out of console.log */
  -console.log(u+j+v+h+"!")
} 
/* there are two automatic semicolon insertions here:
   one before `}` and one before EOF. */

/* a one-line comment. */
//-}main=putStrLn$u++h++v++j++"!"

3
alertє гольфіст.
wizzwizz4

51

Brainfuck / Foo, 769 байт

-[--->+<]>-.[---->+++++<]>-.+.++++++++++.+[---->+<]>+++.[-->+++++++<]>.++.---.--------.+++++++++++.+++[->+++<]>++.++++++++++++.[->+++++<]>-.--[->++++<]>-.-[->+++<]>-.--[--->+<]>--.-----.[++>---<]>++.[->+++<]>-.[---->+<]>+++.--[->++++<]>-.-----.---------.+++++++++++..+++[->+++<]>.+++++++++.-[->+++++<]>-.-[--->++<]>-.+++++.-[->+++++<]>-.+[->++<]>.---[----->+<]>-.+++[->+++<]>++.++++++++.+++++.--------.-[--->+<]>--.+[->+++<]>+.++++++++.+++[----->++<]>.------------.-[--->++<]>-.+++++++++++.[---->+<]>+++.--[->++++<]>-.-[->+++<]>-.--[--->+<]>--.+[---->+<]>+++.[->+++<]>++.[--->+<]>-.------------.+++.++++++++.[---->+<]>+++.++[->+++<]>.+++++++++.+++.[-->+++++<]>+++.+++[->++<]>.+[--->+<]>++..[--->+<]>----."This program wasn't written in Foo, it was built for Brainfuck!"

Надзвичайно складна і складна відповідь ... чи ні.


21
Чорт, ти не знову Foo: D
Бета-занепад

5
Мені подобається, як ти думаєш.
П'єр Арло

13
Запускаючи це в Brainfuck, Brainfuck чекатиме введення через ,текст у кінці. Я вважаю, що це суперечить правилам призначення.
Саймон Форсберг

1
@SimonForsberg це вже давно, але в такому інтерпретаторі, як спробувати його в Інтернеті, і більшість інших, я думаю, ,просто встановлює клітинку на 0, для EOF
Destructible Lemon

41

C / Python, 238 символів

Це не друкує на 100% саме те, що вимагається, але досить близько.
Перезавантаження картки на день мого Валентина .

#define def main(){0?
#define print printf(
#define return 0)));}
#define pass 0);

def main():
    print "This program wasn't written in ",
    pass
    print "Python",
    print ", it was built for ",
    print "C",
    return

main();

5
Що воно друкує, якщо воно не точне?
Бета-розпад

4
Ця вкладена річ printf геніальна ...
immibis

4
Це не вірно. Клэнг скаржиться на defта :після def main(), і ви фактично не відкриваєте функціональний орган для main. Ви справді спробували скласти свою відповідь на С?
C0deH4cker

5
Лінія #define def main(){0?відсутня
кай

3
#define returnзмушує мене трохи заплакати ...
corsiKa

32

C / C ++, 136

#include<stdio.h>
int main(){
char*a="++",z=sizeof'c'/2;
printf("This program wasn't written in C%s, it was built for C%s!\n",a+z,a+2-z);
}

Нові рядки додано для форматування. Спробуйте це на C або C ++ .


32
Що робити, якщо я перебуваю на платформі, де int - 2 байти? Де я можу отримати компілятор C +?
іммібіс

@immibis haha: P, але, якщо серйозна примітка, може struct{}s;z=2*sizeof s
вийти

31

Befunge / > <> , 141 138 134 133 130 байт

3 байти збережено завдяки @Cole .

Якщо бути точним, я використовую Befunge-98.

\"!><> rof tliub saw ti ,egnufeB"   >" rof nettirw t'nsaw margorp sih"'T>:#,_@'~~~~~~
>l?v"!egnufeB rof tliub saw ti ,><>"^
?!;>ol

Використовуючи факти, які:

  • \ є дзеркалом в <<> і поміняйте місцями в Befunge
  • 'string'- це рядок у> <> і 'cє знаком у Befunge

Якщо вам не знадобиться код Befunge (який я не думаю, що ви робите), ви можете поголити 3 байти, замінивши нижній рядок на?!;>ol
cole

23

PHP / MySQL, 147 байт

-- $argc;die("This program wasn't written in PHP, it was built for MySQL!");
SELECT("This program wasn't written in MySQL, it was built for PHP!");

17
Нарешті, я якось розумію.
MikeTheLiar

1
Ви повинні мати змогу позбутися дужок у другому рядку на два байти менше:SELECT"This program wasn't written in MySQL, it was built for PHP!";
msh210

2
Але це більше не працюватиме в PHP - це призведе до помилки розбору. SELECT "..." не є дійсним виразом PHP.
Разван

22

Пітон 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

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


Було б неправильно, якби я сказав, що ти повинен додати 3, тому що це не python 2. Це добре.
Синій

Якби це було тільки Python, я вважаю , ви могли б замінити aa[:-2][::-1]з aa[-3::-1]. У цьому випадку, звичайно, це може заважати формату> <>, але, можливо, варто задуматися, якщо ви ще цього не зробили. Зокрема, я впевнений, що вам потрібен пробіл нижче, ніж vу попередньому рядку, але, схоже, він print(aa[-3::-1]+"Pytho"би вписався в 24 символи нижче a=", it was built for "+, і тоді ви можете поставити пробіл, за яким слід +"n"+a). Я не впевнений, чи не порушить це щось інше, але якщо він спрацює, це заощадить кілька байт.
mathmandan

@mathmandan Чудова ідея, я оновлю код і вдячну вам.
cole

Хороша робота! FYI, я думаю , що це буде працювати нормально в Python 2, і в Python 2 ви можете зберегти байти, знижуючи дужки в операторі друку: print aa[-3::-1]+"Pytho" +"n"+a. Ще одне питання: проте у версії> <> що відбувається з тим, 1що спочатку було натиснуто на стек?
mathmandan

@mathmandan Я думаю, що будь-який інтерпретатор, який я використав, не друкує цей символ, якщо він недійсний, або друкований символ взагалі не відображається. Я, чесно кажучи, не на 100% впевнений, чому друк цього символу не має значення; Я виявив це випадково.
cole

19

Пакетний .BAT файл / пакетний .CMD файл, 194 185 байт

@ECHO OFF
SET a=BAT
SET b=CMD
CALL :F&&GOTO :C||GOTO :O
:C
SET a=CMD
SET b=BAT
:O
ECHO This program wasn't written for %a% File, it was built for %b% File!
GOTO :EOF
:F
md;2>nul
SET v=1

Редагування: збережено 9 байт та виправлено відсутнє !завдяки DLosc

Так, є різниці між BAT і CMD файлами. Довідково. По суті, CMD встановлює команду ERRORLEVELon, в SETтой час як BAT не робить, це означає, що тут ERRORLEVELнабір неправильно сформованої mdкоманди очищаєтьсяSET v=1 в одній версії, а не в іншій. Цей сценарій заснований на прикладі, який надає "Річі" в потоці групи новин.

Зауважте, що скорочений сценарій вище передбачається ENABLEEXTENSIONSвстановити ON(він є за замовчуванням на кожній платформі). Розширений скрипт нижче явно встановлює його, щоб гарантувати правильність функціональності. Без цього SETкоманда для CMD не дозволяє всі розширення, і (на деяких системах, можливо) може не встановитиERRORLEVEL належним чином.

Розширено і зауважено

@ECHO OFF
setlocal ENABLEEXTENSIONS

REM Call the :FUNC subroutine and branch based on the resulting errorlevel
CALL :FUNC&&GOTO :CMD||GOTO :BAT

REM Just in case. If we reach this, though, hoo-boy ...
GOTO :EOF

:BAT
REM We're a BAT file, so set variables and goto output
SET a=BAT
SET b=CMD
GOTO :OUTPUT

:CMD
REM We're a CMD file, so set variables and goto output
SET a=CMD
SET b=BAT
GOTO :OUTPUT

:OUTPUT
REM Print out the result, then go to end of file
ECHO This program wasn't written for %a% File, it was built for %b% File!
GOTO :EOF

:FUNC
REM Simple subroutine to set the ERRORLEVEL appropriately
md;2>nul
REM Right now, ERRORLEVEL on both CMD and BAT is 1
SET v=1
REM Right now, ERRORLEVEL on CMD is 0, but BAT is still 1

... є різниця між CMD і BAT?
Стен Струм


16

CJam / GolfScript, 81 78 байт

"This program wasn't written in "o"GolfScript"", it was built for ""CJam"oo"!"

Оригінальна версія 81 байта:

"This program wasn't written in "["CJam"", it was built for ""GolfScript"]-1a%"!"

14

PHP / Perl, 98 96 байт

$a="HP";$b="erl";
//;$a=$b;$b=HP;
print"This code wasn't written in P$a, it was built for P$b!";

Не знаю, чи це обман чи ні, оскільки, наскільки я можу сказати, єдиний спосіб запустити PHP без відкриття <?тегу - це щось на кшталт php -r $(cat codefile.php). Але якщо припустити, що це законно ... //це коментар PHP, але в Perl це регулярний вираз (який у самій заяві нічого не робить). Решта повинна бути досить зрозумілою.

Редагувати: тепер використовуйте головослівне слово в частині Perl. Я хотів використовувати їх в першу чергу для обох мов, але PHP видає попередження, коли ви це робите, всупереч "Не повинно бути виводу на stderr."


1
<?'>#';дійсний синтаксис обох мов.
примо

14

Ruby / Python, 105 символів

a=["Ruby","Python"];a.sort();print("This program wasn't written in "+a[0]+", it was built for "+a[1]+"!")

Це справді добре! Мені особливо подобається, що тут не використовуються коментарі.
styfle

14

JavaScript 1.8 / JavaScript 1.7, 89 байт

a=![].reduce;`This program wasn't written in JS 1.${8-a}, it was built for JS 1.${7+a}!`

Тому що Array.prototype.reduce є новим у 1.8

РЕДАКТУВАННЯ : Винайдено 7 байт шляхом прямої ініціалізації, aа не використанняreverse()

EDIT: JavaScriptможна записати якJS , економлячи 8 байт

Редагувати: Дякую Хеди, що вказав, що я можу зберегти ще 3 байти, якщо не використовую зміннуb більше

РЕДАКТУВАТИ : Обчисливши 6 байт за допомогою обчислень 7+aі 8-aдеa=1 , якщо зменшити визначається (JS 1.8) і , a=0якщо він не визначений (JS 1.7)

Редагувати: Хеди виграв ще 6 байт, що пропонують використовувати рядок шаблону

Редагувати: ETHproductions golfed з 2 байта , які передбачають a=!![].reduce;замістьa=[].reduce?1:0;

EDIT: no1xsyzy розіграв ще один байт, що пропонує скасувати булеву перевірку


З "JS" замість "JavaScript", використовуючи двічі "JS 1." у вашому рядку коротше, ніж використання змінної b.
Хеді

Ви можете використовувати шаблон рядки , щоб зробити його коротше: `Ця програма була написана не в JS 1 $ {7 + а}, він був побудований для JS 1 $ {8 + а}` ..!
Хеді

2
Я думаю, ви можете зберегти два байти, змінивши a=[].reduce?1:0;на a=!![].reduce;.
ETHproductions

@ETHproductions Спасибі, але я не думаю, що це спрацює. Мені потрібно aтримати значення 1або 0, а НЕ trueабоfalse
Маріо Trucco

@ETHproductions вибачте, ви праві, я спробував, і це працює. Дякую!
Маріо Трукко

13

SWI-Prolog 6 / SWI-Prolog 7, 156 байт

P='SWI-Prolog ',A=6,B=7,(is_list(""),N=A,M=B;N=B,M=A),atomic_list_concat(['This program wasn\'t written in ',P,N,', it was built for ',P,M,'!'],W),write(W).

Використовує той факт, що подвійні лапки - ""це рядкові коди (тобто список кодних символів) у версіях SWI-Prolog, старші 7, і є належним строковим типом у версії 7. is_list("")Таким чином, у версії 7 будуть помилковими та вірними у попередніх версіях.


12

BF / SPL, 5342 байти

Я впевнений, що це перший поліглот мови програмування Шекспіра на цьому сайті.

Напевно, не збираються вигравати жодних призів. Працює шляхом прокрадання коду BF у заголовки актів / сцен / програм. Код SPL використовує знак оклику замість періодів, за винятком кількох випадків. Програми не повинні брати вклад, тому коми в деклараціях символів "коментуються" нульовими осередками та розміщенням квадратних дужок навколо коми. Ця ж процедура застосовується і при хованні квадратних дужок навколо операторів enter / exeunt.

[-][.
Ford,.
Page,.
Act I:]+++++++++[>+++++++++<-]>+++.
Scene I:>[.
[Enter Ford and Page]
Ford:
You is sum of bad bad bad bad bad bad day and sum of bad bad bad bad day and bad bad day!Speak thy mind!
Scene II:]<<++[>++++++++++<-]>.
Page:
You is sum of bad bad bad bad bad bad day and sum of bad bad bad bad bad day and bad bad bad day!Speak thy mind!
Scene III:+.
Page:
You is sum of thyself and day!Speak thy mind!
Scene IV:++++++++++.
Page:
You is sum of thyself and sum of bad bad bad day and bad day!Speak thy mind!
Scene V:>++++[>++++++++<-]>.
Ford:
You is fat fat fat fat fat cat!Speak thy mind!
Scene VI:[-<+>]<<---.
Page:
You is sum of thyself and sum of big pig and pig!Speak thy mind!
Scene VII:++.
Page:
You is sum of thyself and fat cat!Speak thy mind!
Scene VIII:---.
Page:
You is sum of thyself and sum of big pig and pig!Speak thy mind!
Scene IX:--------.
Page:
You is sum of thyself and big big big pig!Speak thy mind!
Scene X:+++++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and sum of fat cat and cat!Speak thy mind!
Scene XI:<++++[->----<]>-.
Page:
You is sum of thyself and sum of big big big big pig and pig!Speak thy mind!
Scene XII:++++++++++++.
Page:
You is sum of thyself and sum of fat fat fat fat cat and big big pig!Speak thy mind!
Scene XIII:>.
Ford:
Speak thy mind!
Scene XIV:<++++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and fat cat!Speak thy mind!
Scene XV:<++++[->-----<]>--.
Page:
You is sum of thyself and sum of big big big big big pig and sum of fat fat fat cat and fat cat!Speak thy mind!
Scene XVI:<++++[>++++<-]>++.
Page:
You is sum of thyself and sum of fat fat fat fat cat and fat cat!Speak thy mind!
Scene XVII:-----.
Page:
You is sum of thyself and sum of big big pig and pig!Speak thy mind!
Scene XVIII:>+++++++.
Ford:
You is sum of thyself and sum of fat fat fat cat and pig!Speak thy mind!
Scene XIX:<++++++.
Page:
You is sum of thyself and sum of fat fat cat and fat cat!Speak thy mind!
Scene XX:>-------.
Ford:
You is sum of thyself and sum of big big big pig and cat!Speak thy mind!
Scene XXI:<+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene XXII:-----.
Page:
You is sum of thyself and sum of big big pig and pig!Speak thy mind!
Scene XXIII:---------.
Page:
You is sum of thyself and sum of big big big pig and pig!Speak thy mind!
Scene XXIV:+++++++++++.
Page:
You is sum of thyself and sum of cat and sum of fat cat and fat fat fat cat.Speak thy mind!Speak thy mind!
Scene XXV:<+++[>-----<-]>.
Page:
You is sum of thyself and sum of big big big big pig and cat!Speak thy mind!
Scene XXVI:+++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and cat!Speak thy mind!
Scene XXVII:>.
Ford:
Speak thy mind!
Scene XXVIII:<-----.
Page:
You is sum of thyself and sum of big big pig and pig!Speak thy mind!
Scene XXIX:+++++.
Page:
You is sum of thyself and sum of fat fat cat and cat!Speak thy mind!
Scene XXX:>.
Ford:
Speak thy mind!
Scene XXXI:[->++<]>++.
Page:
You is sum of thyself and sum of big big big big big pig and sum of fat fat cat and cat!Speak thy mind!You is sum of thyself and sum of big pig and pig!Speak thy mind!
Scene XXXII:++++.
Page:
You is sum of thyself and big red hog!Speak thy mind!
Scene XXXIII:<+++++[>-----<-]>-.
Page:
You is sum of thyself and big big big big big pig!Speak thy mind!
Scene XXXIV:[-<+>]<------------.
Ford:
Speak thy mind!
Scene XXXV:<-----.
Page:
You is sum of thyself and sum of fat fat fat fat fat fat cat and sum of big pig and pig!Speak thy mind!
Scene XXXVI:+++++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and sum of fat cat and cat!Speak thy mind!
Scene XXXVII:>.
Ford:
Speak thy mind!
Scene XXXVIII:<+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene XXXIX:<++++[->-----<]>--.
Page:
You is sum of thyself and sum of big big big big big pig and sum of fat fat fat cat and fat cat!Speak thy mind!
Scene XL:<++++[>++++<-]>++.
Page:
You is sum of thyself and sum of fat fat fat fat cat and fat cat!Speak thy mind!
Scene XLI:>.
Ford:
Speak thy mind!
Scene XLII:<<++++[>----<-]>-.
Page:
You is sum of thyself and sum of big big big big pig and pig!Speak thy mind!
Scene XLIII:<+++++[>++++<-]>-.
Page:
You is sum of thyself and sum of fat fat fat fat cat and sum of fat cat and cat!Speak thy mind!
Scene XLIV:------------.
Page:
You is sum of thyself and sum of big big big big pig and fat fat cat!Speak thy mind!
Scene XLV:+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene XLVI:++++++++.
Page:
You is sum of thyself and fat fat fat cat!Speak thy mind!
Scene XLVII:>.
Ford:
Speak thy mind!
Scene XLVIII:<--------------.
Page:
You is sum of thyself and sum of big big big big pig and fat cat!Speak thy mind!
Scene XLIX:+++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and cat!Speak thy mind!
Scene L:+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene LI:>.
Ford:
Speak thy mind!
Scene LII:>+++++++[<+++++++>-]<++.
Page:
You is sum of thyself and sum of big big big big big pig and big big big big pig!Speak thy mind!
Scene LIII:---.
Page:
You is sum of thyself and fat fat cat!Speak thy mind!
Scene LIV:----.
Ford:
You is sum of thyself and cat!Speak thy mind!
Scene LV:>+++++++[<------>-]<-.
Ford:
You is cat!
Scene LVI:>[.
[Exeunt]

Тестуйте BF за адресою https://repl.it/E8Hh/23 .

Код SPL був протестований у компіляторі, знайденому тут: https://github.com/drsam94/Spl/ .


11

Рубін 1,8 / Рубін 1,9, 87

puts"This program wasn't written in Ruby 1.#{?9%49}, it was built for Ruby 1.#{?8%47}!"

У Ruby 1.8 ?9- значення ASCII "9", що становить 8 модулів 49. У Ruby 1.9 це рядок "9", і %49це операція форматування, яка нічого не робить, оскільки "9" не містить рядків формату в це.


11

Python 2.7.9 / Python 2.7.10, 127 байт

У нас було кілька дописів, які використовували незначні версії, але жодна, яка перейшла на наступний рівень вниз ...

import types
n=len(dir(types))
print"This program wasn't written in Python 2.7.%d, it was made for Python 2.7.%d!"%(n%33,-n%52)

Спробуйте його на Ideone (Python 2.7.10) та repl.it (технічно Python 2.7.2, але це має дати такий же результат, як 2.7.9).

Python 2.7.10, відповідно до журналу змін :

Доданий __all__до typesмодулю.

Це підштовхнулося len(dir(types))від 42 до 43, даючи чисельну різницю, яку ми можемо використовувати для отримання потрібного результату.


10

Пітон / QBasic, 160 142 байти

Тестували з Python 3 та QBasic 1.1 . Не працюватиме в Python 2 без додавання from __future__ import print_functionдо рядка 4.

1# DEFSTR A-B
a = "QBasic"
b = "Python"
'';a,b=b,a;PRINT=print
PRINT ("This program wasn't written in " + a + ", it was built for " + b + "!")
  • У Python 1#- це вираз 1(no-op), який супроводжується коментарем. У QBasic це номер рядка (суфікс типу, який позначає його як a DOUBLE). DEFSTRЗатвердження говорить QBasic , що всі змінні, імена яких починаються з Aабо B(без урахування регістру) є строковими змінними. Таким чином, ми можемо викликати наші змінні, aа bзамість a$і b$(які не працюватимуть у Python).
  • У QBasic 'починається коментар. У Python ''- порожня рядок (no-op). Потім ми підміняємо назви мов та визначаємо псевдонім для printфункції (оскільки ключові слова QBasic автоматично відформатовані у верхній регістр).
  • Дужки в заключному рядку в QBasic не потрібні, але також нічого не шкодить.

Якщо мені дозволено вимкнути автоматичний форматтер (що є варіантом у QB64 , хоча не в оригіналі QBasic), я можу зменшити його до 114 байт за допомогою Python 2 :

1#DEFSTR A-B
a="QBasic"
b="Python"
'';a,b=b,a
print"This program wasn't written in "+a+", it was built for "+b+"!"

-3 байти: перехід до фактичного QB64.
CalculatorFeline

Автоформатування.
CalculatorFeline

QB64 / Python 2 - це 131 байт! Або Python 3 на 133 байти.
CalculatorFeline

9

Perl / Ruby, 129 байт

0&&eval('def sort a,b;[b,a] end');printf"This program wasn't written in %s, it was built for %s!",(@a=sort"Perl","Ruby")[0],@a[1]

У цьому немає жодних зловживань регулярним вираженням, просто максимально використати той факт, що 0 є правдоподібним у Рубі, до evalвизначення для sort(що насправді reverses) та printfing. Рубі не сподобалося використовувати список для аргументів, тому мені довелося робити кожен окремо.


Чому aповинна бути змінною екземпляра, на відміну від локальної?
Нік Хартлі

@QPaysTaxes @sigil на змінній в Perl позначає, що це список, Perl, що зберігається в, скажімо, $aзамість цього, не дає результату.
Дом Гастінгс

А, бачу. Дякую за пояснення.
Нік Хартлі

9

/// і Retina , 95 + 3 = 98 байт

/
//

This program wasn't written in \/\/\/, it was built for Retina!
/?./....(.*)(R.*)!
$2$1///!

+3 байт для -sпрапора в Retina.

Пояснення ///

Перша інструкція - це

/
//

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

This program wasn't written in \/\/\/, it was built for Retina!/?./....(.*)(R.*)!$2$1///!

Все, що відповідає, !- це просто буквальне та надруковане в STDOUT. Наступна інструкція -

/?./....(.*)(R.*)!$2$1/

Але рядок пошуку ?.неможливо знайти, тому нічого не відбувається. Тоді залишився код - //!це неповна інструкція, тому програма припиняється, надрукувавши правильний рядок.

Пояснення до сітківки

/
//

Це говорить Ретині замінити /на //. Але вхід порожній, тому це нічого не відповідає.

<empty>
This program wasn't written in \/\/\/, it was built for Retina!

Це замінює введення рядком у другому рядку.

/?./....(.*)(R.*)!
$2$1///!

Це відповідає рядку \/\/\/, it was built for Retina!і замінює його, Retina, it was built for ///!щоб дати правильний результат.


Знаєте, я думаю, що було б тривіально зробити один між Retina та rs ...;)
kirbyfan64sos

@ kirbyfan64sos Напевно, але наскільки це було б коротко? ;)
Мартін Ендер

Ну, поки що я набрав близько 85 байт + 3 за -s, хоча сказавши, що я зробив, це зіпсує задоволення! : D
kirbyfan64sos

1
@ kirbyfan64sos Вперед та опублікуй його, я не думаю, що я скоро встигну заглянути в rs.
Мартін Ендер

9

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

/$/cThis program wasn't written in sed, it was built for Hexagony!
#...>32;p;r;o;g;r;\+/;a;w;23+;m;a<.;.>s;n;+39;t;+32\s/;n;e;;t;i;r;w;<. |.>+32;i;n;+32;H;e\ ;/4+;y;n;o;g;a;x;< i>4;+32;i;t;+32;\;/u;b;23+;s;a;w<h>;i;l;t;+32;f\;/;s;23+;r;o;< T>e;d;+33;@

sed: Спробуйте онлайн!
Шестикутник: Спробуйте в Інтернеті!


У sed він друкує правильний рядок, якщо він відповідає порожньому рядку в кінці (завжди). Другий рядок - коментар. Для цього потрібна рядок на STDIN, але вона може бути порожньою ( дозволено на основі цього консенсусу ).

Приклад:

echo '' | sed -f whatLanguage.sed

У «Гексагонії» перший перехід направляється /внизу ліворуч, він слідує лівою стороною вгору до місця, де починається сидяча частина, потім просто загортається вліво-вправо, вниз по лінії, вправо-вліво, вниз по лінії тощо. Розширений шестигранник виглядає приблизно так:

         / $ / c T h i s p r 
        o g r a m w a s n ' t 
       w r i t t e n i n s e d 
      , i t w a s b u i l t f o 
     r H e x a g o n y ! # . . . 
    > 3 2 ; p ; r ; o ; g ; r ; \
   + / ; a ; w ; 2 3 + ; m ; a < .
  ; . > s ; n ; + 3 9 ; t ; + 3 2 \
 s / ; n ; e ; ; t ; i ; r ; w ; < . 
| . > + 3 2 ; i ; n ; + 3 2 ; H ; e \ 
 ; / 4 + ; y ; n ; o ; g ; a ; x ; < 
  i > 4 ; + 3 2 ; i ; t ; + 3 2 ; \
   ; / u ; b ; 2 3 + ; s ; a ; w <
    h > ; i ; l ; t ; + 3 2 ; f \
     ; / ; s ; 2 3 + ; r ; o ; < 
      T > e ; d ; @ . . . . . .
       . . . . . . . . . . . .
        . . . . . . . . . . .
         . . . . . . . . . .

Я ніколи не зрозумію Гексагонію ...
DJgamer98

@ DJgamer98 Я теж не дуже його розумію. Це вперше я його використовую.
Райлі

Ви можете трохи скоротити Hexagony, скориставшись тим, що ;приймає поточний модуль комірки 256 для визначення значення байта (наприклад, ви можете надрукувати пробіл P0;незалежно від поточного значення комірки). Цей сценарій CJam генерує всі пари: cjam.tryitonline.net/…
Мартін Ендер

9

Python / Retina, 133 120 119 117 115 байт

Тепер, коли я знаю більше про сітківку та реджекси, я пограв у неї трохи більше. Це також насправді працює зараз.

#?.*
print"This program wasn't written in Python, it was built for Retina!"
#?.*t"

#?(\w+)(,.* )(.+)!"
#$3$2$1!
#

Python просто друкує заяву. Retina замінює що-небудь заявою друку Python, потім видаляє printцитати та будь-які лапки. Потім я поміняти Pythonі Retinaі видалити# .

Спробуйте в Python | Спробуйте в сітківці



@ jimmy23013 Межі не існували на момент публікації цього виклику. Це відносно нова особливість Retina.
mbomb007


8

JavaScript / CoffeeScript, 125 124 байт

console.log("This program wasn't written in",(a=['Coffee','Java'])[+(b=0=='0')]+"Script, it was built for",a[b^1]+"Script!")

У програмі CoffeeScript a==bкомпілюється доa===b , що робить проміжну умову помилковою. Я використовував трохи магії, щоб перетворити булеве значення в ціле число.

Збережено 1 байт завдяки @DomHastings!

125-байтна версія:

console.log("This program wasn't written in",(a=['Coffee','Java'])[(b=0=='0')+0]+"Script, it was built for",a[b^1]+"Script!")

Приємно! Я думаю, ви можете зберегти байт за допомогою, +(b=0=='0')а не +0!
Дом Гастінгс

Замість цього b^1, я думаю, ви можете використовувати~b
Ісмаель Мігель

@IsmaelMiguel Nope. У ньому сказано, що він був побудований для undefinedScript.
kirbyfan64sos

Я це забув ~1 == -2. Але (b=0=='0')+0можна записати як +(b=0=='0'). Або b=+(0=='0'). Це повинно відрізати 1 байт.
Ісмаїл Мігель

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