A

p

e

r

s

o

n

a

l

B

l

o

g

Tage im Monat

Ich brauchte mal eine kurze Formal um die Anzahl der Tage in einem Monat zu berrechnen. Hier ist mal eine Lösung:

k ≤ µ < l : 1/8 ≤ µ und µ < 1/7

Es gibt eine untere k- und obere l-Schranke zwischen denen ein Skalierungsfaktor µ gewählt werden kann. Für einen beliebigen Monat x ergibt sich dann die Anzahl der Tage f(x) mit den Gaußklammern []:

f(x) = 30 + [(1 + µ) × x] (mod 2), x ∈ { 1, 3, ..., 12 }

Beispiel:

#!/usr/bin/env ruby
require 'date'

class Date
  def days_in_february
    leap? ? 29 : 28
  end

  def days_in_month(given_month = month)
    raise ArgumentError unless (1..12).include? given_month
    given_month == 2 ? days_in_february : 30 + (given_month * 1.125).to_i % 2
  end

  private :days_in_february
end

(1..12).each { |month| puts "Days in %s: %s" %
  [ (m = Date.new 2012, month).strftime("%B"), m.days_in_month ] }

Das funktioniert, weil der Nachkommabereich durch die Gaußklammern ignoriert wird. Es sei denn, er wird größer als 1. Und das passiert nach dem 7. und vor dem 8. Monat.