Drucken Sie die Daten aller Sonntage im Jahr 2017 in folgendem Format: dd.mm.yyyy
.
Erwartete Ausgabe:
01.01.2017
08.01.2017
15.01.2017
22.01.2017
29.01.2017
05.02.2017
12.02.2017
19.02.2017
26.02.2017
05.03.2017
12.03.2017
19.03.2017
26.03.2017
02.04.2017
09.04.2017
16.04.2017
23.04.2017
30.04.2017
07.05.2017
14.05.2017
21.05.2017
28.05.2017
04.06.2017
11.06.2017
18.06.2017
25.06.2017
02.07.2017
09.07.2017
16.07.2017
23.07.2017
30.07.2017
06.08.2017
13.08.2017
20.08.2017
27.08.2017
03.09.2017
10.09.2017
17.09.2017
24.09.2017
01.10.2017
08.10.2017
15.10.2017
22.10.2017
29.10.2017
05.11.2017
12.11.2017
19.11.2017
26.11.2017
03.12.2017
10.12.2017
17.12.2017
24.12.2017
31.12.2017
code-golf
kolmogorov-complexity
date
ShinMigami13
quelle
quelle
Antworten:
Python 2 , 81 Bytes
Probieren Sie es online!
Keine Datumsbibliotheken, berechnet die Daten direkt. Der Haupttrick besteht darin, den
dd.mm
als Dezimalwert zu behandeln . Beispiel:16.04.2017
(16. April) entspricht der Nummer16.04
. Die Nummer wird wiexx.xx
im.2017
Anhang gedruckt .Tag und Monat werden rechnerisch berechnet. Jede Woche kommen 7 Tage hinzu
x+=7
. Unterx
Modulo30.99
Griffe Roll durch Subtraktion ,30.99
wenn die Tageszahl zu groß wird. Dies kombiniert-31
, um die Tage zurückzusetzen+0.01
und den Monat zu erhöhen.Der Rollover setzt voraus, dass jeder Monat 31 Tage hat. Monate mit weniger Tagen werden angepasst, indem
x
bei bestimmten Wochenzahlen mit nach oben gestoßen wird+[8,8,8,17,25,38,47].count(x/7)
. Diese Liste enthält die Wochenzahlen, die diese kurzen Monate enden, wobei sie sich8
verdreifacht haben, da der Februar 3 Tage vor dem 31. Februar liegt.Diese Liste könnte durch die Verwendung von ASCII-Werten plus 40 zu einer Zeichenfolge komprimiert werden. Die Verschiebung von
+40
könnte durch die Verwendung nicht druckbarer Zeichen vermieden und als Byte-Objekt in Python 3 kürzer zugegriffen werden.quelle
'888z!}+'.count(chr(x%146))
spart ein Byte.PHP, 48 Bytes
PHP, 46 Bytes (für nicht negative UTC-Offsets)
quelle
gmdate
Zeitzonensicherheit dienen? Es schlägt auf onlinephpfunctions.com fehl. Gute Arbeit in allen anderen Aspekten!Python 2 ,
9079 Bytes-5 Bytes mit Hilfe von xnor (vermeide es, die Wochen selbst zu zählen)
-1 Bytes dank xnor (addiere in e für 605000 als 605e3 zurück)
Probieren Sie es online!
0
Sekunden, da die Epoche am 1. Januar 1970 00:00:00 ist, was wie 2017 kein Schaltjahr war.605000
Sekunden ist 1 Woche, 3 Minuten, 20 Sekunden. Das Hinzufügen von 52 dieser "Wochen" dauert nicht länger als Mitternacht.quelle
605e3
. Ich habe aber ein paar Ideen :)Bash + Coreutils, 44 Bytes
kann 2 Bytes sparen,
-u
wenn GMT angenommen wird-f
Parameter hin, fürdate
die 10 Bytes gespart werden;@0
ist 1970-1-1605000
beträgt eine Woche (604800
) plus 200 Sek@32000000
ist nur etwas mehr als ein Jahrquelle
seq -f@%1.f 14833e5 605e3 1515e6|date -uf- +%d.%m.%Y
Spart Ihnen 10 Bytes. Sie sollten dies jedoch wahrscheinlich als Bash + coreutils bezeichnen.PowerShell,
5147Ziemliech direkt. Der 01.01.2017 ist ein Sonntag, ebenso alle folgenden sieben Tage. Wir können zwei Bytes sparen, wenn wir nur das Skript brauchen, um in meinem Leben zu arbeiten:
quelle
(date 2017-1-1)+7.*$_
. H. Siehe diese Antwortint
Bisher wusste ich nur, dass ich tagelang Zecken und Streicher hinzufügen musste . Gut zu wissen.Excel VBA
1069179 Bytes15 Bytes gespart dank @Radhato
Vorausgesetzt, der 1.1.2017 ist Sonntag, werden 12 weitere Bytes eingespart.
Danke @Toothbrush 66 Bytes
Bearbeiten: (Sub und End Sub ist nicht erforderlich) 52 Bytes
quelle
Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Sub
ist ein vollkommen gültiger VBA-Code und hat nur 66 Bytes. Die Tatsache, dass der VBA-Editor zusätzliche Leerzeichen hinzufügt, spielt keine Rolle.PHP, 67 Bytes
Unter Verwendung der Tatsache, dass PHP nicht deklarierten Schleifenvariablen automatisch den Wert 1 zuweist, und unter Verwendung der Linux-Epochenzeiten,
quelle
<?for(;54>++$t;)echo date("d.m.Y\n",605e3*$t+148263e4);
sollte nur inphp -r
, was Sie nicht brauchen<?php
und?>
können dies daher als59 bytes
@JonathanAllan richtig bezeichnet zählen. Die Klammern brauchen Sie nicht$t
. Ein paar andere Golfplätze und Sie haben am Endefor(;++$t<54;)echo date("d.m.Y\n",605e3*$t+14827e5);
für51 bytes
(in meiner Zeitzone). Sie können "\ n" durch einen echten Zeilenumbruch ersetzen, der nur 1 Byte beträgt, also 51 Byte.gmdate
anstelle derdate
Zeitzonensicherheit verwenden.k6, 32 Bytes
Kurze Erklärung:
Leider scheint dies nur im Closed-Source-Interpreter zu funktionieren, der nur auf Anfrage verfügbar ist.
quelle
Pyke ,
2624 BytesProbieren Sie es online!
Oder 11 Bytes
Darf das Ausgabeformat ignorieren
Probieren Sie es online!
quelle
R
796758 BytesDa der erste Januar ein Sonntag ist, erstellt dieses Snippet alle 7 Tage vom 01.01.2017 bis zum 31.12.2017 eine Folge von Tagen, formatiert sie in das gewünschte Format und druckt sie aus.
quelle
print(as.Date("2017-01-01")+seq(7,365,7))
Befunge-98 (PyFunge) ,
99959385 Bytes, Leaving NewlineAlle Optimierungen wurden von @JoKing vorgenommen, vielen Dank an sie
Probieren Sie es online!
Ich hatte das Gefühl, dass wir hier etwas Esosterisches vermissen, also habe ich eine Lösung in meiner bevorzugten esosterischen Sprache gefunden.
Erläuterung :
>8><><>><><>
Kodiert die Länge der 12 Monate.s
Speichern Sie den alten Tag in der Leerstelle.:1g2/
Holen Sie sich einen ASCII-Wert aus der unteren Zeile und dividieren Sie ihn durch zwei. Dies ergibt die Länge eines bestimmten Monats. Beispiel: 8 = 56 in ASCII => 56 / 2 = 28 => Der Monat (Februar) hat 28 Tage.10g\%
Holen Sie sich den zuvor gespeicherten Tag und modulieren Sie ihn um die Länge des Monats, wodurch wir das Datum in den nächsten Monat übertragen können.:d1p
Speichern Sie eine Kopie des neuen aktualisierten Tages.10g\`+
Prüfen Sie, ob das alte Datum vorliegt > neues Datum => wir sind in den nächsten Monat übergegangen => addiere 1 zum Monatszähler:b`
Teste, ob der Monatszähler> 11 bedeutet, dass wir das Jahresende erreicht haben (mit 0-Indizierung)#@_
Basierend auf dem vorherigen if beende das Programm:1\0d1g
Ordne den Stapel neu so sieht es also aus:Month, 1, Month, 0, Day
#
überspringe die nächste Anweisung (duh) Wandle1+:a/'0+,a%'0+,'.,
die Zahl in eine 1 um, drucke , füge eine.
am Ende hinzuj;
Benutze die 0 vom Stapel, um nicht zu springen und benutze die;
, um wieder zum Druckplan zu gelangen, dann benutze die 1, um über die;
nächste zu springen Zeita"7102"4k,
Drucken2017\n
d1g
Den Tageswert erneut7+
abrufen Fügen Sie eine Woche vor der Wiederholung hinzuquelle
JavaScript,
111106 BytesHinweis: Die Konsole von Stack Exchange ist nicht lang genug, um die gesamte Liste anzuzeigen. Hier ist die erste Hälfte als separates Snippet:
Das benutzerdefinierte Format kostet mich 40 Bytes ...
quelle
Perl 5 , 64 Bytes
Probieren Sie es online!
Die Aufgabe war 2017, nicht jedes Jahr, also habe ich fest programmiert in:
POSIX ist ein Kernmodul und wird immer mit Perl5 installiert. Machen Sie dasselbe, ohne Module in 101 Bytes zu verwenden, und entfernen Sie Leerzeichen:
quelle
Ruby, 75 Bytes
Einfache Lösung, um die Daten mit herauszufinden
Time
.quelle
t=Time.new 1
und dannt.strftime"%d.%m.2017"
nach -1 Byte suchen .SAS,
5250 Bytes2 Bytes gespart dank @ user3490.
quelle
data;
stattdessendata c;
und das spart 2 Bytes. Ich denke du brauchst einrun;
obwohl.data _null_
? Dierun
Anweisung wird auch impliziert, wenn sie fehlt.datan
Namenskonvention folgt .Mathematica
9084 BytesZiemlich wortreich. numbermaniac und Scott Milner sparten 5 bzw. 1 Byte.
quelle
Most@
? Die Ausgabe scheint ohne identisch zu sein.Most
war dabei, um den ersten Sonntag im Jahr 2018 zu vermeiden. Ich hatte den Code ursprünglich ohneMost
, seit Jahren, 2011, 2012 getestet. In diesem Fall ist der erste Sonntag im Jahr 2012 in der Ausgabe enthalten. (Deshalb habe ich es in den Code aufgenommen.) SeltsamerweiseMost
wird es für 2017-18 nicht benötigt. AuchMost
auf das Ergebnis hat dies keinen offensichtlichen Einfluss. Geheimnisvoll!VBA, 81 Bytes (vielleicht 64)
Mein erster Beitrag. Bauen Sie auf der Lösung von newguy auf, indem Sie den Scheck für Wochentage entfernen und nur jeden 7. Tag angeben. Durch das Entfernen der Daten werden 12 Byte pro Stück gespart. 42736 ist der 1.1.2017. Das Ausgabedatum hängt von der Systemeinstellung ab. Ist das erlaubt In diesem Fall sind es 64 Byte, da Sie die Formatierungsmethode nicht benötigen .
quelle
For i=0To 52
undFormat(42736+i*7,"dd.mm.yyyy")
. Sie können auch einfachNext
anstelle von verwendenNext i
.AHK , 67 Bytes
Hier passiert nichts Magisches. Ich habe versucht, ein kürzeres Mittel zu finden,
FormatTime
aber ich bin gescheitert.quelle
Java 8+,
10410099 BytesJava 5+,
109105104 BytesVerwendet die Datumsfunktionen des
printf
Formats.Testen Sie es selbst!
Ersparnisse
quelle
T-SQL, 94 Bytes
Wenn Sie SQL GOTO oder WHILE nicht mögen, finden Sie hier eine 122-Byte-CTE-Lösung
quelle
08.01.2017
nicht an01.01.2017
Ruby, 60 + 7 = 67 Bytes
Verwendet die
-rdate
Flagge.quelle
Groovy,
8177636056 BytesDas obige kann als grooviges Skript ausgeführt werden.
Mein erster Code Golf Eintrag. Glücklicherweise war das Jahr 1970 kein Schaltjahr und kann daher als Basis verwendet werden.
Dank Dennis, hier ist ein: Probieren Sie es online!
quelle
53.times{printf('%td.%<tm.2017%n',new Date(0)+it*7)}
,, 52 Bytes verschieben. Hier wird die Ehre desC #,
138111102 BytesDank Johan du Toit 9 weitere Bytes gespart !
Dank der Vorschläge von Kevin Cruijssen wurden 27 Bytes eingespart !
Anonyme Funktion, die 2017 alle Sonntage druckt.
Volles Programm mit ungolfed Methode:
quelle
.AddDays(7*i++)
? Dann entfällt die.DayOfWeek<1
Prüfung. Wir wissen, dass der 01.01.2017 ein Sonntag ist und von da an können wir nur noch 7 Tage hinzufügen.System
s drin -System.DateTime
undSystem.Console.Write
?()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));};
using
Anweisungen sollten in die Byteanzahl einbezogen werden.using
Anweisungen zum Ausführen des Codes müssen gezählt werden. Siehe diese Meta-Frage: Muss ich Importe verwenden oder kann ich eine Klassenexplizität nennen?C #,
110109 BytesSie können dieses Programm hier online genießen
In dieser Lösung haben wir:
Verwenden Sie Ole-Automatisierungsdatum (OADate), um "AddDay ()" von Datetime zu vermeiden.
FromOADate()
scheinen groß, aber es ist gleichnew DateTime(2017,1,1)
Starten Sie die Schleife am letzten Sonntag des Jahres 2016. Damit wir
+=
nur mit dem Operator inkrementieren können . Dieser Operator gibt den Wert zurück, nachdem das Inkrement abgeschlossen ist.Erhöhen Sie den Wert um 7 Tage, um von Sonntag zu Sonntag zu springen, bevor Sie das Datum ausdrucken.
Wir hören auf, sobald der letzte Sonntag des Jahres 2017 erreicht ist.
Verwenden SieDebug
anstelle vonConsole
, um zwei Zeichen zu speichernVermeiden Sie explizite Variablendeklaration und -zuweisung
quelle
using System;
und die Umstellung aufConsole
ausDebug
(was ein bisschen zwielichtig selbst ist, aber ich kann Keine Kommentare zu Meta zu finden).Debug
fürConsole
daDebug
ein bestimmtes Include benötigt. Ich habe mich jedoch nicht an das Nutzungssystem gehalten, weil mein Konkurrent in dieser Sprache dies nicht tut. Sie können auch nicht außerhalb einer Klasse codieren, die selbst in einem Namespace definiert werden muss. Ich bin mir ziemlich sicher, dass die meisten C # -Antworten auf dieser Website dies nicht enthalten. Was machen wir nun mit all diesen Antworten im Müll? Stimmen wir sie alle ab, um sie zur Einhaltung zu zwingen? Wenn ja, dann könnte die Community c # genauso gut komplett vom Codegolf verbieten.using
Direktive hinzugefügt oder die Methoden und Typen vollständig qualifiziert werden sollten. Bitte nehmen Sie nichts davon persönlich. Ich bin ein langjähriger C # -Golfer, und ich weiß zu schätzen, wie willkürlich die Regeln scheinen, deshalb schubse ich die Leute gerne in die richtige Richtung, wenn ich kann. Ich habe gezielt C # -Antworten, weil ich in dieser Sache relativ gut informiert bin.using System;
(ich nehme an, das war nicht beabsichtigt), das sind also 109 Bytes.TSQL,
112105 BytesDemo
T-SQL-Konvertierungssyntax
quelle
DAY
indem Sie durch ersetzend
. Es macht das gleiche.'20170101'
mit42734
. Daten sind Anzahl. Zeit ist der Dezimalteil der Zahl.JavaScript (ES6), 123 Byte
Es ist mein erster Beitrag hier, hallo!
Diese Lösung verwendet fest codierte Daten und wurde speziell für das Jahr 2017 entwickelt. Sie basiert auf keinen Datums- / Uhrzeit-APIs.
Was die Ziffern in der Zeichenfolge betrifft
155274263153
, so ist jede Ziffer eine eigene Zahl und bezeichnet den ersten Sonntag eines jeden aufeinanderfolgenden Monats. Die Ausgabe für das gesamte Jahr kann durch sukzessives Hinzufügen von 7 zu diesen generiert werden.Was ist mit der magischen Zahl
2633
, die in der Schleife verwendet wird?Nun ...
2633
(dezimal) ist101001001001
binär. Was könnte das nun1
bedeuten? Von rechts beginnend wird das 1., 4., 7., 10. und 12. Bit gesetzt. Dies entspricht Monaten, die zufällig fünf Sonntage haben, im Gegensatz zu denen, die nur vier haben. Golfed bis zu diesem ordentlichen Ausdruck, sah es zunächst so aus:for(j=0;j<4+ +[0,3,6,9,11].includes(i);j++)
.Ich denke, die restlichen Teile sind ziemlich selbsterklärend.
quelle
ECMAScript 2015
zuJavascript (ES6)
, aber ... Sie brach mein Code und ich musste es zurück.a=
der Code eigentlich kaputt .T-SQL,
7977 BytesNachdem er Salman A geholfen hat, seine Antwort zu verbessern . Ich habe mich entschieden, meine eigene mit einer Schleife und zu schreiben
PRINT
.Ich endete mit dieser 90-Byte-Lösung.
Dann habe ich mir den aktuellen Leader in T-SQL angesehen, der 94 Bytes von WORNG ALL mit dieser Antwort enthielt . Dieser Typ hatte sehr gute Tricks gefunden.
@
GOTO
anstelle von LOOPFORMAT
anstelle vonCONVERT
. (Nur SSMS2012 +)Mit diesen Tricks wurde diese Lösung auf die Lösung mit einer Größe von unter 79 Byte gekürzt.
quelle
Oktave , 37 Bytes
Viel kürzer als alle anderen nicht-Golf-Sprachen, und es ist sogar mit Jelly verbunden! Gut gemacht, Octave! :)
Probieren Sie es online!
Zum Glück
2 AD
sieht das Jahr genauso aus wie das Jahr2017 AD
. Beide beginnen und enden an einem Sonntag und keines ist ein Schaltjahr. Das spart eine Menge Bytes, da367:7:737
es ziemlich viel kürzer ist als736696:7:737060
.Hiermit wird die Anzahl der Tage seit dem
01.01.0001
in eine Zeichenfolge im FormatDD.mm
mit einem nachgestellten Wert konvertiert.2017
.quelle
Haskell ,
133.130BytesProbieren Sie es online!
Ohne Kalenderbibliothek
148144140 BytesDies ist lustig, da durch die Verwendung eines Operators für die Füllfunktion zwei Bytes gespart werden, obwohl das zweite Argument nicht verwendet wird, da weniger Klammern erforderlich sind.
p(last l)
ist länger alslast l!l
. Berechnetday/month
Paare, indem der kumulierte Monatsanfang vom Tag des Jahres abgezogen wird. Die Monatsstartdaten werden als (scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]
) komprimiert . Die Monatszahl ist die Anzahl der positiven Elemente und die Tageszahl ist das letzte positive Element.Probieren Sie es online!
quelle
C #,
116114113 Bytesfor(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
Kann in den interaktiven Fenstern von Visual Studio (oder einem anderen auf Roslyn basierenden C # REPL) ausgeführt werden
Bis auf 113 Bytes: Danke an Kevin Cruijssen.
quelle
for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
using System;
,Console.WriteLine(string)