Averages/Mean time of day: Difference between revisions

Content added Content deleted
(task description: Improve formatting and add related tasks box)
No edit summary
Line 1,225: Line 1,225:
{{out}}
{{out}}
<pre>23:47:43</pre>
<pre>23:47:43</pre>

=={{header|PowerShell}}==
<lang PowerShell>
function Get-MeanTimeOfDay
{
[CmdletBinding()]
[OutputType([timespan])]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[ValidatePattern("(?:2[0-3]|[01]?[0-9])[:.][0-5]?[0-9][:.][0-5]?[0-9]")]
[string[]]
$Time
)

Begin
{
[double[]]$angles = @()

function ConvertFrom-Time ([timespan]$Time)
{
(360 * $Time.Hours / 24.0) + (360 * $Time.Minutes / (24 * 60.0)) + (360 * $Time.Seconds / (24 * 3600.0))
}

function ConvertTo-Time ([double]$Angle)
{
$t = New-TimeSpan -Hours ([int](24 * 60 * 60 * $Angle / 360) / 3600) `
-Minutes (([int](24 * 60 * 60 * $Angle / 360) % 3600 - [int](24 * 60 * 60 * $Angle / 360) % 60) / 60) `
-Seconds ([int]((24 * 60 * 60 * $Angle / 360) % 60))

if ($t.Days -gt 0)
{
return ($t - (New-TimeSpan -Hours 1))
}

$t
}

function Get-MeanAngle ([double[]]$Angles)
{
[double]$x,$y = 0

for ($i = 0; $i -lt $Angles.Count; $i++)
{
$x += [Math]::Cos($Angles[$i] * [Math]::PI / 180)
$y += [Math]::Sin($Angles[$i] * [Math]::PI / 180)
}

([Math]::Atan2(($y / $Angles.Count), ($x / $Angles.Count)) * 180 / [Math]::PI) + 360
}
}
Process
{
$angles += ConvertFrom-Time $_
}
End
{
ConvertTo-Time (Get-MeanAngle $angles)
}
}
</lang>
<lang PowerShell>
"Mean time is {0}" -f ("23:00:17","23:40:20","00:12:45","00:17:19" | Get-MeanTimeOfDay)
</lang>
{{Out}}
<pre>
Mean time is 23:47:43
</pre>


=={{header|Python}}==
=={{header|Python}}==