Vetor antigo bom sufixo

17

Inspirado em um manual antigo ...

O desafio

Defino a um th sufixo vector de b como a lista booleano de comprimento um com b valores truthy de fuga.

Escrever um programa ou função que, dado um e b , por qualquer meio, retorna a um th sufixo vector de b , por qualquer meio.

Agora, isso pode parecer trivial, mas aqui está o problema: sua pontuação é a contagem de bytes mais o primeiro ano em que sua solução teria funcionado.

Regras

Todas as regras padrão se aplicam, exceto que os idiomas e versões de idiomas lançados após esse desafio também podem ser usados.

Saída usando qualquer representação de valores booleanos que seu usos da linguagem, por exemplo, 1/ 0, True/ False, TRUE/ FALSE, "True"/ "False", etc.

Saída usando qualquer representação de listas que o seu usos da linguagem, por exemplo 0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}, etc.

Você pode supor que ab seja sempre verdadeiro e que eles sejam de um tipo de dados apropriado.

Casos de teste

Dado a = 7 eb = 3, retorne0 0 0 0 1 1 1

Dado a = 4 eb = 4, retorne[True,True,True,True]

Dado a = 2 eb = 0, retorne(FALSE;FALSE)

Dado a = 0 eb = 0, retorne{}

Solução e pontuação de exemplo

Talvez eu queira enviar a solução {⌽⍺↑⍵⍴1}usando o Dyalog APL. Isso seria um número mínimo de 8. Esta é uma função dinâmica, que funciona a partir da versão 8.1 do Dyalog APL, lançada em 1998, então minha pontuação total é 2006. Minha resposta enviada deve ser semelhante a:

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

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

Menor pontuação ganha!

Adão
fonte
14
Estou profundamente preocupado com a verificabilidade das respostas.
217 Dennis
1
@ Dennis eu entendo sua preocupação. No entanto, 1) as respostas serão, na maioria das vezes, muito simples e, portanto, podem ser verificadas manualmente - sem a necessidade de um sistema em execução real; e 2) alguns usuários adotaram o link para a documentação de sua reivindicação.
Adám 10/03/16
8
Eu não estou tão certo "verificado à mão" é necessariamente vai funcionar para algumas respostas - o passado é um país estrangeiro, e às vezes as versões iniciais de coisas pode faltar coisas que sente comum hoje em dia ...
SP3000
1
@ Sp3000 Talvez, mas tudo isso é divertido de qualquer maneira, e com 8 respostas e 9 upvotes em 1,5h, acho que esse desafio é divertido o suficiente para aceitar que alguém possa trapacear. Talvez alguma pesquisa extra sobre o eventual vencedor ...
Adám 10/03/16
1
@CatsAreFluffy A ideia era mostrar que qualquer um desses formatos é válido. Eu acho que os casos são poucos e simples o suficiente para que a facilidade de copiar e colar não seja um problema.
Adám 10/03/16

Respostas:

7

APL \ 360, 1968 + 3 bytes = 1971

⎕⍵⎕

Um builtin do tutorial @NBZ vinculado a. Eu não sei por que @NBZ disse que vai marcar 1970 porque APL \ 360 não foi implementado até 1968, e APLs anteriores como APL \ 1130 não têm a função sufixo vetor (ver página 208 do aqui ).

lirtosiast
fonte
8

Quarto, 1970 + 38 = 2008

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

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

AShelly
fonte
Agora estamos a falar!
Adám 10/03/16
Por que -1? enchimento +
CalculatorFeline
2
Esse é um dos valores mais interessantes que eu já vi ultimamente.
user3490
Existe uma boa razão para isso ser nomeado sve não s, ou algo mais um byte?
cat
8

APL, 1968 + 5 = 1973

Até 5 caracteres:

⌽⎕≥⍳⎕

Versão antiga:

⌽⎕↑⎕⍴1

Bem, você já deu a resposta, acabei de remover a definição da função dinâmica e verifiquei se essa funcionava em 1968. Para referência, aqui está o manual:

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

Moris Zucca
fonte
Crianças, isso é chamado de vencedor . Por favor, escreva isso nas suas anotações.
CalculatorFeline
@CatsAreFluffy Ainda não. @ Moris Zucca: Finalmente, mas você pode realmente jogar metade desses bytes de distância. Você pode descobrir como? Além disso, aqui está uma versão muito mais moderna e legível do manual.
Adám 11/03/16
7

SAS, 1966 + 45 = 2011

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

Hora do SAS brilhar!

O SAS não foi publicado pela primeira vez até 1972, mas essa etapa de dados usa apenas recursos muito básicos que, estou bastante confiante, estariam disponíveis mesmo nas primeiras versões de pré-lançamento a partir de 1966, por isso acredito que teria funcionado. A entrada é posterior a=e b=, e a saída é impressa no log.

Eu ficaria surpreso se alguém ainda tivesse um IBM System / 360 com a versão correta do SAS para realmente verificar isso!

user3490
fonte
Agora, se eu tivesse o dinheiro para uma licença SAS de mainframe ...
user3490
5

Mouse-1979 , 1979 + 19 = 1998

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

Tradução de: Forth .

A especificação é realmente enigmática para mim, mas acho que isso faz a coisa certa.

gato
fonte
Ligação quebrada ....
CalculatorFeline
@CatsAreFluffy Fixed; Eu digitei de memória.
cat
Interessante. Mas acho que não &Tuckestava disponível até a versão de 2002. E os loops parecem ser infinitos.
AShelly
4

TI-Basic, 1990 + 21 = 2011

A primeira calculadora de TI em que este programa trabalha é a TI-81, lançada em 1990.

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

Edit: notei que devo suportar uma lista vazia ... aumento do código em 4 bytes

Casos de teste

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
fonte
Você poderia adicionar comentários sobre quais partes da fonte são bytes únicos no TI-Basic? Eu acho que inclui Prompt e seq (mas não tenho certeza sobre o resto
Sparr
Não consideramos retornar por Ansum método de saída aceitável, a menos que seja impresso.
lirtosiast
@Sparr Claro, Prompte seq(são tokens de um byte e os outros caracteres são um byte cada.
Timtech 10/03/16
@lirtosiast Ansé a maneira padrão de retornar um valor na TI-83 series Basic. Além disso, quando um programa é executado, a última linha é impressa automaticamente. Então você tem o melhor dos dois mundos.
Timtech 10/03/16
2
É o mecanismo analítico? Alguém deve fazer isso ...
CalculatorFeline
4

Mathematica 1.0, 1988 + 22 bytes = 2010

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

Não tenho certeza se isso funciona, apenas analisei a documentação na 10.3 e procurei por coisas que diziam Introduzido em 1988 (1.0)

CalculatorFeline
fonte
Apenas sobre o atual vencedor. Se somente o código SMP poderia ficar mais curto ...
CalculatorFeline
Em outra nota, porém, alguns documentos: funções puras , /.e-> ,Array
Sp3000 10/16/16
4

68k TI-Basic, 1995 + 25 = 2020

A primeira calculadora de TI em que este programa trabalha é a TI-92, lançada em 1995.

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

Ao contrário da série TI-83, o 68k TI-Basic suporta a lista vazia.

Timtech
fonte
Como é contado o tamanho? A tokenização é muito diferente na série 68k.
lirtosiast
Prompt e seq são dois bytes mais um sinalizador de um byte para vários argumentos. (21 bytes)
Timtech
Observe que este não é um programa nem uma função no contexto das calculadoras de 68k: Prompté inválido em uma função e um programa não pode retornar um valor. Portanto, isso deve ser inserido na tela inicial. Por outro lado, define f(a,b)=seq(x>a-b,x,1,a)define uma função válida que pode receber dados aeb como argumentos. (Verificado na minha TI-92 de 13/09/1995)
Fox
Eu possuo várias calculadoras de TI (a única versão z80 é a 81), mas geralmente uso uma TI-92 Plus. Depois de executar isso definee chamar f(2,1)ou semelhante a tokenizá-lo, o tamanho relatado pelo sistema operacional é de 25 bytes.
Fox
3

Python 1.0, 1994 + 26 = 2020

Economizou 2 bytes graças ao DSM.

O Lambda foi introduzido com o primeiro grande lançamento, 1.0

lambda a,b:[0]*(a-b)+[1]*b
Morgan Thrapp
fonte
1
Lambda confirmado introduzido em 1.0, repetição de lista (sequência) em 0.9.2 . A versão mais antiga em que eu pude testar isso (além da 0.9.1) foi a 1.5.2 , e funciona bem lá.
SP3000
@ Sp3000 Oh uau, isso é incrível. Eu tenho tentado encontrar alguns logs de alterações para confirmar que a repetição da sequência estava no idioma tão cedo.
Morgan Thrapp 10/03
3

MATL , 2015 + 1 + 4 = 2020

:P<~

Isso funciona desde o release 6.0.0 do idioma (ele usa entradas implícitas, introduzidas nesse release), com data de 31 de dezembro de 2015.

Eu adicionei 1para a pontuação de acordo com comentários @drolex on possivelmente diferentes localidades.

Experimente online!

Explicação

:    % 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
fonte
4
Um dia depois, e ...
Adám 10/03/16
2
Objeção! Precisamos ter os códigos de idioma do servidor github e do remetente da versão. Se um estiver em Tonga e o outro no Havaí, talvez seja necessário aumentar essa contagem.
Drolex
@drolex O OP deve definir exatamente o que ele quer dizer com "ano". Enquanto isso, eu estou adicionando 1 a minha pontuação
Luis Mendo
@DonMuesli Eu não quis dizer isso, apenas mostrando os potenciais limitações deste tipo de pontuação
drolex
@ Drolex Oh, eu pensei que você estava falando sério. Eu perguntei ao OP, de qualquer maneira. A data do Github provavelmente deve contar como oficial
Luis Mendo
3

J, 1990 + 8 = 1998

|.a{.b#1

Argh. Estava pesquisando esta resposta e alguém chegou à APL antes que eu pudesse entender a linguagem. Aqui está minha solução J.

Simon Major
fonte
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).

Uso: a(7,3,L). será unificado Lcom [0,0,0,0,1,1,1].

Eu realmente não tenho certeza quando is foi implementado no idioma e duvido que você possa encontrar a data exata. É um built-in bastante básico, então eu suponho que ele já existia quando o idioma apareceu pela primeira vez em 1972 .

Não que isso realmente importe, estou longe de ganhar com esta resposta.

Fatalizar
fonte
Isso pode não ser o vencedor, mas ilustra claramente a vantagem de explorar - ehm - idiomas maduros ...
Adám
2

SMP , 1983 + 28 bytes = 2011

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

Acho que entendi direito ... S: 2.10, página 48 Ar: 7.1, página 102 Map: 7.2, página 106 $1: 7.1, página 104

E se você estiver familiarizado com o Mathematica, não, Arnão funciona como que . Mais como Range+ Select.

CalculatorFeline
fonte
(#>x&/.x->#)/@Range[#+#2]&Em Mathematica
CalculatorFeline
Quero dizer(#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline
2

Vim, 1991 + 21 = 2012

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

A entrada fica assim:

7
3

E a saída é assim:

0000111

Explicação:

"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
fonte
Pena que o vi não suporta registros, porque foi lançado em 1976!
DJMcMayhem
Explicação, por favor?
CalculatorFeline
2

Pyth, 2015 + 9 4 = 2024 2019

Obrigado a @FryAmTheEggman por sua ajuda!

gRQE

Experimente aqui!

Explicação

gRQE # Q = quantidade de valores de verdade à direita
        # E = comprimento do vetor
 Mapa RE # acima do intervalo (E)
g Q # d> = Q
Denker
fonte
2

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

be adeve ser fornecido diretamente na pilha -v, na ordem inversa.

A saída não é separada por espaço, como nos exemplos, mas isso não parece contrariar nenhuma regra declarada. Ele usa 0 e 1 para representar falso e verdadeiro, conforme usado pelo idioma.

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

Ele não funciona com a versão atual, pois ?agora exibe seu valor de teste da pilha.

Não tenho certeza de que todos os recursos foram implementados desde o primeiro dia, -vpor exemplo, poderiam ter sido fornecidos posteriormente como uma mercadoria. Vou tentar garantir que minha resposta esteja correta neste fim de semana.

Aaron
fonte
1
? não pop (há muito tempo), conforme estabelecido no desafio Quine
CalculatorFeline
Obrigado, são ótimas notícias, vou economizar 1 byte :) Vou editar isso agora, mas vou ter que verificar os recursos vinculados no esolang.org, que datam de pelo menos 2011.
Aaron
Quine challenge e esolang
Calculadora,
Obrigado pela sua ajuda, eu não teria pensado em verificar as revisões do wiki! Atualmente, estou no trabalho e provavelmente não vou conseguir verificar tudo ainda, mas vou fazer isso hoje à noite ou amanhã.
Aaron
Pontuação = 2026 agora.
CalculatorFeline
1

PowerShell v1, 2006 + 28 = 2034

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

Usa o operador de vírgula para construir as matrizes que estão no PowerShell desde o início.

AdmBorkBork
fonte
1

Mathcad, 1998 + 42 = 2040

"bytes" são interpretados como número de caracteres distintos do teclado (por exemplo, o operador 'for' (incluindo uma linha de programação) é um único caractere ctl-shft- #, ou um clique na barra de ferramentas de programação)).

A contagem de bytes acima pressupõe que as definições aeb não contam para o total; adicione 4 bytes para definições se essa suposição for inválida.

A versão da função mostrada abaixo adiciona 5 bytes para a definição e mais 3 bytes para cada uso (assumindo que os valores a e b sejam digitados diretamente).

Como minha solução do Mathcad deveria estar claramente mostrando as camisetas vermelhas e não as da concorrência, adicionei uma tabela de soluções. Observe que, como o Mathcad não possui uma matriz vazia, usei uma string vazia (""); Usei 0 para indicar onde não calculei os pares b> a.

insira a descrição da imagem aqui

Stuart Bruff
fonte
Muito interessante!
Timtech 11/03/16
1

PHP, 1995 + 56 bytes = 2051

function s($a,$b){while($i++<$a)$v[]=$i>$a-$b;return$v;}
Vista expandida
function s($a,$b) {
  while ($i++ < $a) $v[] = $i > $a - $b;
  return $v;
}
ricdesi
fonte
Há pontuação personalizada. É o primeiro ano de woks de idiomas na contagem de + bytes .
CalculatorFeline
Opa, você está certo! Corrigindo ...
ricdesi 11/03/16
Fazendo a suposição provavelmente incorreta disso funcionando no PHP 1. Irá verificar a versão em breve.
Ricdesi
1

Javascript ES6, 2015 + 46 = 2061

Retorna matriz de 0 e 1

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

Javascript ES6, 2015 + 50 = 2065

Retorna uma sequência de caracteres 0e1

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

Javascript, 1995 + 61 = 2056

Retorna uma sequência de caracteres 0e1

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

k ( kona ), 1993 + 15 = 2008

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

Cria uma lista de b valores verdadeiros e concatena-a para uma lista de (ab) valores falsos.

Simon Major
fonte
0

R , 20 bytes + 1993 = 2013

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

Experimente online!

Possivelmente isso pode funcionar em S, o que reduziria a pontuação para 2008, mas não consegui verificar.

Giuseppe
fonte
0

SmileBASIC 3, 2014 + 25 = 2039

A primeira versão publicamente disponível do SmileBASIC 3 foi lançada no Japão com o aplicativo SmileBASIC para Nintendo 3DS em novembro de 2014.

Imprime uma sequência em que 0 é falso e 1 é verdadeiro (como estão no próprio idioma).

INPUT A,B?"0"*(A-B)+"1"*B
Caracol_
fonte