Created
January 7, 2016 15:13
-
-
Save delucas/78d4121f57d8c313d315 to your computer and use it in GitHub Desktop.
Análisis de Feriados en Argentina durante 2016
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'date' | |
feriados = [ | |
Date.new(2016,1,1), | |
Date.new(2016,2,8), | |
Date.new(2016,2,9), | |
Date.new(2016,3,24), | |
Date.new(2016,3,25), | |
Date.new(2016,4,2), | |
Date.new(2016,5,1), | |
Date.new(2016,5,25), | |
Date.new(2016,6,20), | |
Date.new(2016,7,8), | |
Date.new(2016,7,9), | |
Date.new(2016,8,15), | |
Date.new(2016,10,10), | |
Date.new(2016,11,28), | |
Date.new(2016,12,8), | |
Date.new(2016,12,9), | |
Date.new(2016,12,25) | |
] | |
# Análisis de frecuencia de feriados | |
def literalizar(dia) | |
case dia | |
when 1 | |
'lunes' | |
when 2 | |
'martes' | |
when 3 | |
'miercoles' | |
when 4 | |
'jueves' | |
when 5 | |
'viernes' | |
when 6 | |
'sabado' | |
when 7 | |
'domingo' | |
end | |
end | |
feriados_por_dia = feriados.group_by { |feriado| | |
feriado.strftime('%u') | |
}.sort() | |
frecuencia_por_dia = feriados_por_dia.collect { |dia, feriados_en_dia| | |
{ dia: literalizar(dia.to_i), frecuencia: feriados_en_dia.count() } | |
} | |
# Análisis de fines de semana largos | |
def finde_largo(dia, feriados) | |
finde = [] | |
if dia.strftime('%u') == '1' | |
finde = [dia - 2, dia - 1, dia] | |
if feriados.include?(dia + 1) | |
finde << dia + 1 | |
end | |
elsif dia.strftime('%u') == '5' | |
finde = [dia, dia + 1, dia + 2] | |
if feriados.include?(dia - 1) | |
finde.unshift(dia - 1) | |
end | |
end | |
finde | |
end | |
findes_largos = feriados.collect { |feriado| | |
finde_largo(feriado, feriados) | |
} | |
# Análisis de vacaciones | |
def feriados_dentro(inicio, fin, feriados) | |
contador = 0 | |
feriados.each { |fer| | |
if inicio <= fer and fer <= fin | |
contador = contador + 1 | |
end | |
} | |
contador | |
end | |
posibles_vacaciones = (Date.new(2016,1,1)..Date.new(2016,12,31)).find_all { |dia| | |
dia.strftime('%u') == '1' | |
} | |
maximo = posibles_vacaciones.first | |
feriados_incluidos = 0 | |
posibles_vacaciones.each { |inicio| | |
if feriados_dentro(inicio, (inicio+15), feriados) > feriados_incluidos | |
feriados_incluidos = feriados_dentro(inicio, (inicio+15), feriados) | |
maximo = inicio | |
end | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment