2017'de tüm pazarları yazdır


27

Aşağıdaki biçimde 2017 yılında tüm Pazar günleri tarihlerini yazdır: dd.mm.yyyy.
Beklenen çıktı:

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

1
Pazarlarınızı Olası Dupe Planla ? Bu, belirli bir yıl olsa da.
xnor

1
Ben teslim Planı senin Pazar gönderme önce, ancak belirli bir ayda Pazar yazdırmak ister. @xnor
ShinMigami13

1
Belirli bir çıktı formatı için herhangi bir özel sebep var mı? Biraz açılabilirsin.
Rɪᴋᴇʀ

4
Aslında bu tam metin kolmogorov meydan okuma olarak seviyorum. Tarih formatlama hakkını almak, bazı ilginç optimizasyonlara sahiptir.
xnor

5
Neyse, yakın oyların geri çekilmesi gerektiğini düşünüyorum.
Outgolfer Erik,

Yanıtlar:


16

Python 2 , 81 bayt

x=0
exec"print'%05.2f.2017'%(x%30.99+1.01);x+=7+'0009ANW'.count(chr(x/7+40));"*53

Çevrimiçi deneyin!

Tarih kütüphanesi yok, tarihleri ​​doğrudan hesaplar. Asıl püf noktası, dd.mmondalık değer olarak ele almaktır. Örneğin, 16.04.2017(16 Nisan) sayıya karşılık gelir 16.04. Sayı olarak biçimlendirilmiş basılır xx.xxile .2017ekteki.

Gün ve ay aritmetik olarak hesaplanır. Her hafta 7 gün olarak eklenir x+=7. xModulo alınması , gün sayısı ne kadar büyük olursa 30.99, oradan çıkartarak rollover'ı işler 30.99. Bu -31, günleri sıfırlamak +0.01için ay artışını birleştirir .

Devir her ayın 31 günü olduğunu varsayar. Daha az gün içeren aylar, ile xbelirli hafta sayıları üzerinde yukarı kaydırarak ayarlanır +[8,8,8,17,25,38,47].count(x/7). Bu liste, bu kısa aylarda biten hafta sayılarından üçü ile çıkıyor, 8çünkü Şubat 31 günün 3 günü.

Bu liste ASCII değerleri artı 40 alınarak bir dizgeye sıkıştırılabilir. +40Baskısız karakterleri kullanarak kaymasından kaçınılabilir ve Python 3'te bir bayt nesnesi olarak daha kısa erişilebilir.


Ne güzel bir cevap! '888z!}+'.count(chr(x%146))bir bayt kaydeder.
Lynn

10

PHP, 48 bayt

while($t<53)echo gmdate("d.m.2017
",605e3*$t++);

PHP, 46 bayt (negatif olmayan UTC ofsetleri için)

while($t<53)echo date("d.m.2017
",605e3*$t++);

1
Bu gmdatesaat dilimi güvenliği için olmamalı mı? Onlinephpfunctions.com adresinde başarısız olur. Diğer yönlerden harika işler!
Titus

9

Python 2 , 90 79 bayt

Xnor yardımı ile -5 bayt (haftaları kendi saymaktan kaçının)
xnor sayesinde -1 bayt (605e3 olarak 605e3 e e ekleyin)

from time import*
i=0
exec"print strftime('%d.%m.2017',gmtime(i));i+=605e3;"*53

Çevrimiçi deneyin!

0çağdan bu yana saniyeler, 1 Ocak 1970’te, saat 2017’de artık bir yıl olmadı. 605000saniye, 1 hafta, 3 dakika, 20 saniyedir. Bu "haftaların" 52'sini eklemek bizi gece yarısından öteye götürmez.


İşte aritmetik ilerlemeyi oluşturmanın daha kısa bir yolu .
xnor

@xnor Teşekkürler, ben de aynı şey üzerinde çalışıyordum ve aşağı inmeye çalışıyordum, ama 81 kütüphane yaklaşımı için uygun görünüyor.
Jonathan Allan,

@xnor ... ya da değil.
Jonathan Allan,

1
Güzel! Sayı olabilir 605e3. Yine de bazı fikirlerim var :)
xnor

7

Bash + coreutils, 44 bayt

seq -f@%f 0 605e3 32e6|date -uf- +%d.%m.2017

-uGMT varsayılırsa 2 bayt tasarruf edebilir

  • Teşekkürler Dijital Travma 10 bayt kazandıran -fparamter işaret date;
  • Ve biçim dizesinde kullanılması 2017 Fikir dan fazla bayt kaydeder cevap verdiği user63956

  • @0 1970-1-1
  • 605000bir hafta ( 604800) artı 200 saniye
    • 200 saniye Sadece yılda 52 hafta olduğundan işe yaramalı
  • @32000000 bir yıldan biraz daha fazla

seq -f@%1.f 14833e5 605e3 1515e6|date -uf- +%d.%m.%Y10 bayt kazandırır. Yine de bunu Bash + coreutils olarak iddia etmelisin .
Dijital Travma

7

PowerShell, 51 47

0..52|%{date((date 2017-1-1)+7.*$_)-u %d.%m.%Y}

Yeterince açıksözlü. 2017-01-01 bir Pazar günleridir, takip eden yedi gün boyunca her biri. Sadece hayatım boyunca çalışacak senaryoya ihtiyacımız olursa iki bayt kaydedebiliriz:

0..52|%{date((date 17-1-1)+7.*$_)-u %d.%m.%Y}

1
Bir dize yerine, gün sayısını temsil eden bir çift eklerseniz, birkaç bayt kaydedebilirsiniz (date 2017-1-1)+7.*$_. Bu cevabı
Danko Durbić

@ DankoDurbić: Ah, vay. intŞimdiye kadar sadece günlerce keneler ve ipler eklemeyi biliyordum . Bilmek iyi oldu.
Joey

5

Excel VBA 106 91 79 bayt

Sub p()
For i = #1/1/2017# To #12/31/2017#
If Weekday(i) = 1 Then MsgBox i
Next
End Sub

@Radhato sayesinde 15 byte kurtarıldı

1/20 / 17'nin Pazar olduğunu farz edersek, 12 bayt daha tasarruf edersiniz.

Sub p()
For i = #1/1/2017# To #12/31/2017#
MsgBox i
i = i + 6
Next
End Sub

Thanks @Toothbrush 66 bayt

Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Sub

Düzenleme: (Alt ve Son Alt gerekli değildir) 52 bayt

For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next

Chanching geliştirilebilir i 42736 43100 To = For için 1/1/2017 # # 12 /31/2017 # To i # = için sonra sadece ile değiştirerek (...) Biçim çıkarıp i
Radhato

@Radhato ama bu byte boyutunu artırmaz mı?
Rohan,

Sanırım bunu 96'ya düşürüyor .. en azından şu lol
Radhato

Evet yaptı. Teşekkürler
Rohan

1
@newguy Sub p:For i=#1/1/2017# To #12/31/2017#:MsgBox i:i=i+6:Next:End Submükemmel VBA kodu geçerlidir ve sadece 66 bayttır. VBA Editörünün fazladan boşluklara eklemesiyle ilgisi yoktur.
Diş Fırçası

4

PHP, 67 bayt

PHP, bildirilmemiş döngü değişkenlerine otomatik olarak 1 değerini atar ve Linux dönem zamanlarını kullanarak,

<?php for(;54>$t+=1;)echo date("d.m.Y\n",604800*($t)+1482624000);?>

PPCG'ye Hoşgeldiniz! Bunun 59 bayt olarak sayılabileceğine inanıyorum (PHP'de kendim golf oynamama rağmen).
Jonathan Allan,

4
<?for(;54>++$t;)echo date("d.m.Y\n",605e3*$t+148263e4);sadece iyi olmalı
tsh

2
Bazı yeni PHP oyuncularını görmek her zaman güzeldir! Sen kullanma izni php -rihtiyacınız kalmaz <?phpve ?>bu sayabilir ve bu nedenle 59 bytes@JonathanAllan doğru söylediği gibi. Etraftaki dirseklere ihtiyacın yok $t. Birkaç diğer çoraplar ve ile bitirmek for(;++$t<54;)echo date("d.m.Y\n",605e3*$t+14827e5);için 51 bytes(benim saat diliminde). "\ N" yerine sadece 1 bayt olan gerçek bir satır sonu verebilirsiniz, bu nedenle 51 bayttır.
Christoph

1
Thanks
@Christoph

Diğer tüm ipuçlarının yanı sıra, saat dilimi güvenliği gmdateyerine kullanmak isteyebilirsiniz date.
Titus,

4

k6, 32 bayt

`0:("."/|"."\)'$2017.01.01+7*!53

Kısa açıklama:

                2017.01.01+7*!53 /add 0, 7, 14, ..., 364 to January 1st
   ("."/|"."\)'$                 /convert to string, turn Y.m.d into d.m.Y
                                 /   split by ".", reverse, join by "."
`0:                              /output to stdout (or stderr), line by line

Ne yazık ki, bu yalnızca kapalı kaynaklı, istek üzerine tercüman olarak çalışıyor gibi görünüyor.

Komutu kapalı kaynak yorumlayıcısında çalıştırma.


4

Pyke , 26 24 bayt

53 Fy17y"RVs6)c"%d.%m.%Y

Çevrimiçi deneyin!

53 F                     - for i in range(53):, printing a newline between each
    y17y"                -  Create a time object with the year 2017. (Month and days are initialised to 1.)
         RV  )           -  Repeat i times:
           s6            -   Add 1 week
              c"%d.%m.%Y -  Format in "dd.mm.yyyy" time

Veya 11 bayt

Çıkış biçimini yoksaymaya izin verilirse

y17y"52VDs6

Çevrimiçi deneyin!

y17y"       - Create a time object with the year 2017. (Month and days are initialised to 1.)
     52V    - Repeat 52 times:
        D   -  Duplicate the old time
         s6 -  Add 1 week

3

R, 79 67 58 bayt

cat(format(seq(as.Date("2017/01/01"),,7,53),"\n%d.%m.%Y"))

Ocak ayının ilk günü pazar olan bu kod parçası, 01-01-2017'den 31-12-2017'ye kadar her 7 günde bir, onları istenen formata biçimlendirerek yazdırmak için bir gün dizisi oluşturur.


Bu 41 bayt için aşağı getirmelidirprint(as.Date("2017-01-01")+seq(7,365,7))
saymak

@count Teşekkürler, ancak gerekli çıktıyı yazdırmaz (yani "2017/01/01" yerine "2017.01.01")
plannapus

3

Befunge-98 (PyFunge) , 99 95 93 85 bytes, İzleyen yeni satır

Tüm optimizasyonlar @JoKing tarafından yapıldı, çok teşekkürler

s :1g2/10g\%:d1p10g\`+:b`#@_:1\0d1g#;1+:a/'0+,a%'0+,'.,j;a"7102"4k,d1g7+
>8><><>><><>

Çevrimiçi deneyin!

Burada biraz eziyetçilikten mahrum olduğumuzu hissettim, bu yüzden en sevdiğim Esosteric dilinde bir çözüm yaptım.

Açıklama :
>8><><>><><>12 ayın uzunluğunu kodlar
sEski gününü boş alanda
:1g2/saklayın Alt satırdan bir ASCII değeri alın ve bunu ikiye bölün, bu bize verilen ayın uzunluğunu verir Ör: ASCII = 8 2 = 28 => ay (Şubat) 28 gün vardır
10g\%önceden kaydedilmiş gün alın ve bize bir sonraki aya içine tarihini geçiş sağlayan ayın uzunluğu onu modulo
:d1pyeni güncellenmiş gün bir kopyasını kaydet
10g\`+eski tarihten eğer Testi > yeni tarih => sonraki aya geçtik => ay sayacına 1 ekle
:b`Ay sayacı> 11 ise yılın sonuna ulaştığımızı test edin (0 dizin oluşturma kullanarak)
#@_Programı sonlandırdıysanız
:1\0d1gyığını yeniden sıralayın bu yüzden şöyle görünüyor:Month, 1, Month, 0, Day
#sonraki talimatı atla (duh)
1+:a/'0+,a%'0+,'.,Sayıyı 1 indekslemeye dönüştürün, yazdırın, .sonuna ekleyin Bir sondan atlamak için 0'ı
j;kullanın ve ;tekrar yazdırma programına gitmek için kullanın, ardından ;sonraki atlamak için 1'i kullanın time
a"7102"4k,Yazdır 2017\n
d1gGün değerini tekrar al Tekrar 7+etmeden önce bir hafta ekle


@JoKing Omc böyle bariz bir optimizasyon! Bunu nasıl kaçırmış olabilirim? Teşekkür ederim.
IQuick 143

1
Birkaç bayt daha. Çevrimiçi deneyin! Biri -17 atlamasını değiştirmek yerine bir yorumu yapmak, biri ay sayacı için 0 tabanlı dizin oluşturmak ve birini bir liner olarak değiştirmek
Jo King

@JoKing Wow orada çok golf oynadı. Lemme cevabı ekle.
IQuick 143

1
Cehennem, neden 0 günlerini de endeksli yapmıyorsunuz ve herhangi bir başlangıç ​​işlemini yapmak zorunda kalmadan tasarruf edin! 85 byte
Jo King

3

JavaScript, 111 106 bayt

for(i=14833e8;i<1515e9;i+=605e6)console.log(new Date(i).toJSON().replace(/(....).(..).(..).*/,'$3.$2.$1'))

Not: Stack Exchange'in konsolu listenin tamamını görüntülemek için yeterince uzun değil, bu yüzden ayrı bir snippet olarak ilk yarı:

for(i=14833e8;i<15e11;i+=605e6)console.log(new Date(i).toJSON().replace(/(....).(..).(..).*/,'$3.$2.$1'))

Özel format bana 40 byte eder ...


2

Perl 5 , 64 bayt

use POSIX;print strftime"%d.%m.%Y\n",0,0,0,7*$_+1,0,117for 0..52

Çevrimiçi deneyin!

Verilen görev 2017 idi, herhangi bir yıl değil, bu yüzden kod yazdım:

  • 117 (2017 yılı için yapıldığı, 1900 + 117)
  • +1, 1 Ocak 2017’de pazar
  • 0..52 çünkü 2017'de 53 pazar var

POSIX bir çekirdek modüldür ve her zaman Perl5 ile kurulur. Aynısını 101 byte modül kullanmadan yapmak, boşlukları kaldırmak:

$$_[5]==117&&printf"%02d.%02d.%d\n",$$_[3],$$_[4]+1,$$_[5]+1900
  for map[gmtime(($_*7+3)*86400)],0..1e4

2

Ruby, 75 bayt

Tarihleri ​​bulmak için basit bir çözüm Time.

t=Time.new 2017
365.times{puts t.strftime("%d.%m.%Y")if t.sunday?
t+=86400}

1
Bir hafta eklerseniz (604800 saniye), bir pazar günü kontrol etmeniz gerekmez, sadece 53 kez tekrarlayın.
GB

1
@GB tarafından önerilen hileyi yaparsanız ve artık Pazar gününü kontrol edemezseniz, -1 ile başlayabilir t=Time.new 1ve t.strftime"%d.%m.2017"-1 bayt için de başlatabilirsiniz .
Value Ink

2

SAS, 52 50 bayt

@ User3490 sayesinde 2 bayt kaydedildi.

data;do i=20820to 21184 by 7;put i ddmmyyp10.;end;

Bir veri kümesi belirtmeniz gerekmez - data;bunun yerine sadece kullanın data c;ve bu 2 bayt kazandırır. Bir şeye ihtiyacın olduğunu düşünüyorum run;.
kullanici3490

@ user3490 Teşekkürler, bunun farkında değildim. Sanırım eşdeğeri bu data _null_mu? Ayrıca, runifade eksik ise ima edilir.
J_Lard

Tam olarak eşdeğer değil - datanadlandırma kurallarını izleyen bir çıktı veri kümesi ile bitiyorsunuz.
user3490

2

Mathematica 90 84 bayt

Oldukça wordy. numbermaniac ve Scott Milner, sırasıyla 5 ve 1 bayt kaydetti.

Column[#~DateString~{"Day",".","Month",".","Year"}&/@DayRange["2017","2018",Sunday]]

İhtiyacın var Most@mı? Çıktı onsuz aynı görünüyor.
numbermaniac

1
@ sayı_maniac, teşekkürler. Most2018’deki ilk Pazar’dan kaçınmak için oradaydım. MostYıllar boyunca, 2011 yılını almadan kodu ilk defa test etmiştim , bu durumda 2012’de ilk Pazar çıktı. (Bu yüzden kodun içine dahil ettim.) Garip bir şekilde, Most2017-18 için gerekli değil. Ne de yok Mostsonucundaki herhangi belirgin bir etkiye sahiptir. Gizemli!
DavidC,

1

VBA, 81 bayt (belki 64)

Sub p()
For i = 0 To 52
MsgBox format(42736 + i * 7, "dd.mm.yyyy")
Next i
End Sub

İlk gönderim. Hafta içi çekleri kaldırarak ve her 7. günde bir belirterek newguy çözümü üzerine inşa. Tarihlerin kaldırılması 12 baytlık bir parça kazandırır. 42736 1/1/2017. Çıkış tarihi formatı sistem ayarlarına bağlıdır. Buna izin var mı? Öyleyse, 64 bayttır, çünkü format metoduna ihtiyacınız yoktur .

MsgBox #1/1/2017# + i * 7

Ayrıca otomatik biçimlendirilmiş beyaz alanın çoğunu da kaldırabilirsiniz . Örneğin ve For i=0To 52ve Format(42736+i*7,"dd.mm.yyyy"). Ayrıca, sadece Nextyerine kullanabilirsiniz Next i.
Mühendis Toast

1

AHK , 67 bayt

d=20170101
Loop,52{
FormatTime,p,%d%,dd.MM.yyyy
Send,%p%`n
d+=7,d
}

Burada büyülü bir şey olmaz. Daha kısa bir yol bulmaya çalıştım FormatTime ama başaramadım.


1

Java 8+, 104 100 99 bayt

()->{for(int t=0;t<53;)System.out.printf("%1$td.%1$tm.2017%n",new java.util.Date(t++*604800000L));}

Java 5+, 109 105 104 bayt

void f(){for(int t=0;t<53;)System.out.printf("%1$td.%1$tm.2017%n",new java.util.Date(t++*604800000L));}

printfFormatın tarih özelliklerini kullanır .

Kendin test et!

Tasarruf

  1. 104 -> 100: döngü değerlerini ve çoklu kopyayı değiştirdi.
  2. 100 -> 99: döngü attı

1

T-SQL, 94 Bayt

DECLARE @ INT=0,@_ DATETIME='2017'W:SET @+=1SET @_+=7PRINT FORMAT(@_,'dd.MM.yyy')IF @<52GOTO W

SQL GOTO veya WHILE'ı beğenmediyseniz, işte 122 baytlık bir CTE çözümü:

WITH C AS(SELECT CAST('2017'AS DATETIME)x UNION ALL SELECT x+7FROM C WHERE X<'12-31-17')SELECT FORMAT(x,'dd.MM.yyy')FROM C

İlk çözüm başlar 08.01.2017değil01.01.2017
grabthefish

1
Çözümünüzde çok iyi hileler. Aferin. Onları ödünç almak için direnemedim. ;)
AXMIM

1

Ruby, 60 + 7 = 67 bayt

-rdateBayrağı kullanır .

(d=Date.new 1).step(d+365,7){|d|puts d.strftime"%d.%m.2017"}

1

Groovy, 81 77 63 60 56 bayt

d=new Date(0);53.times{printf('%td.%<tm.2017%n',d);d+=7}

Yukarıdaki groovy script olarak çalıştırılabilir.

İlk kod golf girişim. Neyse ki, 1970 yılı artık bir yıl değildi, dolayısıyla üs olarak kullanabilir.

Dennis sayesinde, işte burada: Çevrimiçi deneyin!


Programlama Bulmacaları ve Kod Golf'üne Hoş Geldiniz! İlgileniyorsanız, işte kalıcı bir bağlantı: Çevrimiçi deneyin!
Dennis,

Thank you @Dennis Bunun olduğunu bilmiyordum :)
Krystian

Zaman bloğu 53.times{printf('%td.%<tm.2017%n',new Date(0)+it*7)}, 52 byte içindeki tarihi hareket ettirerek dört byte kaydedebilirsiniz . Burada
groovy'nin

1

C #, 138 111 102 bayt

Johan du Toit sayesinde 9 bayt daha kaydedildi !

Kevin Cruijssen'in önerileri sayesinde 27 bayt kaydedildi !

()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));}

2017'de tüm pazar günlerini basan anonim işlev.

Ungolfed yöntemi ile tam program:

using System;

class P
{
    static void Main()
    {
        Action f =
        ()=>
        {
            for (int i = 0; i < 53; )
                Console.Write(new DateTime(2017, 1, 1).AddDays(7 * i++).ToString("dd.MM.yyyy\n"));
        };



        f();
    }
}

1
Sadece kullanımı daha kolay değil .AddDays(7*i++)mi? O zaman .DayOfWeek<1çeke gerek yok . 01-01-2017'nin Pazar olduğunu biliyoruz ve oradan 7 gün eklemeye devam edebiliriz.
Kevin Cruijssen

2
Bundan emin değilim - aldığım tüm kod golflerinde, her zaman tam ad alanını kullandım - ama Systemorada bazılarını kaçırmıyor musunuz - System.DateTimeve System.Console.Write?
auhmaan

Harika ama bir kaç bayttan tasarruf edebilirsin:()=>{for(int i=0;i<53;)Console.Write(new DateTime(2017,1,1).AddDays(7*i++).ToString("dd.MM.yyyy\n"));};
Johan du Toit

@auhmaan: Evet, ya tam ad alanları kullanılmalı ya da usingifadeler bayt sayısına dahil edilmelidir.
raznagul

3
@ adrianmp: usingKodu çalıştırmak için gerekli ifadeler sayılmalıdır. Bu Meta soruya bakın: İthalat kullanmam gerekiyor mu veya bir sınıf açıklığı diyebilir miyim?
raznagul

1

C #, 110 109 bayt

using System;()=>{for(int i=42729;i<43100;Console.Write(DateTime.FromOADate(i+=7).ToString("dd.MM.yyy\n")));}

Çevrimiçi olarak bu programın tadını çıkarabilirsiniz

Bu çözümde biz:

  • Datetime zamanından "AddDay ()" kullanmaktan kaçınmak için OLE Otomasyon Tarihi'ni (OADate) kullanın.
    FromOADate()büyük gibi görünüyor ama buna eşitnew DateTime(2017,1,1)

  • Döngüyü 2016'nın son pazar günü başlatın +=. Yalnızca operatörle artmamızı sağlamak için. Bu operatör, artış yapıldıktan sonra değeri döndürür.

  • Tarihi basmadan önce pazardan pazara atlamak için 7 gün artırın.

  • 2017'nin son pazarına çıktıktan sonra durduk.

  • İki karakter kaydetmek için Debugyerine kullanınConsole

  • Açık değişken bildirimde ve atamada bulunmaktan kaçının


Aksi belirtilmedikçe, bizim varsayılan bir sağlamalıdır demek fonksiyonu veya programı (yani bir pasajı), ve ihtiyaç hata ayıklama ve DateTime nitelemek : Ben eklemenizi öneririz using System;ve geçiş Consoledan Debugkendisi çok tehlikeli biraz olan (ama can meta ile ilgili herhangi bir yorum bulamadım).
VisualMelon

1
Ben uyulması ettik @VisualMelon "bir işlev sağlamak" ve ben de yerine gelmiş Debugiçin Consoleyana Debugdahil bir spesifik gerektirdi. Ancak, 'kullanım sistemine' uymadım çünkü bu dilde rakibim bunu yapmıyor. Ayrıca, bir ad alanı içinde tanımlanması gereken bir sınıfın dışında kodlayamazsınız. Eminim bu sitedeki çoğu c # cevabı buna dahil değildir. Peki şimdi ne, tüm bu cevapları çöpe mi atıyoruz? Uymaya zorlamak için hepsini oyluyor muyuz? Öyleyse, topluluk c # kodgorisinden tamamen yasaklayabilir.
AXMIM

Bu 'kurallar' topluluğun zaman içinde oturduğu şeydir (ve metade belgelenmiştir). Cevapları reddetmiyoruz, yorum yapıyoruz ve onları da reddetmiyoruz. Onları düzelttiklerinde, oy vermekte özgürüz. Her iki diğer C # cevabı da usingdirektifi eklemeleri gerektiğini ya da yöntemleri ve türlerini tam olarak nitelendirebilmelerini öneren yorumlara sahiptir , lütfen bunların hiçbirini kişisel olarak kabul etmeyin. Uzun zamandır C # golfçüsüyüm ve kuralların ne kadar keyfi olduğunu takdir ediyorum, bu yüzden insanları elimden geldiğinde doğru yönde dürtmek istiyorum. Özellikle 'C' cevaplarını 'hedefliyorum' çünkü konuyla ilgili oldukça iyi bilgim var.
VisualMelon

1
@ VisualMelon Yeterince adil, ben sadece zaten burada bir yoldan geçenlerim. Ben buradayken kurallarını kabul edeceğim. Bu nedenle cevabımı bu sefer uygun hale getirmeye çalıştım.
AXMIM

1
Bana iyi görünüyor! Orijinal yaklaşım için +1. Ve sonra boşluğa ihtiyacınız yok using System;(Sanırım kasıtlı değildi) yani 109 bayttır.
VisualMelon

1

TSQL, 112 105 bayt

SELECT CONVERT(VARCHAR,DATEADD(d,number*7,42734),104)FROM master..spt_values WHERE type='p' AND number<53

gösteri

T-SQL Sözdizimini Dönüştür


Sen değiştirerek 2 bayt kaydedebilirsiniz DAYtarafından d. Aynı şeyi yapar.
AXMIM

1 Sen değiştirerek başka 3 bayt kaydedebilirsiniz '20170101'ile 42734. Tarihler sayıdır. Zaman sayının ondalık kısmıdır.
AXMIM

1

JavaScript (ES6), 123 bayt

Bu benim ilk gönderim, merhaba!

a=x=>`0${x}.`.slice(-3);[].map.call('155274263153',(x,i)=>{for(j=0;j<4+(2633>>i&1);j++)console.log(a(+x+j*7)+a(i+1)+2017)})

Bu çözüm kodlanmış verileri kullanır ve özellikle 2017 yılı için çalışmak üzere tasarlanmıştır. Tarih / saat API'lerine dayanmaz.

Dizideki rakamlara gelince 155274263153, her rakam kendi başına bir sayıdır ve ardışık her ayın ilk Pazar günü anlamına gelir. Tüm yıl için çıktılar bunlara art arda 7 eklenerek üretilebilir.

Döngüde 2633kullanılan sihirli sayıdan ne haber ?
Şey ... 2633(ondalık) 101001001001ikili dosyada. Şimdi bunların 1anlamı ne olabilir ? Sağdan başlayarak 1., 4., 7., 10. ve 12. bitler ayarlanır. Bu, sadece dört olanların aksine, beş Pazar olan aylara karşılık gelir. Bu düzgün ifade aşağı golfed, başlangıçta bu benziyordu: for(j=0;j<4+ +[0,3,6,9,11].includes(i);j++).

Kalan kısımların yeterince açıklayıcı olduğunu tahmin ediyorum.


@SIGSEGV: değişiyorum sakıncası ECMAScript 2015için Javascript (ES6)benim kodunu kırdı ve bunu dönmek zorunda ... ama.
gergedan

Oh, bu toplumun fikir birliği, sadece lambda kısmına izin veriliyor.
Matthew Roh

@ SIGSEGV Bu burada böyle değil. Bu lambda kodun sadece küçük bir kısmını içerir ve bu tanımlayıcıyı başka bir yerde kullanabilmem için ihtiyacım var. a=Kod olmadan aslında bozuldu .
gergedan

1

T-SQL, 79 77 Bayt

A'ya yardım ettikten sonra cevabını geliştir . Kendimi bir döngü kullanarak yazmaya karar verdim ve PRINT.

Bu 90 baytlık çözümle bitirdim.

DECLARE @d DATETIME=42734 WHILE @d<43100BEGIN PRINT CONVERT(VARCHAR,@d,104)SET @d=@d+7 END

Daha sonra bu yanıtla WORNG ALL'dan 94 bayt olan T-SQL'deki mevcut lidere baktım . Bu adam çok iyi numaralar buldu.

  1. Yalnızca değişkeni adlandırın @
  2. GOTOGerçek LOOP yerine döngü
  3. FORMATBunun yerine kullanarak bir karakter kaydedin CONVERT. (Yalnızca SSMS2012 +)

Bu hileler kullanılarak, bu çözelti, 79 bayt olan aşağıdaki çözüme indirgenmiştir.

DECLARE @ DATETIME=42734G:PRINT FORMAT(@,'dd.MM.yyy')SET @+=7IF @<43100GOTO G

@ = @ + 7 ila @ + = 7 değiştirerek ve 7 ile IF arasındaki boşluğu kaldırarak 2 bayt tasarruf edebilirsiniz.
WORNG ALL

Bu yazıda tüm püf noktaları nerede, size de yardımcı olabilir.
WORNG ALL

1
@WORNGALL acayip, bunu yapabileceğimizin farkında değildim. Çok teşekkürler.
AXMIM

1

Octave , 37 bayt

Diğer golf dışı dillerden çok daha kısa ve hatta Jelly ile bile bağlı! Octave gitmek için yol! :)

disp(datestr(367:7:737,'DD.mm.2017'))

Çevrimiçi deneyin!

Neyse ki, yıl 2 ADtam olarak yıl aynı görünüyor 2017 AD. Her ikisi de Pazar günü başlar ve biter ve artık artık bir yıl değildir. Bu, bayttan çok tasarruf sağlar, çünkü 367:7:737bundan biraz daha kısadır 736696:7:737060.

Bu, o zamandan beri geçen gün sayısını, izleyen bir 01.01.0001biçimdeki dizgeye dönüştürür .DD.mm.2017


1

Haskell , 133 130 bayt

import Data.Time.Calendar
((\[f,g,h,i,j]->i:j:'.':f:g:".2017\n").drop 5.show)=<<take 53(iterate(addDays 7)$fromGregorian 2017 1 1)

Çevrimiçi deneyin!

Takvim kitaplığı olmadan, 148 144 140 bayt

(\l->last l!l++length l!l++"2017\n").fst.span(>0).(<$>scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]).(-)=<<[1,8..365]
a!_=['0'|a<=9]++show a++"."

Bu komik dolgu fonksiyonu için Operatör kullanarak beri daha az parantez ihtiyaç vardır çünkü ikinci argüman, kullanılmamış olmasına rağmen iki bayt kaydeder - p(last l)olduğu daha uzun last l!l. day/monthKümülatif ay başlangıç ​​tarihlerini yılın gününden çıkararak çiftleri hesaplayarak çalışır . Ayın başlangıç ​​tarihleri ​​( scanl((+).(+28))0[3,0,3,2,3,2,3,3,2,3,2]) olarak sıkıştırılır . Ay numarası, olumlu unsurların sayısıdır ve gün sayısı da son olumlu unsurdur.

Çevrimiçi deneyin!


0

C #, 116 114 113 bayt

for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(‌​new DateTime(i).ToString("dd.MM.yyyy\n"));

Visual Studio'nun etkileşimli pencerelerinde çalıştırılabilir (veya Roslyn'i temel alan diğer herhangi bir C # REPL).

113 bayta kadar: Kevin Cruijssen sayesinde.


1
Bir TryItNow bağlantısı ekleyebilir misiniz ? Ayrıca şunları yapabilirsiniz golf o kullanarak bir bit yerine bir süre-döngü-döngü için:for(long i=(long)636188256e9;i<636502857e9;i+=(long)605e10)Out.Write(new DateTime(i).ToString("dd.MM.yyyy\n"));
Kevin Cruijssen

@KevinCruijssen Maalesef, verilen sayfada uygun bir derleyici bulamıyorum. Bununla temasa geçmek isterseniz, kullanılan teknolojiye bir link: link . Neyse yeni döngü için teşekkürler. :)
rmrm

1
Aksi belirtilmedikçe, varsayılanlarımız bir işlev veya program sağlamanız gerektiğini (örneğin bir snippet değil) ve Debug ve DateTime öğelerini nitelemeniz gerektiğini söyler : ekleme using System;ve kullanmanızı öneririmConsole.WriteLine(string)
VisualMelon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.