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


17

Натхненний старим посібником ...

Змагання

Я визначити й суфікс вектора Ь в якості булева списку довжиною а з б задніх значеннями truthy.

Написати програму або функцію , яка, з огляду на і Ь будь-якими засобами, повертає й суфікс вектор Ь будь-якими засобами.

Зараз це може здатися тривіальним, але ось ось улов: Ваш рахунок - це кількість байтів плюс перший рік, коли ваше рішення спрацювало б.

Правила

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

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

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

Можна вважати , що ≥ б завжди вірно , і що вони мають відповідний тип даних.

Тестові справи

Дано 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
@Dennis Я розумію, що ти хвилюєшся. Однак 1) відповіді здебільшого будуть дуже простими, і, таким чином, вони можуть бути перевірені вручну - не вимагаючи фактичної запущеної системи, і 2) деякі користувачі взяли на себе посилання на документацію своєї претензії.
Adám

8
Я не дуже впевнений, що "перевірено вручну" обов'язково буде працювати над деякими відповідями - минуле - це чуже місце, а іноді в початкових версіях речей може бракувати речей, що сьогодні відчувається звичним ...
Sp3000

1
@ Sp3000 Можливо, але це все-таки заради забави, і, маючи 8 відповідей та 9 оновлень за 1,5 год, я думаю, що це завдання є достатньо веселим, приймаючи, що хтось може обдурити. Можливо, додаткові дослідження щодо можливого переможця ...
Адама

1
@CatsAreFluffy Ідея полягала у тому, щоб показати, що будь-який із цих форматів є дійсним. Я думаю, що випадків мало і просто, що простота копіювання-вставки не є проблемою.
Adám

Відповіді:


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? filler +
CalculatorFeline

2
Це одне з найцікавіших «правдивих» цінностей, яке я бачив останнім часом.
користувач3490


Чи є вагомі причини, що це названо, svа ні s, чи щось інше на один байт?
кіт

8

APL, 1968 + 5 = 1973

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

⌽⎕≥⍳⎕

Старіша версія:

⌽⎕↑⎕⍴1

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

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


Діти, це називається переможцем . Будь ласка, запишіть це у своїх замітках.
CalculatorFeline

@CatsAreFluffy Ще немає @ Моріс Зукка: Нарешті, але ви можете насправді половину цих байтів. Ви можете зрозуміти, як? Також тут є набагато більш сучасна і читаема версія посібника.
Адам

7

SAS, 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? Я думаю, що це включає підказку та послідовність (але я не впевнений у решті
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

Підказка та seq - це два байти плюс один байт прапор для кількох аргументів. (21 байт)
Timtech

Зауважте, що це не є ні програмою, ні функцією в контексті калькуляторів 68k: Promptнедійсна для функції, і програма не може повернути значення. Тому це потрібно ввести на головному екрані. З іншого боку, define f(a,b)=seq(x>a-b,x,1,a)чи визначає дійсну функцію, якій можна дати аргументи a і b. (Перевірено на моєму TI-92 від 1995-09-13)
Фокс

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

3

Python 1.0, 1994 + 26 = 2020

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

Lambda була представлена ​​з першим головним випуском, 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

MATL , 2015 + 1 + 4 = 2020

:P<~

Це працює з моменту випуску 6.0.0 мови (він використовує неявний ввід, який був введений у цьому випуску) від 31 грудня 2015 року.

I've added 1 to the score in accordance with @drolex comment on possibly different locales.

Try it online!

Explanation

:    % 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
One day later, and...
Adám

2
Objection! We'll need to have the locales for the github server and the release submitter. If one is in Tonga and the other in Hawaii, this count might need to be incremented.
drolex

@drolex The OP should define what he means by "year", exactly. Meantime, I'm adding 1 to my score
Luis Mendo

@DonMuesli I didn't mean it, just showing the potential limitations of this type of scoring
drolex

@drolex Oh, I thought you were serious. I've asked the OP, anyway. Github date should probably count as official
Luis Mendo

3

J, 1990 + 8 = 1998

|.a{.b#1

Argh. Was researching this answer and someone got to APL before I could hope to understand the language. Here's my J solution instead.


2

Prolog, 1972 + 57 = 2029

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

Usage: a(7,3,L). will unify L with [0,0,0,0,1,1,1].

I'm really not quite sure when is was implemented in the language, and I doubt you can actually find the exact date. It's a pretty basic built-in though so I assume it was already existing when the language first appeared in 1972.

Not that it really matters though, I'm far from winning with this answer.


This may not be the winner, but it clearly illustrates the advantage of exploring - ehm - mature languages...
Adám

2

SMP, 1983+28 bytes=2011

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

I think I got this right... S:2.10, page 48 Ar:7.1, page 102 Map:7.2, page 106 $1:7.1, page 104

And if you're familiar with Mathematica, no, Ar doesn't work like that. More like Range+Select.


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

I mean (#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline

2

Vim, 1991 + 21 = 2012

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

Input looks like this:

7
3

And output looks like this:

0000111

Explanation:

"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'

Too bad vi doesn't support registers, because it was released in 1976!
DJMcMayhem

Explanation please?
CalculatorFeline


2

Pyth, 2015 + 9 4 = 2024 2019

Thanks to @FryAmTheEggman for his help!

gRQE

Try it here!

Explanation

gRQE    # Q = amount of trailing truthy values
        # E = length of the vector
 R E    # map over range(E)
g Q     # d >= Q

2

><>, 2009 + 14 + 3 for -v = 2026

b and a should be provided directly on the stack with -v, in reverse order.

The output isn't space separated as in the examples, but that does not seem to go against any stated rule. It uses 0 and 1 to represent false and true, as used by the language.

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

It doesn't work with the current version since ? now pops its test value from the stack.

I'm not confident every feature was implemented from day 1, -v for example could have been provided later as a commodity. I'll try to make sure my answer is correct this weekend.


1
? didn't pop (a long time ago) as stated in the quine challenge
CalculatorFeline

Thanks, that's great news, I'll save 1 byte :) I'll edit that now, but I'll have to check the resources linked on esolang.org, some date back to at least 2011.
Aaron


Thanks for your help, I wouldn't have thought to check the wiki's revisions ! I'm currently at work and won't probably be able to check everything yet, but I'll make sure to do it this evening or tomorrow.
Aaron

Score=2026 now.
CalculatorFeline



1

Mathcad, 1998 + 42 = 2040

"bytes" are interpreted as number of distinct keyboard characters (eg, 'for' operator (including one programming line) is a single character ctl-shft-#, or a click on the Programming toolbar)).

The above byte count assumes that the a and b definitions don't count towards the total; add 4 bytes for definitions if this assumption is invalid.

The function version shown below adds 5 bytes for the definition and a further 3 bytes for each use (assuming the a and b values are directly typed in).

As my Mathcad solution should clearly be playing off the red tees and not the competition ones, I've added a table of solutions. Note that as Mathcad has no empty array, I've used an empty string ("") instead; I've used 0 to indicate where I haven't calculated the b>a pairs.

enter image description here


Very interesting!
Timtech

1

PHP, 1995 + 56 bytes = 2051

function s($a,$b){while($i++<$a)$v[]=$i>$a-$b;return$v;}
Exploded view
function s($a,$b) {
  while ($i++ < $a) $v[] = $i > $a - $b;
  return $v;
}

Uh..there's custom scoring. It's first year language woks in+byte count.
CalculatorFeline

Whoops, right you are! Fixing...
ricdesi

Making the probably-incorrect assumption of this working in PHP 1. Will verify version soon.
ricdesi

1

Javascript ES6, 2015 + 46 = 2061

Returns array of 0 and 1

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

Javascript ES6, 2015 + 50 = 2065

Returns a string of 0 and 1 chars

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

Javascript, 1995 + 61 = 2056

Returns a string of 0 and 1 chars

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

1

k (kona), 1993 + 15 = 2008

((a-b)#0b),b#1b

Creates list of b True values, and concatenates it to a list of (a-b) False values.


0

R, 20 bytes + 1993 = 2013

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

Try it online!

Possibly this might work in S, which would drop the score to 2008, but I haven't been able to verify it.


0

SmileBASIC 3, 2014 + 25 = 2039

The first publicly available version of SmileBASIC 3 launched in Japan with the SmileBASIC app for Nintendo 3DS in November 2014.

Prints a string where 0 is false and 1 is true (as they are in the language itself.)

INPUT A,B?"0"*(A-B)+"1"*B
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.