Skip to content

Instantly share code, notes, and snippets.

@delucas
Created January 7, 2016 15:13
Show Gist options
  • Save delucas/78d4121f57d8c313d315 to your computer and use it in GitHub Desktop.
Save delucas/78d4121f57d8c313d315 to your computer and use it in GitHub Desktop.
Análisis de Feriados en Argentina durante 2016
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