生きている人間の可能な誕生年のリスト


40

チャレンジ

現在の年から120年前までの年のリストを出力します。すべての生きている人間の誕生年は、このリストに含まれます。

詳細

リストは降順でなければなりません。

配列やリストを操作するためのすべての組み込み関数が許可されています。

バイト単位の最短コードが優先されます。

今年実行すると、出力は

2016, 2015, ..., 1897, 1896

来年実行すると、出力は

2017, 2016, ..., 1898, 1897

等。

更新

  • リストの形式について尋ねた人もいます。ほとんどの人が推測しているように、それは問題ではありません。数字の間に区切り記号を挿入します。直観的にほとんどの場合、コンマまたはスペース、あるいはその両方が挿入され、改行または配列が出力されます。
  • ジャンヌ・カルメントのような準超人は、私の質問で述べられた規則の例外です。

7
チャレンジを投稿する前にフィードバックを得るためにサンドボックスをお勧めします(最初のチャレンジだけでなく、ほとんどのチャレンジで使用します)。
-trichoplax

3
私はこの挑戦に何の問題も見ていません。指定する価値のあることの1つは、出力を常に2016で開始するか、実行する年で開始するか(来年実行する場合は2017で開始しますか)です。これは、固定出力チャレンジであるか、現在の日付にアクセスする必要があるかどうかに影響します。
-trichoplax


10
悲しいかな、それは受け入れられるには早すぎる方法でした。
アディソンクランプ

6
課題は、「y120 から- までのすべての数字をy印刷する」または「生きている人々のすべての誕生年を印刷する」ですか?なぜなら、1896年に生まれた人が今日も生きているからといって、1898年頃からまだ人がいるという意味ではないからです。
CompuChip

回答:


19

パイク、6バイト

wC7m-

ここで試してみてください!

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

(の後w、153のコードポイントは存在しますが、印刷できません)


1
うわー、それは簡単なチェックマークでした。ゼリーの回答を待つかもしれませんか?
アダム

私はそれが簡単なチェックマークであったことに同意しますが、私はゼリーでさえそれができることを疑います
ブルー

121の変数があるのはなぜですか?それは二乗数だから?しかし、よくやった!
デンカー

3
後にw実際には印刷不可能なバイトがあり、121
Blue

1
@LeakyNunは、それが実行されているサーバーのデフォルトが何であれ、構成可能です。pyke.catbusでは、Windows-1252に設定しました
ブルー

11

Pyth、11 9 8バイト

-L.d3C\y

範囲にわたってマッピングし[0...120]、現在の年からすべての数値を減算することにより機能します。範囲は121、マップ引数として使用することにより暗黙的に構築されます。間の分離の空白を回避するために、.d3そして121私たちは、変換することによって、この番号を取得するyことのコードポイントに。
このアプローチを思いついた@FryAmTheEggmanに感謝します!

ここで試してみてください!

古い9バイトソリューション:

_>121S.d3

ここで試してみてください!

範囲[1...<current year>]を構築し、その最後の121要素のみを取ります。


1
リストを逆にして、現在の年から始まるようにしてください
Christiaan Westerbeek

1
-L...数バイト節約します。
ジャクベ

1
@ChristiaanWesterbeekその部分を見逃した、修正。発見してくれてありがとう!
デンカー

@Jakubeは別のアプローチを使用しましたが、これが存在することを思い出してくれてありがとう、前回Pythをあまり使用しませんでした!
デンカー

1
-L.d3C\y8で動作するはずです。
FryAmTheEggman16年

9

R、34バイト

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

オンライン通訳についてはこちらをご覧ください。

を使用して編集を33バイトに減らすことができますsubstr

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

しかし技術的には、このソリューションは9999-12-31までしか機能しません。


3
これはすごい。私が使用しているとき、それは数に文字列を型キャスト知らなかった:オペレータを...
アンドレイ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}}

出力

enter image description here



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.

2016年から1896年までのリストを表示:

2016 to 1896


電卓から現在の年を取得するための回答を編集しました。
カレブポール


6

PowerShell、26 24バイト

@TimmyD改良版:

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

だった:

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

どこでdate走るGet-Date


1
ブラー、早く答えるべきだった。それはまさに私が用意していた簡単なバージョンです。そして、仕事は干渉:DA楽しいバージョンも次のようになります((date).year..0)[0..120]。悲しいかな、それは短くはありません。
ジョーイ

1
日付が実際にはGet-Dateのエイリアスではないのに、日付がGet-Dateと同等であることは興味深いと思います。これは「暗黙の動詞」ルールと呼ばれていますが、PowerShellの文献にはほとんど記録されていません。
ベボ

@Bevo CodeGolfには便利ですが、他の用途には少し危険です。codegolf.stackexchange.com/a/778/571およびコメントチェーンを参照してください。名前の衝突が起こりやすく、非常に遅い。
TessellatingHeckler

6

Dyalog APL11 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 + JavaScript33 26 21 18バイト

Vitsyにはネイティブの時刻/日付検索機能がないため、このためにシェルとevalを使用する必要がありました。

@Calebに、さらに3バイトを削減してくれてありがとう!

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

これはシェルとevalの両方を使用するため、オンラインで試すことはできません。

出力は文字コードです。


日付書式文字列を二重引用符で囲む必要がないため、これから数バイトを削除できるはずです(スペースが含まれていないため)。date +%Yうまく動作します。
カレブ

@Caleb Perfect、ありがとう!JS evalの必要性も存在しません。
アディソンクランプ

5

Mathematica / Wolfram言語、28バイト

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

PPCGへようこそ!
アディソンクランプ

4
PPCGへようこそ!減算はリストに対して自動的にスレッド化されるため、ここでマップを使用する必要はありません。そして-Range@121+1、ゼロベースのリストに1バイトを保存します。そして#&@@バイト以上[[1]]。ただし、チャレンジで特に明記されていない限り、すべての提出は関数または完全なプログラムである必要があり、このコードは単なるスニペット/式です。最短の修正は、を追加することで名前のない関数にすること&です。
マーティンエンダー

@MartinEnderフィードバックをありがとう!私はマイナスがリスト可能であること、マイナーな精神的衰退を捕らえるべきでしたが、他のヒントは大歓迎です!
user6014

#&@@Date[]-#&/@0~Range~120&は2バイト節約しますが、関数にする&には最後に追加する必要があります(とにかくあなたが必要だと思います)ので、合計で-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)、状況を悪化させるだけです。
アンドレイKostyrka

as.double代わりにtype forcingコマンドを使用するas.numericと、1バイト節約できます。同様に、日付をフォーマットする代わりに、日付応答をsubstr(Sys.Date(),1,4)
取得して



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、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バイトを保存してくれたinsertusernamehereに感謝します


で区切る必要はありません,。他の多くの答えを見てください。
アディソンクランプ

それはそのように見えますが、私は2つのオプションを入れて、ほとんどが何であるか、また要求されたことを行うことができます
-gabe3886

コンマの答えを元の非コンマの答えのサイズに抑えることができました。それは私がそれをゴルフすることができると思うほどです
-gabe3886


2
16バイトのゴルフ:<?=implode(', ',range($j=date(Y),$j-120));
insertusernamehere

4

Python 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いいね!タイムモジュールで遊ぶことは、毎回迷路に足を踏み入れるようなものです。道に迷うための多くの方法
アトラロジスト

4

PostgreSQL、57バイト

誰が必要ですFROM:-)。おそらく動作しないはずですが、動作します。sqlfiddleで試してください

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

4

OS XでのBash、23

jot 121 `date +%Y` - -1

これは、BSDがjotインストールされている場合(たとえば、sudo apt-get install athena-jot


3

Python 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++ + " ");

Processingは、知らない場合はJavaの単なるラッパーであり、定型文のほとんどを取り去るため、明らかなソリューションはJavaバージョンに比べて非常に短いものです。また、グラフィックスを描画するためのウィンドウを開きますが、それが私を失格させるとは思われません:)


1
for(int i=0;i<121;)print(year()-i+++" ");
リーキー修道女

私は「+++」が大好きで、とても疑わしいようです。提案をありがとう!
コーディ

3

MATLAB、18バイト

出力形式が重要でないと仮定すると(降順は別として)、次のプログラムは、現在のものから過去121年間を出力します。

year(date)-(0:120)

MATLABバージョンr2014a以降が必要です。以前のバージョンにはyear関数が含まれていませんでした。


3

JavaScript、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
[]sが不要であるように思われます。
ニール

@ニール:ありがとう。私の元のソリューションは配列を使用していましたが、削除するつもりはありませんでした。
Yay295

1
あなたは使用して1つのバイトを保存することができますfor代わりにwhileこの上:for(a=d=s=Date().substr(11,4);d-->s-120;)a+=" "+d
ドムヘイスティングス

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のジャンクを切り出すことができればいいが、私はないんだけどだろうということ熟練したAのCプログラマ。改善を歓迎します。

編集:現在の年は、コマンドラインから取得されます-具体的には、自動化され、よく訓練された飲酒鳥のグループによって取得されます。

編集2:Easterly Irkのおかげで85バイト(引数関数パラメータの周りのスペースを削除)

編集3 3:76バイト明白な(詳細なargc / argvパラメータ名を削除)を指摘してくれたanatolygに感謝

編集4:Yay295のおかげで74バイト(char ** v、年区切り文字を変更)

編集5:Yay295とmattのおかげで65バイト(変数iの再利用、変数xの削除、forループへの変更、printfにatoi()readとi ++を含めるように更新)


1
スペースはありませんか?int argc, char-> int argc,char
Rɪᴋᴇʀ

2
交換するargcことでc(またはより良い置き換えるint argcだけでint)とargvv。また、交換するwhileことでfor。後者の変更には、Cでのある程度の経験が必要です(ただし、楽しいかもしれません)。
アナトリグ

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 ++);}
マット

2
さらに短く。65バイト main(int i,char**v){for(i=0;i<121;printf("%d,",atoi(v[1])-i++));}
マット

3

JavaScript、60 53 48バイト

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

再帰的なソリューションを使用しました。


1
に置き換えconsole.logalert、最後のを削除でき;ます。
-NoOneIsHere

1
で5バイトを節約f=x=>x>Date().split" "[3]-121&&(alert(x),f(x-1))します。引用符をバッククォートに置き換えます。
シャギー

2

Perl、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は明らかに将来性のあるバージョンを要求するため、2番目のバージョンのみが質問に答えます。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

あなたも、あなたがして5つのキーストロークを保存することができますようにシェルを使用することを許可している場合date、ユーティリティ::.!date +\%Y<CR>qqYp<C-x>q118@q
ジョン・ガワー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.