Buen viejo vector de sufijo


17

Inspirado en un viejo manual ...

El reto

Defino la una ésimo sufijo vector de b como la lista de Boole de longitud una con b arrastra valores Truthy.

Escriba un programa o función que, dado a a y b por cualquier medio, devuelve el a th sufijo vector de b por cualquier medio.

Ahora esto puede parecer trivial, pero este es el truco: su puntaje es el recuento de bytes más el primer año en que su solución hubiera funcionado.

Reglas

Se aplican todas las reglas estándar, excepto que también se pueden usar los idiomas y las versiones de idiomas que se lanzaron después de este desafío.

Salida utilizando cualquier representación de valores booleanos que utilice su idioma, por ejemplo 1/ 0, True/ False, TRUE/ FALSE, "True"/ "False", etc.

Salida utilizando cualquier representación de las listas que su uso del lenguaje, por ejemplo 0 0 1, [False,False,True], (FALSE;FALSE;TRUE), {"False","False","True"}, etc.

Puede suponer que un b siempre es cierto y que son de un tipo de datos apropiado.

Casos de prueba

Dado a = 7 yb = 3, retorno0 0 0 0 1 1 1

Dado a = 4 y b = 4, retorno[True,True,True,True]

Dado a = 2 yb = 0, retorno(FALSE;FALSE)

Dado a = 0 yb = 0, retorno{}

Ejemplo de solución y puntuación

Es posible que desee enviar la solución {⌽⍺↑⍵⍴1}usando Dyalog APL. Eso sería un bytecount de 8. Esta es una función dinámica, que funciona desde la versión 8.1 de Dyalog APL, lanzada en 1998, por lo que mi puntaje total es 2006. Mi respuesta presentada debería ser algo así como:

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

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

¡La puntuación más baja gana!


14
Estoy profundamente preocupado por la verificabilidad de las respuestas.
Dennis

1
@ Dennis, entiendo tu preocupación. Sin embargo, 1) las respuestas serán en su mayoría muy simples y, por lo tanto, podrían verificarse a mano, sin necesidad de un sistema real en ejecución, y 2) algunos usuarios se han vinculado a la documentación de su reclamo.
Adám

8
No estoy tan seguro de que "verificado a mano" necesariamente funcione para algunas respuestas: el pasado es un lugar extraño y, a veces, las versiones iniciales de las cosas pueden carecer de cosas que se sienten comunes hoy ...
Sp3000

1
@ Sp3000 Tal vez, pero de todos modos esto es por diversión, y con 8 respuestas y 9 votos a favor en 1.5h, creo que este desafío es lo suficientemente divertido como para aceptar que alguien podría hacer trampa. Tal vez alguna investigación adicional sobre el ganador final ...
Adám

1
@CatsAreFluffy La idea era mostrar que cualquiera de esos formatos es válido. Creo que los casos son pocos y lo suficientemente simples para que la facilidad de copiar y pegar no sea un problema.
Adám

Respuestas:


7

APL \ 360, 1968 + 3 bytes = 1971

⎕⍵⎕

Una creación del tutorial @NBZ vinculada a. No sé por qué @NBZ dijo que obtendría un puntaje de 1970, porque APL \ 360 no se implementó hasta 1968, y APL anteriores como APL \ 1130 no tenían la función de sufijo vectorial (consulte la página 208 de aquí ).



8

APL, 1968 + 5 = 1973

Hasta 5 caracteres:

⌽⎕≥⍳⎕

Versión antigua:

⌽⎕↑⎕⍴1

Bueno, en realidad ya dio la respuesta, simplemente eliminé la definición de función dinámica y verifiqué que funcionara en 1968. Para referencia aquí está el manual:

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


Niños, esto se llama un ganador . Por favor escriba eso en sus notas.
CalculatorFeline

@CatsAreFluffy Todavía no. @ Moris Zucca: Finalmente, pero en realidad puedes jugar a la mitad de esos bytes. ¿Puedes imaginar cómo? Además, aquí hay una versión mucho más moderna y legible del manual.
Adám

7

SAS, 1966 + 45 = 2011

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

¡Es hora de que SAS brille!

SAS no se publicó por primera vez hasta 1972, pero este paso de datos solo usa características muy básicas que estoy bastante seguro de que habrían estado disponibles incluso en las primeras versiones preliminares desde 1966 en adelante, por lo que creo que habría funcionado en ese momento. La entrada va después a=y b=, y la salida se imprime en el registro.

¡Me sorprendería si alguien todavía tuviera un IBM System / 360 con la versión correcta de SAS para verificar esto realmente!



Ahora, si solo tuviera el efectivo para una licencia SAS de mainframe ...
user3490

5

Ratón-1979 , 1979 + 19 = 1998

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

Traducción de: Forth .

La especificación es realmente críptica para mí, pero creo que esto hace lo correcto.


Enlace roto ...
CalculatorFeline

@CatsAreFluffy Fixed; Lo escribí de memoria.
gato

Interesante. Pero no creo que &Tuckestuviera disponible hasta la versión 2002. Y los bucles parecen ser infinitos.
AShelly

4

TI-Basic, 1990 + 21 = 2011

La primera calculadora TI en la que funciona este programa es la TI-81, introducida en 1990.

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

Editar: noté que debo admitir una lista vacía ... aumentó el código en 4 bytes

Casos de prueba

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

¿Podría agregar comentarios sobre qué partes de la fuente son bytes individuales en TI-Basic? Creo que eso incluye Prompt y seq (pero no estoy seguro del resto
Sparr

No consideramos regresar a través de Ansun método de salida aceptable, a menos que esté impreso.
lirtosiast

@Sparr Claro, Prompty seq(son fichas de un byte y los otros personajes son de un byte cada uno.
Timtech

@lirtosiast Anses la forma predeterminada de devolver un valor en la serie TI-83 Basic. Además, cuando se ejecuta un programa, la última línea se imprime automáticamente. Entonces tienes lo mejor de ambos mundos.
Timtech

2
¿Es el motor analítico? Alguien debería hacer eso ...
CalculatorFeline

4

Mathematica 1.0, 1988 + 22 bytes = 2010

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

No estoy seguro de si esto funciona, solo revisé la documentación en 10.3 y busqué cosas que decían Presentado en 1988 (1.0)


Solo sobre el ganador actual. Si solo el código SMP pudiera acortarse ...
CalculatorFeline

En otra nota, sin embargo, algunos documentos: funciones puras , /.y-> ,Array
SP3000

4

68k TI-Basic, 1995 + 25 = 2020

La primera calculadora TI en la que funciona este programa es la TI-92, presentada en 1995.

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

A diferencia de la serie TI-83, 68k TI-Basic admite la lista vacía.


¿Cómo se cuenta el tamaño? La tokenización es muy diferente en la serie 68k.
lirtosiast

Prompt y seq son dos bytes más un indicador de un byte para múltiples argumentos. (21 bytes)
Timtech

Tenga en cuenta que esto no es ni un programa ni una función en el contexto de las calculadoras 68k: Promptno es válido en una función y un programa no puede devolver un valor. Así que esto debe ingresarse en la pantalla de inicio. Por otro lado, define f(a,b)=seq(x>a-b,x,1,a)define una función válida a la que se le puede asignar ayb como argumentos. (Verificado en mi TI-92 del 13/09/1995)
Fox

Tengo varias calculadoras TI (la única versión z80 es la 81), pero usualmente uso una TI-92 Plus. Después de ejecutar esto definey llamar f(2,1)o similar para tokenizarlo, el tamaño informado por el sistema operativo es de 25 bytes.
Fox

3

Python 1.0, 1994 + 26 = 2020

Guardado 2 bytes gracias a DSM.

Lambda se presentó con la primera versión principal, 1.0

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

1
Lambda confirmada introducida en 1.0, lista (secuencia) de repetición en 0.9.2 . La versión más antigua en la que pude probar esto (aparte de 0.9.1) fue 1.5.2 , y funciona bien allí.
Sp3000

@ Sp3000 Oh, wow, eso es increíble. He estado tratando de encontrar algunos registros de cambios para confirmar que la repetición de la secuencia estaba en el idioma tan temprano.
Morgan Thrapp

3

MATL , 2015 + 1 + 4 = 2020

:P<~

Esto funciona desde la versión 6.0.0 del lenguaje (utiliza entrada implícita, que se introdujo en esa versión), con fecha del 31 de diciembre de 2015.

He agregado 1al puntaje de acuerdo con el comentario de @drolex sobre posibles configuraciones regionales diferentes.

Pruébalo en línea!

Explicación

:    % 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

44
Un día después, y ...
Adám

2
¡Objeción! Necesitaremos tener las configuraciones regionales para el servidor github y el remitente de la versión. Si uno está en Tonga y el otro en Hawai, es posible que sea necesario aumentar este recuento.
drolex

@drolex El OP debe definir exactamente qué quiere decir con "año". Mientras tanto, agrego 1 a mi puntaje
Luis Mendo

@DonMuesli No quise decir eso, solo mostraba las limitaciones potenciales de este tipo de puntuación
drolex

@drolex Oh, pensé que hablabas en serio. Le pregunté al OP, de todos modos. La fecha de Github probablemente debería contar como oficial
Luis Mendo

3

J, 1990 + 8 = 1998

|.a{.b#1

Argh Estaba investigando esta respuesta y alguien llegó a APL antes de que pudiera esperar entender el idioma. Aquí está mi solución J en su lugar.


2

Prólogo, 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). se unificará Lcon[0,0,0,0,1,1,1] .

Realmente no estoy muy seguro de cuándo isse implementó en el lenguaje, y dudo que realmente pueda encontrar la fecha exacta. Sin embargo, es una función bastante básica incorporada, así que supongo que ya existía cuando apareció por primera vez el lenguaje en 1972 .

No es que realmente importe, estoy lejos de ganar con esta respuesta.


Puede que este no sea el ganador, pero ilustra claramente la ventaja de explorar - ehm - idiomas maduros ...
Adám

2

SMP , 1983 + 28 bytes = 2011

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

Creo que entendí bien ... S: 2.10, página 48 Ar: 7.1, página 102 Map : 7.2, página 106 $1 : 7.1, página 104

Y si está familiarizado con Mathematica, no, Arno funciona así que . Más como Range+ Select.


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

Quiero decir(#>x&/.x->#-#2)/@Range[#]&
CalculatorFeline

2

Vim, 1991 + 21 = 2012

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

La entrada se ve así:

7
3

Y la salida se ve así:

0000111

Explicación:

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

Lástima que vi no admite registros, ¡porque se lanzó en 1976!
DJMcMayhem

¿Explicación por favor?
CalculatorFeline


2

Pyth, 2015 + 9 4 = 2024 2019

¡Gracias a @FryAmTheEggman por su ayuda!

gRQE

Pruébalo aquí!

Explicación

gRQE # Q = cantidad de valores de verdad finales
        # E = longitud del vector
 RE # mapa sobre rango (E)
g Q # d> = Q

2

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

b y a debe proporcionarse directamente en la pila con-v , en orden inverso.

La salida no está separada por espacios como en los ejemplos, pero eso no parece ir en contra de ninguna regla establecida. Utiliza 0 y 1 para representar falso y verdadero, como lo usa el lenguaje.

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

No funciona con la versión actual desde ? ahora muestra su valor de prueba de la pila.

No estoy seguro de que todas las funciones se implementaron desde el día 1, -vpor ejemplo, podrían haberse proporcionado más tarde como un producto básico. Intentaré asegurarme de que mi respuesta sea correcta este fin de semana.


1
? no apareció (hace mucho tiempo) como se indica en el desafío quine
CalculatorFeline

Gracias, esa es una gran noticia, ahorraré 1 byte :) Lo editaré ahora, pero tendré que revisar los recursos vinculados en esolang.org, algunos datan de al menos 2011.
Aaron


¡Gracias por su ayuda, no habría pensado en revisar las revisiones de la wiki! Actualmente estoy en el trabajo y probablemente todavía no pueda verificar todo, pero me aseguraré de hacerlo esta tarde o mañana.
Aaron

Puntuación = 2026 ahora.
CalculatorFeline



1

Mathcad, 1998 + 42 = 2040

Los "bytes" se interpretan como el número de caracteres distintos del teclado (por ejemplo, el operador 'for' (incluida una línea de programación) es un solo carácter ctl-shft- #, o un clic en la barra de herramientas de Programación)).

El recuento de bytes anterior supone que las definiciones a y b no cuentan para el total; agregue 4 bytes para las definiciones si esta suposición no es válida.

La versión de la función que se muestra a continuación agrega 5 bytes para la definición y otros 3 bytes para cada uso (suponiendo que los valores ayb se escriben directamente).

Como mi solución Mathcad claramente debería estar jugando con las camisetas rojas y no con las de la competencia, he agregado una tabla de soluciones. Tenga en cuenta que como Mathcad no tiene una matriz vacía, he usado una cadena vacía ("") en su lugar; He usado 0 para indicar dónde no he calculado los pares b> a.

ingrese la descripción de la imagen aquí


¡Muy interesante!
Timtech

1

PHP, 1995 + 56 bytes = 2051

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

Uh ... hay una puntuación personalizada. Es el primer año de idiomas en + recuento de bytes .
CalculatorFeline

¡Vaya, tienes razón! Arreglando ...
ricdesi

Hacer la suposición probablemente incorrecta de que esto funciona en PHP 1. Verificará la versión pronto.
ricdesi

1

Javascript ES6, 2015 + 46 = 2061

Devuelve una matriz de 0 y 1

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

Javascript ES6, 2015 + 50 = 2065

Devuelve una cadena de 0y 1caracteres

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

Javascript, 1995 + 61 = 2056

Devuelve una cadena de 0y 1caracteres

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 una lista de valores b verdaderos y los concatena en una lista de valores (ab) falsos.


0

R , 20 bytes + 1993 = 2013

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

Pruébalo en línea!

Posiblemente esto podría funcionar en S, lo que reduciría el puntaje a 2008, pero no he podido verificarlo.


0

Sonrisa BÁSICO 3, 2014 + 25 = 2039

La primera versión pública de SmileBASIC 3 se lanzó en Japón con la aplicación SmileBASIC para Nintendo 3DS en noviembre de 2014.

Imprime una cadena donde 0 es falso y 1 es verdadero (ya que están en el lenguaje mismo).

INPUT A,B?"0"*(A-B)+"1"*B
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.