Prime Mittwochs

22

Prime Mittwochs

Ihre Aufgabe ist es, die Anzahl der Mittwoche zu zählen, die auf einen Haupttag des Monats in einem bestimmten Jahr fallen. Zum Beispiel 7-13-16ist ein Prime Mittwoch. Verwenden Sie aus Gründen der Konsistenz für alle Daten den gregorianischen Kalender .

Eingang

Die Eingabe für Ihr Programm / Ihre Funktion erfolgt in einem Jahr (z. B. 2016) und ist flexibel. Das Jahr wird eine ganze Zahl zwischen 1912 und 2233 einschließlich sein.

Ausgabe

Die Ausgabe ist auch flexibel und sollte die Anzahl der Primemittwochs (z 18. B. ) sein.

Wertung

Das ist also gewinnt der kürzeste Code in Bytes!

Testfälle

Eingabe -> Ausgabe
--------------------
1912 -> 19
1914 -> 16
1984 -> 17
1996 -> 19
2063 -> 19
2150 -> 16
2199 - > 18
2233 -> 18

NichtlinearFruit
quelle

Antworten:

7

MATL , 38 36 34 Bytes

FT+"@llI$YO]q&:t8XO!s9\~)9#1$ZOZps

Probieren Sie es online! Oder überprüfen Sie alle Testfälle (dauert einige Sekunden).

Erläuterung

FT+     % Input year implicitly. Add [0 1] element-wise. Gives array with input year
        % and next year
"       % For each of those two years
  @     %   Push year
  ll    %   Push 1 twice. This indicates January 1.
  I$YO  %   Convert year, month, day to serial date number
]       % End for each. We now have the serial date number for January 1 of the input
        % year and that of the following year
q       % Subtract 1 to the latter, to yield December 31 of the input year
&:      % Inclusive range between those two numbers. This gives an array of serial date
        % numbers for the whole input year
t       % Push another copy of that array
8XO     % Convert to date string with format 8. This gives weekday as "Mon", "Tue" etc.
        % The result is a 3-column 2D char array, where each row is a day
!s      % Transpose, sum of each column. 'Wed' gives 288 (sum of ASCII codes)
9\~     % 288 gives 0 modulo 9, and is the only weekday to do so. So we compute modulo 9
        % and negate. This gives true for Wednesdays, false for the rest
)       % Apply as logical index into the array of serial date numbers
9#1$ZO  % Array of month numbers corresponding to those serial date numbers
Zp      % Array that contains true for prime numbers, false for the rest
s       % Sum of array. Display implicitly
Luis Mendo
quelle
Ich bin überzeugt, dass MATL bei datumsbasierten Herausforderungen nicht zu übertreffen ist. Wir sollten DATL erstellen, das weiter optimiert ist, um datumsbasierte Herausforderungen zu bewältigen.
Suever
@ Suever Haha, schöner Name
Luis Mendo
20

Python 2, 95 93 68 67 Bytes

lambda y:0x10ea2c8dbb06c5619/5**((y+((y-22)/99-y/2002)*16)%28)%5+16

Vielen Dank an @Josay für das Golfen ab 1 Byte!

Teste es auf Ideone .

Dennis
quelle
3
Sie können 1 Zeichen mit 0x10ea2c8dbb06c5619anstelle von speichern 19501370182350951961.
SylvainD
Ich verstehe die Idee von, big_constant//5**long_expressionaber wie um alles in der Welt sind Sie mit dieser Konstante und diesem Ausdruck gekommen? Es ist verrückt: D
Sherlock9
2
Die Konstante ist eine einfache Nachschlagetabelle, die fünf Ziffern zur Basis verwendet, aber in zehn Ziffern zur Basis konvertiert wird, sodass die Ziffern numerisch extrahiert werden, anstatt einen Zeichenfolgenindex zu verwenden. Der Ausdruck sieht für mich wie ein ewiger Kalender aus. (Das Problem wäre zu einfach, wenn es auf Jahre von 1901 bis 2099 beschränkt wäre, da die Antworten alle 28 Jahre in diesem Intervall wiederholt würden. Es wäre also nur ein Fall, das Jahr 28 zu nehmen und es in der Tabelle nachzuschlagen. )
Neil
13

Brain-Flak , 6588 , 2310 , 2308 , 2290 Bytes

Zuerst habe ich nicht annähernd 100% dieses Programms geschrieben, was wahrscheinlich an der enormen Größe des Programms zu erkennen ist. Der größte Teil dieses Codes wurde von meinem eigenen Brain-Flak-Golfalgorithmus geschrieben . Zusammen mit einem zusätzlichen Python-Skript habe ich geschrieben, um es in die richtige Richtung zu lenken.

Probieren Sie es online!

({}<(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()())){}{}){})[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])()())[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])())()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())[()()()])())())[()])[()])()()())[()()])()())[()()()()])()())())[()()])())()())[()()()()])())()()())[()()()])()())[()()()])()())[()]))())()())[()()()()])())()()())>[(((((((((()()()()())){}{}){}){}){}){}[()]){}){}){}]){({}[()]<{}>)}{}({}<{{}}>)

Während dieses Programm für Codegolf ziemlich lang ist, ist es für Brain-Flak wirklich ziemlich kurz. Derzeit liegt der Weltrekord für die Ganzzahldivision bei über 1000 Bytes.

Erläuterung

Der Algorithmus ist recht einfach. Da nur eine begrenzte Anzahl von Jahren verfügbar ist (321), werden die Antworten einfach in umgekehrter Reihenfolge unter die Eingabe verschoben und mithilfe eines Nachschlage-Algorithmus die richtige Antwort gefunden. Während das Hardcodieren aller 321 Möglichkeiten bei einer so komplexen Aufgabe und einer so esoterischen Sprache wie Brain-Flak als ineffizient erscheint, ist es möglicherweise die beste Lösung. (Ich plane es in der kommenden Woche herauszufinden).

Da die meisten der 321 Zahlen im Durchschnitt etwa 18 sind und sich von Jahr zu Jahr nur geringfügig unterscheiden, anstatt alle Zahlen einzeln zu drücken, drücke ich das erste Jahr (2233) normal und dupliziere und ändere dann den Wert für jedes Jahr ein wenig nach. Auf diese Weise zahle ich nicht für das Drücken von ~ 18 für alle 321 Jahre, sondern nur für das Drücken von ~ 2 für jedes Jahr.

Sobald alle Antworten gepusht wurden, subtrahiert es 1912 von der Eingabe. ({}[(((((((((()()()()())){}{}){}){}){}){}[()]){}){}){}])(Dies kann suboptimal sein. Ich habe das Optimierungsprogramm neu geschrieben, um bestimmte Werte zu überspringen, von denen ich glaube, dass sie nicht optimal sind, da die Hardcodierung von Zahlen ein überexponentieller Prozess ist und die Ausführung möglicherweise abgeschlossen ist ein paar Tage gedauert).

Es subtrahiert dann eins vom ersten Element und fügt das zweite Element ein, bis das Ergebnis Null erreicht {({}[()]<{}>)}.

Es wird die Null {}und alle Elemente unter dem obersten Element eingefügt ({}<{{}}>).

Weizen-Assistent
quelle
Was ist die allgemeine Herangehensweise an das Golfen mit Zahlen?
Neil
Die einfache Idee ist, wenn Sie eine Zahl mit den Faktoren n und m haben, n m-1 mal zu drücken und dann m-1 mal zu popen. Der anfängliche Push wird als n und jeder Pop als zusätzliches n gewertet, was (1 + m-1) (n) ergibt, was dasselbe wie mn ist. Dies geschieht rekursiv, weil wir, um n zu drücken, auch n spielen müssen. Da diese Methode bei einigen Zahlen, insbesondere bei Primzahlen, nicht gut funktioniert, schauen wir uns auch um, ob sich eine effizientere Zahl in der Nähe befindet, und drücken dies in der Summe dieser Zahl und der Differenz aus.
Weizen-Assistent
Ich verstehe ... also zwei zahlen gegeben nund mwelche längen haben kund lich nehme an n+mhätte länge k+l? Was ist n*m?
Neil
n*mwäre k+4m-4oder l+4n-4. Dies liegt daran, dass die Multiplikation fest codiert ist. Wir schieben erstmal n m-1. Dazu benötigen wir Symbole, um die Schübe kauszudrücken, nund 2m-2Symbole, um die Schübe auszudrücken (jeder Schübe besteht aus 2 Symbolen). Dann knallen wir m-1mal und 2m-2kosten uns zusätzlich (Knallen kosten auch 2 Symbole). Dies summiert sich auf k+4m-4. wir können auch multiplizieren m*n(kommutative Eigenschaft), um zu bekommen l+4n-4. Das Ergebnis ist das kürzere der beiden.
Weizen-Assistent
1
Naja, wenn das stimmt, dann +1kostet es 2, *2kostet 4, *3kostet 8, *4kostet 12, was teurer ist als *2*2, also nicht wert (von Zahlen unter 1000 habe ich nur 10 gefunden, die nicht benutzt wurden *2: 1, 2, 3 4, 5, 9, 15, 27, 45, 135). Für 1912 war das Beste, was ich tun konnte, ((((((1+1+1)*2+1)*2*2+1)*2+1)*2+1)*2+1)*2*2*2eine Länge von 52.
Neil
7

Bash + gemeinsame Dienstprogramme, 39

ncal $1|grep W|factor|egrep -c ': \S+$'

Nimmt das Eingabejahr als Befehlszeilenparameter. Gibt in der Regel Nachrichten wie diese an STDERR aus. Ich halte dies für zulässig gemäß der folgenden Meta-Antwort :

factor: We is not a valid positive integer

Wenn Sie die STDERR-Ausgabe explizit unterdrücken möchten, können Sie dies stattdessen für eine Punktzahl von 43 tun :

ncal $1|grep W|factor 2>-|egrep -c ': \S+$'
Digitales Trauma
quelle
Beachten Sie, dass dies ein englisches oder C / POSIX-Gebietsschema voraussetzt. Es funktioniert nicht so gut gd_GB.utf8, wenn alle Tagesnamen mit abgekürzt werden Di.
Toby Speight
6

Oktave, 86 Bytes

Dies ist keineswegs schnell. Aber das ist nicht wirklich das Ziel eines Codegolfs, oder?

function r=p(y)r=0;for(i=698346:7:815953)d=datevec(i);r+=d(1)==y*isprime(d(3));end;end

Octave kann Daten anhand der "Datumsnummer" nachverfolgen - Anzahl der verstrichenen Tage, an denen der 1. Januar 0 für Tag 1 steht. Nach dieser Messung ist der 3. Januar 1912 (der erste Mittwoch in unserem Set) Tag 698.346. Beginnen Sie dort und durchlaufen Sie jeden siebten Tag (jeden Mittwoch) bis Ende 2233 und addieren Sie 1, wenn das Jahr das Zieljahr und der Monatstag das höchste ist.

dcsohl
quelle
5

Python 2.7, 166 , 165 , 150 Bytes

from datetime import*
y=input()
d,c=date(y,1,1),0
while d.year==y:n=d.day;c+=n>1<2==d.weekday()>0<all(n%x for x in range(2,n));d+=timedelta(1)
print c

Hier besteht sicherlich Verbesserungsbedarf. Ich bin ein Neuling im Golfen mit Python. Dies nutzt das datetimeModul. Es durchläuft alle Tage im Jahr und addiert einen auf einen Akku, wenn es das Kriterium erfüllt. Anschließend wird das Ergebnis gedruckt. Der Großteil des Schwergutaufwands befindet sich im Modul, sodass der Code ziemlich schmal sein kann.

Ein Byte dank Morgan Thrapp und 15 Byte dank Pietu1998 .

Weizen-Assistent
quelle
1
Sie können durch den Wechsel ein Byte speichern n%x==0zu n%x<1.
Morgan Thrapp
2
Dies -1ist nicht erforderlich, da rangeder Endindex exklusiv ist. Zusätzlich können Sie die filterin einen Generator umwandeln . [0for x in range(2,n)if n%x<1]
PurkkaKoodari
Sie könnten any(...)oder all(...)anstelle von verwenden not filter(...).
Kennytm
1
Wenn Sie verkettete Vergleiche kombinieren all, können Sie eine ganze Menge sparen. c+=n>1<2==d.weekday()>0<all(n%x for x in range(2,n))
PurkkaKoodari
3

J, 44 Bytes

+/@(valdate*3=weekday)@,.&(,/(>:,"0/p:)i.12)

Ich habe gerade festgestellt, dass J über integrierte Funktionen zur Datumsmanipulation verfügt.

Verwendung

Zusätzliche Befehle werden zum Formatieren mehrerer Ein- / Ausgaben verwendet.

   f =: +/@(valdate*3=weekday)@,.&(,/(>:,"0/p:)i.12)
   (,.f"0) 1912 1914 1984 1996 2063 2150 2199 2233
1912 19
1914 16
1984 17
1996 19
2063 19
2150 16
2199 18
2233 18

Erläuterung

+/@(valdate*3=weekday)@,.&(,/(>:,"0/p:)i.12)  Input: year
                                       i.12   The range [0, ..., 11]
                              >:              Increment each to get the months [1, ..., 12]
                                    p:        Get the first 12 primes [2, ..., 37]
                                ,"0/          Make a table between each month and prime
                           ,/                 Join the rows
                       ,.&                    Prepend the year to each
                                              The date format is YYYY MM DD
            3=weekday                         Check if each date occurs on Wednesday
    valdate*                                  and is a valid date
+/@                                           Count the number of true values and return
Meilen
quelle
1

PowerShell v3 +, 99 bis 95 Byte

Brute-Force-Ansatz -

param($y)(1..12|%{$m=$_;2,3,5,7,11,13,17,19,23,29,31|?{(date "$m-$_-$y").DayofWeek-eq3}}).Count

Nimmt Eingaben auf , durchläuft die $ySchleife von 1bis 12, speichert den Monat vorübergehend in $mund durchläuft dann jede Primzahl von 2bis 31. Für jeden von diesen konstruieren wir einen Get-Datevon diesem bestimmten Tag und wählen dann nur die mit DayOfWeek -equal bis 3(dh Mittwoch) aus. Verkapselt das alles in einer Parens, um ein Array zu formulieren, und übernimmt das .Countdavon.


Alternativ mathematischer Ansatz -

PowerShell v3 +, 105 Byte

param($y)(16,19,18,20,16,18,19)[($a=(date "1-1-$y").DayOfWeek)]+(1,-3,0,1,2)[$y%5]*($a-in0,2,3,4)*!($y%4)

Es wird nur ein Haar länger sein als der Brute-Force-Ansatz, aber ich schließe es hier ein, da es für andere von Vorteil sein kann.

Nimmt wieder die Eingabe $yals das Jahr. Dieses Mal führen wir ausschließlich mathematische Operationen basierend auf dem ersten Tag des Jahres durch. Wir berechnen zuerst den Wochentag und speichern ihn $afür eine spätere Verwendung. Das indiziert in das erste Array, was uns die Nummer gibt, die normalerweise korrekt ist. Wir müssen dem einen zweiten Index hinzufügen, der darauf basiert, ob es sich um ein potenzielles Schaltjahr handelt, ob es sich um einen Sonntag, einen Dienstag, einen Mittwoch oder einen Donnerstag handelt, und der darauf basiert, wie das Jahr lautet.

Dies basiert auf der folgenden Beobachtung. Die erste Spalte ist der Wochentag, an dem der 1. Januar ist, die zweite Spalte ist die übliche Ausgabe. Wenn das Jahr nicht eine der mittleren Zahlen ist, ist es stattdessen die Zahl in Parens. Die letzte Spalte beschreibt, wie die% 5-Indizierung funktioniert.

Jan-1 -> #  ... Except if $y=       (then it's this number) | $y % 5 =
Sun   -> 16 ... 1928 1956 1984 etc. (17)                    |    3
Mon   -> 19
Tue   -> 18 ... 1924 1952 1980 etc. (20)                    |    4
Wed   -> 20 ... 1936 1964 1992 etc. (17)                    |    1
Thur  -> 16 ... 1920 1948 1976 etc. (17)                    |    0
Fri   -> 18
Sat   -> 19

Hinweis: Bei beiden wird davon ausgegangen, dass en-uses sich um die aktuelle PowerShell-Einstellung für Kultur- / Datumsinformationen handelt. Die Datumsformatierung und DayOfWeek-nummer müssen möglicherweise für andere Kulturvarianten entsprechend angepasst werden.

AdmBorkBork
quelle
1

Ruby, 83 + 15 ( -rdate -rprimeFlags) = 98 Bytes

Probieren Sie es online! (Importierte Module sind inline, da idk, wenn ich Flags in repl.it verwenden kann)

->y{k=0;Prime.each(31){|d|k+=(1..12).count{|m|Date.new(y,m,d).wday==3 rescue p}};k}
Wert Tinte
quelle
1

JavaScript ES6, 187 182 181 179 Bytes

179 In einer for-Schleife gegen die while-Schleife getauscht

z=y=>{D=new Date("1/3/1912");N=0;a=()=>D.getFullYear();b=()=>D.getDate();c=()=>D.setDate(b()+7);for(;a()<=y;c())N+=y-a()?0:-1<[2,3,5,7,11,13,17,19,23,29,31].indexOf(b());return N}

181 das ternäre Verdichtet

z=y=>{D=new Date("1/3/1912");N=0;a=()=>D.getFullYear();b=()=>D.getDate();c=()=>D.setDate(b()+7);while(a()<=y){N+=y-a()?0:-1<[2,3,5,7,11,13,17,19,23,29,31].indexOf(b());c()}return N}

182 Kombinieren Sie die beiden Schleifen

z=y=>{D=new Date("1/3/1912");N=0;a=()=>D.getFullYear();b=()=>D.getDate();c=()=>D.setDate(b()+7);while(a()<=y){N+=a()==y?-1<[2,3,5,7,11,13,17,19,23,29,31].indexOf(b()):0;c()}return N}

187

z=y=>{D=new Date("1/3/1912");N=0;a=()=>D.getFullYear();b=()=>D.getDate();c=()=>D.setDate(b()+7);while(a()<y)c();for(;a()==y;c())N+=-1<[2,3,5,7,11,13,17,19,23,29,31].indexOf(b());return N}
Pandacoder
quelle
Ich glaube nicht, dass dies zählt, da Sie in diesem Beispiel den ersten ersten Mittwoch für ein bestimmtes Jahr angegeben haben. Die Herausforderung des OP besagt, dass es das Jahr als einzigen Parameter braucht ... Bisher jedoch große Anstrengungen ...
WallyWest
"Die Eingabe für Ihr Programm / Ihre Funktion wird ein Jahr sein" - aber Sie weisen darauf hin, dass dies nicht der Fall ist. Ich benutze den ersten Mittwoch des Jahres 1912 als Startwert, weil es in dem vom OP vorgegebenen Zeitraum jeden zweiten Mittwoch ist oder ist, aber ich könnte genauso gut jeden beliebigen Mittwoch des Jahres 1911 oder früher verwenden, um es auch zu säen. Die Eingabe für meine Funktion ist immer noch ein Jahr, und die Funktion berechnet immer noch die Anzahl der Hauptmittwoche in einem bestimmten Jahr innerhalb des vom OP vorgeschlagenen Zeitrahmens, sodass ich nicht sicher bin, ob dies nicht zu der Herausforderung passt.
Pandacoder
Ah, entschuldigung ... Anfangs habe ich nicht gemerkt, dass Sie das als Seeding-Komponente verwenden ... Tolle Idee ... Vor allem, wenn man bedenkt, dass Ihre Lösung meine um etwa 30 übertrifft ...;)
WallyWest
1
Vielen Dank. Ich habe mich von Eamon Olive's Brain-Flak-Implementierung inspirieren lassen, in der laut seiner Erklärung alle Antworten vorprogrammiert sind.
Pandacoder
1

Batch, 248 Bytes

@set/ad=0,l=1,n=20
@for /l %%i in (1913,1,%1)do @set/ad=(d+l+1)%%7,l=!(%%i%%4)-!(%%i%%100)+!(%%i%%400)
@goto %l%%d%
:03
:06
@set/an-=1
:12
:13
:16
@set/an-=1
:01
:04
:14
@set/an-=1
:00
:05
:10
:15
@set/an-=1
:02
:11
@echo %n%

Erklärung: dist der Wochentag mit 0für Montag, der günstigerweise der 1. Januar 1912 ist.l ist. eine Flagge für die Frage, ob das Jahr ein Schaltjahr ist, 1für 1912. Wir durchlaufen dann von 1913 bis zum Eingabejahr und aktualisieren den Tag von Woche und Neuberechnung der Schaltjahrflagge als wir gehen. Schließlich verwenden wir die Schaltjahr-Flagge und den Wochentag n, um die Anzahl der Haupt-Mittwoche zu bestimmen , was effektiv eine große Schaltanweisung ist . Die Einstellung nauf 20 und die Dekrementierung mit dem Abfall ist zwar billiger als die Verwendung der Ablaufsteuerungslogik, aber das Fazit ist, dass, wenn der 1. Januar eines Nichtsprungjahres Donnerstag oder Sonntag ist, es für die anderen Fälle 16 Hauptmittwoche usw. gibt .

Neil
quelle
1

JavaScript ES6 206 203 199 197 195 183 182 179

Nicht die kürzeste, aber das Beste, was ich im Moment tun kann ... Golfvorschläge willkommen ...

p=n=>--d-1?n%d&&p(n):1;v=Date;D=(x,y)=>new v(x.setDate(x.getDate()-y));W=a=>eval('for(Z=0,z=D(w=new v(a,11,31),(w.getDay()+4)%7);z>new v(a,0,1);)Z+=~~p(d=z.getDate()),z=D(z,7);Z')

Änderungen:

  1. Änderung der ternären Komponente von: 3>=x?3-x:10-x nach 6-(x+10)%7, Speichern: 3 Änderungen an den Deklarationspositionen;
  2. zusammengeführt x=w.getDay();z=D(w,6-(x+10)%7) zu z=D(w,6-(w.getDay()+10)%7), speichernd: 4
  3. verschoben Z=0von forSchleife zu Datumsangabe und gedrücktz=D(w,6-(x+10)%7) in die forSchleife , um aufzuräumen, speichern: 2
  4. verlagerte w=new Date(a,Z=0,1)Erklärung infor Schleife , mit vorhandener wDeklaration verschmelzen , speichern: 2
  5. Umschreiben der Prime Finding-Funktion in eine Prime Testing-Funktion, Speichern: 12
  6. Ändern +!!auf ~~, um zu reduzieren und dennoch p(d=1)von auf NaNzu konvertieren 0, sodass die Prime Test-Funktion weiterhin funktioniert. Speichern: 1
  7. Alle zusätzlichen Funktionen aus der Hauptaufruffunktion entfernt W, forSchleife neu definiert - umgekehrt zum 31. Dezember, DateObjekt als separate Variable ausschreiben, forSchleife in evalAufruf neu geschrieben; Sparen 3.

@PandaCoder, ich hol dich ein, Kumpel!

WallyWest
quelle
1

R, 149 147 Bytes

y=function(x){s=strftime;b=ISOdate
a=seq(b(x,1,1),t=b(x,12,31),b='d')
length(a[s(a,'%u')==3&trimws(s(a,'%e'))%in%c(2,3,5,7,11,13,17,19,23,29,31)])}

Teste es auf Ideone .

chrki
quelle
0

Groovy, 126

Groovy hat keine Primzahlvalidierung, musste das auch bauen.

{n->p={x->x<3||(2..Math.sqrt(x)).every{x%it}};(new Date("1/1/$n")..new Date("12/31/$n")).collect{it[7]==4&&p(it[5])?it:0}-[0]}
Magische Kraken-Urne
quelle