Liste möglicher Geburtsjahre lebender Menschen

40

Die Herausforderung

Geben Sie eine Liste von Jahren aus, die mit dem aktuellen Jahr beginnt und vor 120 Jahren endet. Das Geburtsjahr jedes lebenden Menschen würde in diese Liste aufgenommen.

Einzelheiten

Die Liste sollte in absteigender Reihenfolge sein.

Jede integrierte Funktion zum Bearbeiten von Arrays und / oder Listen ist zulässig.

Kürzester Code in Bytes gewinnt.

Wenn in diesem Jahr die Ausgabe laufen würde

2016, 2015, ..., 1897, 1896

Wenn nächstes Jahr die Ausgabe laufen würde

2017, 2016, ..., 1898, 1897

Usw.

Aktualisieren

  • Einige haben nach dem Format der Liste gefragt. Wie die meisten vermutet haben, spielt es keine Rolle. Fügen Sie ein beliebiges Trennzeichen zwischen den Zahlen ein. Intuitiv fügten die meisten ein Komma oder ein Leerzeichen oder beides ein, setzten ein Array in eine neue Zeile oder gaben es aus.
  • Quasi-Übermenschen wie Jeanne Calment bilden eine Ausnahme von der in meiner Frage angegebenen Regel.
Christiaan Westerbeek
quelle
7
Ich empfehle die Sandbox , um Feedback zu erhalten, bevor Sie eine Herausforderung veröffentlichen (nicht nur für Ihre erste Herausforderung - die meisten von uns verwenden sie für jede Herausforderung).
Trichoplax
3
Ich sehe nichts falsch an dieser Herausforderung. Eine Sache, die spezifiziert werden sollte, ist, ob die Ausgabe immer mit 2016 oder mit dem Jahr beginnen soll, in dem sie ausgeführt wird (wird sie mit 2017 beginnen, wenn sie nächstes Jahr ausgeführt wird?). Dies wirkt sich darauf aus, ob es sich um eine Herausforderung mit fester Ausgabe handelt oder ob auf das aktuelle Datum zugegriffen werden muss.
Trichoplax
19
Jeanne Louise Calment lebte 122 Jahre.
Zenadix
10
Junge, das war viel zu früh für eine Annahme.
Addison Crump
6
Ist die Herausforderung: "Alle Zahlen von y- 120 bis y" oder "Alle Geburtsjahre lebender Menschen drucken"? Denn wenn heute jemand lebt, der 1896 geboren wurde, heißt das nicht, dass es noch Menschen von 1898 gibt.
CompuChip

Antworten:

19

Pyke, 6 Bytes

wC7m-

Probieren Sie es hier aus!

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

(Danach wist der Codepunkt für 153 vorhanden, kann aber nicht gedruckt werden.)

Blau
quelle
1
Wow, das war ein kurzer Haken. Warten Sie vielleicht auf eine Antwort von Jelly?
Adám,
Obwohl ich zustimme, dass es ein kurzes Häkchen war, bezweifle ich, dass auch Jelly es in 5
Blue
Warum haben Sie eine Variable für 121? Nur weil es eine quadratische Zahl ist? Aber gut gemacht!
Denker
3
Die hat wtatsächlich ein nicht druckbares Byte danach, das es 121
Blau
1
@LeakyNun ist konfigurierbar, unabhängig von der Standardeinstellung für den Server, auf dem es ausgeführt wird. Auf pyke.catbus habe ich Windows-1252
Blue
11

Pyth, 11 9 8 Bytes

-L.d3C\y

Arbeitet, indem man den Bereich [0...120]abbildet und jede Zahl vom aktuellen Jahr subtrahiert. Der Bereich wird implizit unter Verwendung 121des Map-Arguments erstellt. Um zu vermeiden, dass ein Leerzeichen zwischen .d3und steht, erhalten 121wir diese Zahl, indem wir ysie in ihren Codepunkt konvertieren .
Vielen Dank an @FryAmTheEggman für diesen Ansatz!

Probieren Sie es hier aus!

Alte 9-Byte-Lösung:

_>121S.d3

Probieren Sie es hier aus!

Bildet den Bereich [1...<current year>]und nimmt nur die letzten 121 Elemente davon.

Denker
quelle
1
Sie sollten die Liste umkehren, damit sie mit dem aktuellen Jahr beginnt
Christiaan Westerbeek
1
-L...spart ein paar Bytes.
Jakube
1
@ChristiaanWesterbeek Verpasste diesen Teil, behoben. Danke fürs Zuschauen!
Denker
@Jakube Habe jetzt einen anderen Ansatz gewählt, aber danke für die Erinnerung, dass dieser existiert, habe Pyth in der letzten Zeit nicht oft benutzt!
Denker
1
-L.d3C\ysollte für 8 arbeiten.
FryAmTheEggman
9

R, 34 Bytes

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

Sehen Sie hier auf einem Online-Dolmetscher.

Edit Konnte mit auf 33 Bytes reduziert werden substr.

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

aber technisch funktioniert diese lösung nur bis zum 9999-12-31.

Plannapus
quelle
3
Das ist fantastisch. Ich wusste nicht, dass es eine Zeichenfolge in eine Zahl :
tippen kann,
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}}

Ausgabe

Bildbeschreibung hier eingeben

SIE
quelle
8

BASH + coreutils, 35 33 Bytes

x=`date +%Y`;seq $x -1 $((x-120))
Joe
quelle
2
In Ihrem Fall sind Anführungszeichen nicht erforderlich: change: date +"%Y"intodate +%Y
Olivier Dulac
1
x=`date +%Y`;seq $x -1 $[x-120]oder seq $[x=`date +%Y`] -1 $[x-120]funktioniert auch.
Dennis
10 Bytes kürzer, wenn Sie OSX haben oder bereit sind, jotunter Linux zu installieren
Digital Trauma
7

CJam, 14 12 11 Bytes

2 Byte dank Sp3000 und 1 Byte dank Martin Ender

et0=121,f-p

Probieren Sie es online!

Erläuterung

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
Geschäfts-Katze
quelle
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

Ungolfed:

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.

Liste von 2016 bis 1896 anzeigen:

2016 bis 1896

Caleb Paul
quelle
Die Antwort wurde bearbeitet, um das aktuelle Jahr vom Taschenrechner abzurufen.
Caleb Paul
6

05AB1E , 8 7 Bytes

Code:

žg120Ý-

Erläuterung:

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

Verwendet die CP-1252- Codierung. Probieren Sie es online! .

Adnan
quelle
6

PowerShell, 26 24 Bytes

@TimmyD verbesserte Version:

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

War:

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

wo dateläuftGet-Date

TessellatingHeckler
quelle
1
Blargh, hätte früher antworten sollen. Das ist genau die einfache Version, die ich fertig hatte. Dann Arbeit gestört: DA Spaß Version würde auch sein: ((date).year..0)[0..120]; leider ist es nicht kürzer.
Joey
1
Ich finde es interessant, dass Datum Get-Date entspricht, wenn Datum eigentlich kein Alias ​​für Get-Date ist. Ich habe gesehen, dass dies als "implizites Verb" bezeichnet wird, und es wird selten in der PowerShell-Literatur dokumentiert.
Bevo
@Bevo Es ist nützlich für CodeGolf, aber ein bisschen riskant für jede andere Verwendung. Siehe: codegolf.stackexchange.com/a/778/571 und Kommentarkette; Es ist sowohl anfällig für Namenskollisionen als auch sehr langsam.
TessellatingHeckler
6

Dyalog APL , 11 10 Bytes

120↑⌽⍳⊃⎕ts

120↑ nimm 120 Elemente

des Umgekehrten

Indizes bis

das erste Element von

⎕TS Zeitstempel im Format [JJJJ, M, T, h, m, s, t]

TryAPL online!


Alte Version:

(⊃⎕TS)-⍳120

⊃⎕TS erstes Element von [JJJJ, M, T, h, m, s, t]

- Minus

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

Benötigt ⎕IO←0, was bei vielen Systemen Standard ist.

TryAPL online!

Adam
quelle
6

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

Vitsy hat keinen systemeigenen Zeit- / Datumsabruf, daher musste ich für diesen Shell und Eval verwenden.

Vielen Dank an @Caleb, der mir geholfen hat, weitere 3 Bytes abzuscheren!

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

Sie können dieses nicht online testen, da es sowohl Shell als auch Eval verwendet.

Die Ausgabe erfolgt als Zeichencode.

Addison Crump
quelle
Sie sollten in der Lage sein, ein paar Bytes davon abzuschneiden, da Sie keine doppelten Anführungszeichen um die Datumsformatzeichenfolge benötigen (da keine Leerzeichen enthalten sind). date +%Yfunktioniert gut
Caleb
@Caleb Perfekt, danke! Die Notwendigkeit einer JS-Evaluierung wurde ebenfalls aufgehoben.
Addison Crump
5

Mathematica / Wolfram-Sprache, 28 Byte

Date[][[1]]-#&/@Range[0,120]
user6014
quelle
Willkommen bei PPCG!
Addison Crump
4
Willkommen bei PPCG! Sie müssen hier keine Karte verwenden, da die Subtraktion automatisch über Listen erfolgt. Und -Range@121+1speichert ein Byte über der nullbasierten Liste. Und #&@@ein Byte vorbei [[1]]. Sofern in der Challenge nicht anders angegeben, müssen alle Einsendungen Funktionen oder vollständige Programme sein, und dieser Code ist lediglich ein Snippet / Ausdruck. Die kürzeste Lösung wäre, sie durch Anhängen zu einer unbenannten Funktion zu machen &.
Martin Ender
@MartinEnder Danke für das Feedback! Ich hätte Minus dabei erwischen sollen, wie er in der Lage war, einen kleinen mentalen Fehler zu machen, aber die anderen Tipps werden sehr geschätzt!
User6014
#&@@Date[]-#&/@0~Range~120&Sie sparen zwei Bytes, aber um es zu einer Funktion zu machen, müssen Sie das &am Ende hinzufügen (was Ihrer Meinung nach sowieso erforderlich ist), also insgesamt -1 Byte.
Numbermaniac
5

R, 47 39 Bytes

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

Wenn nur jemand eine UTF-8-Implementierung von R mit bequem abgekürzten häufig verwendeten Systemfunktionen erfunden hätte ...

UPD: 7 (!) Bytes wurden aufgrund von Plannapus abgeschnitten , der vorschlug, einen 0:120Vektor zu unterteilen, anstatt von abis zu zählen , (a-120)und 1 Byte Größe à user5957401 , der bemerkte, dass doubledies genauso gut funktionieren würde wie numeric. Alte Version:

a=as.numeric(format(Sys.Date(),"%Y"));a:(a-120)
Andreï Kostyrka
quelle
Herumspielen und seq(a<-...,a-120)kann die Situation nur verschlechtern.
Andreï Kostyrka
Wenn Sie as.doublestattdessen den Befehl type forcing verwenden as.numeric, sparen Sie ein Byte. Wenn Sie ein Datum nicht formatieren, sondern die Datumsantwort als eine Zeichenfolge behandeln, aus der substr(Sys.Date(),1,4)Sie ein anderes Byte
abrufen
5

MATL , 10 Bytes

1&Z'0:120-

Probieren Sie es online!

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
quelle
4

PHP, 73 66 58 42 Bytes

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

Ausgabe:

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

Wenn wir nicht mit trennen müssen ,, dann 58 57 41 Bytes:

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

Danke an insertusernamehere für die Einsparung von 16 Bytes

gabe3886
quelle
Sie brauchen sich nicht wirklich zu trennen ,, schauen Sie sich viele der anderen Antworten an.
Addison Crump
Es sieht so aus, aber ich werde zwei Optionen
eingeben,
Ich habe es geschafft, die Komma-Antwort auf meine ursprüngliche Nicht-Komma-Antwortgröße zu reduzieren. Das ist so viel, wie ich denke, dass ich Golf spielen kann
gabe3886
Sie können das <?phpTag entfernen, da wir das Laufen mit -rkostenlos
Business Cat
2
Golf off 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 Danke für 8 Bytes!

Atlasologe
quelle
time.gmtime().tm_yearist 3 Bytes kürzer
KarlKastor
time.gmtime()[0]noch kürzer
KarlKastor
@ Karl Kastor schön! Mit dem Zeitmodul zu spielen ist für mich wie jedes Mal in ein Labyrinth zu gehen. So viele Möglichkeiten, sich zu verirren
Atlasologe
4

PostgreSQL, 57 Bytes

Wer braucht schon einen FROM:-). Sollte wahrscheinlich nicht funktionieren, aber es funktioniert, probieren Sie es bei sqlfiddle

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

Bash unter OS X, 23

jot 121 `date +%Y` - -1

Dies funktioniert auch unter Linux, wenn Sie BSD jotinstalliert haben (z sudo apt-get install athena-jot. B.

Digitales Trauma
quelle
3

Python 2, 62 Bytes

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

Und bei 64 Bytes:

for n in range(121):print int(__import__("time").ctime()[-4:])-n
Daniel
quelle
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
quelle
1
Ich wäre versucht zu sagen, dass das Listagg nicht erforderlich ist und nur die Menge der geordneten Zeilen
MickyT
3

Verarbeitung, 51 42 41 Bytes

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

Ungolfed

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

Die Verarbeitung ist nur ein Wrapper für Java, wenn Sie es nicht wussten, und nimmt den größten Teil des Boilerplates weg, sodass die offensichtliche Lösung auch im Vergleich zu einer Java-Version sehr kurz ist. Öffnet auch ein Fenster zum Zeichnen von Grafiken, aber das scheint mich nicht zu disqualifizieren :)

Cody
quelle
1
for(int i=0;i<121;)print(year()-i+++" ");
Undichte Nonne
Ich liebe das "+++", es sieht so verdächtig aus. Danke für den Vorschlag!
Cody
3

MATLAB, 18 Bytes

Unter der Annahme, dass das Ausgabeformat keine Rolle spielt (abgesehen von der absteigenden Reihenfolge), druckt das folgende Programm die letzten 121 Jahre beginnend mit dem aktuellen.

year(date)-(0:120)

Es benötigt MATLAB Version r2014a oder höher. Frühere Versionen enthielten die yearFunktion nicht.

Tom Carpenter
quelle
3

JavaScript, 55 52 50 49 Bytes

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

+9 Bytes zu alertden Daten (nicht erforderlich, wenn Sie dies in einer Konsole ausführen).

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

-4 Byte, wenn das Trennzeichen nicht erforderlich ist.

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
quelle
1
Die []s scheinen unnötig zu sein.
Neil
@ Neil: Danke. Meine ursprüngliche Lösung verwendete ein Array, aber ich hatte nicht daran gedacht, es zu entfernen.
Yay295
1
Sie können ein Byte mit einem speichern , foranstatt whileauf diese: 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++));}

Ungolfed:

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

Mein erster Code Golf - Alle Hinweise würden gut aufgenommen. Wäre nett, wenn ich den argc / argv-Müll rausschneiden könnte, aber ich bin kein so erfahrener C-Programmierer. Verbesserungen sind willkommen.

BEARBEITEN : Das aktuelle Jahr wird von der Kommandozeile abgerufen - speziell von einer Gruppe automatisierter, gut ausgebildeter Trinkvögel.

EDIT 2 : 85 Bytes dank Easterly Irk (Leerzeichen um die Parameter der arg-Funktion entfernt)

EDIT 3 : 76 bytes Danke an anatolyg für den Hinweis auf das Offensichtliche (entfernte verbose argc / argv Parameternamen)

EDIT 4 : 74 Bytes Dank an Yay295 (char ** v, geänderter Jahresbegrenzer)

EDIT 5 : 65 Bytes dank Yay295 und matt (die Variable i wurde wiederverwendet, die Variable x entfernt, while to for-Schleife geändert, printf mit atoi () read und i ++ aktualisiert)

schil227
quelle
1
Kannst du nicht ein Leerzeichen? int argc, char-> int argc,char?
Freitag,
2
Ersetzen Sie argcdurch c(oder besser int argcdurch nur int) und argvdurch v. Ersetzen Sie auch whiledurch for. Letzteres erfordert etwas Erfahrung in C (kann aber trotzdem Spaß machen).
Anatolyg
1
char*v[]-> char**vspart 1 Byte. Sie können einen anderen speichern, indem Sie Ihre Jahre durch ein Leerzeichen oder ein Komma anstelle einer neuen Zeile abgrenzen.
Yay295
1
Sie können es kürzer machen. 71 Bytes. main (int c, char ** v) {int i = 0; while (i <120) printf ("% d", atoi (v [1]) - i ++);}
Matt
2
Noch kürzer. 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))

Ich habe eine rekursive Lösung verwendet.

Huntro
quelle
1
Sie können ersetzen console.logmit alert, und die letzte entfernen ;.
NoOneIsHere
1
Speichern Sie 5 Bytes mit f=x=>x>Date().split" "[3]-121&&(alert(x),f(x-1))und ersetzen Sie die Anführungszeichen durch Backticks.
Shaggy
2

Perl, 33 Bytes

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

Laufen Sie mit -M5.010oder -E:

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

k, 27 Bytes

Ausgabe wie angegeben

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

Beispiel:

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

Sie kann weiter verkürzt werden, indem die Ausgabe nicht formatiert und nur die Liste der Ganzzahlen zurückgegeben wird:

(`year$.z.d)-!121
Skeevey
quelle
2

jq, 46 Zeichen

(45 Zeichen Code + 1 Zeichen Befehlszeilenoption)

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

Probelauf:

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

Online-Test

Mann bei der Arbeit
quelle
2

Vim, 32 29 Tastenanschläge

Vielen Dank an @daniero für die Hilfe beim Speichern einiger Tastenanschläge und für die etwas übersichtlichere Ausgabe.

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

Erläuterung:

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

Ausgabeformat:

Jede Nummer steht in einer separaten Zeile wie unten.

2016
2015
.
.
.
1898
1897
Captain Man
quelle
OP fragt eindeutig nach einer zukunftssicheren Version, sodass nur die zweite die Frage beantwortet. Müssen Sie danach nicht noch die Eingabetaste ( <CR>im Vim-Kontext häufig als "Enter" bezeichnet) drücken :pu=strftime('%Y')? Sie können auch einige Tastenanschläge überspringen, indem Sie Ymit die gesamte Zeile kopieren . Insgesamt: :pu=strftime('%Y')<CR>qqYp<Ctrl-x>q118@q- 30 Tastenanschläge
daniero
Außerdem können Sie aus dem =Register ziehen: "=strftime('%Y')<CR>pqqYp<Ctrl-x>q118@q- 29 Tastenanschläge, und es wird die erste leere Zeile los
daniero
Wenn Sie auch die Shell verwenden dürfen, können Sie mit dem dateDienstprogramm fünf weitere Tastatureingaben speichern ::.!date +\%Y<CR>qqYp<C-x>q118@q
John Gowers,