Dobry stary przyrostek wektor

17

Inspirowany starą instrukcją ...

Wyzwanie

I zdefiniować p sufiks wektora B jako logiczną długość listy A z b końcowe wartości truthy.

Napisać program lub funkcji, która, z uwagi i b za pomocą dowolnych środków, zwraca p sufiks wektora B, w dowolny sposób.

Teraz może się to wydawać trywialne, ale tutaj jest haczyk: Twój wynik to liczba bajtów plus najwcześniejszy rok, w którym rozwiązanie zadziałałoby.

Zasady

Obowiązują wszystkie standardowe reguły, z wyjątkiem tego, że można także używać języków i wersji językowych wydanych po tym wyzwaniu.

Dane wyjściowe przy użyciu dowolnej reprezentacji wartości boolowskich używanych przez Twój język, np. 1/ 0, True/ False, TRUE/ FALSE, "True"/ "False"Itd.

Wyjście za pomocą cokolwiek reprezentacji listach, które swój używa języka, na przykład 0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}, etc.

Można założyć, że ≥ b jest zawsze prawdziwe i że są one odpowiedniego typu danych.

Przypadki testowe

Biorąc pod uwagę a = 7 ib = 3, zwróć0 0 0 0 1 1 1

Biorąc pod uwagę a = 4 ib = 4, zwróć[True,True,True,True]

Biorąc pod uwagę a = 2 ib = 0, zwróć(FALSE;FALSE)

Biorąc pod uwagę a = 0 ib = 0, zwróć{}

Przykładowe rozwiązanie i ocena

Mogę chcieć przesłać rozwiązanie {⌽⍺↑⍵⍴1}za pomocą Dyalog APL. Byłoby to bytecount 8. Jest to funkcja dynamiczna, która działa od wersji 8.1 programu Dyalog APL, wydanego w 1998 roku, więc mój całkowity wynik to 2006. Moja przesłana odpowiedź powinna wyglądać mniej więcej tak:

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

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

Najniższy wynik wygrywa!

Adám
źródło
14
Jestem głęboko zaniepokojony weryfikowalnością odpowiedzi.
Dennis
1
@ Dennis Rozumiem, że się martwisz. Jednak 1) odpowiedzi będą w większości bardzo proste, a zatem mogą zostać zweryfikowane ręcznie - nie wymagając faktycznego działania systemu, oraz 2) niektórzy użytkownicy podeszli do linkowania do dokumentacji swojego roszczenia.
Adám
8
Nie jestem pewien, czy „zweryfikowany ręcznie” będzie konieczny w przypadku niektórych odpowiedzi - przeszłość jest obcym miejscem, a czasem w początkowych wersjach rzeczy może brakować rzeczy, które
wydają się
1
@ Sp3000 Może, ale i tak to wszystko jest dla zabawy, a przy 8 odpowiedziach i 9 pozytywnych opiniach w 1,5 godziny, myślę, że to wyzwanie jest wystarczająco zabawne, zaakceptuj, że ktoś może oszukać. Może jakieś dodatkowe badania dotyczące ostatecznego zwycięzcy ...
Adám,
1
@CatsAreFluffy Pomysł polegał na pokazaniu, że którykolwiek z tych formatów jest prawidłowy. Myślę, że przypadki są nieliczne i wystarczająco proste, więc łatwość kopiowania i wklejania nie stanowi problemu.
Adám,

Odpowiedzi:

7

APL \ 360, 1968 + 3 bajty = 1971

⎕⍵⎕

Wbudowane z samouczka @NBZ połączone z. Nie wiem dlaczego @NBZ powiedział, że wynik w 1970 roku, ponieważ APL \ 360 nie został wdrożony do 1968 roku, a wcześniej APLS jak APL \ 1130 nie posiada funkcji przyrostek wektorowych (patrz strona 208 tutaj ).

lirtosiast
źródło
8

Później 1970 + 38 = 2008

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

użycie: 7 3 sdrukuje „0 0 0 0 -1 -1 -1”

AShelly
źródło
Teraz rozmawiamy!
Adám
Dlaczego -1? filler +
CalculatorFeline
2
To jedna z bardziej interesujących wartości, które widziałem ostatnio.
user3490,
Czy istnieje dobry powód, dla którego jest to nazwane, sva nie inne s, czy może jeden bajt?
kot
8

APL, 1968 + 5 = 1973

Do 5 znaków:

⌽⎕≥⍳⎕

Starsza wersja:

⌽⎕↑⎕⍴1

Cóż, właściwie już udzieliłeś odpowiedzi, właśnie usunąłem definicję funkcji dynamicznej i sprawdziłem, czy ta zadziałała w 1968 roku. W celach informacyjnych znajduje się instrukcja:

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

Moris Zucca
źródło
Dzieci, to się nazywa zwycięzca . Zapisz to w swoich notatkach.
CalculatorFeline
@CatsAreFluffy Jeszcze nie. @ Moris Zucca: Wreszcie, ale tak naprawdę możesz zagrać w golfa w połowie tych bajtów. Czy potrafisz wymyślić, jak? Również tutaj jest znacznie bardziej nowoczesny i czytelny wersja podręcznika.
Adám
7

SAS, 1966 + 45 = 2011

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

Czas zabłysnąć SAS!

SAS nie został opublikowany po raz pierwszy przed 1972 r., Ale w tym kroku danych wykorzystano tylko bardzo podstawowe funkcje, które - jestem przekonany - byłyby dostępne nawet w najwcześniejszych wersjach przedpremierowych od 1966 r., Więc uważam, że to zadziałałoby. Wejście idzie poa= i b=, a wyjście jest drukowany w dzienniku.

Byłbym zaskoczony, gdyby ktoś nadal miał IBM System / 360 z odpowiednią wersją SAS, aby to zweryfikować!

użytkownik3490
źródło
Teraz, gdybym tylko miał gotówkę na licencję SAS na komputer mainframe ...
3490
5

Mysz-1979 , 1979 + 19 = 1998

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

Tłumaczenie: Forth .

Specyfikacja jest dla mnie naprawdę tajemnicza, ale myślę, że to dobrze.

kot
źródło
Uszkodzony link ....
CalculatorFeline
@CatsAreFluffy Naprawiono; Wpisałem to z pamięci.
kot
Ciekawy. Ale nie sądzę, że &Tuckbył dostępny do wersji 2002. A pętle wydają się być nieskończone.
AShelly,
4

TI-Basic, 1990 + 21 = 2011

Pierwszym kalkulatorem TI, na którym działa ten program, jest TI-81, wprowadzony w 1990 roku.

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

Edytować: zauważyłem, że muszę obsługiwać pustą listę ... zwiększony kod o 4 bajty

Przypadki testowe

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
Timtech
źródło
Czy możesz dodać komentarz na temat tego, które części źródła są pojedynczymi bajtami w TI-Basic? Myślę, że obejmuje to Monit i sekw. (Ale nie jestem pewien co do reszty
Sparr
Nie rozważamy zwrotu za Anspomocą akceptowalnej metody wydruku, chyba że zostanie wydrukowana.
lirtosiast
@Sparr Pewnie, Prompti seq(są jednobajtowymi tokenami, a pozostałe znaki są jednobajtowe.
Timtech,
@lirtosiast Ansto domyślny sposób na zwrócenie wartości w serii TI-83 Basic. Dodatkowo po uruchomieniu programu ostatni wiersz jest drukowany automatycznie. Więc masz to, co najlepsze z obu światów.
Timtech,
2
Czy to silnik analityczny? Ktoś powinien to zrobić ...
CalculatorFeline
4

Mathematica 1.0, 1988 + 22 bajtów = 2010

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

Nie jestem pewien, czy to działa, właśnie przejrzałem dokumentację 10.3 i szukałem rzeczy, które powiedział Wprowadzony w 1988 roku (1.0)

CalculatorFeline
źródło
Prawie o aktualnym zwycięzcy. Gdyby tylko kod SMP mógł być krótszy ...
CalculatorFeline
Na innej notatki, choć niektóre docs: pure funkcje , /.oraz-> ,Array
SP3000
4

68k TI-Basic, 1995 + 25 = 2020

Pierwszym kalkulatorem TI, na którym działa ten program, jest TI-92, wprowadzony w 1995 roku.

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

W przeciwieństwie do serii TI-83, 68k TI-Basic obsługuje pustą listę.

Timtech
źródło
Jak liczony jest rozmiar? Tokenizacja jest zupełnie inna w serii 68k.
lirtosiast
Monit i seq to dwa bajty plus flaga jednobajtowa dla wielu argumentów. (21 bajtów)
Timtech,
Zauważ, że nie jest to ani program, ani funkcja w kontekście kalkulatorów 68k: Promptjest niepoprawna w funkcji i program nie może zwrócić wartości. Należy to wprowadzić na ekranie głównym. Z drugiej strony define f(a,b)=seq(x>a-b,x,1,a)definiuje poprawną funkcję, której można nadać argumenty aib jako argumenty. (Zweryfikowane na moim TI-92 od 1995-09-13)
Fox
Posiadam kilka kalkulatorów TI (jedyną wersją Z80 jest 81), ale zwykle używam TI-92 Plus. Po uruchomieniu tego definei wywołaniu f(2,1)lub podobnym w celu tokenizacji rozmiar zgłoszony przez system operacyjny wynosi 25 bajtów.
Fox
3

Python 1.0, 1994 + 26 = 2020

Zaoszczędzono 2 bajty dzięki DSM.

Lambda została wprowadzona wraz z pierwszą dużą wersją, 1.0

lambda a,b:[0]*(a-b)+[1]*b
Morgan Thrapp
źródło
1
Potwierdzona lambda wprowadzona w 1.0, powtórzenie listy (sekwencji) w 0.9.2 . Najstarsza wersja, na której mogłem to przetestować (oprócz 0.9.1) to 1.5.2 , i tam działa dobrze.
Sp3000,
@ Sp3000 Oh wow, to niesamowite. Próbowałem znaleźć dzienniki zmian, które potwierdziłyby, że powtórzenie sekwencji było w języku tak wcześnie.
Morgan Thrapp,
3

MATL , 2015 + 1 + 4 = 2020

:P<~

Działa to od wersji 6.0.0 języka (wykorzystuje niejawne dane wejściowe, które zostały wprowadzone w tej wersji) z dnia 31 grudnia 2015 r.

Dodałem 1do wyniku zgodnie z komentarzem @drolex na temat możliwie różnych lokalizacji.

Wypróbuj online!

Wyjaśnienie

:    % 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
Luis Mendo
źródło
4
Dzień później i ...
Adám,
2
Sprzeciw! Będziemy potrzebować ustawień regionalnych dla serwera github i osoby wysyłającej wydanie. Jeśli jeden znajduje się na Tonga, a drugi na Hawajach, liczba ta może wymagać zwiększenia.
drolex,
@drolex OP powinien dokładnie zdefiniować, co rozumie przez „rok”. Tymczasem dodaję 1 do mojego wyniku
Luis Mendo
@DonMuesli Nie miałem tego na myśli, tylko pokazując potencjalne ograniczenia tego typu punktacji
drolex
@drolex Oh, myślałem, że mówisz poważnie. W każdym razie poprosiłem OP. Data na Githubie prawdopodobnie powinna być uznana za oficjalną
Luis Mendo
3

J, 1990 + 8 = 1998

|.a{.b#1

Argh. Badałem tę odpowiedź i ktoś dotarł do APL, zanim mogłem mieć nadzieję na zrozumienie języka. Zamiast tego oto moje rozwiązanie J.

Simon Major
źródło
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).

Zastosowanie: a(7,3,L). połączy się Lz [0,0,0,0,1,1,1].

Nie jestem do końca pewien, kiedy iszostał zaimplementowany w tym języku, i wątpię, czy naprawdę możesz znaleźć dokładną datę. Jest to dość podstawowe wbudowane, więc zakładam, że już istniało, kiedy język pojawił się w 1972 roku .

Ale to nie ma znaczenia, ale daleko mi do wygrania z tą odpowiedzią.

Fatalizować
źródło
To może nie być zwycięzca, ale wyraźnie ilustruje zaletę odkrywania - ehm - dojrzałych języków ...
Adám
2

SMP , 1983 + 28 bajtów = 2011

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

Myślę, że mam rację ... S: 2.10, strona 48 Ar: 7.1, strona 102 Map : 7.2, strona 106 $1: 7.1, strona 104

A jeśli znasz Mathematica, nie, Arto nie działa w ten sposób . Bardziej jak Range+ Select.

CalculatorFeline
źródło
(#>x&/.x->#)/@Range[#+#2]&in Mathematica
CalculatorFeline
Mam na myśli(#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline
2

Vim, 1991 + 21 = 2012

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

Dane wejściowe wyglądają tak:

7
3

Wyjście wygląda następująco:

0000111

Wyjaśnienie:

"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'
DJMcMayhem
źródło
Szkoda, że ​​vi nie obsługuje rejestrów, ponieważ został wydany w 1976 roku!
DJMcMayhem
Wyjaśnienie proszę?
CalculatorFeline
2

B , 1971 + 54 = 2025

s(l,t){while(t<l--)printn(0,8);while(t--)printn(1,8);}

Patrz „ Odniesienie użytkownika do B ”, aby uzyskać podręcznik dla tego bez typowego prekursora C.

AShelly
źródło
2

Pyth, 2015 + 9 4 = 2024 2019

Dzięki @FryAmTheEggman za pomoc!

gRQE

Wypróbuj tutaj!

Wyjaśnienie

gRQE # Q = ilość końcowych prawdziwych wartości
        # E = długość wektora
 Mapa RE # poza zakresem (E)
g Q # d> = Q
Denker
źródło
2

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

bi apowinny być dostarczone bezpośrednio na stosie -v, w odwrotnej kolejności.

Dane wyjściowe nie są oddzielone spacją, jak w przykładach, ale nie wydaje się to sprzeczne z żadną określoną regułą. Używa 0 i 1 do reprezentowania fałszu i prawdy, zgodnie z językiem.

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

Nie działa z bieżącą wersją, ponieważ ?teraz pobiera wartość testową ze stosu.

Nie jestem pewien, czy każda funkcja została wdrożona od pierwszego dnia, -vna przykład mogła być dostarczona później jako towar. Postaram się upewnić, że moja odpowiedź jest poprawna w ten weekend.

Aaron
źródło
1
? nie wyskoczył (dawno temu), jak stwierdzono w quine wyzwanie
CalculatorFeline
Dzięki, to świetna wiadomość, zaoszczędzę 1 bajt :) Będę to teraz edytować, ale będę musiał sprawdzić zasoby połączone na esolang.org, niektóre pochodzą z co najmniej 2011 roku.
Aaron
Quine wyzwanie i esolang
CalculatorFeline
Dzięki za pomoc, nie pomyślałbym, żeby sprawdzić wersje wiki! Jestem obecnie w pracy i prawdopodobnie nie będę jeszcze w stanie wszystkiego sprawdzić, ale zrobię to dziś wieczorem lub jutro.
Aaron,
Wynik = teraz 2026.
CalculatorFeline
1

PowerShell v1, 2006 + 28 = 2034

param($a,$b),0*($a-$b)+,1*$b

Używa operatora przecinka do konstruowania tablic, które były w PowerShell od samego początku.

AdmBorkBork
źródło
1

Mathcad, 1998 + 42 = 2040

„bajty” są interpretowane jako liczba różnych znaków klawiatury (np. operator „for” (w tym jedna linia programowania) to pojedynczy znak ctl-shft- # lub kliknięcie na pasku narzędzi Programowanie).

Powyższa liczba bajtów zakłada, że ​​definicje aib nie liczą się do sumy; dodaj 4 bajty dla definicji, jeśli to założenie jest nieprawidłowe.

Pokazana poniżej wersja funkcji dodaje 5 bajtów dla definicji i kolejne 3 bajty dla każdego użycia (zakładając, że wartości a i b są wpisywane bezpośrednio).

Ponieważ moje rozwiązanie Mathcad powinno wyraźnie rozgrywać czerwone koszulki, a nie konkurencyjne, dodałem tabelę rozwiązań. Zauważ, że ponieważ Mathcad nie ma pustej tablicy, użyłem zamiast tego pustego łańcucha („”); Użyłem 0, aby wskazać, gdzie nie obliczałem par b> a.

enter image description here

Stuart Bruff
źródło
Bardzo interesujące!
Timtech,
1

PHP, 1995 + 56 bajtów = 2051

function s($a,$b){while($i++<$a)$v[]=$i>$a-$b;return$v;}
Widok rozstrzelony
function s($a,$b) {
  while ($i++ < $a) $v[] = $i > $a - $b;
  return $v;
}
ricdesi
źródło
Uh .. istnieje punktacja niestandardowa. To wok z pierwszego roku w liczbie bajtów + .
CalculatorFeline,
Ups, racja! Naprawianie ...
ricdesi,
Przyjęcie prawdopodobnie niepoprawnego założenia, że ​​działa w PHP 1. Wkrótce zweryfikuje wersję.
ricdesi
1

JavaScript ES6, 2015 + 46 = 2061

Zwraca tablicę 0 i 1

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

JavaScript ES6, 2015 + 50 = 2065

Zwraca ciąg znaków 0i 1znaki

(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)}
Qwertiy
źródło
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.

Simon Major
źródło
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.

Giuseppe
źródło
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
snail_
źródło