Buon vecchio suffisso vettoriale


17

Ispirato a un vecchio manuale ...

La sfida

Definisco l' un th suffisso vettore b come la lista booleana di lunghezza una con b trascinamento valori truthy.

Scrivere un programma o una funzione che, dato un e b con qualsiasi mezzo, restituisce l' una esimo suffisso di vettore di B con qualsiasi mezzo.

Ora questo può sembrare banale, ma ecco il problema: il tuo punteggio è il conteggio dei byte più l'anno in cui la tua soluzione avrebbe funzionato.

Regole

È possibile utilizzare tutte le regole standard, ad eccezione delle lingue e delle versioni linguistiche rilasciate dopo questa sfida.

Output utilizzando qualsiasi rappresentazione di valori booleani utilizzati dalla tua lingua, ad esempio 1/ 0, True/ False, TRUE/ FALSE, "True"/ "False", ecc.

Uscita utilizzando qualsiasi rappresentazione di liste che il vostro usi linguistici, per esempio 0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}, etc.

Si può presumere che ab sia sempre vero e che siano di un tipo di dati appropriato.

Casi test

Dato a = 7 e b = 3, ritorno0 0 0 0 1 1 1

Dato a = 4 eb = 4, ritorno[True,True,True,True]

Dato a = 2 eb = 0, restituisce(FALSE;FALSE)

Dato a = 0 eb = 0, restituisce{}

Esempio di soluzione e punteggio

Potrei voler inviare la soluzione {⌽⍺↑⍵⍴1}utilizzando Dyalog APL. Sarebbe un totale di 8. Questa è una funzione dinamica, che funziona dalla versione 8.1 di Dyalog APL, rilasciata nel 1998, quindi il mio punteggio totale è 2006. La mia risposta inviata dovrebbe assomigliare a:

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

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

Il punteggio più basso vince!


14
Sono profondamente preoccupato per la verificabilità delle risposte.
Dennis,

1
@Dennis, capisco che ti preoccupi. Tuttavia, 1) le risposte saranno per lo più molto semplici, e quindi potrebbero essere verificate a mano - non richiedono un vero sistema in esecuzione, e 2) alcuni utenti hanno preso il collegamento alla documentazione del loro reclamo.
Adám,

8
Non sono così sicuro che "verificato a mano" funzionerà necessariamente per alcune risposte - il passato è un luogo estraneo, e talvolta le versioni iniziali delle cose possono mancare di cose che oggi
sembrano

1
@ Sp3000 Forse, ma questo è comunque tutto per divertimento, e con 8 risposte e 9 voti in 1,5 ore, penso che questa sfida sia abbastanza divertente da accettare che qualcuno potrebbe imbrogliare. Forse qualche ricerca extra sull'eventuale vincitore ...
Adám

1
@CatsAreFluffy L'idea era quella di dimostrare che uno di quei formati è valido. Penso che i casi siano pochi e abbastanza semplici che la facilità di copia-incolla non è un problema.
Adám,

Risposte:


7

APL \ 360, 1968 + 3 byte = 1971

⎕⍵⎕

Un builtin dal tutorial @NBZ collegato a. Non so perché @NBZ abbia detto che avrebbe ottenuto il 1970, perché APL \ 360 non è stato implementato fino al 1968, e APL precedenti come APL \ 1130 non avevano la funzione vettoriale suffisso (vedi pagina 208 di qui ).



8

APL, 1968 + 5 = 1973

Fino a 5 caratteri:

⌽⎕≥⍳⎕

Versione precedente:

⌽⎕↑⎕⍴1

Bene, in realtà hai già dato la risposta, ho appena rimosso la definizione della funzione dinamica e ho verificato che funzionasse nel 1968. Per riferimento ecco il manuale:

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


Ragazzi, questo si chiama vincitore . Per favore scrivilo nei tuoi appunti.
Calcolatrice

@CatsAreFluffy Non ancora. @ Moris Zucca: Finalmente, ma in realtà puoi golf metà di quei byte di distanza. Riesci a capire come? Inoltre, ecco una versione molto più moderna e leggibile del manuale.
Adám,

7

SAS, 1966 + 45 = 2011

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

È tempo che splenda SAS!

SAS non è stato pubblicato per la prima volta fino al 1972, ma questo passaggio di dati utilizza solo funzionalità di base che sono abbastanza fiducioso che sarebbero state disponibili anche nelle prime versioni preliminari dal 1966 in poi, quindi credo che avrebbe funzionato allora. L'input segue a=e b=, e l'output viene stampato nel registro.

Sarei sorpreso se qualcuno avesse ancora un IBM System / 360 con la giusta versione di SAS per verificarlo davvero!



Ora, se solo avessi i soldi per una licenza SAS mainframe ...
user3490

5

Mouse-1979 , 1979 + 19 = 1998

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

Traduzione di: Forth .

Le specifiche sono davvero enigmatiche per me, ma penso che questo faccia la cosa giusta.


Collegamento interrotto ....
CalculatorFeline

@CatsAreFluffy Fixed; L'ho digitato dalla memoria.
gatto

Interessante. Ma non credo che &Tuckfosse disponibile fino alla versione 2002. E i loop sembrano essere infiniti.
AShelly,

4

TI-Basic, 1990 + 21 = 2011

Il primo calcolatore TI su cui funziona questo programma è il TI-81, introdotto nel 1990.

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

Modifica: notato che devo supportare un elenco vuoto ... codice aumentato di 4 byte

Casi test

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

Potresti aggiungere commenti su quali parti della sorgente sono byte singoli in TI-Basic? Penso che includa Prompt e seq (ma non sono sicuro del resto
Sparr

Non prendiamo in considerazione la possibilità di restituire Ansun metodo di output accettabile, a meno che non sia stampato.
Lirtosiast

@Sparr Certo, Prompte seq(sono token a un byte e gli altri caratteri sono ciascuno a un byte.
Timtech,

@lirtosiast Ansè il modo predefinito per restituire un valore nella serie TI-83 Basic. Inoltre, quando viene eseguito un programma, l'ultima riga viene stampata automaticamente. Quindi hai il meglio di entrambi i mondi.
Timtech,

2
È il motore analitico? Qualcuno dovrebbe farlo ...
CalculatorFeline

4

Mathematica 1.0, 1988 + 22 byte = 2010

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

Non sono sicuro che funzioni, ho appena esaminato la documentazione sulla 10.3 e ho cercato cose che dicevano Introdotto nel 1988 (1.0)


Quasi l'attuale vincitore. Se solo il codice SMP potesse ridursi ...
CalculatorFeline

In un'altra nota, però, alcuni documenti: le funzioni pure , /.e-> ,Array
SP3000

4

68k TI-Basic, 1995 + 25 = 2020

Il primo calcolatore TI su cui funziona questo programma è il TI-92, introdotto nel 1995.

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

A differenza della serie TI-83, 68k TI-Basic supporta l'elenco vuoto.


Come viene contata la dimensione? La tokenizzazione è molto diversa sulla serie 68k.
lirtosiast

Prompt e seq sono entrambi due byte più un flag di un byte per più argomenti. (21 byte)
Timtech,

Si noti che questo non è né un programma né una funzione nel contesto dei calcolatori 68k: Promptnon è valido in una funzione e un programma non può restituire un valore. Quindi questo deve essere inserito nella schermata principale. D'altra parte, define f(a,b)=seq(x>a-b,x,1,a)definisce una funzione valida che può essere data aeb come argomenti. (Verificato sulla mia TI-92 dal 1995-09-13)
Fox

Possiedo diversi calcolatori TI (l'unica versione z80 è l'81), ma di solito uso una TI-92 Plus. Dopo aver eseguito questo definee chiamato f(2,1)o simile per tokenize, la dimensione segnalata dal sistema operativo è di 25 byte.
Fox,

3

Python 1.0, 1994 + 26 = 2020

Salvato 2 byte grazie a DSM.

Lambda è stato introdotto con la prima versione principale, 1.0

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

1
Lambda confermato introdotto in 1.0, ripetizione elenco (sequenza) in 0.9.2 . La versione più vecchia su cui ho potuto provare questo (tranne 0.9.1) era 1.5.2 , e funziona benissimo lì.
Sp3000,

@ Sp3000 Oh wow, è fantastico. Ho cercato di trovare alcuni registri delle modifiche per confermare che la ripetizione della sequenza era nella lingua così presto.
Morgan Thrapp,

3

MATL , 2015 + 1 + 4 = 2020

:P<~

Funziona dalla versione 6.0.0 della lingua (utilizza input implicito, introdotto in quella versione), datato 31 dicembre 2015.

Ho aggiunto 1al punteggio in conformità con il commento di @drolex su possibili locali diversi.

Provalo online!

Spiegazione

:    % 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
Un giorno dopo, e ...
Adám,

2
Obiezione! Dovremo disporre delle impostazioni locali per il server github e il mittente del rilascio. Se uno è a Tonga e l'altro alle Hawaii, potrebbe essere necessario aumentare questo conteggio.
drolex,

@drolex L'OP dovrebbe definire esattamente cosa intende per "anno". Nel frattempo, aggiungo 1 al mio punteggio
Luis Mendo il

@DonMuesli Non intendevo questo, mostrando solo i potenziali limiti di questo tipo di punteggio
drolex

@drolex Oh, pensavo fossi serio. Ho chiesto al PO, comunque. La data di Github dovrebbe probabilmente essere considerata ufficiale
Luis Mendo il

3

J, 1990 + 8 = 1998

|.a{.b#1

Argh. Stavo cercando questa risposta e qualcuno arrivò all'APL prima che potessi sperare di capire la lingua. Ecco invece la mia soluzione J.


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).

Utilizzo: a(7,3,L). si unificherà Lcon [0,0,0,0,1,1,1].

Non sono proprio sicuro di quando sia isstato implementato nella lingua e dubito che tu possa effettivamente trovare la data esatta. È un built-in piuttosto semplice anche se quindi presumo che fosse già esistente quando la lingua apparve per la prima volta nel 1972 .

Non importa che sia davvero importante, sono tutt'altro che vincente con questa risposta.


Questo potrebbe non essere il vincitore, ma illustra chiaramente il vantaggio di esplorare - ehm - lingue mature ...
Adám

2

SMP , 1983 + 28 byte = 2011

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

Penso di aver capito bene ... S: 2.10, pagina 48 Ar: 7.1, pagina 102 Map : 7.2, pagina 106 $1: 7.1, pagina 104

E se si ha familiarità con Mathematica, no, Arnon funziona come quella . Più come Range+ Select.


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

Voglio dire(#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline

2

Vim, 1991 + 21 = 2012

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

L'input è simile al seguente:

7
3

E l'output è simile al seguente:

0000111

Spiegazione:

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

Peccato che vi non supporti i registri, perché è stato rilasciato nel 1976!
DJMcMayhem

Spiegazione per favore?
Calcolatrice


2

Pyth, 2015 + 9 4 = 2024 2019

Grazie a @FryAmTheEggman per il suo aiuto!

gRQE

Provalo qui!

Spiegazione

gRQE # Q = quantità di valori di verità finali finali
        # E = lunghezza del vettore
 RE # map over range (E)
g Q # d> = Q

2

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

be adovrebbe essere fornito direttamente in pila con -v, in ordine inverso.

L'output non è separato dallo spazio come negli esempi, ma ciò non sembra andare contro alcuna regola dichiarata. Usa 0 e 1 per rappresentare falso e vero, come usato dalla lingua.

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

Non funziona con la versione corrente poiché ?ora estrae il suo valore di test dallo stack.

Non sono sicuro che ogni funzionalità sia stata implementata dal primo giorno, -vad esempio potrebbe essere stata fornita in seguito come merce. Cercherò di assicurarmi che la mia risposta sia corretta questo fine settimana.


1
? non è apparso (molto tempo fa) come affermato nella sfida delle quine
CalculatorFeline

Grazie, questa è una grande notizia, risparmierò 1 byte :) Lo modificherò ora, ma dovrò controllare le risorse collegate su esolang.org, alcune risalgono almeno al 2011.
Aaron


Grazie per il tuo aiuto, non avrei pensato di controllare le revisioni del wiki! Sono attualmente al lavoro e probabilmente non sarò ancora in grado di controllare tutto, ma mi assicurerò di farlo stasera o domani.
Aaron,

Punteggio = 2026 ora.
Calcolatrice



1

Mathcad, 1998 + 42 = 2040

i "byte" sono interpretati come numero di caratteri della tastiera distinti (ad esempio, l'operatore "for" (inclusa una riga di programmazione) è un singolo carattere ctl-shft- # o un clic sulla barra degli strumenti di programmazione)).

Il conteggio dei byte sopra presuppone che le definizioni aeb non contino per il totale; aggiungere 4 byte per le definizioni se questo presupposto non è valido.

La versione della funzione mostrata di seguito aggiunge 5 byte per la definizione e altri 3 byte per ciascun utilizzo (presupponendo che i valori a e b siano digitati direttamente).

Dato che la mia soluzione Mathcad dovrebbe chiaramente giocare con le magliette rosse e non con quelle da competizione, ho aggiunto una tabella di soluzioni. Nota che poiché Mathcad non ha un array vuoto, ho usato invece una stringa vuota (""); Ho usato 0 per indicare dove non ho calcolato le coppie b> a.

enter image description here


Molto interessante!
Timtech,

1

PHP, 1995 + 56 byte = 2051

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

Ecco il punteggio personalizzato. È la lingua del primo anno che si attiva nel conteggio dei byte + .
Calcolatrice

Whoops, hai ragione! Riparazione ...
ricdesi

Fare il presupposto probabilmente errato di questo funzionamento in PHP 1. Verificherà presto la versione.
Ricdesi,

1

Javascript ES6, 2015 + 46 = 2061

Restituisce una matrice di 0 e 1

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

Javascript ES6, 2015 + 50 = 2065

Restituisce una stringa di 0e 1caratteri

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

Javascript, 1995 + 61 = 2056

Restituisce una stringa di 0e 1caratteri

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

Crea un elenco di b Valori reali e lo concatena in un elenco di (ab) Valori falsi.


0

R , 20 byte + 1993 = 2013

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

Provalo online!

Forse questo potrebbe funzionare in S, il che lascerebbe cadere il punteggio al 2008, ma non sono stato in grado di verificarlo.


0

SmileBASIC 3, 2014 + 25 = 2039

La prima versione pubblicamente disponibile di SmileBASIC 3 è stata lanciata in Giappone con l'app SmileBASIC per Nintendo 3DS nel novembre 2014.

Stampa una stringa in cui 0 è falso e 1 è vero (poiché sono nella lingua stessa).

INPUT A,B?"0"*(A-B)+"1"*B
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.