Supondo um relógio digital de 24 horas, quantas vezes um determinado dígito aparece durante 1 dia?
Esse interessante problema li em
NRICH enriching mathematics.
Lá o problema é apresentado fazendo a pergunta sobre o dígito 5.
Se bem observarmos, o dígito 5 aparece 16 vezes em cada hora normal.
00:05 - 1
00:15 - 2
00:25 - 3
00:35 - 4
00:45 - 5
00:50 - 6
00:51 - 7
00:52 - 8
00:53 - 9
00:54 - 10
00:55 - 11
00:55 - 12
00:56 - 13
00:57 - 14
00:58 - 15
00:59 - 16
E aparece 76 vezes às 05:mm e às 15:mm, pois nesses horários há repetição em 05:05, 05:15,... e também em 05:55.
Assim, o cálculo é feito somando-se:
- 22 horas em que o 5 aparece 16 vezes
MAIS
- 2 horas em que o 5 aparece 76 vezes
Ou seja, (22x16) + (2x76) = 352 + 152 = 504
O dígito 5 aparece 504 vezes em um relógio digital de 24 horas durante 1 dia.
Então, tive a ideia de escrever um programinha em Powershell que calcule quantas vezes cada dígito 0,1,2,3,... aparece no relógio digital durante 1 dia e ao final exiba um relatório.
Function QuantoApareceEm24Horas([Int32] $digito) {
[Int32] $dig1, $dig2, $dig3, $dig4, $contador=0
## Primeiro Horários 0h:mm e 1h:mm
For ($dig1=0; $dig1 -le 1; $dig1++) { ## 0,1
########## $dig2 ############
For ($dig2=0; $dig2 -le 9; $dig2++) { ## 0,1,2,3,4,5,6,7,8,9
########## $dig3 ############
For ($dig3=0; $dig3 -lt 6; $dig3++) { ## 0,1,2,3,4,5
########## $dig4 ############
For ($dig4=0; $dig4 -le 9; $dig4++) { ## 0,1,2,3,4,5,6,7,8,9
If ($dig1 -eq $digito) {
$contador++
Write-Host $dig1$dig2":"$dig3$dig4" - "$contador
}
If ($dig2 -eq $digito) {
$contador++
Write-Host $dig1$dig2":"$dig3$dig4" - "$contador
}
If ($dig3 -eq $digito) {
$contador++
Write-Host $dig1$dig2":"$dig3$dig4" - "$contador
}
If ($dig4 -eq $digito) {
$contador++
Write-Host $dig1$dig2":"$dig3$dig4" - "$contador
}
} ##$dig4
} ## dig3
} ## dig2
} ## dig1
## Horários 20, 21, 22, 23
$dig1=2
For ($dig2=0; $dig2 -le 3; $dig2++) { ## 0,1,2,3
For ($dig3=0; $dig3 -le 5; $dig3++) { ## 0,1,2,3,4,5
For ($dig4=0; $dig4 -le 9; $dig4++) { ## 0,1,2,3,4,5,6,7,8,9
If ($dig1 -eq $digito) {
$contador++
Write-Host $dig1$dig2":"$dig3$dig4" - "$contador
}
If ($dig2 -eq $digito) {
$contador++
Write-Host $dig1$dig2":"$dig3$dig4" - "$contador
}
If ($dig3 -eq $digito) {
$contador++
Write-Host $dig1$dig2":"$dig3$dig4" - "$contador
}
If ($dig4 -eq $digito) {
$contador++
Write-Host $dig1$dig2":"$dig3$dig4" - "$contador
}
} ## $dig4
} ## $dig3
} ## $dig2
Return $contador
} ##Function
Clear-Host
$Numeros=@()
[Int32] $i
For ($i=0; $i -le 9; $i++) {
Write-Host -ForegroundColor Yellow "######################################"
Write-Host -ForegroundColor Yellow "Calculando quantas vezes o dígito"$i
Write-Host -ForegroundColor Yellow "aparece em relógio digital em 1 dia"
Write-Host -ForegroundColor Yellow "######################################"
$Numeros += QuantoApareceEm24Horas $i
}
Write-Host -ForegroundColor Green "######################################"
Write-Host -ForegroundColor Green "Relatório de Execução:"
For ($i=0; $i -le 9; $i++) {
Write-Host -ForegroundColor Cyan "O dígito" $i "aparece" $Numeros[$i]"vezes em 24 horas."
}
