Lista de posibles años de nacimiento de seres humanos vivos

40

El reto

Imprima una lista de años que comienza con el año actual y termina hace 120 años. El año de nacimiento de cada humano vivo se incluiría en esta lista.

Detalles

La lista debe estar en orden descendente.

Se permiten todas las funciones integradas para manipular matrices y / o listas.

El código más corto en bytes gana.

Cuando se ejecute este año, la salida sería

2016, 2015, ..., 1897, 1896

Cuando se ejecute el próximo año, la producción sería

2017, 2016, ..., 1898, 1897

Etc.

Actualizar

  • Algunos han preguntado sobre el formato de la lista. Como la mayoría ha adivinado, no importa. Inserte cualquier separador entre los números. Intuitivamente, la mayoría inserta una coma o espacio o ambos, nueva línea o salida de una matriz.
  • Cuasi superhumanos como Jeanne Calment son una excepción a la regla establecida en mi pregunta.
Christiaan Westerbeek
fuente
77
Recomiendo el sandbox para obtener comentarios antes de publicar un desafío (no solo para su primer desafío, la mayoría de nosotros lo usamos para cada desafío).
trichoplax
3
No veo nada malo en este desafío. Una cosa que podría valer la pena especificar es si la producción siempre debe comenzar con 2016 o con el año en que se ejecuta (¿comenzará con 2017 si se ejecuta el próximo año?). Esto afectará si es un desafío de salida fijo o si necesita acceder a la fecha actual.
trichoplax
19
Jeanne Louise Calment vivió 122 años.
Zenadix
10
Muchacho, eso fue demasiado pronto para ser aceptado.
Addison Crump
66
¿El desafío es: "Imprimir todos los números de y- 120 a y" o "imprimir todos los años de nacimiento de personas vivas"? Porque si alguien nacido en 1896 está vivo hoy, eso no significa que todavía haya personas de 1898 alrededor.
CompuChip

Respuestas:

19

Pyke, 6 bytes

wC7m-

Pruébalo aquí!

w     - 121
   m- - for i in range(^):
 C7   -  current_year-i

(Después w, el punto de código para 153 está presente pero no se puede imprimir)

Azul
fuente
1
Wow, esa fue una marca de verificación rápida. ¿Quizás esperar una respuesta de Jelly?
Adám
Si bien estoy de acuerdo en que fue una marca de verificación rápida, dudo que incluso Jelly pueda hacerlo en 5
Azul
¿Por qué tienes una variable para 121? ¿Solo porque es un número cuadrado? Pero bien hecho!
Denker
3
En wrealidad, tiene un byte no imprimible que lo convierte en 121
Azul
1
@LeakyNun es configurable, sea cual sea el valor predeterminado para el servidor en el que se ejecuta. En pyke.catbus, lo configuré en Windows-1252
Azul
11

Pyth, 11 9 8 bytes

-L.d3C\y

Funciona mapeando el rango [0...120]y restando cada número del año actual. El rango se construye implícitamente usando121 como argumento del mapa. Para evitar un espacio en blanco de separación entre .d3y 121obtenemos este número convirtiéndolo yen su punto de código.
¡Gracias a @FryAmTheEggman por proponer este enfoque!

Pruébalo aquí!

Antigua solución de 9 bytes:

_>121S.d3

Pruébalo aquí!

Construye el rango [1...<current year>]y solo toma los últimos 121 elementos del mismo.

Denker
fuente
1
Debería revertir la lista para que comience con el año en curso
Christiaan Westerbeek, el
1
-L...Guarda algunos bytes.
Jakube
1
@ChristiaanWesterbeek Perdió esa parte, reparada. Gracias por ver!
Denker
@Jakube Usó un enfoque diferente ahora, pero gracias por el recordatorio de que esto existe, ¡no usé Pyth mucho en la última vez!
Denker
1
-L.d3C\ydebería funcionar para 8.
FryAmTheEggman
9

R, 34 bytes

(format(Sys.Date(),"%Y"):0)[1:121]

Ver aquí en un intérprete en línea.

Editar Podría reducirse a 33 bytes mediante el uso substr.

(substr(Sys.Date(),1,4):0)[1:121]

pero técnicamente esta solución solo funcionará hasta el 9999-12-31.

plannapus
fuente
3
Esto es asombroso No sabía que podía escribir una cadena en un número cuando usaba el :operador ...
Andreï Kostyrka
8

AngularJS + Lodash , 274 bytes

angular.module('x',[]).controller('x',['$scope',function(x){x.x=_.range(9,new Date().getFullYear()+1).slice(-121).reverse()}])
<script src=//goo.gl/M5LvGe></script><script src=//goo.gl/opljJl></script><select ng-app=x ng-controller=x multiple><option ng-repeat="x in x">{{x}}

Salida

ingrese la descripción de la imagen aquí


fuente
8

BASH + coreutils, 35 33 bytes

x=`date +%Y`;seq $x -1 $((x-120))
Joe
fuente
2
en su caso, las citas son innecesarias: cambio: date +"%Y"endate +%Y
Olivier Dulac
1
x=`date +%Y`;seq $x -1 $[x-120]o seq $[x=`date +%Y`] -1 $[x-120]funciona igual de bien.
Dennis
10 bytes más cortos si tiene OSX o está dispuesto a instalar joten Linux
Digital Trauma
7

CJam, 14 12 11 bytes

Ahorró 2 bytes gracias a Sp3000 y 1 byte gracias a Martin Ender

et0=121,f-p

Pruébalo en línea!

Explicación

et0=         e# Push the current year
    121,     e# Push the range 0, 1, ..., 120
        f-   e# For each item in the range, subtract it from current year
          p  e# Print the array
Gato de negocios
fuente
7

HP50g RPL, 97 bytes

120 'S' STO DATE ->STR 6 9 SUB OBJ-> 'Y' STO {} S WHILE 0 >= REPEAT Y S - + 'S' DECR END REVLIST

Sin golf:

120
'span' STO     @ Store the span of years to cover.
DATE           @ Get the date as number 11.082016. 
→STR           @ Convert to string "11.082016".
               @ (Number format must allow all these decimal places.)
6 9 SUB        @ "11.082016" Substring for the year.
               @       ^  ^
               @  123456789
OBJ→           @ Convert string to number.
'year' STO     @ Store as the year to start at.
{} span        @ Start empty list to collect the years.
               @ Leave loop counter on the stack.
WHILE 0 ≥      @ Loop until the counter goes negative.
REPEAT
  year span -  @ E.g. on first iteration: 2016 - 120 = 1896.
  +            @ Append the year to the list on the stack.
  'span' DECR  @ Decrement loop counter and leave on stack.
END
REVLIST        @ Put list in reverse chronological order.

Mostrando una lista de 2016 hasta 1896:

2016 a 1896

Caleb Paul
fuente
Respuesta editada para obtener el año actual de la calculadora.
Caleb Paul
6

05AB1E , 8 7 bytes

Código:

žg120Ý-

Explicación:

žg         # Get the current year.
  120Ý     # Create the list [0, 1, ..., 119, 120].
      -    # Substract, which leaves [year - 0, year - 1, ..., year - 120].

Utiliza la codificación CP-1252 . Pruébalo en línea! .

Adnan
fuente
6

PowerShell, 26 24 bytes

@TimmyD versión mejorada:

0..120|%{(date).Year-$_}

Fue:

($d=(date).year)..($d-120)

donde datecorreGet-Date

TessellatingHeckler
fuente
1
Blargh, debería haber respondido antes. Esa es exactamente la versión sencilla que tenía lista. Entonces el trabajo interfirió: la versión divertida de DA también sería ((date).year..0)[0..120]:; por desgracia no es más corto.
Joey
1
Me parece interesante que la fecha sea equivalente a Get-Date cuando la fecha en realidad no es un alias de Get-Date. He visto esto llamado la regla del "verbo implícito" y rara vez se documenta en la literatura de PowerShell.
Bevo
@Bevo Es útil para CodeGolf, pero un poco arriesgado para cualquier otro uso. Ver: codegolf.stackexchange.com/a/778/571 y cadena de comentarios; Es propenso a nombrar enfrentamientos y muy lento.
TessellatingHeckler
6

Dyalog APL , 11 10 bytes

120↑⌽⍳⊃⎕ts

120↑ tomar 120 elementos

del reverso

índices hasta

el primer elemento de

⎕TS Marca de tiempo en el formato [AAAA, M, D, h, m, s, t]

TryAPL en línea!


Versión antigua:

(⊃⎕TS)-⍳120

⊃⎕TS primer elemento de [AAAA, M, D, h, m, s, t]

- menos

⍳120 [0, 1, 2, ..., 118, 119]

Requiere ⎕IO←0, que es el predeterminado en muchos sistemas.

TryAPL en línea!

Adán
fuente
6

Vitsy + * sh + JavaScript , 33 26 21 18 bytes

Vitsy no tiene recuperación de fecha / hora nativa, así que tuve que usar shell y evaluar para este.

¡Gracias a @Caleb por ayudarme a cortar otros 3 bytes!

'Y%+ etad',Dca*-HZ

'Y%+ etad'               Push the string 'date +"%Y"' to the stack.
          ,              Execute through shell. 
           Dca*-         Dupe n, push n - 120.
                H        Pop x, y, push range(x, y) to the stack.
                 Z       Output all stack as characters.

No puedes probar este en línea, porque usa tanto shell como eval.

La salida es como códigos de caracteres.

Addison Crump
fuente
Debería poder recortar un par de bytes de esto porque no necesita las comillas dobles alrededor de la cadena de formato de fecha (ya que no hay espacios en ella); date +%Yfunciona bien
Caleb
@Caleb Perfecto, gracias! También hizo que la necesidad de una evaluación JS no existiera.
Addison Crump
5

Lenguaje Mathematica / Wolfram, 28 bytes

Date[][[1]]-#&/@Range[0,120]
usuario6014
fuente
Bienvenido a PPCG!
Addison Crump
44
Bienvenido a PPCG! No es necesario usar un mapa aquí, ya que la resta se enhebra sobre las listas automáticamente. Y -Range@121+1guarda un byte sobre la lista basada en cero. Y #&@@un byte terminado [[1]]. Dicho esto, a menos que se indique lo contrario en el desafío, todas las presentaciones deben ser funciones o programas completos, y este código es simplemente un fragmento / expresión. La solución más corta sería convertirla en una función sin nombre agregando &.
Martin Ender
@ Martininder ¡Gracias por los comentarios! Debería haber atrapado a Minus en la lista, un lapso mental menor, ¡pero los otros consejos son muy apreciados!
user6014
#&@@Date[]-#&/@0~Range~120&le ahorrará dos bytes, pero luego convertirlo en una función requiere agregar &al final (que creo que el suyo necesita de todos modos), por lo que -1 byte en total.
numbermaniac
5

R, 47 39 bytes

as.double(substr(Sys.Date(),1,4))-0:120

Si solo alguien inventara una implementación UTF-8 de R con funciones del sistema abreviadas convenientemente utilizadas con frecuencia ...

UPD: (!) Afeitado 7 bytes debido a plannapus , quienes sugirieron subrtacting un 0:120vector en lugar de contar a partir ade (a-120)y 1 byte Grâce à user5957401 , que se dio cuenta de que doubleiba a funcionar, así como numeric. Versión antigua:

a=as.numeric(format(Sys.Date(),"%Y"));a:(a-120)
Andreï Kostyrka
fuente
Jugueteando y seq(a<-...,a-120)solo puede empeorar la situación.
Andreï Kostyrka
usando el comando de forzamiento de tipo en as.doublelugar de as.numericle ahorrará un byte. Del mismo modo, si en lugar de formatear una fecha, trata la respuesta de la fecha como una cadena para extraer y usar substr(Sys.Date(),1,4), guarda otro byte
usuario5957401
5

MATL , 10 bytes

1&Z'0:120-

Pruébalo en línea!

1&Z'      % Push first component of "clock" vector, which is year
0:120     % Literal vector [0, 1, 2, ..., 120]
-         % Subtract element-wise. Implicitly display
Luis Mendo
fuente
4

php, 73 66 58 42 bytes

<?=implode(', ',range($j=date(Y),$j-120));

Salida:

2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995, 1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984, 1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971, 1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959, 1958, 1957, 1956, 1955, 1954, 1953, 1952, 1951, 1950, 1949, 1948, 1947, 1946, 1945, 1944, 1943, 1942, 1941, 1940, 1939, 1938, 1937, 1936, 1935, 1934, 1933, 1932, 1931, 1930, 1929, 1928, 1927, 1926, 1925, 1924, 1923, 1922, 1921, 1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912, 1911, 1910, 1909, 1908, 1907, 1906, 1905, 1904, 1903, 1902, 1901, 1900, 1899, 1898, 1897, 1896

Si no necesitamos separarnos ,, entonces 58 57 41 bytes:

<?=implode(' ',range($j=date(Y),$j-120));

Gracias a insertusernamehere por guardar 16 bytes

gabe3886
fuente
Realmente no necesitas separarte ,, mira muchas de las otras respuestas.
Addison Crump
Se ve de esa manera, pero pondré dos opciones para poder hacer lo que la mayoría son, y también lo que se solicitó
gabe3886
Me las arreglé para obtener la respuesta de coma a mi tamaño de respuesta original sin coma. Eso es todo lo que creo que puedo jugar al golf
gabe3886
Puede eliminar la <?phpetiqueta, ya que permitimos ejecutar -rde forma gratuita
Business Cat
2
Golf de 16 bytes :<?=implode(', ',range($j=date(Y),$j-120));
insertusernamehere
4

Python 2, 64 62 54 bytes

import time
n=time.gmtime()[0]
exec'print n;n-=1;'*121

@KarlKastor gracias por 8 bytes!

atlasólogo
fuente
time.gmtime().tm_yeares 3 bytes más corto
KarlKastor
time.gmtime()[0] incluso más corto
KarlKastor
@KarlKastor agradable! Jugar con el módulo de tiempo es como caminar en un laberinto cada vez para mí. Tantas maneras de perderse
atlasólogo
4

PostgreSQL, 57 bytes

¿Quién necesita un FROM:-). Probablemente no debería funcionar, pero lo hace, pruébalo en sqlfiddle

select date_part('y',current_date)-generate_series(0,120)
MickyT
fuente
4

Bash en OS X, 23

jot 121 `date +%Y` - -1

Esto también funcionará en Linux si tiene BSD jotinstalado (p sudo apt-get install athena-jot. Ej .

Trauma digital
fuente
3

Python 2, 62 bytes

import time
for n in range(121):print int(time.ctime()[-4:])-n

Y a 64 bytes:

for n in range(121):print int(__import__("time").ctime()[-4:])-n
Daniel
fuente
3

Oracle SQL 11.2, 111 bytes

SELECT LISTAGG(TO_CHAR(SYSDATE,'YYYY')-LEVEL+1,', ')WITHIN GROUP(ORDER BY LEVEL)FROM DUAL CONNECT BY LEVEL<122;
Jeto
fuente
1
Me sentiría tentado a decir que no se requiere la listagg y solo el conjunto de filas ordenadas
MickyT
3

Procesamiento, 51 42 41 bytes

for(int i=0;i<121;)print(year()-i+++" ");

Sin golf

for(int i = 0; i < 121;)
    print(year() - i++ + " ");

El procesamiento es solo un contenedor para Java si no lo sabía, y elimina la mayor parte de la repetitiva, por lo que la solución obvia también es muy corta en comparación con una versión de Java. También abre una ventana para dibujar gráficos, pero tener eso no parece descalificarme :)

Cody
fuente
1
for(int i=0;i<121;)print(year()-i+++" ");
Leaky Nun
Me encanta el "+++", parece tan sospechoso. ¡Gracias por la sugerencia!
Cody
3

MATLAB, 18 bytes

Suponiendo que el formato de salida no importa (aparte del orden descendente), el siguiente programa imprime los últimos 121 años a partir del actual.

year(date)-(0:120)

Requiere la versión MATLAB r2014a o superior. Las versiones anteriores no incluían la yearfunción.

Tom Carpenter
fuente
3

JavaScript, 55 52 50 49 bytes

for(a=d=s=Date().substr(11,4);d-->s-120;)a+=" "+d

+9 bytes a alertlos datos (no es necesario si ejecuta esto en una consola).

for(a=d=s=Date().substr(11,4);d-->s-120;)a+=" "+d;alert(a)

-4 bytes si el delimitador no es necesario.

for(a=d=s=Date().substr(11,4);d-->s-120;)a+=d

for (a = d = s = Date().substr(11, 4); d --> s - 120; )
    a += " " + d;
console.log(a);

Yay295
fuente
1
Los []s parecen ser innecesarios.
Neil
@Neil: Gracias. Mi solución original usaba una matriz, pero no había pensado en eliminarla.
Yay295
1
Puede guardar un byte usando un en forlugar de whileen esto for(a=d=s=Date().substr(11,4);d-->s-120;)a+=" "+d:!
Dom Hastings
3

C, 87 85 76 74 65 bytes

main(int i,char**v){for(i=0;i<121;printf("%d,",atoi(v[1])-i++));}

Sin golf:

main(int i,char**v){
    for(i = 0; i < 121; printf("%d,", atoi(v[1])-i++));
}

Mi primer código de golf: cualquier indicador sería bien recibido. Sería bueno si pudiera cortar la basura argc / argv, pero no estoy de que experto programador C. Mejoras bienvenidas.

EDITAR : El año actual se obtiene de la línea de comando, específicamente por un grupo de pájaros bebedores automatizados y bien entrenados.

EDIT 2 : 85 bytes Gracias a Easterly Irk (espacios eliminados alrededor de los parámetros de la función arg)

EDIT 3 : 76 bytes Gracias a anatolyg por señalar lo obvio (se eliminaron los nombres detallados de argumentos argc / argv)

EDIT 4 : 74 bytes Gracias a Yay295 (char ** v, delimitador de año cambiado)

EDIT 5 : 65 bytes gracias a Yay295 y matt (reutilizó la variable i, eliminó la variable x, cambió mientras que para bucle, actualizó printf para incluir atoi () read e i ++)

schil227
fuente
1
¿No puedes un espacio? int argc, char-> int argc,char?
Rɪᴋᴇʀ
2
Reemplazar argcpor c(o mejor reemplazar int argcpor solo int) y argvpor v. También reemplazar whilepor for. El último cambio requiere algo de experiencia en C (pero puede ser divertido independientemente).
anatolyg
1
char*v[]-> char**vguarda 1 byte. Puede guardar otro delimitando sus años con un espacio o una coma en lugar de una nueva línea.
Yay295
1
Puedes hacerlo más corto. 71 bytes. main (int c, char ** v) {int i = 0; while (i <120) printf ("% d", atoi (v [1]) - i ++);}
Matt
2
Incluso más corto. 65 bytes main(int i,char**v){for(i=0;i<121;printf("%d,",atoi(v[1])-i++));}
Matt
3

JavaScript, 60 53 48 Bytes

f=x=>x>Date().split` `[3]-121&&(alert(x),f(x-1))

Usé una solución recursiva.

Huntro
fuente
1
Puede reemplazar console.logcon alerty eliminar el último ;.
NoOneIsHere
1
Ahorre 5 bytes con f=x=>x>Date().split" "[3]-121&&(alert(x),f(x-1)), reemplazando las comillas con comillas inversas.
Shaggy
2

Perl, 33 bytes

say+(gmtime)[5]-$_+1900for 0..120

Ejecutar con -M5.010o -E:

perl -E 'say+(gmtime)[5]-$_+1900for 0..120'
Dada
fuente
2

k, 27 bytes

Salida como se especifica

1@", "/:$(`year$.z.d)-!121;

Ejemplo:

k)1@", "/:$(`year$.z.d)-!121;
2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995, 1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984, 1983, 1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971, 1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959, 1958, 1957, 1956, 1955, 1954, 1953, 1952, 1951, 1950, 1949, 1948, 1947, 1946, 1945, 1944, 1943, 1942, 1941, 1940, 1939, 1938, 1937, 1936, 1935, 1934, 1933, 1932, 1931, 1930, 1929, 1928, 1927, 1926, 1925, 1924, 1923, 1922, 1921, 1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912, 1911, 1910, 1909, 1908, 1907, 1906, 1905, 1904, 1903, 1902, 1901, 1900, 1899, 1898, 1897, 1896

Se puede acortar más no formateando la salida y simplemente devolviendo la lista de enteros:

(`year$.z.d)-!121
skeevey
fuente
2

jq, 46 caracteres

(Código de 45 caracteres + opción de línea de comando de 1 carácter)

now|strftime("%Y")|tonumber|range(.;.-121;-1)

Ejecución de muestra:

bash-4.3$ jq -n 'now|strftime("%Y")|tonumber|range(.;.-121;-1)' | head
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007

Prueba en línea

hombre trabajando
fuente
2

Vim, 32 29 pulsaciones de teclas

Gracias a @daniero por su ayuda para guardar algunas teclas y hacer que la salida sea un poco más ordenada.

"=strftime('%Y')<Enter>pqqYp<Ctrl-x>q118@q
  • <Enter> es Enter
  • <Ctrl-x>es Ctrl+X

Explicación:

"                                          # Put into the register {
 =strftime('%Y')                           #   This year in YYYY form
                <Enter>                    # }
                       p                   # Paste the register
                        qq                 # Record macro q {
                          Y                #   Yank (copy) the current line
                           p               #   Paste
                            <Ctrl-x>       #   Decrment number at cursor
                                    q      # }
                                     118@q # Do macro q 118 times

Formato de salida:

Cada número está en una línea separada como a continuación.

2016
2015
.
.
.
1898
1897
Capitán Hombre
fuente
OP claramente solicita una versión a prueba de futuro, por lo que solo el segundo responde a la pregunta. ¿No necesita presionar la tecla Intro (comúnmente referida como <CR>en el contexto de Vim) después :pu=strftime('%Y')? Además, puede omitir algunas pulsaciones de teclas utilizando Ycon copias toda la línea. En total: :pu=strftime('%Y')<CR>qqYp<Ctrl-x>q118@q- 30 pulsaciones de teclas
daniero
Además, puede tirar del =registro: "=strftime('%Y')<CR>pqqYp<Ctrl-x>q118@q- 29 pulsaciones de teclas, y se deshace de la primera línea vacía
daniero
Si también puede usar shell, puede guardar cinco teclas más con la dateutilidad::.!date +\%Y<CR>qqYp<C-x>q118@q
John Gowers