|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
Ouch, chiedo scusa, ho appena appreso la reale definizione di bisestile ed abbandonato la supposizione naive che fosse bisestile ogni anno divisibile per 4. Ho aggiornato la mia soluzione per sfruttare il beneficio di questa conoscenza e per essere anche 1po' meno prolissa
|
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
811, codice in Python:
Codice:
#!/usr/bin/python # -*- coding: utf8 -*- # # Count mondays # def IsLeapYear(year): """Checks if year y is leap or not.""" return (year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0)) def CountMondays(monthDays, firstMonday): """Counts the number of mondays in the given range of days.""" d = (monthDays - firstMonday) return (d // 7) + 1 def CountMondaysInRange(a, b, monday): """Count the number of mondays in the give range of years [a; b].""" total = 0 first = monday for year in xrange(a, b + 1): leap = IsLeapYear(year) first -= 1 days = 28 + int(leap) if (first <= 0): first += 7 total += CountMondays(days, first) first -= int(leap) return total if __name__ == "__main__": print CountMondaysInRange(1900, 2100, 5)
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Dec 2007
Messaggi: 1525
|
a me è uscito 811 al primo colpo...
praticamente sono 804 lunedì contanto gli anni e moltiplicandoli per 4, + 7 anni bisestili che hanno 5 lunedì (1904,1932,1960,1988,2016,2044,2072).. se non sbaglio è giusto ( bio |
|
|
|
|
|
#24 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 189
|
anche a me da 811
Codice:
require 'date'
def is_leap?(year)
((year % 4 == 0) && ((year % 400 == 0) || !(year % 100 == 0)))
end
def mondays(start_y, end_y)
mondays = (end_y-start_y+1)*4
start_y += 4-(start_y%4) unless start_y%4==0
start_y.step(end_y,4){|year| mondays += 1 if (is_leap?(year) && Date.new(year,2,1).wday == 1)}
mondays
end
puts mondays(1900,2100)
|
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
sistemato..
nel rincoglionimento notturno avevo scritto 4 e 3 anzichè 5 e 4 Codice:
require 'Date'
def mondays_count(date)
first_monday = 1 - date.wday
if first_monday == 0 && date.leap?
return 5
end
return 4
end
date = Date::civil(1900, 2, 1)
end_date = Date::civil(2100, 3, 1)
mondays = 0
while date < end_date do
mondays += mondays_count(date)
date = date >> 12
end
puts mondays
__________________
|
|
|
|
|
|
#26 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
|
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Java
Codice:
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar timer = Calendar.getInstance();
int mondays = 0;
for(timer.set(1900, 1, 0);timer.get(Calendar.YEAR) <= 2100; timer.add(Calendar.DAY_OF_MONTH, 1)) {
mondays += (Math.abs(Integer.signum(timer.get(Calendar.MONTH) - Calendar.FEBRUARY)) - 1) *
(Math.abs(Integer.signum(timer.get(Calendar.DAY_OF_WEEK) - Calendar.MONDAY)) - 1);
if(timer.get(Calendar.MONTH) == Calendar.MARCH) {
timer.set(timer.get(Calendar.YEAR) + 1, 1, 0);
}
}
System.out.println(mondays);
}
}
Ps.: usiamo tutti i calendari ma non è che il conto, alla fine, è il risultato di una semplice equazione? A quest'ora del mattino non so la risposta .
|
|
|
|
|
|
#28 | |
|
Senior Member
Iscritto dal: Dec 2007
Messaggi: 1525
|
Quote:
bio |
|
|
|
|
|
|
#29 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
quanto meno però mi sa che è meglio fare una sola operazione per anno anzichè una per tutti i giorni di febbraio di tutti gli anni ![]() a me da 25/26 ms con ruby 1.8.6 (che fa davvero pena quanto a prestazioni) sul solito macbook pro 2.4.
__________________
|
|
|
|
|
|
|
#30 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 189
|
può essere acnhe una operazione ogni 4 anni. o forse anche meno
a me da 5ms ruby 1.9 16/18ms ruby 1.8 (athlon 3200+) |
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:32. |
|
|
|
|
|
#32 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
La mia versione in factor dice cosi... ma questo laptop è vecchio come il cucco...
Codice:
( scratchpad ) [ contest13 ] time 811 ==== RUNNING TIME 0.015625 seconds
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
__________________
|
|
|
|
|
|
|
#34 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 189
|
|
|
|
|
|
|
#35 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:32. |
|
|
|
|
|
#36 |
|
Member
Iscritto dal: Jan 2007
Messaggi: 189
|
si anche io avevo notato chhe c'è un febbraio con 5 lunedì ogni 28 anni(circa) ma bisogna anche tener conto dellanno da cui si parte
|
|
|
|
|
|
#37 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:33. |
|
|
|
|
|
#38 | |
|
Member
Iscritto dal: Jan 2007
Messaggi: 189
|
Quote:
|
|
|
|
|
|
|
#39 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:33. |
|
|
|
|
|
#40 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 533
|
■
Ultima modifica di rеpne scasb : 18-06-2012 alle 16:33. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:11.













.









