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.
y
- 120 bisy
" 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.Antworten:
Pyke, 6 Bytes
Probieren Sie es hier aus!
(Danach
w
ist der Codepunkt für 153 vorhanden, kann aber nicht gedruckt werden.)quelle
w
tatsächlich ein nicht druckbares Byte danach, das es 121Pyth,
1198 BytesArbeitet, indem man den Bereich
[0...120]
abbildet und jede Zahl vom aktuellen Jahr subtrahiert. Der Bereich wird implizit unter Verwendung121
des Map-Arguments erstellt. Um zu vermeiden, dass ein Leerzeichen zwischen.d3
und steht, erhalten121
wir diese Zahl, indem wiry
sie in ihren Codepunkt konvertieren .Vielen Dank an @FryAmTheEggman für diesen Ansatz!
Probieren Sie es hier aus!
Alte 9-Byte-Lösung:
Probieren Sie es hier aus!
Bildet den Bereich
[1...<current year>]
und nimmt nur die letzten 121 Elemente davon.quelle
-L...
spart ein paar Bytes.-L.d3C\y
sollte für 8 arbeiten.R, 34 Bytes
Sehen Sie hier auf einem Online-Dolmetscher.
Edit Konnte mit auf 33 Bytes reduziert werden
substr
.aber technisch funktioniert diese lösung nur bis zum 9999-12-31.
quelle
:
AngularJS + Lodash , 274 Bytes
Ausgabe
quelle
BASH + coreutils,
3533 Bytesquelle
date +"%Y"
intodate +%Y
x=`date +%Y`;seq $x -1 $[x-120]
oderseq $[x=`date +%Y`] -1 $[x-120]
funktioniert auch.jot
unter Linux zu installierenCJam,
141211 Bytes2 Byte dank Sp3000 und 1 Byte dank Martin Ender
Probieren Sie es online!
Erläuterung
quelle
HP50g RPL, 97 Bytes
Ungolfed:
Liste von 2016 bis 1896 anzeigen:
quelle
05AB1E ,
87 BytesCode:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
PowerShell,
2624 Bytes@TimmyD verbesserte Version:
War:
wo
date
läuftGet-Date
quelle
((date).year..0)[0..120]
; leider ist es nicht kürzer.Dyalog APL ,
1110 Bytes120↑
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
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!
quelle
Vitsy + * sh
+ JavaScript,33262118 BytesVitsy 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!
Sie können dieses nicht online testen, da es sowohl Shell als auch Eval verwendet.
Die Ausgabe erfolgt als Zeichencode.
quelle
date +%Y
funktioniert gutMathematica / Wolfram-Sprache, 28 Byte
quelle
-Range@121+1
speichert 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&
.#&@@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.R,
4739 BytesWenn 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:120
Vektor zu unterteilen, anstatt vona
bis zu zählen ,(a-120)
und 1 Byte Größe à user5957401 , der bemerkte, dassdouble
dies genauso gut funktionieren würde wienumeric
. Alte Version:quelle
seq(a<-...,a-120)
kann die Situation nur verschlechtern.as.double
stattdessen den Befehl type forcing verwendenas.numeric
, sparen Sie ein Byte. Wenn Sie ein Datum nicht formatieren, sondern die Datumsantwort als eine Zeichenfolge behandeln, aus dersubstr(Sys.Date(),1,4)
Sie ein anderes ByteMATL , 10 Bytes
Probieren Sie es online!
quelle
05AB1E, 9 Bytes
121FžgN-=
Versuchen Sie es online
quelle
PHP,
73 66 5842 BytesAusgabe:
Wenn wir nicht mit trennen müssen
,
, dann58 5741 Bytes:Danke an insertusernamehere für die Einsparung von 16 Bytes
quelle
,
, schauen Sie sich viele der anderen Antworten an.<?php
Tag entfernen, da wir das Laufen mit-r
kostenlos<?=implode(', ',range($j=date(Y),$j-120));
Python 2,
64 6254 Bytes@ KarlKastor Danke für 8 Bytes!
quelle
time.gmtime().tm_year
ist 3 Bytes kürzertime.gmtime()[0]
noch kürzerPostgreSQL, 57 Bytes
Wer braucht schon einen
FROM
:-). Sollte wahrscheinlich nicht funktionieren, aber es funktioniert, probieren Sie es bei sqlfiddlequelle
Bash unter OS X, 23
Dies funktioniert auch unter Linux, wenn Sie BSD
jot
installiert haben (zsudo apt-get install athena-jot
. B.quelle
Python 2, 62 Bytes
Und bei 64 Bytes:
quelle
Oracle SQL 11.2, 111 Bytes
quelle
Verarbeitung,
514241 BytesUngolfed
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 :)
quelle
for(int i=0;i<121;)print(year()-i+++" ");
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.
Es benötigt MATLAB Version r2014a oder höher. Frühere Versionen enthielten die
year
Funktion nicht.quelle
JavaScript,
55525049 Bytes+9 Bytes zu
alert
den Daten (nicht erforderlich, wenn Sie dies in einer Konsole ausführen).-4 Byte, wenn das Trennzeichen nicht erforderlich ist.
quelle
[]
s scheinen unnötig zu sein.for
anstattwhile
auf diese:for(a=d=s=Date().substr(11,4);d-->s-120;)a+=" "+d
!C
8785767465 BytesUngolfed:
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)
quelle
int argc, char
->int argc,char
?argc
durchc
(oder besserint argc
durch nurint
) undargv
durchv
. Ersetzen Sie auchwhile
durchfor
. Letzteres erfordert etwas Erfahrung in C (kann aber trotzdem Spaß machen).char*v[]
->char**v
spart 1 Byte. Sie können einen anderen speichern, indem Sie Ihre Jahre durch ein Leerzeichen oder ein Komma anstelle einer neuen Zeile abgrenzen.main(int i,char**v){for(i=0;i<121;printf("%d,",atoi(v[1])-i++));}
JavaScript,
605348 BytesIch habe eine rekursive Lösung verwendet.
quelle
console.log
mitalert
, und die letzte entfernen;
.f=x=>x>Date().split" "[3]-121&&(alert(x),f(x-1))
und ersetzen Sie die Anführungszeichen durch Backticks.Perl, 33 Bytes
Laufen Sie mit
-M5.010
oder-E
:quelle
k, 27 Bytes
Ausgabe wie angegeben
Beispiel:
Sie kann weiter verkürzt werden, indem die Ausgabe nicht formatiert und nur die Liste der Ganzzahlen zurückgegeben wird:
quelle
jq, 46 Zeichen
(45 Zeichen Code + 1 Zeichen Befehlszeilenoption)
Probelauf:
Online-Test
quelle
Vim,
3229 TastenanschlägeVielen Dank an @daniero für die Hilfe beim Speichern einiger Tastenanschläge und für die etwas übersichtlichere Ausgabe.
<Enter>
ist Enter<Ctrl-x>
ist Ctrl+XErläuterung:
Ausgabeformat:
Jede Nummer steht in einer separaten Zeile wie unten.
quelle
<CR>
im Vim-Kontext häufig als "Enter" bezeichnet) drücken:pu=strftime('%Y')
? Sie können auch einige Tastenanschläge überspringen, indem SieY
mit die gesamte Zeile kopieren . Insgesamt::pu=strftime('%Y')<CR>qqYp<Ctrl-x>q118@q
- 30 Tastenanschläge=
Register ziehen:"=strftime('%Y')<CR>pqqYp<Ctrl-x>q118@q
- 29 Tastenanschläge, und es wird die erste leere Zeile losdate
Dienstprogramm fünf weitere Tastatureingaben speichern ::.!date +\%Y<CR>qqYp<C-x>q118@q