Когда был выпущен этот язык?


92

Ваша задача проста. Вам нужно написать программу, которая печатает либо в STDOUT, либо в файл года, в котором был выпущен язык, на котором она написана. Поскольку это такая простая задача, суть в том, что она должна быть написана на максимально возможном количестве разных языков.

Ваша оценка - это общее количество правильно напечатанных лет.

Для каждого языка, который вы используете, вы должны

  • Укажите, какую версию языка вы используете. (Если есть несколько версий)

  • Укажите, в каком году эта версия была впервые выпущена, и

  • Предоставьте ссылку на страницу, подтверждающую дату вашей версии / языка.

Любой из них считается доказательством даты выпуска, если он указывает номер версии (если применимо) и дату выпуска.

  • Страница википедии.

  • Esolangs страница.

  • Официальный сайт языка. Страница GitHub или аналогичные считается, если у него есть дата выпуска. (Последний коммит не считается, если в коде нет номера версии)

Если не существует нескольких версий или выпусков языка, просто используйте дату первоначального выпуска языка.

Незначительные версии одного и тот же языка действительно считаются разными языками, до тех пор , как они приходят из разных лет , и до сих пор производят правильный вывод. Вы не можете использовать любые встроенные функции, которые предоставляют вам информацию (включая дату выпуска) о текущей версии языка, который вы используете. Например, это неверное представление Python:

import platform
i = platform.python_version()
if i == '3.5':
    print(2015)
if i == '3.4':
    print(2014)
if i == '3.3':
    print(2012)
...

Независимо от того, что представление правильно печатает, выигрывают самые отчетливые годы!

правила

  • Каждая программа должна распечатать языковой год и ничего более . Конечный перевод строки (стиль Windows или стиль * nix) разрешен.

  • Никакие программы не могут принимать данные.

  • В случае ничьей побеждает самый короткий код в байтах. Вы можете использовать для этого любую кодировку, но все программы должны использовать одну и ту же кодировку.

  • Любая из программ может печатать в STDERR или генерировать ошибки и предупреждения времени выполнения / компиляции, если правильный вывод все еще печатается в STDOUT или файл.

  • Разные языки могут использовать разные методы ввода-вывода, но в большинстве случаев они являются полноценными программами (функции, не разрешенные для этой задачи) и следуют одному из разрешенных методов ввода-вывода по умолчанию .

Приятного гольфа, полиглоттинг!


Так как у Пипа нет страницы Википедии или Esolangs, просто есть GitHub, и у него не было никаких «релизов» в смысле слова GitHub, является ли он неподходящим для использования в этом испытании? (У него есть номер версии, который обновляется при каждом
коммите

1
@dlosc Ну, я не хочу излишне исключать какие-либо языки, но я хочу убедиться, что «дата выпуска» остается абсолютно объективной. Можете ли вы придумать какие-нибудь лучшие способы обеспечить дату выпуска, которая бы включала больше языков?
DJMcMayhem

4
(случайно вставляет код пробела для печати 2003 практически в каждой отправке)
Value Ink

8
«Вы не можете использовать любые встроенные функции, которые предоставляют вам информацию о текущей версии языка, который вы используете». Мой акцент. Могу ли я посмотреть дату сборки в файле интерпретатора?
Адам

2
Я не думаю, что это дубликат вообще. Даже если это так, эта задача должна быть принята как «оригинальная», потому что, в отличие от другой, эта задача побуждает пользователей выйти и узнать о том, что они используют.

Ответы:


160

Краткая история языков программирования 2D: 16 (+2) лет

v19977/2{@{{4{\_______>/02&&&#????        *    P+++++1P1P-1P+1E     *                         *
\'\02'oo100@n590@n;                       *                         *                         *
>"8991",,,;5-;,@                          *                         *                         *
   *                                      *                         *                         *
  \ *              ++++++++++++++++++++++++  ++++++++++++++++++++++++  ++O--OO++++++++OX*******      *
     *   #2018O@       *                  *      *                  *      *                  *      *
      *                *                  *      *                  *      *                  *      *
       *               *                  *      *                  *      *                  *      *
        *           ****    ****          *   ****    ****          *   ****    ****          *   ****    *****
         *         *   *   *    *         *  *   *   *    *         *  *   *   *    *         *  *   *   *
          *        *   *  *      *        *  *   *  *      *        *  *   *  *      *        *  *   *  *
           *      *    * ****     *       * *    * ****     *       * *    * ****     *       * *    * ****
            *     *    *     *            * *    *     *            * *    *     *            * *    *     *
R"2014";     *****      *******       ******      *******       ******      *******       ******      *******

 x
x%"2010"x
 x

$'main'        \/\/\/\
 \-[2005]o-#   \++++++\
               /++++++/
               \++++++\
               /++++++/
               \/\/\/\++.--..+++.#

S1^2^2^6^8MAOUOAOOF

      /K:0:1:@

  >      "7102"4&o@

|        }+++++[>++++++++++<-]>.--..++++++.@

Я упоминал, что мне нравятся двумерные языки программирования?

1993: Befunge

Язык, на котором (предположительно, см. Последний раздел) все началось. В Befunge вы можете перенаправить поток управления с помощью <v>^, но теперь вездесущих зеркал еще \и /не было. Интерпретатор Befunge, используемый на Anarchy Golf, игнорирует неизвестные команды. Мы можем использовать это, чтобы отличить семью Befunge от семьи> <>. Следовательно, код, выполняемый Befunge, таков:

v
\
>"8991",,,;5-;,@

"8991"Раздвигает отдельные символы в стек. ,,,печатает первые три из них. Тогда ;неизвестен (который мы будем использовать, чтобы отличить его от Befunge 98), 5-превращает 8в a 3и ,печатает, что также до @завершения программы.

1997: Wierd

Написание этой части решения заняло у меня, вероятно, столько же времени, сколько и написание всех остальных и сборка их вместе ...

Верд знает только два символа: пробел и все остальное. Указатель инструкции пытается следовать по пути, образованному непробельными символами, начиная по диагонали из верхнего левого угла и всегда стараясь идти как можно более прямым. Изгибы в пути формируют фактические инструкции (с степенями поворота, определяющими, какую инструкцию выполнить). Итак, код, который видит Wierd:

v1997                                     *                         *                         *
 '                                        *                         *                         *
  8                                       *                         *                         *
   *                                      *                         *                         *
    *              ++++++++++++++++++++++++  ++++++++++++++++++++++++  ++O--OO++++++++OX*******      *
     *                 *                  *      *                  *      *                  *      *
      *                *                  *      *                  *      *                  *      *
       *               *                  *      *                  *      *                  *      *
        *           ****    ****          *   ****    ****          *   ****    ****          *   ****    *****
         *         *   *   *    *         *  *   *   *    *         *  *   *   *    *         *  *   *   *
          *        *   *  *      *        *  *   *  *      *        *  *   *  *      *        *  *   *  *
           *      *    * ****     *       * *    * ****     *       * *    * ****     *       * *    * ****
            *     *    *     *            * *    *     *            * *    *     *            * *    *     *
             *****      *******       ******      *******       ******      *******       ******      *******

1997На самом верху на самом деле не выполняется, но Wierd позволяет нам читать его из исходного кода, который является намного короче , чем пытаться строить коды символов для себя четырех цифр (даже если он не похож на него .. .). Я не хочу ломать всю эту штуку, но вы можете ясно видеть четыре повторяющихся раздела. Это то, что мы сначала сохраняем 1в стеке, а затем каждый из этих четырех разделов увеличивает это 1, а затем разветвляет. Нижняя ветвь отталкивает другую1, получает исходный символ в этих координатах и ​​печатает его, тогда как верхняя ветвь перенаправляется в следующий раздел. Вы можете удивиться, почему концы путей так неоправданно длинны, но это потому, что когда Wierd достигает конца пути, он пытается перейти к соседнему пути, прежде чем решить, что он должен завершить текущую ветвь. Чтобы избежать этого, нам нужно отодвинуть эти концы достаточно далеко от любого другого кода.

1998: Befunge 98

Befunge получил довольно известное обновление в 1998 году с очень строгой спецификацией, которая может быть обобщена на произвольные измерения (и я думаю, что также на произвольные топологии). Тем не менее, он в значительной степени обратно совместим с Befunge, что позволяет довольно легко объединить их воедино. В этом Befunge все еще не было зеркал, поэтому выполненный путь такой же, как и в Befunge 93:

v
\
>"8991",,,;5-;,@

Разница в том, что Befunge 98 не игнорирует ;. Вместо этого он действует как комментарий, в котором все команды до следующей ;игнорируются. Таким образом, мы не уменьшаем это 8до 3и печатаем 1998как есть.

2001: космический од ... пинг-понг

2001 год - год Пита, но я действительно не хотел полиглотировать файл изображения со всеми остальными программами, так что это менее известный 2D-язык. Кажется, у него довольно много функций (которые мы не собираемся использовать). Спасибо Sp3000 за поиск оригинального переводчика (который является единственной неработающей ссылкой в ​​архивной версии официального сайта).

PingPong несколько необычен тем, что в нем есть только зеркала и нет <v>^перенаправителей. Таким образом, он перемещается v19977в начало, а затем попадает в зеркало, которое оборачивает его на дно. Соответствующий код тогда:

v19977/

...

      /K:0:1:@

...

Фактический код довольно прост: Kнажимает 20, цифры нажимают сами, :выводят целое число и @завершают программу.

2003: SNUSP

Это первый язык, где все становится немного проще, потому что SNUSP поддерживает явную точку входа. Эта точка входа помечена $. Судя по некоторым статьям о esolangs, этот язык вдохновил несколько других, но, к сожалению, в конце концов, это всего лишь производная от Brainfuck. Тем не менее, я думаю, что способ установки текущей ячейки на 48 является довольно аккуратным (и был украден из статьи esolangs). Вот соответствующая часть кода:

$'main'        \/\/\/\
               \++++++\
               /++++++/
               \++++++\
               /++++++/
               \/\/\/\++.--..+++.#

Это 24 +с, и зеркала отправляют IP через каждый ровно дважды.

2004: Axo

По какой - то причине, этот язык действительно есть <^>редиректоры , но вместо обычного vон использует %. Следовательно это только перемещается через первую строку. Соответствующий код:

v19977/2{@{{4{\

Для начала нажимаем несколько цифр, выполняем деление. Затем 2{печатает 2, @очищает стек. {{печатает два (неявных) 0с. 4{печатает 4и \завершает программу.

2005: Железнодорожный

2005 был трудным выбором. Ни один другой год я не нашел так много 2D-языков, и есть ADJUST и Archway, оба из которых начинаются в нижнем левом углу (что сделало бы их легким дополнением). Хотя мне нравится Rail, и поскольку он имеет явную точку входа, добавить его тоже не сложно. Железная дорога ищет линию, начинающуюся с, $'main'и начинает двигаться на юго-восток от $. Это означает, что соответствующий код:

$'main'
 \-[2005]o-#

The \и -являются просто треками (без операций). [2005]Строковый литерал , который oпечатает до того #завершает программу.

2006: BestFriends.js

Двумерный Brainfuck. В этом году есть еще один интересный язык, называемый черным, который начинается с координаты (3,3)(на основе 1), что также сделало бы интересным использование этого в полиглоте. Я не мог найти переводчика, хотя. Так что вместо этого нам придется работать с другой BF-производной ...

Интересно, что он не форматирует сетку в строки с переводами строк, как большинство других 2D-языков. Вместо этого |используется в качестве разделителя строк. Так как я не использовал |другие языки, я мог бы просто поставить |в последнюю строку, что делает всю остальную часть программы одной строкой, что касается BF.js. Соответствующий код - это (превращение |в реальный перевод строки):

v19977/2{...
        }+++++[>++++++++++<-]>.--..++++++.@

BF.js не использует ни <v>^ зеркал. Единственный способ перенаправить поток управления - {}это повернуть направление IP на 90 °. Таким образом, эти скобки перемещают IP на вторую строку. Остальная часть представляет собой простое решение Brainfuck (не особенно удачное), которое устанавливает ячейку в 50(кодовую точку 2), а затем печатает 2006, немного сдвигая значение. @завершает программу

2008: BrainSpace 1.0

В этом году я действительно хотел использовать DOBELA, которая использует несколько точек входа и выглядит как любовь детей Fission и Ziim . К сожалению, я не смог заставить переводчика работать. Итак, вот еще одна производная от BF (последняя, ​​обещаю).

В отличие от последнего, этот знает как <v>^ и зеркала, так что соответствующий код:

v
\'\
  8

  \ *              ++++++++++++++++++++++++  ++++++++++++++++++++++++  ++O--OO++++++++OX

У этого нет обычного []цикла в стиле BF (вместо этого вам нужно сформировать реальный 2D-цикл), поэтому я просто решил жестко закодировать его, 50так как в любом случае у меня было множество символов подряд от Wierd. Обратите внимание, что 'и 8игнорируются, *это условный батут, который мы можем игнорировать, и Oэто Брейнфак .. Завершает Xпрограмму.

2009: > <>

Вероятно, самый популярный Fungeoid (кроме самого Befunge), по крайней мере, вокруг этих частей. > <> имеет <v>^и зеркала, и строковые литералы, поэтому исполняемый код такой:

v
\'\02'oo100@n590@n;

Строковый литерал в основном служит для пропуска того, что \мы использовали для BrainSpace 1.0, но пока мы на нем, мы могли бы также нажать первые два символа. ooпечатает их. Затем 100толкает три цифры, @толкает верхнюю вниз и nпечатает нижнюю 0. Мы делаем то же самое снова, с помощью 590которого печатает 9. Если вам интересно, почему я не просто печатаю 2009как есть, дождитесь 2015 года. ;Завершает программу.

2010: кардинал

Этот был прост, потому что он имеет явную точку входа в %. Однако этот создает 4 IP-адреса во всех направлениях (я полагаю, отсюда и название языка), и нам нужно избавиться от 3 из них. Вот соответствующий код:

 x
x%"2010"x
 x

Ну, да. (В Cardinal строковый режим печатает напрямую, а не помещает символы в стек.)

2011: RunR

Другой язык с явной точкой входа ( Дэвид Кэтт, который создал несколько других очень хороших esolangs), на этот раз в S. Это делает соответствующий код этой частью:

S1^2^2^6^8MAOUOAOOF

RunR немного интересен, потому что большинство операций работают с своего рода регистром, и значения должны быть явно перемещены в стек для двоичных операций. Цифры устанавливают значения регистров для себя и ^помещают текущий регистр в стек. Затем Mпроисходит умножение (значение регистра в разрядах, извлеченное из стека), Uвычитание, Aсложение, Oвывод. Fзавершает программу

2012: Ropy

Как и Wierd, Ropy пытается следовать разделам непробельных символов, но здесь изгибы не определяют команды. Фактически получается, что Ropy больше похож на мой собственный Лабиринт в том смысле, что выбранное направление зависит от вершины стека. Однако нам не нужно беспокоиться об этом здесь, потому что Ропи просто движется вдоль первой строки:

v19977/2{@{{4{\_______>/02&&&#????

Есть много вещей, которые мы можем игнорировать вплоть до >. Все, что нам нужно знать, это то, что вершина стека в этот момент будет a, 4а там будет 2ниже.

>дублирует 4, /деление превращая его в 1. Тогда мы нажимаем 02. &&&соединяет четыре верхних числа стека в обратном порядке, давая 2012. #выводит это. ????просто очищает стек, потому что в противном случае вершина стека также выводится.

Одна точка интереса является то , что второй 7в 19977добавляли из тягучей. /Подразделение в тягучей делает top / second(противоположность обычному порядку на многих языках стековых), где 7 / 9дал бы 0. Если бы у нас был ноль на вершине стека, Ropy делал бы какие-то дикие вещи со своим направлением движения, поэтому нам нужно подтолкнуть другого, 7чтобы убедиться, что вершина стека остается положительной, а Ropy продолжает двигаться на восток.

2014: деление

С его точными точками входа, это легко. RDLUсоздайте атомы (указатели инструкций) в соответствующем направлении, поэтому соответствующий бит будет следующим:

R"2014";

Обратите внимание, что Uв исходном коде также есть a , но этот атом в конечном итоге попадает в один из *from от Wierd, что завершает программу (и этот атом занимает намного больше времени, чем Rнеобходимо для печати 2014).

2015: Гол> <>

Более мощная производная от Sp3000> <>. Он в значительной степени обратно совместим с> <>, поэтому исполняемый код по-прежнему:

v
\'\02'oo100@n590@n;

Тем не менее, направление вращения @было изменено, что является стандартным приемом для различения> <> и Gol> <> в полиглотах, поэтому этот выводится 15вместо 09. Отсюда и странности во второй половине программы.

2016: CSL

CSL довольно интересен тем, что команды не выполняются сразу. Вместо этого каждая команда помещается в командном стек и eи Eможет быть использована для выполнения команд от него. Соответствующий код становится:

v19977/2{@{{4{\_______>/02&&&#????        *    P+++++1P1P-1P+1E

Таким образом, Eисполняется весь стек команд, что означает, что материал перед ним выполняется в обратном порядке. Нам нужно только взглянуть на *:

1+P1-P1P1+++++P*

Они 1помещают себя в стек данных. +и -уменьшение / приращение. Pпечатает вершину стека. Затем *пытается умножить два верхних значения стека. Тем не менее, стек пуст, поэтому это завершает программу.


На этом этапе мы попадаем на языки, которые были выпущены после публикации этого задания, поэтому я не особо рассчитываю их на балл, тем более, что я создал их сам (но не с учетом этого вызова). Тем не менее, у них есть некоторая новая семантика перемещения IP, которая позволила легко вписать их в полиглот, а также добавить что-то интересное в эту витрину двумерных языков.

2017: Алиса

Алиса была разработана, чтобы быть многофункциональным Fungeoid. Одним интересным отличием для большинства (но не всех) других 2D-языков является то, что IP может перемещаться либо ортогонально, либо по диагонали. Переключение между ними также меняет семантику почти всех команд в языке. Кроме того, Алиса поддерживает как традиционные <^>vрегуляторы направления, так и \/зеркала, но зеркала в Алисе имеют уникальное поведение (что позволяет легко привести IP Алисы к пока неиспользованной части кода).

В то время как большинство языков рассматривают \и /как если бы они были зеркалами под углом 45 °, а IP - как отраженный от него луч света, Алиса рассматривает их как имеющие угол 67,5 ° (который ближе к углу фактических глифов косой черты) и IP также перемещается через зеркало (отсюда и название языка). Благодаря этому углу зеркала переключаются между движениями в ортогональном или диагональном направлениях. Кроме того, в то время как в обычном режиме (то есть, когда IP движется по диагонали), сетка не переворачивается, а вместо этого IP отскакивает от краев (тогда как в кардинальном режиме она оборачивается).

В общем, код, выполняемый Алисой, следующий:

v19
\ \

...

  >      "7102"4&o@

...

IP начинается в верхнем левом углу как обычно, vотправляет его на юг. Теперь \IP отражает перемещение на северо-запад, где он сразу же отскакивает от левого края сетки (и вместо этого перемещается на северо-восток). 1можно игнорировать, IP отскакивает от верхнего края, чтобы двигаться дальше на юго-восток. Мы попали в другую, \которая отражает IP севера. 9также может быть проигнорировано, а затем IP-адрес переходит в нижнюю часть сетки. Через пару строк мы перенаправим его на восток >для удобства. Затем "7102"выдвигает кодовые точки 2017, 4&oпечатает эти четыре символа и @завершает программу.

2018: Wumpus

Wumpus - это первый двумерный язык в треугольной сетке, который делает движение в коде совершенно другим (и снова позволяет легко найти неиспользуемую часть кода). Поэтому вместо того, чтобы думать о каждом персонаже в сетке как о маленьком квадрате, вы должны думать о них как о чередующихся треугольниках вверх и вниз. Верхний левый угол - это всегда восходящий треугольник.

У Wumpus нет таких регуляторов, как у него <^>v, но у него есть зеркала \/. Однако из-за треугольной сетки они работают не так, как большинство других языков. IP отражается от них, как луч света (как обычно), но вы должны думать, что они имеют угол 60 °. Таким образом, IP, движущийся на восток, в конечном итоге будет двигаться вдоль северо-западной оси сетки.

Как еще одно отличие от большинства других языков, края сетки не переносятся, но вместо этого IP отскакивает от краев (как если бы эти краевые ячейки содержали соответствующие зеркала). Еще одна забавная маленькая деталь в том, что диагонали через треугольную сетку на самом деле похожи на лестницы в исходном коде.

Имея это в виду, код, выполняемый Wumpus, выглядит следующим образом (где я заменил пробелы .на ясность:

v19977/
   02
  89
 ..
..
.....*...#2018O@

Это v19977просто мусор, который мы можем игнорировать. /отправляет IP на северо-запад, где он 977снова проходит (справа), отскакивая от верхнего края. Затем IP перемещается на юго-запад через 2089кучу пробелов, прежде чем он достигнет левого края, чтобы снова отразиться на восток. *тоже мусор. Затем, наконец, #2018нажимает 2018, Oпечатает его и @завершает программу.


Недостающие годы

Наконец, некоторые заметки о годах, которые я не освещал.

Исследуя 2D-языки, чтобы найти подходящие по годам языки, которые можно было бы использовать в полиглоте, я обнаружил, что вопреки распространенному мнению, Befunge не был первым 2D-языком. Похоже, что этот титул принадлежит компании Biota, которая была создана в 1991 году. К сожалению, у языка нет вывода, поэтому я не смог использовать его для этой задачи.

Насколько я могу судить, 2D-языки не были созданы в 1992 и 1995 годах. Осталось несколько лет, которые я не освещал:

  • 1994: Orthagonal был создан независимо от Befunge. Языки семантически очень похожи на самом деле, но Orthagonal фактически не выкладывает исходный код в 2D. Вместо этого каждая строка является (x, y, instruction)кортежем. Я даже получил спецификацию языка и оригинальный интерпретатор от создателя Джеффа Эплера, но в итоге тот факт, что синтаксис не является 2D, сделал язык непригодным для этого полиглота.
  • 1996: Orthogonal , был создан преемник Orthagonal (созданный кем-то другим), но для целей этого полиглота возникают те же проблемы, что и для Orthagonal.
  • 1999: Единственный язык, который я смог найти, был клеточный автомат Криса Пресси REDGREEN . К сожалению, в отличие от своего предшественника RUBE, у него, похоже, нет семантики ввода / вывода.
  • 2000: есть еще один сотовый автомат Криса Пресси, который называется noit o 'mnain worb, но у него также нет ввода / вывода. Есть также Numberix, который я не пытался запустить, и я не уверен, будет ли он игнорировать не шестнадцатеричные символы в исходном коде.
  • 2002: есть Clunk без I / O и ZT, чья языковая спецификация ужасает меня.
  • 2007: я нашел три языка здесь. Zetaplex основан на изображениях (так что нет), и RubE On Conveyor Belts, похоже, требует заголовка с довольно строгим форматом, который мог бы испортиться в первой строке программы. Есть также Cellbrain от Quintopia, но, похоже, он требует особого заголовка.
  • 2013: Опять я нашел три языка. Рыбалка может быть возможна при хорошей реструктуризации, но для начала потребуется программа с действующим доком. Quipu , по памяти, слишком строг в своем синтаксисе, чтобы разрешить много полиглотов. И Рыба-меч - еще один член семьи> <>, но, к сожалению, я не смог найти переводчика. В противном случае, это, вероятно, было бы довольно легко добавить.

Если кому-то интересно, вот полный список реализованных 2D-языков, отсортированный по годам, насколько я мог их найти (на момент публикации этого ответа). Если что-то отсутствует в этом списке, пожалуйста, дайте мне знать в чате, так как я был бы действительно заинтересован в полном списке.


8
Ух ты. Это действительно впечатляет
DJMcMayhem

@MartinEnder Рассматривали ли вы по годам свой список языков 2D-программирования на самом Esolang?
doppelgreener

@doppelgreener Я не совсем уверен, как это будет соответствовать. По сути, это просто пересечение категории 2D с различными категориями года.
Мартин Эндер

Я исправлю строку заголовка RubE On Conveyor Belts, если у вас есть машина времени, которую я могу одолжить, чтобы научить 13-летнего меня, как читать файл, не зная заранее размера. (Это единственная причина, по которой появилась строка заголовка; IMO, вы можете не стеснять подсчет размера заголовка как части программы, хотя, строго говоря, это так)
user253751

1
@cairdcoinheringaahing Вот, пожалуйста. И Wumpus на 2018 год, пока я был на нем.
Мартин Эндер

117

15 лет, Питон

Версии: 0.9.1 , 2.0.0 , 2.2.0, 2.2.2, 2.5.0, 2.5.1, 3.0.0, 3.1.0, 3.1.3, 3.2.1, 3.3.0, 3.3.3, 3.4.0, 3.5.0 и 3.6.0a4 . Версии, на которые нет ссылок, можно найти на странице загрузок .

Дата выхода 0.9.1 можно найти здесь . К сожалению, мне пришлось пропустить много лет из-за отсутствия старых версий и проблем с компиляцией на моем компьютере. Представленные годы: 1991, 2000-2002 и 2006-2016 годы.

Протестировано на Arch Linux, используя gzipped версии.

# Note: This file needs a trailing newline due to 0.9.1

# 0.9.1: No bitwise operators
# This one errors out by division by zero.
try:
    eval('1&2')
except:
    print(1991)
    1/0

import sys

# 2.0.0: repr('\n') gives "'\012'" instead of "'\n'"
# == doesn't exist until Python 0.9.3 and <> doesn't exist in Python 3, hence we
# use <. Also, 0.9.1 doesn't have double quoted strings.
if repr('\n') < '\'\\n\'':
    print(2000)
    sys.exit()

# 2.2.0: email module still has a _Parser class - module revamped in 2.2.2
# I would use whether or not True exists as a name here, but weirdly "True"
# worked in 2.2.2 even though the docs say it was introduced in 2.3...
try:
    import email
    email._Parser
    print(2001)
    sys.exit()
except AttributeError:
    pass

# 2.2.2: a in b only works for strings a of length 1.
try:
    eval('"art" in "Martin"')
except TypeError:
    print(2002)
    sys.exit()

# 2.5.0: int() allows null bytes in integer to convert when given an explicit
# base.
try:
    print(int('2006\x00Hello, World!', 10))
    exit()
except ValueError:
    pass

# 2.5.1: pow overflows
# Note that we can't use ** here since that doesn't exist in 0.9.1.
if pow(2, 100) < 1:
    print(2007)
    exit()

# 3.0.0: round returns a float rather than an int.
if str(round(1, 0)) > '1':
    print(2008)
    exit()

# 3.1.0: bug caused complex formatting to sometimes drop the real part.
if format(complex(-0.0, 2.0), '-') < '(-':
    print(2009)
    exit()

# 3.1.3: str of a float is shorter than the repr of the same float.
if str(1.0/7) < repr(1.0/7):
    print(2010)
    exit()

# 3.2.1: For some weird reason, u'...' Unicode strings were disabled then
# re-enabled later.
try:
    eval('u"abc"')
except:
    print(2011)
    exit()

# 3.3.0: int still works without a first argument.
try:
    int(base=10)
    print(2012)
    exit()
except TypeError:
    pass

# 3.3.3: no enum module :(
try:
    import enum
except ImportError:
    print(2013)
    exit()

# 3.4.0: PEP 448 (additional unpacking generalisations) not implemented yet
try:
    eval('[*[1], *[2], *[3]]')
except SyntaxError:
    print(2014)
    exit()

# 3.5.0: No f-strings
try:
    eval('f"abc"')
except SyntaxError:
    print(2015)
    exit()

print(2016)

19
... Ух ты. Меня все еще поражает, насколько хорошо некоторые люди знают свои языки. Это как оглядываться назад во времени ...
wizzwizz4

Python 0 поддерживает попробовать / кроме ??
OldBunny2800 29.09.16

8
@ OldBunny2800 Удивительно, да, это так
Sp3000

54

Короткая и сладкая; три APL ( K , J201 , Dyalog 7.1 ) в 8 байтов

1993+1^2

1993 плюс ...

K: первое 1 целое число {0}, кроме {2}, т.е. {0}; 1993 - Попробуйте онлайн!

J: 1 2 = 1; 1994 - Попробуйте онлайн!

APL: LCM (1,2) = 2; 1995 - Попробуйте онлайн!


Очень хорошо! Думаешь, ты мог бы объединить больше языков Айверсона?
миль

@ Miles Получите жесткие с K, и APL2 / APLX / APL * PLUS слишком похожи.
Адам

@ Miles Знаете ли вы о версии J от 2000 года? Если это так, мы можем сделать 2e3+?1с Dyalog 9.0.1.
Адам

Еще одна крутая перспектива X^Yдля некоторых чисел X и Y, как ^и мощность в J, но LCM в APL.
Адам

2
Я нашел страницу с описанием
миль

46

10 лет, 12 языков, 2430 байт

Этот ответ является сотрудничество между мной и пользователем 1000000000 .

Краткий список языков:

Brainfuck    1993
Befunge      1993
Piet         2001
Whitespace   2003
Braincopter  2005
Grass        2007
Starry       2008
Paintfuck    2008
Brainbool    2010 (11111011010)
Python 2.7.2 2011
Fission      2014
Brainflak    2016 

Вот код:

P3v="";print(sum([ord(x)for x in"~~~~~~~~~~~~~~~y"]));"""{}{}     + + +---[.     + +..  '.. +. +.. +. +. +.] + + + + + + +(((((()()()()){}){}){}){})({({} +-[<() + + + + + + +>-()])}{}<[. + + + + + + + +..-------  `             +.[-]]>)[< '
 17 12 
# > 7*::,8 +:,,2 +,@<>R"2014";]*ne*e*es*s*swWWW*swWWWW*sw*e*e*e*eeev*wn*n*n*n*ne*e*se*s*s*s*sWWwWWWw**e*eeee*vwn*n*n*n*ne*e*se*s*s*s*sWWWw*eeee*e*ne*n*nWWWWWw*ne*nWWWWWWw*w*sw*se*sWWWWWWWw*s*WWWWWWwwwWWWWWWWWWWwWWWWWWWWWWwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWwvwWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwv `
255 0 255 255   0   192 192 0   192 192 0 192 192   192 255
255 192
255 255 192
255
255
0 255 255 0 255 255 0 255 255 0 255 255 0 192 192 192 255 255 255 255 255 0 192 192 0 0 255 255 255
255 0 0 255 0 192 192 0 192 192 0 192 192 192 255 255 192 255 255 192 255 255 192 255 255 0 255 255 0 255 255 0 255 255 0 192 192 255 255 255 255 255 255 255 255 255 255 255 255 0 192
192 0 0 255 0 192 192 0 192 192 0 192 192 0 192 192 192 255 255 192 255 255 192 255 255 0 255 255 0 255 255 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 192
192 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 0
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 0 255 255 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 255 255
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 192
192 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 0
192 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 0 0 0 0 0 255 255
255 0 192 192 0 0 255 0 0 255 255 255 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 255 255 255 255 255 255 0 0 255 0 0 255 0 255 255 0 0 0 0 192 192 0 0
255 0 192 192 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 0 255 0 255 255 0 0 0 0 192 192 0 192 192
#   """

Чтобы вписать это в ответ, я воздержусь от целых ссылок TIO и скорее просто опубликую ссылку на действительный интерпретатор, где код может быть введен пользователем. Вот ссылка Pastebin для этой цели.

болтушка

Формат файла PPM , один из форматов изображений, из которого мы можем прочитать интерпретатор Piet, имеет текстовую версию ASCII. Используя это, мы смогли встроить код других языков в качестве мусора в файл изображения, прочитанный Пайтом и Брейнкоптером.

Изображение выглядит так:

Сырое изображение

Не все изображения важны для Пита. Вот версия со строкой, обозначающей путь, по которому Piet следует через код:

Пиет путь

Несмотря на несколько запутанные способы создания программы, сама программа довольно проста. Вдоль верхней части изображения он помещается 1 10 10 10 2в стек; вдоль стороны это умножается трижды и добавляет один раз. В нижнем углу выводится результат (2001), а затем останавливается.

Braincopter

Braincopter - другой визуальный язык. Он также опирается на тот же ppmфайл изображения для запуска. Из-за очень жестких ограничений в npiet наш код Braincopter может использовать только подмножество исходных операций Braincopter. Мы ограничены в использовании цветов, которые действительны в Пит. Это удаляет -оператора из Braincopter.

Вот путь, прослеженный кодом Braincopter:

Braincopter путь

Программа Braincopter немного странная из-за отсутствия -оператора. Стены голубого и темного голубого служат для перенаправления указателя, но в остальном он идентичен следующему бреду:

++++++++++++++++++++++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++++++++++++++++..+++++.

Это печатает 2005.

Paintfuck

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

Так как Paintfuck игнорирует нерелевантные символы, поскольку no-ops большая часть кода не имеет значения. Соответствующий раздел кода:

nsn**ne*e*es*s*sw*sw*sw*e*e*e*eee*wn*n*n*n*ne*e*se*s*s*s*sww**e*eeee*wn*n*n*n*ne*e*se*s*s*s*sw*eeee*e*ne*n*nw*ne*nw*w*sw*se*sw*s*wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwnsn**ne*e*es*s*sw*sw*sw*e*e*e*eee*wn*n*n*n*ne*e*se*s*s*s*sww**e*eeee*wn*n*n*n*ne*e*se*s*s*s*sw*eeee*e*ne*n*nw*ne*nw*w*sw*se*sw*s*wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

Пока они не запрещены, wв конце кода ничего не делается. Они там для части травы решения. n, e, s, И wиспользуются для перемещения изображения и *используются для построения точки в определенном месте. Программа выводит:

Пейнтбук выход

Большая версия:

Painfuck выходной, но его больше

Brainfuck

Как Paintfuck Brainfuck игнорирует большинство персонажей. Еще раз вот важные из них:

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

Большая часть этого в дальнейшем не имеет отношения к обстоятельствам и просто является символами, которые нужны другому языку. Более тонкая версия этого кода:

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

Это довольно просто печатает 1993.

Brainbool

Brainbool очень похож на Brainfuck в выборе персонажей. Большая разница, которая позволяет им сплетаться вместе, - отсутствие -Brainbool. Важные персонажи для Brainbool:

[]+++[.++....+.+..+.+.+.]++++++++[<+++++++>]<[.++++++++..+.[]]>[<>,+,,+,<>]

Выводы Brainbool и brainfuck являются взаимоисключающими. Brainbool скрывает свой вывод во втором наборе []. Brainfuck встречается +++---до того, как достигает [нулевого значения, и пропускает вывод, в то время как Brainbool видит только +++установку 1, в результате чего он проходит через цикл. Точно так же Brainbool устанавливается в ноль в 4-м цикле, заставляя его пропускать, пока Brainfuck входит в цикл со значением 49.

Так как Brainbool не имеет десятичного вывода, он выводит 2010 в двоичном виде:

11111011010

расщепление

Единственная часть кода, которая важна для деления:

R"2014";

В Rповестке в атоме движется вправо, на "2014"принты 2014и ;останавливает выполнение.

Befunge

Befunge проходит только через следующих персонажей:

P3v
  7
  > 7*::,8 +:,,2 +,@

Они P3необходимы для создания правильного изображения .ppm для piet и кумулятивно помещают 3 в стек. vпомещается перенаправить указатель вниз. Затем он проходит через 7в 17используется для указания ширины .ppm изображения. >Перенаправляет указатель вправо. 7*умножает вершину стека на 7, оставляя 49 (значение ASCII 1) на вершине стека. ::дублирует вершину стека дважды. 1Выводится ,. 8 +добавляет 8 к верхнему приращению к ASCII 9. :,,выводит 9дважды. 2 +увеличивает ASCII 1до ASCII 3и ,печатает. Наконец @завершает программу.

В целом это печатает 1993.

Пробелы

Пробелы, как следует из названия, используют только пробелы в своих программах. Вот что видит интерпретатор пробелов:

[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][LF]
[Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Tab][Tab][Tab][Tab][Tab][Space][Tab][Space][Space][Tab][Tab][LF]
[Tab][LF]
[Space][Tab][LF]
[LF]
[LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][Space][LF]
[Space][Space][Space][LF]

Большая часть того, что делает этот код, не имеет значения для выполнения программы (все строки, содержащие только пробелы, просто помещают ноль в стек). Важная часть:

[Space][Space][Space][Tab][Tab][Tab][Tab][Tab][Space][Tab][Space][Space][Tab][Tab][LF]
[Tab][LF]
[Space][Tab][LF]
[LF]
[LF]

Первая строка помещает 2003 в стек. После этого [Tab][LF][Space][Tab]печатается вершина стека (2003) в виде числа. Наконец, последние три перевода строки завершают выполнение программы.

трава

Трава игнорирует весь символ , пока первый wв файл и после этого всех символов, которые не являются w, Wили v. Травяной переводчик читает:

wWWWwWWWWwv
wWWwWWWwv
wWWWwWWWWWwWWWWWWwwwWWWWWWWwWWWWWWwwwWWWWWWWWWWwWWWWWWWWWWwv
wWWWwWWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwWWWwv
wWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwv

Первая строка определяет функцию, которая добавляет два к тому, что ей передают. Вторая строка определяет функцию, которая добавляет четыре к тому, что ей передают. Третий определяет функцию, которая печатает два плюс аргумент, печатает аргумент дважды, а затем, наконец, печатает семь плюс аргумент (Grass выводит символы на основе значения ASCII). Четвертая, пятая и шестая строки определяют функции, которые добавляют восемь, добавляют 16, добавляют 32 и добавляют 64 к их аргументу соответственно. Последняя строка определяет основную функцию, которая принимает символ w(единственное предопределенное число в Grass, значение ASCII 119) и добавляет к нему 185, используя функции add, определенные в программе, а также встроенную функцию add one. Трава переносит числа в 256, и поэтому результат равен 48 (соответствует символу0). Затем функция передает это в функцию третьей строки, которая печатает 2007.

звездный

Звездные игнорирует все , за исключением пространства, +, *, ., ,, `, и '. При этом звездный переводчик видит только:

       + + +.     + +..  '.. +. +.. +. +. +. + + + + + + + + + + + + + + +. + + + + + + + +..  `             +. '
     *, +,, +,************************************************* `

Тем не менее, инструкции label и jump используются для пропуска разделов кода, которые могут вызвать проблемы при запуске, поэтому код фактически таков:

       + + +.     + +..  '  `             +. ' `

Этот код помещает два в стек, дублирует его дважды, а затем выскакивает и печатает один из них как число. Затем толкает ноль, дублирует его и печатает оба ноля в виде чисел. Затем он выталкивает одну из двойок и прыгает, а затем толкает семь к стеку и выталкивает и печатает как число. Наконец, он помещает последние два в стек и переходит в конец программы.

Python 2.7.2

Код Python соответствует формату:

P3v="";print(sum([ord(x)for x in"~~~~~~~~~~~~~~~y"]));"""..."""

где ...стоит за всем другим хламом.

Первая строка P3v=""указана потому, что для того, чтобы быть допустимым .ppmфайлом, наш код должен начинаться с P3этого, что обычно приводит к ошибке, но если мы сообщим python, что это объявление переменной, он проигнорирует его.

Далее мы должны распечатать 2011. Однако из-за способа .ppmформатирования а мы не можем включать в эту строку какие-либо числа. Чтобы обойти это, мы суммируем все значения ASCII строки "~~~~~~~~~~~~~~~y"и напечатаем результат. Наконец, мы используем тройные кавычки многострочного комментария, чтобы python игнорировал все остальное.

Brainflak

Мы сохранили лучшее для последнего.

Brainflak, как и другие, игнорирует большинство персонажей. Соответствующие символы:

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

Код Python, (([()]))дважды помещает -1 в стек, поэтому его необходимо удалить до начала обработки программы.

После этого Brainbool использует []nilad, который ничего не делает, и программа начинается.

(((((()()()()){}){}){}){})({({}[<()>()])}{}<[[]]>)толкает 2016 год. Последнее [<><>]- это остатки Befunge и Brainfuck, но, к счастью, ничего не делает.

Когда программа завершает работу, она печатает содержимое стека, то есть печатает 2016.


Brilliant! Я надеялся, что Пит появится как-то, встраивать вещи в PPM - это замечательно. Отлично сработано!
Синкоденада

1
+1 за We saved the best for last. : D
DJMcMayhem

38

5 лет

#define q/*-[>+<-----]>--.++++++++..------.[-][
print('2010'if len(bin.__doc__)==86else'2015')
"""*/
main(c){c=-4.5//**/
-4.5;printf("19%d",90-c);}
#define w/*]
*/"""

1989: C89 [1] и 1999: C99

Однострочный комментарий //был добавлен в C99, поэтому компилятор C89 будет читать этот код как c=-4.5 / /*comment*/ -4.5, что аналогично c=-4.5 / -4.5, а компилятор C99 будет читать как c=-4.5 //comment/**/
- 4.5, что так же, как c=-4.5 - 4.5.
Часть Python - это комментарий в программе на Си.

2010: Python 2.7 и 2015: Python 3.5

Документы различаются между Python 3 и 2, эта программа использует длину документов для определения версии Python.
Часть C находится в строке в программе Python.

1993 [2] : Brainfuck

Это в основном игнорирует все, что нет .,[]+-<>. Так как в программе на С есть ,, я должен был заставить Brainfuck отклонить эту часть, установив текущий байт в 0.


  1. Спецификация C89 была выпущена в 1990 году. Подробнее .
  2. Я не смог найти официальную дату релиза, поэтому я буду верить Esolangs и Wikipedia .

4
Это здорово, особенно -4.5/-4.5и -4.5-4.5. Создание двух версий каждого из двух основных языков довольно впечатляюще, даже без
добавления

Это не Codegolf, но в a=строке 2 нет необходимости
TheInitializer

@TheInitializer да, я попробовал без, a=и это дало ошибку, поэтому я решил оставить ее. Я не знаю, почему это дало ошибку, хотя, вероятно, опечатка.
Betseg

@betseg, если этот код выполняется только на Python, он должен работать.
TheInitializer

17

15 лет, JavaScript

Поскольку цикл выпуска JavaScript очень необычный и непоследовательный, я собираюсь использовать реализацию Firefox. Пожалуйста, дайте мне знать, если это не разрешено.

Версии: Phoenix 0.1 , Firebird 0.6 , Firefox 1.0.0 , 1.5.0 , 2.0.0 , 3.0 Beta 1 , 3.0.0 , 3.5.0 , 3.6.0 , 4.0.0 , 10.0.0 , 18.0.0 , 27.0 .0 , 35.0.0 , 44.0.0 (все протестировано на Windows 7)

Важное примечание: установка и открытие Firefox 1.0.0 или более поздней версии может стереть все ваши сохраненные данные Firefox , включая историю и закладки.

Кроме того, начиная с 1.0.0, вы можете одновременно открывать только одну версию; Попытка открыть другую версию приводит к появлению нового окна уже открытой версии.

инструкции

  • Вариант 1. Сохраните приведенный ниже код на своем компьютере в виде HTML-документа и откройте его в каждом браузере.
  • Вариант 2: откройте https://ethproductions.github.io/js-year-test.html в каждом браузере.

Код

<script onbeforeunload="123">
// This uses document.write because alert does nothing in Phoenix (Firefox) 0.1.
document.write((function () {
    function assert (code) {
        try {
            eval(code);
            return true;
        } catch (e) {
            return false;
        }
    }

    // Firefox 44 supports octal and binary literals in Number(); Firefox 35 does not.
    if (Number("0o1") === 1)
        return 2016;

    // Firefox 35 supports template strings; Firefox 27 does not.
    if (assert("`abc`"))
        return 2015;

    // Firefox 27 supports argument spreading; Firefox 18 does not.
    if (assert("Math.max(...[1, 2, 3])"))
        return 2014;

    // Firefox 18 supports default arguments; Firefox 10 does not.
    if (assert("function q(a = 1) { }"))
        return 2013;

    // Firefox 10 has basic WeakMap support; Firefox 4 does not.
    if (assert("WeakMap.a"))
        return 2012;

    // Firefox 4 has basic typed array support; Firefox 3.6 does not.
    if (assert("Int8Array.a"))
        return 2011;

    // Firefox 3.6 added the async attribute to script elements.
    if (assert("document.getElementsByTagName('script')[0].async.a"))
        return 2010;

    // Firefox 3.5 added the String.prototype.trim() method.
    if (assert("'abc'.trim()"))
        return 2009;

    // Firefox 3.0 added partial support for object destructuring.
    if (assert("var {c} = {c: 7}"))
        return 2008;

    // Firefox 3.0 beta 1 added the Array.prototype.reduce() and Array.prototype.reduceRight() methods.
    if (assert("[].reduce.a"))
        return 2007;

    // Firefox 2.0 added support for restricted words as properties.
    if (assert("({if:1}).if"))
        return 2006;

    // Firefox 1.5 added the Array.prototype.indexOf() methods, along with a couple other Array methods.
    if (assert("[1].indexOf(1)"))
        return 2005;

    // Practically the only JS difference between v0.6 and v1.0 is the addition of the onbeforeunload event.
    if (assert("document.getElementsByTagName('script')[0].onbeforeunload.a"))
        return 2004;

    // The Object.prototype.eval() method was removed in Firebird 0.6.
    if (!assert("'abc'.eval()"))
        return 2003;

    // We're all the way back to the good old Phoenix 0.1 browser...
    return 2002;
})());
</script>

Вы можете добавить 16-й год, включив BF: <!--<<<<-[>+<-----]>--.++++++++..------.[-][-->перед сценарием и другой HTML-комментарий, содержащий только ]последующие.
Стивен Х.

6
@StevenH. Хм ... вау, я даже не думал о включении в это эсолангов. И это действительно умный способ включить BF :-) Но я не уверен, что действительно хочу ...
ETHproductions

13

6 языков, Turtlèd и brainfuck , Python 3.5, Python 2.7, > <> , Fission

Turtlèd не существовал до этого года, и поэтому он легко объективен, даже если коммиты github не учитываются, и у BF есть свидетельство на странице esolang, выпущенное в 1993 году. Python 3.5 - 2015, 2.7 - 2010.> <> также имеет страницу esolang , заявив 2009, как и деление, 2014

#-[>+<-----]>--.++++++++..------#"2016"/
print(2015 if len(len.__doc__)==42 else 2010)
#;                           oooo"2009"/
#;"4102"L

Я, вероятно, должен отдать должное странице констант bf на esolangs ... ¯ \ _ (ツ) _ / ¯

Как это работает, вроде:

Turtlèd:

Turtlèd ничего не делает для строк, отличных от первого:

#-[>+<-----]>--.++++++++..------#"2016"/
  ^sets string variable to this   ^ prints 2016

/ нет

Brainfuck

Brainfuck игнорирует символы не в своих командах

он видит -[>+<-----]>--.++++++++..------.(последний. из части Python)

который просто делает Brainfuck, он использует обтекание для деления 255 на 5, затем вычитает 2 из результата, печатает, увеличивает 8 раз, печатает дважды, уменьшает 6 раз, печатает

Python 2 и 3

print(2015 if len(len.__doc__)==42 else 2010)

длина документации для len варьируется между версиями, поэтому она печатает год для версии 3, если это правильная длина, иначе для версии 2.

> <>

# отражает указатель в обратном направлении, поэтому он попадает в / на другой стороне этой строки, проходит через пробел между elseи 2010, затем снова отражается, чтобы достичь «2009», помещая 9,0,0,2 в стек, затем распечатывая в обратном порядке ,

расщепление

У деления есть порождающие, поэтому у нас может быть строка внизу, которую он выполняет в одиночку:

#;"4102"L
        L spawn left moving atom
  "4102"  print this right to left
 ;        halt
# python comment

13

3 года, 3 языка: C, TeX, MIXAL

*main(){puts("1990");}/*\newwrite\O\openout\O=O\write\O{1982}\bye                                                                                                                              
START   ENTA    1997
        CHAR
        STX     6
        OUT     6(19)
        HLT
        END     START   */ 

Назовите файл date.mixal.

  1. C (1990) - Компилирует с предупреждениями и печатает 1990в stdout.
  2. TeX (1982) - компилировать с tex date.mixal; печатает 1982в файл O.tex(игнорируйте вывод DVI).
  3. MIXAL (1997) - скомпилируйте с использованием GNU Mix Development Kit mixasm date.mixalи запустите с mixvm -r date.mix; печатает 1997на устройство телетайпа (= stdout).

Программы TeX и MIXAL находятся в комментарии в программе C; за ним следует программа MIXAL, \byeпоэтому TeX игнорирует ее. Программы C и TeX являются комментарием в программе MIXAL. По какой-то причине gccготов принять *main.


Я забыл про MIXAL, +1: D
кот

13

3 года (GolfScript, CJam, MATL), 24 23 байта

[A11]Wd%;200 1e2/0 8_+(

Это выводы

  • 2007 в GolfScript.

  • 2015 в CJam (версия 0.6.5).

  • 2016 в MATL (версия 19.2.0).

объяснение

Golfscript

Неопределенные токены являются noops в GolfScript . Единственные части кода, которые действительно что-то делают:

200      Push 200
           STACK: 200
1        Push 1
            STACK: 200, 1
/        Divide
           STACK: 200
0        Push 0
           STACK: 200, 0
8        Push 8
           STACK: 200, 0, 8
+        Add
           STACK: 200, 8
(        Subtract 1
           STACK: 200, 7
         Implicitly display 200, 7 as "2007"

CJam

[A11]    Push array [10 11]
           STACK: [10 11]
W        Push -1
           STACK: [10 11], -1
d        Convert to double
           STACK: [10 11], -1.0
%        Select elements from array
           STACK: [11 10]
;        Pop
           STACK is empty
200      Push 200
           STACK: 200
1e2      Push 100
           STACK: 100
/        Divide
           STACK: 2
0        Push 0
           STACK: 2, 0 
8_       Push 8 and duplicate
           STACK: 2, 0, 8, 8
+        Add
           STACK: 2, 0, 16
(        Subtract 1
           STACK: 2, 0, 15
         Implicitly display 2, 0, 15 as "2015" 

MATL

Все с этого %момента является комментарием.

[A11]    Push array [5 11]
           STACK: [5 11]
W        2 raised to that
           STACK: [32 2048]
d        Compute increment
           STACK: 2016
         Implicitly display as "2016"

Исправление: в CJam после %получения [11 10]. Не то чтобы это имело значение.
aditsu

@aditsu Ой! Спасибо, отредактировано
Луис Мендо

12

2 языка, Python 2.7 и Python 3.5

Python 2.7 был выпущен в 2010 году .

Python 3.5 был выпущен в 2015 году .

print('2010'if 3/2==1else'2015')

Это зависит от PEP 238, где оператор /был изменен с целочисленного деления в Python 2 на деление с плавающей точкой в ​​Python 3.


3
Это может быть забавным испытанием, если оно связано с выявлением ошибок / изменений в операторах между версиями
миль

1
@TuukkaX Это работает для меня как в Python 2.7.12, так и в Python 3.5.1 на Fedora 24.
миль

1
Вы не можете сделать '2010'if 3/2>1else'2015'вместо этого?
Qwerp-Derp

15
Или нам по математике:print(int(2010+1/2*10))
Якуб

2
print('2015'if 1/2else'2010')лучше
Cyoce

12

8 лет, TI-Basic

Disp 1996           <-- TI-83
Text(-1,1,1,1
ClrHome
Disp 1999           <-- TI-83+ OS 1.03 (initial OS)
sub(1
ClrHome
Disp 2002           <-- TI-83+ OS 1.15
isClockOn
ClrHome
Disp 2004           <-- TI-84+ OS 2.21
invT(e,1
ClrHome
Disp 2005           <-- TI-84+ OS 2.40
CLASSIC
ClrHome
Disp 2009           <-- TI-84+ OS 2.53
BackgroundOn
ClrHome
Disp 2013           <-- TI-84+ Color Silver Edition
Send({1
ClrHome
2015                <-- TI-84+ Color Edition OS 5.1

«Любая из программ может печатать в STDERR или генерировать ошибки и предупреждения времени выполнения / компиляции, если правильный вывод все еще печатается в STDOUT или файл». В настоящее время отображается только год без ошибок, поэтому мы соблюдаем это правило. Однако, если вы хотите вместо этого записать в память, замените Disp (date)на (date)->I.

Рекомендации:

  1. Даты выпуска калькулятора - https://epsstore.ti.com/OA_HTML/csksxvm.jsp?nSetId=74258
  2. Дата выхода TI-83 + OS 1.15 - http://wikiti.brandonw.net/index.php?title=83Plus:OS:VersionDifferences#TIOS_1.15
  3. Совместимость калькулятора - http://tibasicdev.wikidot.com/compatibility
  4. Дата выхода TI-84 + CSE - https://www.amazon.com/Texas-Instruments-Silver-Graphing-Calculator/dp/B00AWRQKDC
  5. Дата выхода TI-84 + CE - http://www.prnewswire.com/news-releases/texas-instruments-unveils-the-new-ti-84-plus-ce-300026266.html и https: // www. cemetech.net/forum/viewtopic.php?t=8870

9

5 лет, Go 1.0, 1.1, 1.4, 1.5, 1.6: 285 257 байт

(1.2 был выпущен в 2013 году как 1.1, 1.3 в 2014 году как 1.4 и 1.7 в 2016 году как 1.6.)

Не проверял это на каждой версии, потому что я могу получить доступ только к 1.6, но теоретически это должно работать! Изменения языка, вероятно, привели к тому, что программа не компилировалась, поэтому я полагался на стандартные изменения библиотеки.

package main
import(."fmt"
."reflect"
."time")
func main(){s:="6"
if _,e:=Parse("2016-Sep-30","2016-Sep-31");e==nil{s="5"}
if Sprint(ValueOf(0))!="0"{s="4"}
if Sprint(&map[int]int{1:1})[0]!='&'{s="3"}
if string(0xd800)==string(0xfffd){s="2"}
Print("201"+s)}

Развернулся и прокомментировал:

package main

import (
    "fmt"
    "reflect"
    "time"
)   package main

import (
    . "fmt"
    . "reflect"
    . "time"
)

func main() {
    s := "6"
    // 1.6: time.Parse rejects invalid days
    if _, e := Parse("2016-Sep-30", "2016-Sep-31"); e == nil {
        s = "5"
    }
    // 1.5: A reflect.Value now prints what it holds, rather than use
    // its String() method
    if Sprint(ValueOf(0)) != "0" {
        s = "4"
    }
    // 1.4: Printing pointers to maps gives the map instead of the address
    if Sprint(&map[int]int{1: 1})[0] != '&' {
        s = "3"
    }
    // 1.1: Unicode surrogate halves are no longer allowed
    if string(0xd800) == string(0xfffd) {
        s = "2"
    }
    Print("201" + s)
}

7

4 года, 99 байт / 77 символов

v=1//1;"""
 1991/*"""
for i in[0]:print 2010#🔟😃😇🔟😗➕➕😨
"""
"
>9002nnnn;
"""#*/

Примечание: я не уверен, что годы правильные

  • Python 2.7, 2010
  • Javascript, 1991
  • Эмотиномикон, 2015
  • ><>2009

Мне понадобилось некоторое время, чтобы понять, как заставить Python и JS работать вместе.

объяснение

v=1//1;"""устанавливает переменную vдля 1деления на 1в Python и 1в Javascript ( //начинает комментарий в Javascript) и ;"""запускает многострочную строку в Python. ;Не может быть заменена новой строки , потому что будет делать Javascript перестанет работать.

1991/*"""остальная часть многострочной строки. Пространство необходимо, чтобы> <> не помещалось 1в стек. Поскольку начало многострочной строки было частью комментария в Javascript, она печатает 1991и запускает многострочный комментарий.

for i in[0]:print 2010#🔟😃😇🔟😗➕➕😨в Python - это цикл for, который повторяет список [0]и запускается print 2010. Комментарий - это просто код Emotinomicon (он игнорирует все, что не является смайликом или строкой). В> <> он ( f) помещается 15 в стек.

Цикл for не может быть удален, поскольку IP-адрес> <> понижается в столбце 1 и pне является допустимой командой в> <>. Вы также не можете заменить его на ifоператор, потому что iэто команда для ввода в> <>.

""" начало многострочной строки.

" является частью многострочной строки, необходимой для закрытия строки, которую мы открыли в> <> (первая кавычка предыдущей строки начала строку в> <>).

>9002nnnn;в> <>, меняет направление IP - направо, толкает 9, 0, 0и 2, вывести как числа и завершает программу.

"""#*/в Python завершает многострочную строку и начинает комментарий. В Javascript */завершает многострочный комментарий.


Бонусная версия с Gol> <>:

5 языков, 4 года, 118 114 байтов / 96 92 символов

v=1//1;"""
 1991/*"""
for i in[0]:print 2010#🔟😃😇🔟😗➕➕😨
"""
`
"
>9002nnnn;
"
>5102nnnn;
"""#*/
  • Golfish v0.4.2, 2015

Explanation²

IP начинается в верхнем левом углу, идет вправо. Это vзаставляет это идти вниз.

fвыталкивает 15.

" начинается строка

` используется для экранирования символов, то, что> <> не имеет.

"следует закрыть строку, но мы использовали `, так что не будет.

> часть строки.

" заканчивает строку

>5102nnnn;это фактический код. >делает IP идти прямо, 5102толкает 5, 1, 0и 2, и nnnn;печатает число и заканчивает программу.


Ошибки Python для символов Unicode без правильного заголовка. ( SyntaxError: Non-ASCII character '\xf0' in file test.txt on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details)
Пшеничный волшебник

@WheatWizard Сохраните файл как UTF-8
acrolith

7

7 лет, 8 браузеров

Не совсем даты выпуска языка, потому что на самом деле у css нет выпусков, но есть версии браузера (может быть, это версия компилятора?)

Для следующих браузеров, это печатает имя браузера, версию и дату выпуска и ничего больше. Он печатает то же самое для нескольких более поздних версий (вы увидите, что хром - это одна из версий, показанная позже на скриншотах, потому что трудно загрузить старые версии chrome по номеру версии)

Я мог бы напечатать номер версии, которую использовал, но я предпочел показать первую версию, где представлена ​​использованная функция.

  • IE6
  • IE7
  • IE8
  • IE9 (непроверенный, нет IE9 вокруг)
  • Firefox 4
  • Firefox 3.6
  • Chrome 18
  • Chrome 21
  • Современные браузеры

FF3.6 FF4 Chromium19 Chromium22 IE8-причуда IE8-IE7compatibility IE8

index.html

<!DOCTYPE html>
 <html>
  <head>
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <link rel=stylesheet href=style.css>
  </head>
  <body>
    <div class=borderbox>
      <div class="inlineblock">
        &nbsp;IE6-2001
      </div>

      <div class="white">
        <div class="outofbox">
          <a href="#">IE8-2009</a>
        </div>
        <div class="inherit">
          <a href="#">IE7-2006</a>
        </div>
      </div>
    </div>
    <div class="white">
      <header class="filter-quirk filter-blur filter-blur-url">
        IE9
      </header>
    </div>
    <div class="flex white">
      Modern Browsers - 2017
    </div>
    <div class="webkit-flex">
      <div class="">
        Chrome 21-2012
      </div>
    </div>
    <div class="webkit-invert white flexdisable">
      <div class="">
        Chrome 18-2012
      </div>
    </div>

    <svg style="position: absolute; top: -99999px" xmlns="http://www.w3.org/2000/svg">

    </svg>

    <div class="filter">
      <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <g
           transform="scale(8)"
           aria-label="FF4"
           id="text8419">
           <rect
              style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.79374999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
              id="rect21965"
              width="17.005648"
              height="3.9855044"
              x="-0.16825682"
              y="-0.025296567" />
          <path
             d="m 1.0052634,1.5511362 v 0.7639843 h 0.4564063 q 0.092604,0 0.092604,0.066146 0,0.069453 -0.092604,0.069453 H 0.69107072 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 h 0.1785938 V 0.72431329 h -0.1785938 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 2.1793519 V 1.0484278 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 0.72431329 H 1.0052634 V 1.4155373 H 1.4848207 V 1.2667091 q 0,-0.089297 0.066146,-0.089297 0.069453,0 0.069453,0.089297 v 0.4332552 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 1.5511362 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8421" />
          <path
             d="m 2.9883464,1.5511362 v 0.7639843 h 0.4564063 q 0.092604,0 0.092604,0.066146 0,0.069453 -0.092604,0.069453 h -0.770599 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 2.8527475 V 0.72431329 H 2.6741537 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 4.1624349 V 1.0484278 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 0.72431329 H 2.9883464 V 1.4155373 H 3.4679037 V 1.2667091 q 0,-0.089297 0.066146,-0.089297 0.069453,0 0.069453,0.089297 v 0.4332552 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 1.5511362 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8423" />
          <path
             d="M 5.6692683,1.8917872 H 4.7729923 V 1.7363445 l 0.754062,-1.28322911 h 0.277813 V 1.7561883 h 0.112448 q 0.0893,0 0.0893,0.069453 0,0.066146 -0.0893,0.066146 h -0.112448 v 0.4233333 h 0.112448 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -0.499402 q -0.0893,0 -0.0893,-0.069453 0,-0.066146 0.0893,-0.066146 h 0.251355 z m 0,-0.1355989 V 0.58871439 h -0.07938 L 4.9019713,1.7561883 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8425" />
          <path
             d="M 8.2881171,1.6077068 H 6.9585859 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 h 1.3295312 q 0.089297,0 0.089297,0.066146 0,0.069453 -0.089297,0.069453 z"
             style="stroke-width:0.79374999"
             id="path8422" />
          <path
             d="m 8.9582054,0.90656104 q 0,-0.14882812 0.1785937,-0.31749999 0.1819011,-0.17197916 0.4365625,-0.17197916 0.2414323,0 0.4233333,0.17197916 0.1852081,0.17197916 0.1852081,0.39687498 0,0.14882817 -0.0893,0.28111977 Q 10.006617,1.3960402 9.7056533,1.67716 L 9.0210439,2.3154672 v 0.00992 H 10.059533 V 2.2063266 q 0,-0.089297 0.06945,-0.089297 0.06614,0 0.06614,0.089297 V 2.460988 H 8.8920596 V 2.2625506 L 9.6725804,1.5283318 q 0.2315104,-0.2282031 0.3009635,-0.3307291 0.07276,-0.102526 0.07276,-0.21497396 0,-0.17197916 -0.1422132,-0.30096353 -0.1422136,-0.12898437 -0.3307292,-0.12898437 -0.1686718,0 -0.3075781,0.0992188 -0.1355989,0.0992188 -0.1752864,0.24804686 -0.019844,0.0661458 -0.069453,0.0661458 -0.023151,0 -0.042995,-0.0165365 -0.019844,-0.0198437 -0.019844,-0.0429948 z"
             style="stroke-width:0.79374999"
             id="path8424" />
          <path
             d="m 12.207981,1.3001287 v 0.3307292 q 0,0.3902604 -0.171979,0.6349999 -0.171979,0.2447396 -0.446484,0.2447396 -0.274506,0 -0.446485,-0.2447396 Q 10.971054,2.0211183 10.971054,1.6308579 V 1.3001287 q 0,-0.39356766 0.171979,-0.63830724 0.171979,-0.24473957 0.446485,-0.24473957 0.274505,0 0.446484,0.24473957 0.171979,0.24473958 0.171979,0.63830724 z M 11.589518,0.55268084 q -0.224896,0 -0.353881,0.22820312 -0.128984,0.22489584 -0.128984,0.53578124 v 0.2943489 q 0,0.3241146 0.132292,0.5457031 0.135599,0.2182813 0.350573,0.2182813 0.224895,0 0.35388,-0.2248959 0.128984,-0.2282031 0.128984,-0.5390885 V 1.3166652 q 0,-0.32411458 -0.135599,-0.54239582 -0.132292,-0.22158854 -0.347265,-0.22158854 z"
             style="stroke-width:0.79374999"
             id="path8426" />
          <path
             d="M 13.642054,0.43692564 V 2.3253891 h 0.459713 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -1.055026 q -0.0926,0 -0.0926,-0.069453 0,-0.066146 0.0926,-0.066146 h 0.459714 V 0.61551938 l -0.373724,0.37372394 q -0.02646,0.0264584 -0.06945,0.0264584 -0.02646,0 -0.0463,-0.0198438 -0.01654,-0.023151 -0.01654,-0.056224 0,-0.0297656 0.03638,-0.0661458 l 0.436562,-0.43656248 z"
             style="stroke-width:0.79374999"
             id="path8428" />
          <path
             d="M 15.625137,0.43692564 V 2.3253891 h 0.459713 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -1.055026 q -0.0926,0 -0.0926,-0.069453 0,-0.066146 0.0926,-0.066146 h 0.459714 V 0.61551938 l -0.373724,0.37372394 q -0.02646,0.0264584 -0.06945,0.0264584 -0.02646,0 -0.0463,-0.0198438 -0.01654,-0.023151 -0.01654,-0.056224 0,-0.0297656 0.03638,-0.0661458 l 0.436563,-0.43656248 z"
             style="stroke-width:0.79374999"
               id="path8430" />
          </g>
      </svg>
    </div>
    <div class="white gradient msfilter" style=color:white>
      FF3.6-2010
    </div>
  </body>
 </html>

style.css

.borderbox {
    height: 40px;
    overflow: hidden;
    padding-bottom: 100px;
}
.outofbox {
    background: blue none repeat scroll 0 0;
    margin-top: 20px;
    opacity: 0;
}
.white {
    color: white;
}
.outofbox a, .inherit a, .inherit a:visited, .outofbox a:visited {
    color: inherit;
}
.inlineblock {
    display: inline;
    width: 100%;
    zoom: 1;
    display: inline-block;
    margin-left: 100px;
    text-align: right;
}
.white header{
  color: black;
}
.absolute{
  position: absolute;
}
.flex{
  display: none;
  display: flex;
}
.flex.white{
  filter: invert(100%)
}
.webkit-flex{
  display: none;
  display: -webkit-flex;
  overflow: hidden;
  flex-flow: column;
  height: 3em;
  justify-content: flex-end;
}
.webkit-flex div{
  margin-bottom: -1.1em;
}
.flexdisable{
  display: -webkit-flex;
  overflow: hidden;
  -webkit-flex-flow: column;
  -webkit-justify-content: flex-end;
  height: 60px;
}
.flexdisable div{
  margin-bottom: -30px;
}
.filter-quirk{
  filter: url(#quirk);
}
.filter-blur{
  filter: blur(100px);
  -webkit-filter: blur(100px);
}
.webkit-blur{
  -webkit-filter: blur(100px);
}
.webkit-invert{
  -webkit-filter: invert(100%);
  filter: none;
}
.filter-url-dark{
  -webkit-filter: url(filter.svg#Invert);
  filter: url(filter.svg#Invert) invert(100%);
}
.filter-blur-url{
  filter: url(filter.svg#blur) url(filter.svg#brightness);
}
.filter{
  filter: invert(100%) brightness(100%);
  -webkit-filter: invert(100%) brightness(100%) blur(100px);
}
.filter svg{
  position: absolute;
}
.filter svg rect{
  filter: invert(100%);
  -webkit-filter: invert(100%);
}
.msfilter{
    /* IE 8 */
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
  /* IE 5-7 */
  filter: alpha(opacity=0);
}
.opacity{

}
.black{
  background: black;
}
.gradient{
  width: 100px;
  background: -moz-linear-gradient( 45deg, #000, #000 );
  font-weight: bold;
}

filter.svg

    <!DOCTYPE html>
 <html>
  <head>
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <link rel=stylesheet href=style.css>
  </head>
  <body>
    <div class=borderbox>
      <div class="inlineblock">
        &nbsp;IE6-2001
      </div>

      <div class="white">
        <div class="outofbox">
          <a href="#">IE8-2009</a>
        </div>
        <div class="inherit">
          <a href="#">IE7-2006</a>
        </div>
      </div>
    </div>
    <div class="white">
      <header class="filter-quirk filter-blur filter-blur-url">
        IE9
      </header>
    </div>
    <div class="flex white">
      Modern Browsers - 2017
    </div>
    <div class="webkit-flex">
      <div class="">
        Chrome 21-2012
      </div>
    </div>
    <div class="webkit-invert white flexdisable">
      <div class="">
        Chrome 18-2012
      </div>
    </div>

    <svg style="position: absolute; top: -99999px" xmlns="http://www.w3.org/2000/svg">

    </svg>

    <div class="filter">
      <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <g
           transform="scale(8)"
           aria-label="FF4"
           id="text8419">
           <rect
              style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.79374999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
              id="rect21965"
              width="17.005648"
              height="3.9855044"
              x="-0.16825682"
              y="-0.025296567" />
          <path
             d="m 1.0052634,1.5511362 v 0.7639843 h 0.4564063 q 0.092604,0 0.092604,0.066146 0,0.069453 -0.092604,0.069453 H 0.69107072 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 h 0.1785938 V 0.72431329 h -0.1785938 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 2.1793519 V 1.0484278 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 0.72431329 H 1.0052634 V 1.4155373 H 1.4848207 V 1.2667091 q 0,-0.089297 0.066146,-0.089297 0.069453,0 0.069453,0.089297 v 0.4332552 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 1.5511362 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8421" />
          <path
             d="m 2.9883464,1.5511362 v 0.7639843 h 0.4564063 q 0.092604,0 0.092604,0.066146 0,0.069453 -0.092604,0.069453 h -0.770599 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 2.8527475 V 0.72431329 H 2.6741537 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 H 4.1624349 V 1.0484278 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 0.72431329 H 2.9883464 V 1.4155373 H 3.4679037 V 1.2667091 q 0,-0.089297 0.066146,-0.089297 0.069453,0 0.069453,0.089297 v 0.4332552 q 0,0.089297 -0.069453,0.089297 -0.066146,0 -0.066146,-0.089297 V 1.5511362 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8423" />
          <path
             d="M 5.6692683,1.8917872 H 4.7729923 V 1.7363445 l 0.754062,-1.28322911 h 0.277813 V 1.7561883 h 0.112448 q 0.0893,0 0.0893,0.069453 0,0.066146 -0.0893,0.066146 h -0.112448 v 0.4233333 h 0.112448 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -0.499402 q -0.0893,0 -0.0893,-0.069453 0,-0.066146 0.0893,-0.066146 h 0.251355 z m 0,-0.1355989 V 0.58871439 h -0.07938 L 4.9019713,1.7561883 Z"
             style="fill:#000000;stroke-width:0.79374999"
             id="path8425" />
          <path
             d="M 8.2881171,1.6077068 H 6.9585859 q -0.089297,0 -0.089297,-0.069453 0,-0.066146 0.089297,-0.066146 h 1.3295312 q 0.089297,0 0.089297,0.066146 0,0.069453 -0.089297,0.069453 z"
             style="stroke-width:0.79374999"
             id="path8422" />
          <path
             d="m 8.9582054,0.90656104 q 0,-0.14882812 0.1785937,-0.31749999 0.1819011,-0.17197916 0.4365625,-0.17197916 0.2414323,0 0.4233333,0.17197916 0.1852081,0.17197916 0.1852081,0.39687498 0,0.14882817 -0.0893,0.28111977 Q 10.006617,1.3960402 9.7056533,1.67716 L 9.0210439,2.3154672 v 0.00992 H 10.059533 V 2.2063266 q 0,-0.089297 0.06945,-0.089297 0.06614,0 0.06614,0.089297 V 2.460988 H 8.8920596 V 2.2625506 L 9.6725804,1.5283318 q 0.2315104,-0.2282031 0.3009635,-0.3307291 0.07276,-0.102526 0.07276,-0.21497396 0,-0.17197916 -0.1422132,-0.30096353 -0.1422136,-0.12898437 -0.3307292,-0.12898437 -0.1686718,0 -0.3075781,0.0992188 -0.1355989,0.0992188 -0.1752864,0.24804686 -0.019844,0.0661458 -0.069453,0.0661458 -0.023151,0 -0.042995,-0.0165365 -0.019844,-0.0198437 -0.019844,-0.0429948 z"
             style="stroke-width:0.79374999"
             id="path8424" />
          <path
             d="m 12.207981,1.3001287 v 0.3307292 q 0,0.3902604 -0.171979,0.6349999 -0.171979,0.2447396 -0.446484,0.2447396 -0.274506,0 -0.446485,-0.2447396 Q 10.971054,2.0211183 10.971054,1.6308579 V 1.3001287 q 0,-0.39356766 0.171979,-0.63830724 0.171979,-0.24473957 0.446485,-0.24473957 0.274505,0 0.446484,0.24473957 0.171979,0.24473958 0.171979,0.63830724 z M 11.589518,0.55268084 q -0.224896,0 -0.353881,0.22820312 -0.128984,0.22489584 -0.128984,0.53578124 v 0.2943489 q 0,0.3241146 0.132292,0.5457031 0.135599,0.2182813 0.350573,0.2182813 0.224895,0 0.35388,-0.2248959 0.128984,-0.2282031 0.128984,-0.5390885 V 1.3166652 q 0,-0.32411458 -0.135599,-0.54239582 -0.132292,-0.22158854 -0.347265,-0.22158854 z"
             style="stroke-width:0.79374999"
             id="path8426" />
          <path
             d="M 13.642054,0.43692564 V 2.3253891 h 0.459713 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -1.055026 q -0.0926,0 -0.0926,-0.069453 0,-0.066146 0.0926,-0.066146 h 0.459714 V 0.61551938 l -0.373724,0.37372394 q -0.02646,0.0264584 -0.06945,0.0264584 -0.02646,0 -0.0463,-0.0198438 -0.01654,-0.023151 -0.01654,-0.056224 0,-0.0297656 0.03638,-0.0661458 l 0.436562,-0.43656248 z"
             style="stroke-width:0.79374999"
             id="path8428" />
          <path
             d="M 15.625137,0.43692564 V 2.3253891 h 0.459713 q 0.0893,0 0.0893,0.066146 0,0.069453 -0.0893,0.069453 h -1.055026 q -0.0926,0 -0.0926,-0.069453 0,-0.066146 0.0926,-0.066146 h 0.459714 V 0.61551938 l -0.373724,0.37372394 q -0.02646,0.0264584 -0.06945,0.0264584 -0.02646,0 -0.0463,-0.0198438 -0.01654,-0.023151 -0.01654,-0.056224 0,-0.0297656 0.03638,-0.0661458 l 0.436563,-0.43656248 z"
             style="stroke-width:0.79374999"
               id="path8430" />
          </g>
      </svg>
    </div>
    <div class="white gradient msfilter" style=color:white>
      FF3.6-2010
    </div>
  </body>
 </html>

2
У CSS действительно есть выпуски. Существует 1,0, 2,0, 2,1, 3,0 и 4,0. В вопросе даже сказано использовать Википедию или языковой сайт в качестве доказательства даты выпуска, так что вам следовало проверить. Дата
первого

Это не означает, что ни один из этих уровней не реализован (они даже не называются релизами, потому что это не так, вы должны были проверить ссылку, которую вы разместили). А CSS3 и 4 даже не имеют даты выпуска, потому что они создаются на лету, и переходят от одного проекта к другому к другим. Кроме того, ни один браузер не реализует определенный уровень 100% и 0% следующего уровня, поэтому наилучшей датой, которую вы можете придумать, является дата выпуска браузера.
qwazix

Тогда выбранный вами язык не соответствует требуемым спецификациям для этой задачи. Не так, как вы пытаетесь это сделать. Язык определяется его реализацией, поэтому вы должны выбрать браузер и придерживаться его, используя разные версии браузера , а не разные браузеры. Я все еще спрашиваю ОП, хотя.
mbomb007

ОП не сказал, что разные версии считаются разными языками, они просто распечатали год выпуска используемой языковой версии для разных языков . Однако половина ответов была основана на предположении, что разные версии достаточно различны, чтобы считаться языками. Если python 2.5.0 и 2.5.1 считаются достаточно разными, я не могу понять, чем IE и Chrome не являются.
qwazix

6

3 года, 89 байт

Python 2, JavaScript (ES6) и Perl

eval((["1","print=_=>console.log(1995)"])[+(2/3>0)]);print(eval(("1991",1987)["$$">"0"]))

Первый evalбудет работать 1на Python 2, а также print=_=>console.log(1995)на JavaScript и Perl с использованием функции целочисленного деления Python 2. Это создает printфункцию в JavaScript, а Perl только молча заботится о синтаксических ошибках и продолжает независимо.

Вторая evalосновывается на том, что Perl интерполирует переменную $$(текущий PID) в строку, что будет истинно при сравнении (с использованием >оператора) с "0"(Python требует строку в этом сравнении, тогда как Perl неявно преобразуется в целое число).

Я мог бы носить обувь на большем количестве языков, но хотел иметь решение, которое не злоупотребляло бы комментариями и работало только на «обычных» языках.

Я использовал эту страницу Википедии, чтобы найти годы, чтобы использовать.


2

3 языка, 3 года

Специальный ответ для развлечения.

2002!~+++++++[<+++++++>-]<[.++++++++..------.[-]] 2016 !.
  • Мышь-2002 : все, что после~- это комментарий, и первая часть, которую тоже можно написатьC0U!!!, печатает2002.

  • это предварительная фиксация Calc : интерпретатор калькулятора на основе стека, который я только что разработал в C11 для Programming II, часть программы перед первым пробелом печатает ошибку (разрешено согласно спецификации вызова) и2016 !.печатает2016.

  • Brainfuck : печатает 1993, как видно из других ответов. Финал посторонний .игнорируется beef.

Обратите внимание, что отображение Calc текущего стека < stackс каждой непустой строкой ввода является частью приглашения >, а не частью вывода.


Где я могу узнать о Mouse-2002? Github, похоже, не имеет каких-либо спецификаций.
Пшеничный волшебник

@WheatWizard README из репозитория содержит ссылки на оригинальный MUSYS доктора Грогоно и на перезагрузку Дэвида Симпсона в 2002 году , которые вместе рисуют нормальное изображение.
кот

2

Microsoft Excel / Google Sheets, 22 байта

Функция анонимного рабочего листа, которая не требует ввода и вывода 1987в Microsoft Excel и 2006Google Sheets

=IfError(M(2006),1987)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.