Ihr Code ist in einigen Punkten falsch.
- Freitag Wochentag Nummer 5, nicht 4.
- Warum
[4].include?(n)
statt nur n==4
?
"13".include?("#{n}")
ist nicht nur seltsam, aber falsch, da es für 1 und 3 sowie 13.
Sie befinden sich auf der Ebene der Brute-Force bei einem Blick auf die zwölf 13ths abgeholzt gehen kann true zurück und das Zählen, wie viele sind freitags, anstatt auf der Suche auf allen 365 bzw. 366 Tage und sehen, welche von ihnen sind beide 13. die und freitags, wie in @ tokland Antwort, reproduziert hier:
def unlucky_days(year)
(1..12).count { |month| Date.new(year, month, 13).friday? }
end
oder, da es nur 14 Möglichkeiten, könnten Sie auch nur eine vorgefertigte Tabelle verwenden:
# number of Friday the 13ths in a given year is given by
# UnluckyDays[weekday of Jan 1][0 if common, 1 if leap]
UnluckyDays = [ [2,3], [2,2], [2,1], [1,2], [3,2], [1,1], [1,1] ]
def unlucky_days(year)
UnluckyDays[Date.new(year,1,1).wday][Date.leap?(year) ? 1 : 0 ]
end
Was meinen Sie mit "Das einzige, was in diesem Code falsch ist, ist die Rückkehr"? Du gibst "result.length" zurück, also wirst du eine Nummer bekommen. Haben Sie versucht, 'result' zurückzuliefern? –
Entschuldigung! Aktualisierte Beschreibung, um das Problem besser zu beschreiben. Wollte die Gesamtzahl der 13. in einem Jahr. –
Erstens, Freitags wday Nummer ist 5, nicht 4. Zweitens, warum machst du 'Array # include?' Und 'String # include?' Statt nur einen einfachen Gleichheitstest? –