Полиглот (непостоянный) OEIS!

24

Отказ от ответственности: это в значительной степени вдохновлено "Полиглот OEIS!" но исправляет проблему, которая привела к закрытию (см. раздел «Вывод») и была повторно опубликована, чтобы не аннулировать ответы.

Введение

Мы все знаем и любим онлайновую энциклопедию целочисленных последовательностей ( OEIS ). Так что, если мы сделали автономную версию интересных эпизодов? Ну, это было бы слишком просто, не правда ли, и как бы вы выбрали последовательность с нашим стандартным интерфейсом !? Нет. Нам нужно более простое решение для этого. Полиглот!

вход

Ваш ввод будет неотрицательным целым числом n.

Выход

Ваш вывод будет либо

  • n-Й ввод последовательности OEIS ИЛИ
  • Первые nзаписи последовательности OEIS.

Вы можете принять индекс за 1 или 0 по своему усмотрению.

Чтобы не делать этот вопрос дубликатом универсальных целочисленных констант принтеров , запрещены. Это также должно повысить уровень сложности представлений и избежать «скучных» решений;)

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

Хм, так где же вызов?

Вы должны полиглот вышеупомянутой функциональности. То есть, если вы поддерживаете языки A, B и C, все должны реализовывать разные последовательности OEIS. Выбор последовательности не ограничен, за исключением того, что вам нужны разные для всех языков.

То есть, если вы запустите предоставленную программу на языке A, то будет сгенерирована последовательность X, если вы запустите предоставленную программу на языке B, то будет сгенерирована последовательность Y (с X! = Y), и если вы запустите предоставленную программу на языке C генерируется последовательность Z (с X! = Z && Y! = Z).

Кто выигрывает?

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

Какие-нибудь последние слова / правила?

  • Вы должны указать, какой язык будет генерировать какую последовательность.
  • Применяются стандартные правила ввода / вывода.
  • Если между языками используются разные кодировки, обе программы должны использовать одну и ту же последовательность байтов.
  • Язык (Python 2/3) изменения действительно считаются разными языками. Различные реализации языка (такие как Browser JS vs Node.js) также считаются разными языками.
  • Применяются стандартные лазейки.
SEJPM
источник
4
Это сообщение было сделано в соответствии с этой Meta Q & A .
SEJPM
Могут ли разные языки иметь разную индексацию?
Стивен
2
@ StepHen да, они могут.
SEJPM

Ответы:

16

3 языка (1 байт) - Pyth ( A001477 ), MATL ( A000027 ), Braingolf ( A000217 )

Q

Как?

Q делает следующее:

  • В MATL это означает + 1, что это в основном оценивается как input + 1.

  • В Pyth это означает ввод, поэтому он просто выводит ввод.

  • В Braingolf это встроенные треугольные числа.

Мини-полиглот

Pyth можно заменить любым из следующих языков: GolfScript , Pyke , Brachylog или Brain-Flak .

Мистер Xcoder
источник
1
ну, вы, безусловно, выбрали правильные языки для этого +1: P
HyperNeutrino
1
@HyperNeutrino Я просто перенес свой ответ оттуда, но тогда я выбрал очень хорошие языки, так что да: P - Спасибо!
г-н Xcoder
Помните, это количество языков, а не код-гольф: P
Стивен
@ StepHen Я думаю, что 3 разумно.
г-н Xcoder
14

10 языков, 122 байта

#|A=1:0;~@}{\,[.,];oi
#coding:utf-8
print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()#⎚I±N»
# x
#x%:+.

Я определенно могу добавить еще кучу. 1-индексируется, если не указано иное.

Обратите внимание, что я не могу быть в курсе ссылок TIO, когда я уверен, что новые изменения не повлияли на старые программы - вы можете проверить их, если хотите, но копировать более 10 новых ссылок TIO каждый раз, когда я вносю изменения становится утомительным через некоторое время. Я буду копировать новые каждые 5 обновлений или около того.

cQuents v0, A000007

Соответствующий код: #|A=1:0;

#|Aловит ввод и там для комментариев Python. =1означает, что первый элемент 1, то :0есть остальные 0, выводит указанный nтермин n. cQuents v0 имеет странную ошибку / функцию, которая, когда неожиданный, но действительный токен, такой как ;, читается, приводит к завершению синтаксического анализа.

Попробуйте онлайн!

Пинг-понг , A001478

Соответствующий код: #|A=1:0;~@

Выходы через код выхода. 0 индексированные.

#пропускает следующий символ =здесь ничего не делает 1толкает 1и :печатает 1на STDOUT. 0толчки 0. )ничего не делает. ;толкает ввод, ~выскакивает и толкает -n-1. @завершается. Код выхода - вершина стека.

Попробуйте онлайн!

Axo , A001477

Соответствующий код: }{\

0 индексированные. }читает и выталкивает целое число из STDIN (по какой-то причине требует завершающий перевод строки), {печатает начало стека и \завершает программу. Я не уверен, что делают предыдущие персонажи, но в этом случае ничего не имеет значения.

Попробуйте онлайн!

брейкфак , A000027

Соответствующий код: ,[.,]

Простая кошачья программа от esolangs.org. Выводит на вход.

Попробуйте онлайн!

> <>, A000030

Соответствующий код: #...;oi

#зеркала и переносы справа, которые направляют его на чтение io;, который выводит первый символ ввода. 0 индексированные.

Попробуйте онлайн!

Рубин, A023443

Соответствующий код: print (0 and gets.to_i-1...)

0 индексированные. Печатает ввод минус 1. 0верно в Ruby, но неверно в Python.

Попробуйте онлайн!

Python 3, A000578

Соответствующий код: print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()

Сорванный с оригинального поста HyperNeutrino, но это довольно известный полиглот. quit()заканчивает программу

Попробуйте онлайн!

Python 2, A000290

Соответствующий код:

#coding:utf-8
print (0 and gets.to_i-1 or int(input())**(2+(1/2>0)));quit()

#coding:utf-8требуется для работы с древесным углем. Также сорвал оригинальный пост HyperNeutrino. quit()заканчивает программу

Попробуйте онлайн!

Древесный уголь, A001489

Соответствующий код: ⎚I±N»

0 индексированные. очищает консоль (уголь печатает ASCII как есть) и I±Nпечатает отрицательный результат ввода. »это ошибка синтаксического анализа и завершает программу.

Спасибо ASCII-только за помощь в чате.

Попробуйте онлайн!

Кардинал, A020725

Соответствующий код:

 x
x%:+.

Добавляет 1 к входу и подавляет все остальные указатели.

Попробуйте онлайн!

Стивен
источник
Похоже, код выхода для PingPong - это ToS, он оборачивается в 2 ^ 32, как и следовало ожидать от 64-разрядного целого числа со знаком.
Джонатан Аллан
@JonathanAllan круто, спасибо.
Стивен
Вам действительно нужно выйти с ошибкой разбора, если код Charcoal уже находится в конце программы?
MD XF
@MDXF нет, я планировал (я) добавить больше в конце
Стивен
10

5 языков ( 05AB1E , На самом деле , CJam , желе , MATL ), 7 байтов

UD>li)+

Попробуйте онлайн !:

  • 05AB1E : последовательность A000027 (положительные целые числа: a ( n ) = n ; на основе 1)
  • Фактически : последовательность A023443 (неотрицательные целые числа, включая 1: a ( n ) = n − 1; на основе 0)
  • Cjam : последовательность A020725 (положительные целые числа, исключая 1: a ( n ) = n +1; на основе 1)
  • Желе : последовательность A005843 (неотрицательные четные числа: a ( n ) = 2 * n ; на основе 0)
  • MATL : последовательность A000290 (квадраты: a ( n ) = n 2 ; на основе 1). Выход с ошибкой после выдачи вывода.
Луис Мендо
источник
7

3 языка: Proton, A000583 ; Python 3, A000578 ; Python 2, A000290

Протон , 49 байт

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Попробуйте онлайн!

Python 3 , 49 байт

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Попробуйте онлайн!

Python 2 , 49 байт

print(int(input())**(2+(1/2>0)+((''',''')!=',')))

Попробуйте онлайн!

объяснение

Протон не имеет '''...'''струн, поэтому (''',''')становится ('' ',' ''), что почему-то не вызывает проблем. Он оценивает '', делая (''',''')!=','оценку True.

Python делает эти строки, так что (''',''')это просто ','так имеет (''',''')!=','значение False.

В Python 2 для целых чисел используется разделение на полы, поэтому 1/2>0в Python 2 оно равно false, а в Python 3 - true.

HyperNeutrino
источник
Возможно, вы сможете добавить еще несколько языков, если превратите строку Python в, 1//1;print(int(input())**(2+(1/2>0)+((''',''')!=',')));quit()а затем добавите языки, такие как JavaScript
Стивен
@ StepHen Конечно, это может сработать, спасибо. Я сделаю это, как только смогу добавить JavaScript: P
HyperNeutrino
6

5 языков, 107 байт

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/.__id__;'
alert(+prompt()+1);`"""#=;#';q=gets
print(q)#)|<>%2)#`

Perl: A000035

Использование в =качестве разделителя для s///средств можно легко исключить код , мы не хотим, и используя в )качестве разделителя для q{}средств после printИНГ qво всех других языках, мы можем просто работать на <>непосредственно, не беспокоясь.

s/1...q/i...#/;
print(<>%2)

Попробуйте онлайн!

Рубин: A001477

В Ruby //это фактически /(деление на) /.../(совпадение с регулярным выражением), поэтому до тех пор, пока регулярное выражение завершается и преобразуется в число, мы можем безопасно разделить его. __id__короче .to_s.ord, тогда мы просто содержим остальную часть кода, который нам не нужен, в 's, установив qего getsи printего вместе со всеми остальными.

s=1/2;1//2..."/.__id__;'...';q=gets
print(q)

Попробуйте онлайн!

Python 2: A005843

Используя стандартную уловку, чтобы отличить 2 от 3, и вложения, которые мы не хотим, """и комментарии.

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/...`"""
print(q)

Попробуйте онлайн!

Python 3: A008585

Попробуйте онлайн!

JavaScript (браузер ES6): A000027

Довольно просто для JS, в итоге оказалось проще не использовать существующее повторно printи перейти на SpiderMonkey, но это также возможно.

s=1/2;1//2;q=int(input())*([2,3][s>0]);"""/.__id__;'
alert(+prompt()+1);`"""#=;#';q=gets
print(q)#)|<>%2)#`

Дом Гастингс
источник
3

6 языков: Кубически 5/6/7/8/9/10, 44 40 32 байта

Вычеркнуто 44 все еще регулярно 44; (

DDR'DDR$:_0?{R'DDRDDB'%0}!{+00%}

Это печатает:

  • A010710 кубически 5x5x5
  • A010711 в кубическом 6x6x6
  • A010712 в куб. 7x7x7
  • A010713 в кубическом виде 8x8x8
  • A010714 в кубическом 9x9x9
  • A010715 в кубическом формате 10x10x10

Объяснение:

DDR'DDR$:_0?{R'DDRDDB'%0}!{+00%}
DDR'DDR                            get top face sum to 2 (all versions)
       $:                          read input and set notepad to it
         _0                        set notepad to input modulo 2
           ?{...........}          if truthy
             R'DDRDD                reset cube
                    B'              set top face to Cubically version number
                      %0            print top face
                         !{....}   if falsy
                           +00      add 2 to notepad twice
                              %     print

Попробуйте онлайн! (Кубически 6x6x6)

MD XF
источник