Lauantaille sattuneet jouluaatot

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ä.
30130
Äänestä

Muut lukivat myös

Vastaukset 30

Vanhimmat

PHP:
for($x=1900;$x<=2020;$x ){if(date('N', mktime(00, 00, 00, 12, 24, $x) ) == 6){echo $x."<br />";}

Äänestä
  • 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.

    Äänestä

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.

Äänestä
  • Jouluaatto on 24. päivä

    Äänestä

1904 jouluaatto oli lauantaina.

Äänestä
  • - 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

    Äänestä

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ä".

Äänestä
  • Entäs ne vapaat, jotka jää pitämättä, tai niin tarkoitit varmaan perättäin eikä päällekkäin.

    Äänestä

  • Anonyymi kirjoitti:

    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.

    Äänestä

  • Anonyymi kirjoitti:

    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

    Äänestä


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.

Äänestä
  • Mutta kun ei ole.

    Äänestä

  • Anonyymi kirjoitti:

    Mutta kun ei ole.

    Niin, niin, jos olisi . . .

    Äänestä

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
*/

Äänestä
  • Taitaa olla ensimmäinen, jossa viikonpäivää ei päätelty valmisfunktiolla.

    Äänestä

  • Anonyymi kirjoitti:

    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)%7Mutta+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

    Äänestä

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.

Äänestä
  • JavaScriptillä tyylikkäästi yhdelle riville tungettuna.

    for(let v=1900; v<=2020; v ) if(new Date(v,11,24).getDay()==6) console.log(v);

    Äänestä

  • Anonyymi kirjoitti:

    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)

    Äänestä

  • Anonyymi kirjoitti:

    JavaScriptillä tyylikkäästi yhdelle riville tungettuna.

    for(let v=1900; v<=2020; v ) if(new Date(v,11,24).getDay()==6) console.log(v);

    Ai joo getDay():llähän saa viikonpäivän kätevämmin.

    Äänestä

  • Anonyymi kirjoitti:

    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.

    Äänestä

  • Anonyymi kirjoitti:

    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.

    Äänestä

  • Anonyymi kirjoitti:

    JavaScriptillä tyylikkäästi yhdelle riville tungettuna.

    for(let v=1900; v<=2020; v ) if(new Date(v,11,24).getDay()==6) console.log(v);

    KOVA KAKSIKKO
    79 JavaScript
    79 PHP

    Äänestä

  • Anonyymi kirjoitti:

    KOVA KAKSIKKO
    79 JavaScript
    79 PHP

    Pythonin puolesta; aina ei voi voittaa, ei edes joka kerta.

    Äänestä

  • Anonyymi kirjoitti:

    KOVA KAKSIKKO
    79 JavaScript
    79 PHP

    Nuuka koodari muuttaisi ehdon "<=2020" muotoon "<2021". Säästäisi kuitenkin kallisarvoisen merkin.

    Äänestä

  • Anonyymi kirjoitti:

    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.

    Äänestä

  • 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))

    Äänestä

  • Anonyymi kirjoitti:

    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.

    Äänestä

  • Anonyymi kirjoitti:

    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.

    Äänestä

Kommentoi aloitusta


Anonyymi kirjoitti:

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ä.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu