Старый добрый суффикс вектор


17

Вдохновленный старым руководством ...

Соревнование

Я определяю a- й вектор суффикса b как логический список длины a с b конечными истинными значениями.

Напишите программу или функцию, которая с помощью a и b любым способом возвращает вектор a- го суффикса b любым способом.

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

правила

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

Выведите, используя любое представление логических значений, которое использует ваш язык, например 1/ 0, True/ False, TRUE/ FALSE, "True"/ "False"и т. Д.

Вывод с использованием любых представления списков , что ваш язык использует, например 0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}и т.д.

Вы можете предположить, что ab всегда верно и что они имеют соответствующий тип данных.

Контрольные примеры

Учитывая a = 7 и b = 3, вернуть0 0 0 0 1 1 1

Учитывая a = 4 и b = 4, вернуть[True,True,True,True]

Учитывая a = 2 и b = 0, вернуть(FALSE;FALSE)

Учитывая a = 0 и b = 0, вернуть{}

Пример решения и оценки

Я мог бы хотеть представить решение, {⌽⍺↑⍵⍴1}используя Dyalog APL. Это было бы общим числом 8. Это динамическая функция, которая работает с версией 8.1 Dyalog APL, выпущенной в 1998 году, поэтому мой общий балл за 2006 год. Мой представленный ответ должен выглядеть примерно так:

# Dyalog APL 8.1, 1998 + 8 = 2006
    {⌽⍺↑⍵⍴1}

Optional explanation...
Recommended: Link to documentation showing when the features you used were released.

Самый низкий балл побеждает!


14
Я глубоко обеспокоен проверяемостью ответов.
Денис

1
@ Денис, я понимаю, что ты беспокоишься. Тем не менее, 1) ответы в основном будут очень простыми, и, следовательно, могут быть проверены вручную - не требуя реальной работающей системы, и 2) некоторые пользователи стали ссылаться на документацию своей заявки.
Адам

8
Я не уверен, что «проверено вручную» обязательно сработает для некоторых ответов - прошлое - чужое место, и иногда в первоначальных версиях вещей может не хватать вещей, которые сегодня кажутся обычными ...
Sp3000

1
@ Sp3000 Возможно, но в любом случае это все для развлечения, и с 8 ответами и 9 ответами за 1,5 часа, я думаю, этот вызов достаточно забавен, примите, что кто-то может обмануть. Может быть, какое-то дополнительное исследование о возможном победителе ...
Адам

1
@CatsAreFluffy Идея состояла в том, чтобы показать, что любой из этих форматов является допустимым. Я думаю, что случаи немногочисленны и достаточно просты, поэтому легкость копирования-вставки не является проблемой.
Адам

Ответы:


7

APL \ 360, 1968 + 3 байта = 1971

⎕⍵⎕

Встроенный из учебника @NBZ связан с. Я не знаю, почему @NBZ сказал, что он получит 1970 баллов, потому что APL \ 360 не был реализован до 1968 года, и более ранние APL, такие как APL \ 1130, не имели векторной функции суффикса (см. Страницу 208 здесь ).


8

Далее, 1970 + 38 = 2008

:s tuck +do 0 . loop 0 +do -1 . loop ;

использование: 7 3 sпечатает "0 0 0 0 -1 -1 -1"


Сейчас мы говорим!
Адам

Почему -1? наполнитель +
КалькуляторFeline

2
Это одна из наиболее интересных «истинных» ценностей, которые я видел в последнее время.
user3490


Есть веская причина, по которой это имя svи нет s, или что-то еще один байт?
кот

8

APL, 1968 + 5 = 1973

До 5 символов:

⌽⎕≥⍳⎕

Старая версия:

⌽⎕↑⎕⍴1

Ну, вы на самом деле уже дали ответ, я просто удалил определение динамической функции и проверил, что это работает в 1968 году. Для справки вот руководство:

http://www.softwarepreservation.org/projects/apl/Books/APL360ReferenceManual


Дети, это называется победителем . Пожалуйста, запишите это в свои заметки.
CalculatorFeline

@CatsAreFluffy Пока нет. @ Moris Zucca: Наконец, но вы можете сыграть в гольф половину этих байтов. Вы можете понять, как? Кроме того, вот намного более современная и читаемая версия руководства.
Адам

7

САС, 1966 + 45 = 2011

data;a=;b=;do i=1to a;c=a-i<b;put c@;end;run; 

Время SAS сиять!

SAS не был впервые опубликован до 1972 года, но этот шаг с данными использует только самые базовые функции, которые, я уверен, были бы доступны даже в самых ранних предварительных версиях, начиная с 1966 года, поэтому я полагаю, что это сработало бы тогда. Ввод идет после a=и b=, а вывод выводится в журнал.

Я был бы удивлен, если бы у кого-нибудь еще была IBM System / 360 с верной версией SAS, чтобы действительно это проверить!



Теперь, если бы у меня были деньги на лицензию SAS для мэйнфреймов ...
user3490

5

Мышь-1979 , 1979 + 19 = 1998

??&TUCK (0.a)0(1-.)

Перевод: Forth .

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


Неработающая ссылка ....
CalculatorFeline

@CatsAreFluffy Исправлено; Я набрал это по памяти.
кот

Интересный. Но я не думаю, что это &Tuckбыло доступно до версии 2002 года. И петли кажутся бесконечными.
AShelly

4

TI-Basic, 1990 + 21 = 2011

Первый калькулятор TI, над которым работает эта программа, - TI-81, выпущенный в 1990 году.

Prompt A,B:"{}
seq(I>A-B,I,1,A

Редактировать: заметил, что я должен поддерживать пустой список ... увеличил код на 4 байта

Тестовые случаи

A=?7
B=?3
{0 0 0 0 1 1 1}

A=?4
B=?4
{1 1 1 1}

A=?2
B=?0
{0 0}

A=?0
B=?0
{}   * throws an error but still returns successfully

Не могли бы вы добавить комментарий о том, какие части источника являются однобайтовыми в TI-Basic? Я думаю, что это включает Prompt и seq (но я не уверен насчет остальных
Sparr

Мы не рассматриваем возврат через Ansприемлемый метод вывода, если он не напечатан.
lirtosiast

@Sparr Конечно, Promptи seq(это однобайтовые токены, а остальные символы по одному байту каждый.
Timtech

@lirtosiast Ans- это способ вернуть значение по умолчанию в серии TI-83 Basic. Кроме того, при запуске программы последняя строка печатается автоматически. Таким образом, у вас есть лучшее из обоих миров.
Timtech

2
Это аналитический двигатель? Кто-то должен это сделать ...
CalculatorFeline

4

Mathematica 1.0, 1988 + 22 байта = 2010

Array[#>m&/.m->#-#2,#]&

Я не уверен, что это работает, просто просмотрел документацию по 10.3 и искал что-то, сказанное Появилось в 1988 (1.0)


Просто о нынешнем победителе. Если бы только код SMP мог стать короче ...
CalculatorFeline

На другом примечании, хотя, некоторые документы: чистые функции , /.и-> ,Array
Sp3000

4

68k TI-Basic, 1995 + 25 = 2020

Первый калькулятор TI, над которым работает эта программа, - TI-92, выпущенный в 1995 году.

define f(a,b)=seq(x>a-b,x,1,a)

В отличие от серии TI-83, 68k TI-Basic поддерживает пустой список.


Как рассчитывается размер? Токенизация сильно отличается от серии 68k.
lirtosiast

Prompt и seq - это два байта плюс однобайтовый флаг для нескольких аргументов. (21 байт)
Timtech

Обратите внимание, что это не программа и не функция в контексте калькуляторов 68k: Promptнедопустимо в функции, и программа не может вернуть значение. Так что это должно быть введено на главном экране. С другой стороны, define f(a,b)=seq(x>a-b,x,1,a)определяет допустимые функции, которые могут быть заданы в качестве аргументов a и b. (Проверено на моем TI-92 с 1995-09-13)
Fox

У меня есть несколько калькуляторов TI (единственной версией z80 является 81), но обычно я использую TI-92 Plus. После выполнения этого defineи вызова f(2,1)или подобного для его токенизации размер, сообщаемый ОС, составляет 25 байт.
Fox

3

Python 1.0, 1994 + 26 = 2020

Сохранено 2 байта благодаря DSM.

Лямбда была представлена ​​с первым основным выпуском, 1.0

lambda a,b:[0]*(a-b)+[1]*b

1
Подтвержденная лямбда введена в 1.0, повторение списка (последовательности) в 0.9.2 . Самая старая версия, на которой я мог это проверить (кроме 0.9.1), была 1.5.2 , и там она работает нормально.
Sp3000

@ Sp3000 Ого, это круто. Я пытался найти некоторые журналы изменений, чтобы подтвердить, что повторение последовательности было на языке, который был на раннем этапе.
Морган Трепп

3

МАТЛ , 2015 + 1 + 4 = 2020

:P<~

Это работает с момента выпуска 6.0.0 языка (в нем используется неявный ввод, который был представлен в этом выпуске) от 31 декабря 2015 года.

Я добавил 1к оценке в соответствии с комментарием @drolex, возможно, в разных локалях.

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

объяснение

:    % take first input implicitly. Generate inclusive range from 1 to that
P    % flip that array
<~   % take second input implicitly. True for elements of flipped array that
     % exceed second number. Display implicitly

4
Один день спустя и ...
Адам

2
Протестую! Нам понадобятся локали для сервера github и отправителя релиза. Если один находится на Тонге, а другой на Гавайях, этот счет может потребоваться увеличить.
drolex

@drolex ОП должен точно определить, что он имеет в виду под «годом». Тем временем я добавляю 1 к моему счету
Луис Мендо

@DonMuesli Я не это имел в виду, просто показал потенциальные ограничения этого типа оценки
drolex

@drolex О, я думал, что ты серьезно. Во всяком случае, я спросил ОП. Дата Github, вероятно, должна считаться официальной
Луис Мендо

3

J, 1990 + 8 = 1998

|.a{.b#1

Argh. Изучал этот ответ, и кто-то добрался до APL, прежде чем я смог понять язык. Вот мое решение J вместо.


2

Пролог, 1972 + 57 = 2029

a(0,_,[]).
a(A,B,[H|L]):-Z is A-1,a(Z,B,L),(Z<B,H=1;H=0).

Использование: a(7,3,L). будет унифицировано Lс [0,0,0,0,1,1,1].

Я действительно не совсем уверен, когда is был реализован на языке, и я сомневаюсь, что вы действительно можете найти точную дату. Это довольно простая встроенная функция, поэтому я предполагаю, что она уже существовала, когда язык впервые появился в 1972 году .

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


Это не может быть победителем, но это ясно иллюстрирует преимущество изучения - эм - зрелых языков ...
Адам

2

SMP , 1983 + 28 байт = 2011

Map[S[$1>x,x->$1-$2],Ar[$1]]

Я думаю, что понял это правильно ... S: 2.10, страница 48 Ar: 7.1, страница 102 Map : 7.2, страница 106 $1: 7.1, страница 104

И если вы знакомы с Mathematica, нет, Arне работает , как , что . Больше похоже на Range+ Select.


(#>x&/.x->#)/@Range[#+#2]&в Mathematica
CalculatorFeline

Я имею в виду(#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline

2

Vim, 1991 + 21 = 2012

"adwj<c-x>"bdw@ai0<esc>v@bhr1

Вход выглядит так:

7
3

И вывод выглядит так:

0000111

Объяснение:

"adw                            'Delete a word into register a
    j<c-x>                      'Go down a line, and decrement the next number to occur
          "bdw                  'Delete a word into register b
              @ai0<esc>         'Insert a '0' "a" times
                       v        'Enter visual mode
                        @bh     'Move "b" characters left
                           r1   'Replace the whole selection with the character '1'

Жаль, что vi не поддерживает регистры, потому что он был выпущен в 1976 году!
DJMcMayhem

Пояснения пожалуйста?
CalculatorFeline


2

Pyth, 2015 + 9 4 = 2024 2019

Спасибо @FryAmTheEggman за помощь!

gRQE

Попробуй это здесь!

объяснение

gRQE # Q = количество конечных истинных значений
        # E = длина вектора
 RE # карта в диапазоне (E)
g Q # d> = Q

2

> <> , 2009 + 14 + 3 для -v = 2026

bи aдолжны быть предоставлены непосредственно в стеке -vв обратном порядке.

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

:?!;{:0(n1-}1-

Он не работает с текущей версией, поскольку ?теперь извлекает тестовое значение из стека.

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


1
? не выскочил (давным-давно), как указано в вызове Quine
CalculatorFeline

Спасибо, это отличная новость, я сохраню 1 байт :) Я сейчас отредактирую это, но мне придется проверить ресурсы, связанные с esolang.org, некоторые из которых относятся как минимум к 2011 году.
Аарон


Спасибо за вашу помощь, я бы не стал проверять ревизии вики! Я в настоящее время на работе и, вероятно, еще не смогу все проверить, но обязательно сделаю это сегодня вечером или завтра.
Аарон

Оценка = 2026 сейчас.
CalculatorFeline



1

Mathcad, 1998 + 42 = 2040

«байты» интерпретируются как количество различных символов клавиатуры (например, оператор «for» (включая одну строку программирования) представляет собой один символ ctl-shft- # или щелчок на панели инструментов программирования)).

Приведенный выше подсчет байтов предполагает, что определения a и b не учитываются в общем количестве; добавьте 4 байта для определений, если это предположение неверно.

Версия функции, показанная ниже, добавляет 5 байтов для определения и еще 3 байта для каждого использования (при условии, что значения a и b вводятся непосредственно).

Поскольку мое решение Mathcad должно явно играть на красных, а не на соревнованиях, я добавил таблицу решений. Обратите внимание, что поскольку Mathcad не имеет пустого массива, я использовал вместо него пустую строку (""); Я использовал 0, чтобы указать, где я не рассчитал пары b> a.

введите описание изображения здесь


Очень интересно!
Timtech

1

PHP, 1995 + 56 байт = 2051

function s($a,$b){while($i++<$a)$v[]=$i>$a-$b;return$v;}
В разобранном виде
function s($a,$b) {
  while ($i++ < $a) $v[] = $i > $a - $b;
  return $v;
}

Э-э ... Там есть пользовательские оценки. Это первый год работы языка в количестве + байт .
CalculatorFeline

Ой, верно, ты! Исправление ...
ricdesi

Предположительно неверное предположение, что это работает в PHP 1. Скоро проверим версию.
Рикдези

1

Javascript ES6, 2015 + 46 = 2061

Возвращает массив из 0 и 1

(a,b)=>Array(a-b).fill(0).concat(Array(b).fill(1))

Javascript ES6, 2015 + 50 = 2065

Возвращает строку 0и 1символы

(a,b)=>Array(a-b+1).join(0)+Array(b+1).join(1)

Javascript, 1995 + 61 = 2056

Возвращает строку 0и 1символы

function(a,b){return Array(a-b+1).join(0)+Array(b+1).join(1)}


0

R , 20 байтов + 1993 = 2013

function(a,b)1:a>a-b

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

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


0

SmileBASIC 3, 2014 + 25 = 2039

Первая общедоступная версия SmileBASIC 3, выпущенная в Японии с приложением SmileBASIC для Nintendo 3DS в ноябре 2014 года.

Печатает строку, где 0 - ложь, а 1 - истина (как они есть в самом языке.)

INPUT A,B?"0"*(A-B)+"1"*B
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.