Bon vieux vecteur de suffixe

17

Inspiré d'un vieux manuel ...

Le défi

Je définis le a ème suffixe vecteur de b comme la liste booléenne de longueur a avec b des valeurs vraies de fin.

Écrivez un programme ou une fonction qui, étant donné a et b par n'importe quel moyen, retourne le a ème vecteur suffixe de b par n'importe quel moyen.

Cela peut sembler trivial, mais voici le problème: votre score est le nombre d'octets plus la première année de fonctionnement de votre solution.

Règles

Toutes les règles standard s'appliquent, sauf que les langues et les versions linguistiques publiées après ce défi peuvent également être utilisées.

Sortie utilisant n'importe quelle représentation des valeurs booléennes que votre langue utilise, par exemple 1/ 0, True/ False, TRUE/ FALSE, "True"/ "False", etc.

Sortie en utilisant un minimum de représentation des listes que votre utilisation de la langue, par exemple 0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}, etc.

Vous pouvez supposer que ab est toujours vrai et qu'ils sont d'un type de données approprié.

Cas de test

Étant donné a = 7 et b = 3, retournez0 0 0 0 1 1 1

Étant donné a = 4 et b = 4, retournez[True,True,True,True]

Étant donné a = 2 et b = 0, retournez(FALSE;FALSE)

Étant donné a = 0 et b = 0, retournez{}

Exemple de solution et de notation

Je voudrais peut-être soumettre la solution à l' {⌽⍺↑⍵⍴1}aide de Dyalog APL. Ce serait un bytecount de 8. Il s'agit d'une fonction dynamique, qui fonctionne à partir de la version 8.1 de Dyalog APL, sortie en 1998, donc mon score total est 2006. Ma réponse soumise devrait ressembler à ceci:

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

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

Le score le plus bas gagne!

Adam
la source
14
Je suis profondément préoccupé par la vérifiabilité des réponses.
Dennis
1
@Dennis Je comprends que vous vous inquiétiez. Cependant, 1) les réponses seront pour la plupart très simples, et pourraient donc être vérifiées à la main - ne nécessitant pas de système d'exploitation réel, et 2) certains utilisateurs ont pris un lien vers la documentation de leur réclamation.
Adám
8
Je ne suis pas sûr que "vérifié à la main" va nécessairement fonctionner pour certaines réponses - le passé est un lieu étranger, et parfois les versions initiales des choses peuvent manquer de choses qui
semblent
1
@ Sp3000 Peut-être, mais c'est tout pour le plaisir de toute façon, et avec 8 réponses et 9 votes positifs en 1,5h, je pense que ce défi est assez amusant accepter que quelqu'un puisse tricher. Peut-être quelques recherches supplémentaires sur l'éventuel vainqueur ...
Adám
1
@CatsAreFluffy L'idée était de montrer que l'un de ces formats est valide. Je pense que les cas sont peu nombreux et assez simples pour que la facilité de copier-coller ne soit pas un problème.
2016

Réponses:

7

APL \ 360, 1968 + 3 octets = 1971

⎕⍵⎕

Un intégré du tutoriel @NBZ lié à. Je ne sais pas pourquoi @NBZ a dit qu'il marquerait 1970, car APL \ 360 n'a été implémenté qu'en 1968, et les APL antérieures comme APL \ 1130 n'avaient pas la fonction de vecteur de suffixe (voir page 208 d' ici ).

lirtosiast
la source
8

Quatrième, 1970 + 38 = 2008

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

utilisation: 7 3 simprime "0 0 0 0 -1 -1 -1"

AShelly
la source
Nous parlons maintenant!
2016
Pourquoi -1? filler +
CalculatorFeline
2
C'est l'une des valeurs «véridiques» les plus intéressantes que j'ai vues récemment.
user3490
Y a-t-il une bonne raison pour laquelle ce nom est nommé svet non s, ou autre chose d'un octet?
cat
8

APL, 1968 + 5 = 1973

Jusqu'à 5 caractères:

⌽⎕≥⍳⎕

Ancienne version:

⌽⎕↑⎕⍴1

Eh bien, vous avez déjà donné la réponse, je viens de supprimer la définition de la fonction dynamique et de vérifier que celle-ci fonctionnait en 1968. Pour référence, voici le manuel:

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

Moris Zucca
la source
Enfants, c'est ce qu'on appelle un gagnant . Veuillez l'écrire dans vos notes.
CalculatorFeline
@CatsAreFluffy Pas encore. @ Moris Zucca: Enfin, mais vous pouvez réellement jouer à la moitié de ces octets. Pouvez-vous comprendre comment? En outre, voici une version beaucoup plus moderne et lisible du manuel.
Adám
7

SAS, 1966 + 45 = 2011

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

Il est temps que SAS brille!

SAS n'a été publié pour la première fois qu'en 1972, mais cette étape de données n'utilise que des fonctionnalités très basiques qui, je suis assez confiant, auraient été disponibles même dans les premières versions préliminaires à partir de 1966, donc je pense que cela aurait fonctionné à ce moment-là. L'entrée va après a=et b=, et la sortie est imprimée dans le journal.

Je serais étonné si quelqu'un avait encore un IBM System / 360 avec la bonne version de SAS pour vérifier cela!

user3490
la source
Now, if only I had the cash for a mainframe SAS licence...
user3490
5

Mouse-1979, 1979 + 19 = 1998

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

Translation of: Forth.

The spec is really cryptic to me but I think this does the right thing.

cat
la source
Broken link....
CalculatorFeline
@CatsAreFluffy Fixed; I typed it from memory.
cat
Interesting. But I don't think the &Tuck was available until the 2002 version. And the loops appear to be infinite.
AShelly
4

TI-Basic, 1990 + 21 = 2011

The first TI calculator that this program works on is the TI-81, introduced in 1990.

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

Edit: noticed that I must support an empty list... increased code by 4 bytes

Test Cases

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
la source
Could you add commentary on which parts of the source are single bytes in TI-Basic? I think that includes Prompt and seq( but I'm not sure about the rest
Sparr
We don't consider returning through Ans an acceptable output method, unless it's printed.
lirtosiast
@Sparr Sure, Prompt and seq( are one byte tokens and the other characters are one byte each.
Timtech
@lirtosiast Ans is the default way to return a value in the TI-83 series Basic. Additionally, when a program is run, the last line is printed automatically. So you have the best of both worlds.
Timtech
2
Is it the Analytical Engine? Somebody should do that...
CalculatorFeline
4

Mathematica 1.0, 1988+22 bytes=2010

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

I'm not sure if this works, just went through the documentation on 10.3 and looked for things that said Introduced in 1988 (1.0)

CalculatorFeline
la source
Just about the current winner. If only the SMP code could get shorter...
CalculatorFeline
On another note though, some docs: pure functions, /. and ->, Array
Sp3000
4

68k TI-Basic, 1995 + 25 = 2020

The first TI calculator that this program works on is the TI-92, introduced in 1995.

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

Unlike the TI-83 series, 68k TI-Basic supports the empty list.

Timtech
la source
How is the size counted? Tokenization is very different on the 68k series.
lirtosiast
Prompt and seq are both two bytes plus a one byte flag for multiple arguments. (21 bytes)
Timtech
Note that this is neither a program nor a function in the context of the 68k calculators: Prompt is invalid in a function, and a program can't return a value. So this has to be entered on the home screen. On the other hand, define f(a,b)=seq(x>a-b,x,1,a) does define a valid function that can be given a and b as arguments. (Verified on my TI-92 from 1995-09-13)
Fox
I own several TI calculators (the only z80-version being the 81), but usually use a TI-92 Plus. After running this define and calling f(2,1) or similar to tokenize it, the size reported by the OS is 25 bytes.
Fox
3

Python 1.0, 1994 + 26 = 2020

Saved 2 bytes thanks to DSM.

Lambda was introduced with the first major release, 1.0

lambda a,b:[0]*(a-b)+[1]*b
Morgan Thrapp
la source
1
Confirmed lambda introduced in 1.0, list (sequence) repetition in 0.9.2. The oldest version I could test this on (apart from 0.9.1) was 1.5.2, and it works fine there.
Sp3000
@Sp3000 Oh wow, that's awesome. I've been trying to find some change logs to confirm that the sequence repetition was in the language that early.
Morgan Thrapp
3

MATL, 2015 + 1 + 4 = 2020

:P<~

This works since release 6.0.0 of the language (it uses implicit input, which was introduced in that release), dated December 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
Luis Mendo
la source
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.

Simon Major
la source
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.

Fatalize
la source
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.

CalculatorFeline
la source
(#>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'
DJMcMayhem
la source
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
Denker
la source
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.

Aaron
la source
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
Quine challenge and esolang
CalculatorFeline
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

PowerShell v1, 2006 + 28 = 2034

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

Uses the comma operator to construct the array(s), which has been in PowerShell since the beginning.

AdmBorkBork
la source
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

Stuart Bruff
la source
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;
}
ricdesi
la source
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)}
Qwertiy
la source
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
la source
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
la source
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_
la source