Grupa ekstremistów z Wydziału Matematyki Wyższej Uniwersytetu w Ohio zagroziła...
No dobrze. Nie zagroziła. Na Wydziale Matematyki w Ohio pracuje pięćdziesięcioro troje miłych i sympatycznych ludzi z różnych stron świata, którzy nie mają żadnego interesu w wysadzaniu czegokolwiek. Ale dla dobra zagadki załóżmy na chwilę, że jest inaczej 😉... zagroziła, że w latach 2000 - 2100 będzie wysadzać w powietrze jeden losowo wybrany zabytek na świecie każdego dnia, w którym numer dnia przemnożony przez numer miesiąca da w wyniku numer roku zapisany bez dwóch najstarszych cyfr (a więc: 18 dla roku 2018, 72 dla roku 2072 i tak dalej).
Pytanie #1: Ile zabytków straci ludzkość, jeżeli szaleni ekstremalni matematycy (matematyczni ekstremiści?) z Ohio dotrzymają obietnicy?
Pytanie #2: Kiedy nastąpi i ile dni potrwa najdłuższa przerwa między atakami tych szaleńców?
Pytanie #3: W którym roku stracimy najwięcej zabytków?
Pytanie #4: A w którym - najmniej?
Czas - start!
data końcowa to 2099-12-31 czy 2100-12-31?
A Twoim zdaniem robi to jakąkolwiek różnicę?
No dobra, przeczytałem z większym zrozumieniem i odszczekuję pytanie.
Na razie działałem w trybie mechanicznym – podstawiania zmiennych.
“odszczekuję pytanie” – poproszę o nagranie, najlepiej w mp3 😀
na razie transkrypcja fonetyczna: “uah, uah”
Ad4: w 2000
Na razie napisałem program, który wypisuje dzielniki liczb 0d 0 do 99. Teraz dalsza analiza
Ad2 Najdłuższa przerwa to od 1 stycznia 2000 do 1 stycznia 2001
Ad3: 7 w 2024
[spoiler title=”2024″]24.1.2024
12.2.2024
8.3.2024
6.4.2024
4.6.2024
3.8.2024
2.12.2024[/spoiler]
Ad1: 210
Poprawka do Ad2, bo tamto to był strzał:
od 19.03.2057 do 20.03.2060 – prawie 3 lata
— pytanie #1 = 212
— pytanie #3 = 2024 [7]
— pytanie #4 – jest 25 lat tylko z jednym zamachem…
declare @st datetime;
declare @en datetime;
select @st= ‘2001-01-01’, @en = ‘2099-12-31’;
with zakres as (
select @st data
union all
select dateadd(day,1, data)
from zakres
where data+1<=@en
),
dane as
( select data, DATEPART(day,data) * DATEPART(mm,data)- DATEPART(yy,data)+2000 bum
from zakres
)
, pyt3 as (
select datepart(yy,data) rok, count(bum) ile
from dane
where bum=0
group by datepart(yy,data)
)
select * from pyt3
order by ile
OPTION (maxrecursion 0)
pyt 2: 2057-03-19 –> 2060-03-20 czyli 1097 dni
pyt 4: są lata bez zamachu – wniosek z komentarza poniżej.
2037, 2041, 2043, 2047, 2053, 2058, 2059, 2061, 2062, 2067, 2071, 2073, 2074, 2079, 2082, 2083, 2086, 2089, 2094 ,2097