Minä vuosina välillä 1900-2020, jouluaattoa vietettiin lauantaina. Ratkaise millä kielellä haluat, kunhan koodista tulee lyhyt. Aina ei python voita, vai voittaako sittenkin kun on kyse kirjoitettujen merkkien määrästä.
Lauantaille sattuneet jouluaatot
Anonyymi
30130
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 30
Vanhimmat
PHP:
for($x=1900;$x<=2020;$x ){if(date('N', mktime(00, 00, 00, 12, 24, $x) ) == 6){echo $x."<br />";}
PHP 79 merkkiä
for($x=1900;$x<=2020;$x ){if(date('N',mktime(0,0,0,12,24,$x))==6)echo $x." ";}
Voit testata koodin Interaktiivissa PHP:een komentotulkissa siirtymällä komentokehotteeseen Ctrl Alt t ja suorittamalla komennon:
php -a
Vuosiluvut tulostuvat välilyönnillä erotettuna.
BASIC 138 merkkiä
Public Sub Main()
Dim x As Short
For x = 1900 To 2020
If WeekDay(Date(x, 12, 25)) = 0 Then Print Format(Date(x, 12, 25), "yyyy")
Next
End
Muunneltuna Gambas 3.15.2 esimerkeistä. Voit testata koodin online editorissa ohjelman kotisivulla tai asentamalla kehitysympäristön omalle koneellesi.
Jouluaatto on 24. päivä
1904 jouluaatto oli lauantaina.
- Anonyymi: "1904 jouluaatto oli lauantaina."
ja
- Anonyymi: "Jouluaatto on 24. päivä"
Olette kumpikin oikeassa, muuntelu jäi keskeneräiseksi ja oikein se olisi ollut seuraava, joka ei merkkien määrää kuitenkaan muuta:
Public Sub Main()
Dim x As Short
For x = 1900 To 2020
If WeekDay(Date(x, 12, 24)) = 6 Then Print Format(Date(x, 12, 24), "yyyy")
Next
End
Jos nyt välttämättä pitää "juhlia" jotain aasialaisen paimentolaiskansan muinaisia tarinoita niin siirrettäköön se vuodenvaihteeseen niin että selvittäisiin yksillä "pyhillä".
Entäs ne vapaat, jotka jää pitämättä, tai niin tarkoitit varmaan perättäin eikä päällekkäin.
Siinä saattaisi olla ideaa kun kaikki vapaat niputetaan yhteen ja pidetään kerralla, saataisiin 115 päivän loma arkipyhistä ja viikonlopuista siihen kun ynnätään talviloma ja kesäloma isyysvapaat ja sairaslomat niin johan on pitkä loma.
Helpoin ja varmin keino on laskea näiltä sivuilta. Suosittelen, jos tukkimiehen kirjanpito hallitaan 120 saakka:
https://almanakka.helsinki.fi/fi/arkisto/yliopiston-almanakat-universitetets-almanackor-1608-1999.html
Kekimäärin joka 7. vuosi on jouluaatto lauantaina joten tukkimiehen kirjanpitoa ei tarvitse mihinkään 120:een asti. D
Jos jouluaatto on tänä vuonna lauantaina, on se ensi vuonna sunnuntaina, eli se siirtyy aina yhden päivän eteenpäin joka vuosi, niin, paitsi karkausvuotena, jolloin se siirtyy kaksi päivää eteenpäin.
Että tämmöistä tällä kertaa.
Mutta kun ei ole.
Niin, niin, jos olisi . . .
Zellerin säännöllä ja JavaScriptillä:
const z = (p, m, v) => {
if (m < 3)
{
m = m 12;
v = v - 1;
}
const J = Math.floor(v / 100);
const K = v - (100 * J);
const S = Math.floor(2.6 * m - 5.39) Math.floor(K / 4) Math.floor(J / 4) p K - (2 * J);
return S - (7 * Math.floor(S / 7));
}
for (let v = 1900; v <= 2020; v ) {
if (z(24,12,v) == 6) console.log(v);
}
/*
1904
1910
1921
1927
1932
1938
1949
1955
1960
1966
1977
1983
1988
1994
2005
2011
2016
*/
Taitaa olla ensimmäinen, jossa viikonpäivää ei päätelty valmisfunktiolla.
C-kielellä+saisi+muka+viikonpäivän+näin:
(d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7
Mutta+ei+tuo+ainakaan+minulla+antanut+oikeita+arvoja,+kuten+ei+Sakamoton+metodikaan,+joka+antoi+samat+kuin+tuo+Michael+Keith+/+Tom+Craver+versio.
https://en.wikipedia.org/wiki/Calculate_the_day_of_the_week
JavaScript, 112 merkkiä
Array.from({length:121},(_,j)=>new Date(1900 j,11,24)).filter(d=>("" d).includes("Sat")).map(d=>d.getFullYear())
Huomaa, että kuukausi lähtee nollasta, joten joulukuu on 11.
JavaScriptillä tyylikkäästi yhdelle riville tungettuna.
for(let v=1900; v<=2020; v ) if(new Date(v,11,24).getDay()==6) console.log(v);
Pyyttonilla vastaava:
import datetime
for v in range(1900, 2021):
if datetime.datetime(v, 12, 24).weekday() == 5:
print(v)
Ai joo getDay():llähän saa viikonpäivän kätevämmin.
Mutta lauantai on arvo 5, kun viikonpäiväkin lähtee nollasta. Melkoista sekamelskaa tuntuu olevan nuo mikä lähtee mistäkin.
Pyyttonissa on maanantai 0, Javaskriptissä sunnuntai.
KOVA KAKSIKKO
79 JavaScript
79 PHP
Pythonin puolesta; aina ei voi voittaa, ei edes joka kerta.
Nuuka koodari muuttaisi ehdon "<=2020" muotoon "<2021". Säästäisi kuitenkin kallisarvoisen merkin.
Hyvä sinä ajatteleva "Anonyymi", niin tekisi, sillä saa vakaamman johtoaseman, kumpikin käressä oleva.
Tässä vähän eri tavalla tehtynä.
[...new Array(120).keys()].filter(i=>new Date(i 1900,11,24).getDay()==6).map(v=>console.log(v 1900))
Toimii, ja on se sen verran erilainen, ettei ymmärrys riittänyt.
Ensin tehdään taulukko 0...120 (tuossa on virhe, pitäisi olla 0...121).
[...new Array(120).keys()]
Sitten suodatetaan filter()-metodilla pois ylimääräiset taulukon alkiot i käyttämällä Date-objektin getDay()-metodia, joka palauttaa viikonpäivän numeron. Jos on 6, niin kyseessä on lauantai ja alkio jää taulukkoon. Päivämäärä joka Date-objektille annetaan on i 1900, 11,24. Kuten aikaisemmin on mainittu, niin Joulukuuta vastaava numeerinen arvo on 11.
.filter(i=>new Date(i 1900,11,24).getDay()==6)
Lopuksi pyöräytetään taulukon alkiot map()-metodilla console.log():lla tulostettavaksi muodossa alkion arvo 1900.
.map(v=>console.log(v 1900))
Ja tuossa on se virhe, ettei käy läpi kuin vuodet 1900–2019, koska alkiotaulukossa ei ole alun perin kuin arvot 0–119. Lopputulokseen ei tietenkään vaikuta, koska vuonna 2020 jouluaatto ei ole lauantaina.