Nautical bell: Difference between revisions

(→‎{{header|Mathematica}}: Submitted working program to replace old one.)
Line 873:
23:00 First watch, Six Bells Gone: ♫ ♫ ♫
23:30 First watch, Seven Bells Gone: ♫ ♫ ♫ ♪</pre>
 
=={{header|Phix}}==
{{trans|Ruby}}
{{trans|AWK}}
Uses GMT, can easily be switched to local time by simply removing DT_GMT, ie invoking <code>date()</code>
instead of <code>date(DT_GMT)</code>.<br>
Uses a full-length sleep of up to 1800 seconds (half an hour), as it should.
<lang Phix>constant watches = {"First","Middle","Morning","Forenoon","Afternoon","First dog","Last dog","First"},
watch_ends = {"00:00", "04:00", "08:00", "12:00", "16:00", "18:00", "20:00", "23:59"},
bells = {"One","Two","Three","Four","Five","Six","Seven","Eight"},
ding = "ding!"
 
procedure nb(integer h,m)
integer bell = mod(floor((h*60+m)/30),8)
if bell==0 then bell = 8 end if
string hm = sprintf("%02d:%02d",{h,m})
integer watch=1
while hm>watch_ends[watch] do watch += 1 end while
string plural = iff(bell==1?" ":"s")
string dings = ding
for i=2 to bell do dings &= iff(mod(i,2)?" ":"")&ding end for
printf(1,"%s %9s watch %5s bell%s %s\n",
{hm,watches[watch],bells[bell],plural,dings})
end procedure
 
procedure simulate1day()
for h=0 to 23 do
for m=0 to 30 by 30 do
nb(h,m)
end for
end for
nb(0,0) -- (again)
end procedure
 
simulate1day()
 
while 1 do
sequence d = date(DT_GMT)
integer m = d[DT_SECOND] + mod(d[DT_MINUTE],30)*60
if m=0 then
nb(d[DT_HOUR],d[DT_MINUTE])
end if
sleep(30*60-m)
end while</lang>
{{out}}
<pre>
00:00 First watch Eight bells ding!ding! ding!ding! ding!ding! ding!ding!
00:30 Middle watch One bell ding!
01:00 Middle watch Two bells ding!ding!
01:30 Middle watch Three bells ding!ding! ding!
02:00 Middle watch Four bells ding!ding! ding!ding!
02:30 Middle watch Five bells ding!ding! ding!ding! ding!
03:00 Middle watch Six bells ding!ding! ding!ding! ding!ding!
03:30 Middle watch Seven bells ding!ding! ding!ding! ding!ding! ding!
04:00 Middle watch Eight bells ding!ding! ding!ding! ding!ding! ding!ding!
04:30 Morning watch One bell ding!
05:00 Morning watch Two bells ding!ding!
05:30 Morning watch Three bells ding!ding! ding!
06:00 Morning watch Four bells ding!ding! ding!ding!
06:30 Morning watch Five bells ding!ding! ding!ding! ding!
07:00 Morning watch Six bells ding!ding! ding!ding! ding!ding!
07:30 Morning watch Seven bells ding!ding! ding!ding! ding!ding! ding!
08:00 Morning watch Eight bells ding!ding! ding!ding! ding!ding! ding!ding!
08:30 Forenoon watch One bell ding!
09:00 Forenoon watch Two bells ding!ding!
09:30 Forenoon watch Three bells ding!ding! ding!
10:00 Forenoon watch Four bells ding!ding! ding!ding!
10:30 Forenoon watch Five bells ding!ding! ding!ding! ding!
11:00 Forenoon watch Six bells ding!ding! ding!ding! ding!ding!
11:30 Forenoon watch Seven bells ding!ding! ding!ding! ding!ding! ding!
12:00 Forenoon watch Eight bells ding!ding! ding!ding! ding!ding! ding!ding!
12:30 Afternoon watch One bell ding!
13:00 Afternoon watch Two bells ding!ding!
13:30 Afternoon watch Three bells ding!ding! ding!
14:00 Afternoon watch Four bells ding!ding! ding!ding!
14:30 Afternoon watch Five bells ding!ding! ding!ding! ding!
15:00 Afternoon watch Six bells ding!ding! ding!ding! ding!ding!
15:30 Afternoon watch Seven bells ding!ding! ding!ding! ding!ding! ding!
16:00 Afternoon watch Eight bells ding!ding! ding!ding! ding!ding! ding!ding!
16:30 First dog watch One bell ding!
17:00 First dog watch Two bells ding!ding!
17:30 First dog watch Three bells ding!ding! ding!
18:00 First dog watch Four bells ding!ding! ding!ding!
18:30 Last dog watch Five bells ding!ding! ding!ding! ding!
19:00 Last dog watch Six bells ding!ding! ding!ding! ding!ding!
19:30 Last dog watch Seven bells ding!ding! ding!ding! ding!ding! ding!
20:00 Last dog watch Eight bells ding!ding! ding!ding! ding!ding! ding!ding!
20:30 First watch One bell ding!
21:00 First watch Two bells ding!ding!
21:30 First watch Three bells ding!ding! ding!
22:00 First watch Four bells ding!ding! ding!ding!
22:30 First watch Five bells ding!ding! ding!ding! ding!
23:00 First watch Six bells ding!ding! ding!ding! ding!ding!
23:30 First watch Seven bells ding!ding! ding!ding! ding!ding! ding!
00:00 First watch Eight bells ding!ding! ding!ding! ding!ding! ding!ding!
13:00 Afternoon watch Two bells ding!ding!
13:30 Afternoon watch Three bells ding!ding! ding!
</pre>
 
=={{header|PL/I}}==
Line 892 ⟶ 990:
end nautical;
</lang>
 
 
=={{header|PowerShell}}==
7,796

edits