Eu trabalho de nove às cinco. De segunda a sexta. Levo meia hora para o almoço das 12:30 às 13:00.
Escreva-me um programa que, quando executado, calcula a porcentagem da semana de trabalho que completei no momento atual.
Regras
- Conte apenas o tempo realmente gasto trabalhando. Sou pontual e não trabalho durante o almoço.
- Sem entrada. Você pode obter informações como hora / data atual, no entanto, é conveniente.
- A semana de trabalho é considerada completa, de sexta-feira ao fim do dia até meia-noite, entre domingo e segunda-feira.
- Fuso horário é o fuso horário local.
- A saída deve ser um número decimal, por exemplo, 66.25498, símbolo de porcentagem opcional.
- O programa deve ser razoavelmente à prova de futuro. Deve ser capaz de lidar com os anos bissextos.
- A resolução de saída deve ser um segundo ou melhor. Eu gosto de ver a chaleira ferver.
- Código de golfe. O menor código vence.
Respostas:
Q,
111102fonte
Python 3, 132
A resolução é de um minuto ou 2/45 de um por cento. Isso é IMO mais do que suficiente.
fonte
Excel,
132,129,123,119, 117cole em A2: A4
formate a célula A4 como% para obter o formato correto
Almoço pago 40 horas por semana:
88, 81fonte
NOW()
é depois das 17h.0
) que não é necessário!Perl, 124 caracteres
OK, primeira solução simples para definir o par:
Execute com
perl -M5.010
para ativar osay
recurso Perl 5.10+ . A resolução é de um segundo; se a resolução de um minuto for aceitável, a+$s/3600
peça poderá ser excluída para um comprimento total de 116 caracteres .Essa solução é usada
localtime
para obter o dia da semana e a hora do dia; portanto, deve funcionar independentemente das alterações do ano, dias bissextos ou qualquer outra peculiaridade do calendário, pelo menos enquanto o ciclo da semana de sete dias não for alterado. As alterações no horário de verão durante a jornada de trabalho o confundiriam um pouco, mas basicamente nunca acontecem de qualquer maneira, presumivelmente precisamente porque isso levaria a muita confusão.(Para conveniência de teste, observe que
localtime
aceita um registro de data e hora do Unix como argumento opcional.)fonte
Mathematica
169 168 212 214 211 218 210190 caracteresLong-winded, pelo código de padrões de golfe.
O seguinte leva em consideração as semanas úteis que cruzam os limites do mês ou ano, bem como os anos bissextos. Considera o tempo trabalhado de acordo com horas e minutos.
Eu não conseguia pensar em uma maneira de evitar soletrar os dias da semana. O Mathematica retorna o dia da semana como uma sequência de 3 caracteres, que deve ser convertida em um número.
De-golfe
fonte
VBA 141
Formatado para executar a partir da janela imediata. Agradecemos a Sean Cheshire por apontar uma melhoria de 10 caracteres!
fonte
n=(Now-Int(Now))*24:a=(Weekday(Now,3)*7.5+IIf(n>17,7.5,IIf(n>9,IIf(n<12.5,n,IIf(n>13,n-.5,n))-9,0)))/37.5:MsgBox Format(IIf(a>1,1,a),".0%")
@ 139R, 115 caracteres
Aqui está uma simulação de uma semana:
fonte
Ruby,
191116.115113A lógica é roubada da solução Fraxtils Python .
Se você quiser testar o código com o teste de unidade, precisará desta solução de 143 caracteres:
Não é o código mais curto e mais eficiente, mas com um teste de unidade;)
Os 191 caracteres incluem as novas linhas (eu poderia torná-lo uma linha, basta substituir cada nova linha por a
;
).E o código de teste:
fonte
Python 2 130 caracteres
Meh terceira tentativa é molho fraco, mas acho que entendi a lógica.
fonte