살아있는 인간의 가능한 출생 연도 목록


40

도전

현재 연도로 시작하여 120 년 전에 끝나는 연도 목록을 출력합니다. 모든 살아있는 인간의 출생 연도가이 목록에 포함됩니다.

세부

목록은 내림차순이어야합니다.

배열 및 / 또는 목록을 조작하는 모든 내장 기능이 허용됩니다.

바이트 단위의 최단 코드가 이깁니다.

올해 실행하면 출력은

2016, 2015, ..., 1897, 1896

내년에 실행하면 출력은

2017, 2016, ..., 1898, 1897

기타.

최신 정보

  • 일부는 목록의 형식에 대해 물었습니다. 대부분 추측했듯이 중요하지 않습니다. 숫자 사이에 구분 기호를 삽입하십시오. 직관적으로 대부분 쉼표 나 공백 또는 둘 다 삽입하거나 배열을 출력합니다.
  • Jeanne Calment 와 같은 준 초 인간 은 내 질문에 명시된 규칙의 예외입니다.

7
챌린지를 게시하기 전에 피드백을 받기 위해 샌드 박스 를 사용 하는 것이 좋습니다 (첫 번째 챌린지뿐만 아니라 대부분의 챌린지마다 사용).
trichoplax

3
나는이 도전에 어떤 문제도 보지 못했다. 지정할 가치가있는 것 중 하나는 출력이 항상 2016으로 시작해야하는지 또는 실행 연도로 시작해야하는지입니다 (내년에 실행될 경우 2017로 시작 함). 이는 고정 출력 챌린지인지 또는 현재 날짜에 액세스해야하는지에 영향을줍니다.
trichoplax

19
Jeanne Louise Calment 는 122 년을 살았습니다.
Zenadix

10
라드, 그건 너무 일찍 받아 들여졌다.
애디슨 크럼프

6
도전은 " y120 에서 120 까지의 모든 숫자를 y인쇄합니까?" 1896 년에 태어난 누군가가 오늘날 살아 있다고해서 1898 년 이후에도 여전히 사람들이 있다는 의미는 아닙니다.
CompuChip

답변:


19

파이크, 6 바이트

wC7m-

여기 사용해보십시오!

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

(이후 w에는 153의 코드 포인트가 있지만 인쇄 할 수 없습니다)


1
와우, 그것은 빠른 확인 표시였습니다. 젤리 답변을 기다릴까요?
Adám

나는 그것이 빠른 확인 표시라는 것에 동의하지만, 젤리조차도 5시에 그것을 할 수 있을지 의심합니다.
Blue

왜 121에 대한 변수가 있습니까? 그것이 제곱수이기 때문에? 그러나 잘했다!
Denker

3
w실제로 121을 만드는 나중에 인쇄 할 수없는 바이트를 가지고
블루

1
@LeakyNun 실행중인 서버의 기본값에 관계없이 구성 가능합니다. pyke.catbus에서 Windows-1252
Blue

11

Pyth, 11 9 8 바이트

-L.d3C\y

범위를 매핑 [0...120]하고 현재 연도에서 모든 숫자를 빼서 작동합니다 . 범위는 121map 인수로 사용하여 암시 적으로 빌드 됩니다. 사이에 분리 공백을 피하기 위해, .d3그리고 121우리는 변환이 번호를 y그것의 코드 포인트에.
이 접근 방식에 대해 @FryAmTheEggman에게 감사드립니다!

여기 사용해보십시오!

이전 9 바이트 솔루션 :

_>121S.d3

여기 사용해보십시오!

범위를 빌드하고 [1...<current year>]마지막 121 요소 만 가져옵니다.


1
현재 연도로 시작되도록 목록을 반대로 바꿔야합니다
Christiaan Westerbeek

1
-L...몇 바이트를 절약합니다.
Jakube

1
@ChristiaanWesterbeek 그 부분을 놓치고 고쳤습니다. 발견해 주셔서 감사합니다!
Denker

@Jakube 지금 다른 접근법을 사용했지만 이것이 존재한다는 것을 상기시켜 주셔서 감사합니다. 마지막으로 Pyth를 많이 사용하지 않았습니다!
Denker

1
-L.d3C\y8 작동합니다.
FryAmTheEggman

9

R, 34 바이트

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

온라인 통역사를 참조 하십시오 .

편집 을 사용하여 33 바이트로 줄일 수 있습니다 substr.

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

그러나 기술적 으로이 솔루션은 9999-12-31까지만 작동합니다.


3
대단해. :연산자를 사용할 때 문자열을 숫자로 캐스트 할 수 있다는 것을 몰랐습니다 ...
Andreï Kostyrka

8

AngularJS + Lodash , 274 바이트

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}}

산출

여기에 이미지 설명을 입력하십시오


8

BASH + coreutils, 35 33 바이트

x=`date +%Y`;seq $x -1 $((x-120))

2
귀하의 경우, 따옴표는 필요하지 않습니다 : change : date +"%Y"intodate +%Y
Olivier Dulac

1
x=`date +%Y`;seq $x -1 $[x-120]또는 seq $[x=`date +%Y`] -1 $[x-120]잘 작동합니다.
Dennis

OSX가 있거나 jotLinux 에 설치하려는 경우 10 바이트 더 짧음
Digital Trauma

7

CJam, 14 12 11 바이트

Sp3000 덕분에 2 바이트 절약 및 Martin Ender 덕분에 1 바이트 절약

et0=121,f-p

온라인으로 사용해보십시오!

설명

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

7

HP50g RPL, 97 바이트

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

언 골프 드 :

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.

1896 년부터 2016 년까지의 목록 표시 :

2016 년에서 1896 년


계산기에서 현재 연도를 가져 오도록 편집 된 답변입니다.
Caleb Paul


6

PowerShell, 26 24 바이트

@TimmyD 개선 버전 :

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

였다:

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

어디에서 date달려Get-Date


1
Blargh, 일찍 대답해야합니다. 그것이 바로 내가 준비한 간단한 버전입니다. 그런 다음 작업을 방해했습니다 : DA fun 버전은 다음과 같습니다 ((date).year..0)[0..120]. 아아, 그것은 짧지 않다.
Joey

1
날짜가 실제로 Get-Date의 별칭이 아닌 경우 날짜가 Get-Date와 동일하다는 것이 흥미 롭습니다. 이것을 "암시 적 동사"규칙이라고하는 것을 보았으며 PowerShell 문서에는 거의 문서화되어 있지 않습니다.
Bevo

@Bevo CodeGolf에는 유용하지만 다른 용도로는 약간 위험합니다. codegolf.stackexchange.com/a/778/571 및 주석 체인을 참조하십시오 . 충돌의 이름을 짓기 쉽고 속도가 느립니다.
TessellatingHeckler 1

6

Dyalog APL , 11 10 바이트

120↑⌽⍳⊃⎕ts

120↑ 120 개의 요소를 취하다

반대의

까지 인덱스

의 첫 번째 요소

⎕TS [YYYY, M, D, h, m, s, t] 형식의 타임 스탬프

TryAPL 온라인!


구 버전:

(⊃⎕TS)-⍳120

⊃⎕TS [YYYY, M, D, h, m, s, t]의 첫 번째 요소

- 마이너스

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

⎕IO←0많은 시스템에서 기본값 인이 필요합니다 .

TryAPL 온라인!


6

Vitsy + * sh + JavaScript , 33 26 21 18 바이트

Vitsy는 기본 시간 / 날짜 검색이 없으므로이 작업에 쉘과 평가를 사용해야했습니다.

다른 3 바이트를 제거하는 데 도움을 준 @Caleb에게 감사드립니다!

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

쉘과 평가를 모두 사용하기 때문에 온라인으로 시도 할 수 없습니다.

출력은 문자 코드입니다.


날짜 형식 문자열 주위에 큰 따옴표가 필요하지 않기 때문에 몇 바이트를 잘라낼 수 있어야합니다 (공백이 없기 때문에). date +%Y잘 작동합니다.
Caleb

@Caleb Perfect, 감사합니다! JS eval도 존재하지 않게 만들었습니다.
애디슨

5

Mathematica / Wolfram 언어, 28 바이트

Date[][[1]]-#&/@Range[0,120]

PPCG에 오신 것을 환영합니다!
애디슨

4
PPCG에 오신 것을 환영합니다! 빼기가 목록 위에 자동으로 스레드되므로 여기에서지도를 사용할 필요가 없습니다. 그리고 -Range@121+10부터 시작하는 목록 위에 바이트를 저장합니다. 그리고 #&@@바이트 오버 [[1]]. 즉, 챌린지에 달리 명시되지 않는 한 모든 제출은 기능 또는 전체 프로그램이어야 하며이 코드는 단지 스 니펫 / 표현입니다. 가장 짧은 수정은 추가하여 이름을 지정하지 않은 함수로 만드는 것 &입니다.
Martin Ender

@MartinEnder 피드백에 감사드립니다! 나는 마이너스가리스트에 올랐고, 정신적 소멸을 겪었어야했지만 다른 팁들도 대단히 감사합니다!
user6014

#&@@Date[]-#&/@0~Range~120&두 바이트를 절약 할 수 있지만 함수를 만들 &려면 끝에-를 추가 해야합니다 (어쨌든 필요하다고 생각합니다)-총 1 바이트.
numbermaniac

5

R, 47 39 바이트

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

누군가가 편리하게 자주 사용되는 시스템 기능으로 R의 UTF-8 구현을 발명 한 경우 ...

UPD : (!) 7 깎아은 때문에 바이트 plannapus subrtacting 제안 0:120에서 벡터보다는 계산을 a하는 (a-120)바이트 은혜 à 1 user5957401 , 즉 눈치 사람 double만큼 잘 작동 numeric. 구 버전:

a=as.numeric(format(Sys.Date(),"%Y"));a:(a-120)

주위를 둘러 seq(a<-...,a-120)보고 상황을 악화시킬 수 있습니다.
Andreï Kostyrka

as.double대신 형식 강제 명령을 사용 as.numeric하면 바이트가 절약됩니다. 마찬가지로 날짜 형식을 지정하는 대신 날짜 응답을 문자열로 취급하여 substr(Sys.Date(),1,4)다른 바이트를 저장하는 경우
user5957401



4

PHP, 73 66 58 42 바이트

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

산출:

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

우리는 함께 분리 할 필요가없는 경우 ,다음 58 57 41 바이트를 :

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

16 바이트를 저장하는 insertusername 덕분에


로 분리 할 필요가 없습니다 ,. 다른 답변을 많이보십시오.
애디슨

그것은 그런 식으로 보이지만, 또한 요청 된 내가 가장이 무엇을 할 수 있도록 두 가지 옵션에 넣어 것
gabe3886

쉼표가 아닌 원래의 쉼표 크기로 쉼표 답변을 얻었습니다. 내가 골프를 할 수 있다고 생각하는만큼
개브 3886

당신은 제거 할 수 있습니다 <?php우리가 허용 이후 태그 실행 -r무료
비즈니스 고양이

2
골프 오프 16 바이트 :<?=implode(', ',range($j=date(Y),$j-120));
insertusernamehere

4

파이썬 2, 64 62 54 바이트

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

@KarlKastor 8 바이트 감사합니다!


time.gmtime().tm_year3 짧은 바이트
KarlKastor

time.gmtime()[0]더 짧은
KarlKastor

트윗 담아 가기 시간 모듈을 가지고 노는 것은 나를 위해 매번 미로에 들어가는 것과 같습니다. 길을 잃는 많은 방법
atlasologist

4

PostgreSQL, 57 바이트

누가 FROM:-) 필요합니다 . 아마 작동하지 않아야하지만 sqlfiddle 에서 시도하십시오.

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

4

OS X의 배쉬, 23

jot 121 `date +%Y` - -1

이것은 BSD가 jot설치되어 있는 경우 Linux에서도 작동합니다 (예 : sudo apt-get install athena-jot.


3

파이썬 2, 62 바이트

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

그리고 64 바이트에서 :

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

3

Oracle SQL 11.2, 111 바이트

SELECT LISTAGG(TO_CHAR(SYSDATE,'YYYY')-LEVEL+1,', ')WITHIN GROUP(ORDER BY LEVEL)FROM DUAL CONNECT BY LEVEL<122;

1
나는하여 listagg이 필요하지 않은 말을 유혹하고 명령 행 바로 설정됩니다
MickyT

3

처리 중, 51 42 41 바이트

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

언 골프

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

알지 못하는 경우 처리는 Java의 래퍼 일 뿐이며 대부분의 상용구를 제거하므로 Java 솔루션에 비해 확실한 솔루션은 매우 짧습니다. 또한 그래픽을 그리기위한 창을 열지 만 그 자격이 없어지는 것은 아닙니다 :)


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

나는 "+++"를 좋아하는데 너무 의심 스럽다. 제안 해 주셔서 감사합니다!
Cody

3

MATLAB, 18 바이트

출력 형식이 중요하지 않은 경우 (내림차순 제외) 다음 프로그램은 현재 형식부터 시작하여 지난 121 년을 인쇄합니다.

year(date)-(0:120)

MATLAB 버전 r2014a 이상이 필요합니다. 이전 버전에는 year기능이 포함되지 않았습니다 .


3

자바 스크립트, 55 52 50 49 바이트

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

alert데이터에 +9 바이트 (콘솔에서이를 실행하는 경우 필요하지 않음).

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

분리 문자가 필요하지 않은 경우 -4 바이트

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


1
[]불필요한 것 같습니다.
Neil

@ 닐 : 감사합니다. 내 원래 솔루션은 배열을 사용했지만 제거하지는 못했습니다.
Yay295

1
for대신에 1 바이트를 저장할 수 있습니다 while: for(a=d=s=Date().substr(11,4);d-->s-120;)a+=" "+d!
Dom Hastings

3

C, 87 85 76 74 65 바이트

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

언 골프 드 :

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

내 첫 번째 코드 골프-모든 포인터가 잘 수신됩니다. 내가는 argc / argv를 쓰레기를 줄일 수,하지만 난 아니에요 경우 좋은 될 것이라고 통상의 지식을 가진의 C 프로그래머. 개선을 환영합니다.

편집 : 현재 연도는 명령 줄에서 얻습니다. 특히 자동화되고 잘 훈련 된 음주 조류 그룹에 의해 이루어집니다.

편집 2 : 85 바이트 Easterly Irk 덕분에 (arg 함수 매개 변수 주위의 공백 제거)

편집 3 : 76 바이트 명백한 점을 지적 한 anatolyg 덕분에 (제거 된 verbose argc / argv 매개 변수 이름)

편집 4 : 74 바이트 Yay295 덕분에 (char ** v, 연도 구분 기호 변경)

편집 5 : Yay295 및 matt 덕분에 65 바이트 (변수 i 재사용, 변수 x 제거, for 루프 동안 변경, atoi () read 및 i ++를 포함하도록 printf 업데이트)


1
공간이 없어요? int argc, char-> int argc,char?
Rɪᴋᴇʀ

2
교체 argc에 의해 c(또는 더 나은 대체 int argc단지에 의해 int)과 argv에 의해 v. 또한 교체 while에 의해 for. 후자의 변화는 C에 대한 약간의 경험이 필요합니다 (그러나 관계없이 재미있을 수 있습니다).
anatolyg

1
char*v[]-> char**v1 바이트를 저장합니다. 줄 바꿈 대신 공백이나 쉼표로 년을 구분하여 다른 시간을 절약 할 수 있습니다.
Yay295

1
더 짧게 만들 수 있습니다. 71 바이트 main (int c, char ** v) {int i = 0; while (i <120) printf ( "% d,", atoi (v [1])-i ++);}
Matt

2
더 짧습니다. 65 바이트 main(int i,char**v){for(i=0;i<121;printf("%d,",atoi(v[1])-i++));}
Matt

3

자바 스크립트, 60 53 48 바이트

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

재귀 솔루션을 사용했습니다.


1
당신은 대체 할 수 console.log와 함께 alert, 마지막을 제거합니다 ;.
NoOneIsHere 여기

1
f=x=>x>Date().split" "[3]-121&&(alert(x),f(x-1))따옴표를 백틱으로 대체하여 5 바이트를 절약하십시오 .
얽히고 설킨

2

펄, 33 바이트

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

-M5.010또는로 실행 -E:

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

2

k, 27 바이트

지정된대로 출력

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

예:

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

출력 형식을 지정하지 않고 정수 목록을 반환하여 더 짧아 질 수 있습니다.

(`year$.z.d)-!121

2

jq, 46 자

(45 자 코드 + 1 자 명령 행 옵션)

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

샘플 실행 :

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

온라인 테스트


2

Vim, 32 29 건반

키 입력 을 줄이고 출력을 조금 더 깔끔하게 만드는 데 도움이 되는 @daniero 에게 감사드립니다 .

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

설명:

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

출력 형식:

각 번호는 아래와 같이 별도의 줄에 있습니다.

2016
2015
.
.
.
1898
1897

OP는 분명히 미래 보장 버전을 요구하므로 두 번째 버전만이 질문에 대답합니다. Enter 키 (일반적으로 <CR>Vim 컨텍스트에서 참조)를 펀칭 할 필요는 :pu=strftime('%Y')없습니까? 또한 Y전체 줄을 복사 하여 사용 하면 일부 키 입력을 건너 뛸 수 있습니다 . 총 : :pu=strftime('%Y')<CR>qqYp<Ctrl-x>q118@q- 30 키 입력
daniero

또한, 당신은 레지스터에서 잡아 당길 수 있습니다 =: "=strftime('%Y')<CR>pqqYp<Ctrl-x>q118@q-29 키 입력, 그것은 첫 번째 빈 줄을 제거합니다
daniero

쉘을 사용할 수 있다면 date유틸리티를 사용하여 키 스트로크를 다섯 번 더 저장할 수 있습니다 .:.!date +\%Y<CR>qqYp<C-x>q118@q
John Gowers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.