Just another update
This commit is contained in:
parent
a25938f123
commit
00a190b0a6
6591 changed files with 94363 additions and 23227 deletions
24
Task/Box-the-compass/D/box-the-compass-2.d
Normal file
24
Task/Box-the-compass/D/box-the-compass-2.d
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
void main() {
|
||||
import std.stdio;
|
||||
|
||||
immutable box = [
|
||||
"North", "North by east", "North-northeast", "Northeast by north",
|
||||
"Northeast", "Northeast by east", "East-northeast", "East by north",
|
||||
"East", "East by south", "East-southeast", "Southeast by east",
|
||||
"Southeast", "Southeast by south", "South-southeast", "South by east",
|
||||
"South", "South by west", "South-southwest", "Southwest by south",
|
||||
"Southwest", "Southwest by west", "West-southwest", "West by south",
|
||||
"West", "West by north", "West-northwest", "Northwest by west",
|
||||
"Northwest", "Northwest by north", "North-northwest", "North by west"];
|
||||
|
||||
immutable angles = [
|
||||
0.0, 16.87, 16.88, 33.75, 50.62, 50.63, 67.5, 84.37, 84.38,
|
||||
101.25, 118.12, 118.13, 135.0, 151.87, 151.88, 168.75, 185.62,
|
||||
185.63, 202.5, 219.37, 219.38, 236.25, 253.12, 253.13, 270.0,
|
||||
286.87, 286.88, 303.75, 320.62, 320.63, 337.5, 354.37, 354.38];
|
||||
|
||||
foreach (immutable phi; angles) {
|
||||
immutable i = (cast(int)(phi * 32.0 / 360.0 + 0.5)) % 32;
|
||||
writefln("%2d %18s %6.2f", i + 1, box[i], phi);
|
||||
}
|
||||
}
|
||||
31
Task/Box-the-compass/OCaml/box-the-compass.ocaml
Normal file
31
Task/Box-the-compass/OCaml/box-the-compass.ocaml
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
let test_cases = [0.0; 16.87; 16.88; 33.75; 50.62; 50.63; 67.5;
|
||||
84.37; 84.38; 101.25; 118.12; 118.13; 135.0;
|
||||
151.87; 151.88; 168.75; 185.62; 185.63; 202.5;
|
||||
219.37; 219.38; 236.25; 253.12; 253.13; 270.0;
|
||||
286.87; 286.88; 303.75; 320.62; 320.63; 337.5;
|
||||
354.37; 354.38];;
|
||||
|
||||
let directions = ["North"; "North by East"; "North-Northeast";
|
||||
"Northeast by North"; "Northeast";
|
||||
"Northeast by East"; "East-Northeast"; "East by North";
|
||||
"East"; "East by South"; "East-Southeast";
|
||||
"Southeast by East"; "Southeast"; "Southeast by South";
|
||||
"South-Southeast"; "South by East"; "South";
|
||||
"South by West"; "South-Southwest"; "Southwest by South";
|
||||
"Southwest"; "Southwest by West"; "West-Southwest";
|
||||
"West by South"; "West"; "West by North";
|
||||
"West-Northwest"; "Northwest by West"; "Northwest";
|
||||
"Northwest by North"; "North-Northwest"; "North by West";];;
|
||||
|
||||
let get_direction_index input =
|
||||
let shifted = (input +. 5.6201) in
|
||||
let shifted = if shifted > 360. then shifted -. 360. else shifted in
|
||||
int_of_float (shifted /. 11.25);;
|
||||
|
||||
let print_direction input =
|
||||
let index = get_direction_index input in
|
||||
let direction = List.nth directions index in
|
||||
let test = Printf.printf "%3d %-20s %.2f\n" (index + 1) direction in
|
||||
test input;;
|
||||
|
||||
List.iter (print_direction) test_cases;;
|
||||
259
Task/Box-the-compass/OoRexx/box-the-compass.rexx
Normal file
259
Task/Box-the-compass/OoRexx/box-the-compass.rexx
Normal file
|
|
@ -0,0 +1,259 @@
|
|||
/* Rexx */
|
||||
|
||||
Do
|
||||
globs = '!DEG !MIN !SEC !FULL'
|
||||
Drop !DEG !MIN !SEC !FULL
|
||||
sign. = ''
|
||||
sign.!DEG = 'c2b0'x -- degree sign : U+00B0
|
||||
sign.!MIN = 'e280b2'x -- prime : U+2032
|
||||
sign.!SEC = 'e280b3'x -- double prime : U+2033
|
||||
points. = ''
|
||||
|
||||
Call display_compass_points
|
||||
|
||||
Call display_sample
|
||||
Say
|
||||
|
||||
headings. = ''
|
||||
headings.0 = 0
|
||||
Call make_headings
|
||||
|
||||
Call flush_queue
|
||||
Do h_ = 1 to headings.0
|
||||
Queue headings.h_
|
||||
End h_
|
||||
|
||||
Call display_sample
|
||||
Say
|
||||
|
||||
Return
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
flush_queue:
|
||||
Procedure
|
||||
Do
|
||||
Do q_ = 1 to queued()
|
||||
Parse pull .
|
||||
End q_
|
||||
Return
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
display_sample:
|
||||
Procedure Expose points. sign. (globs)
|
||||
Do
|
||||
|
||||
Do q_ = 1 to queued()
|
||||
Parse pull heading
|
||||
index = get_index(heading)
|
||||
Parse Value get_point(index) with p_abbrev p_full
|
||||
Say index~right(3),
|
||||
p_abbrev~left(4) p_full~left(20),
|
||||
heading~format(5, 3) || sign.!DEG '('format_degrees_minutes_seconds(heading)')',
|
||||
''
|
||||
End q_
|
||||
|
||||
Return
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
display_compass_points:
|
||||
Procedure Expose points. sign. (globs)
|
||||
Do
|
||||
|
||||
points = 32
|
||||
one_pt = 360 / points
|
||||
|
||||
Do h_ = 0 to points - 1
|
||||
heading = h_ * 360 / points
|
||||
hmin = heading - one_pt / 2
|
||||
hmax = heading + one_pt / 2
|
||||
|
||||
If hmin < 0 then Do
|
||||
hmin = hmin + 360
|
||||
End
|
||||
If hmax >= 360 then Do
|
||||
hmax = hmax - 360
|
||||
End
|
||||
|
||||
index = (h_ // points) + 1
|
||||
Parse Value get_point(index) with p_abbrev p_full
|
||||
|
||||
Say index~right(3),
|
||||
p_abbrev~left(4) p_full~left(20),
|
||||
hmin~format(5, 3) || sign.!DEG '('format_degrees_minutes_seconds(hmin)')',
|
||||
heading~format(5, 3) || sign.!DEG '('format_degrees_minutes_seconds(heading)')',
|
||||
hmax~format(5, 3) || sign.!DEG '('format_degrees_minutes_seconds(hmax)')',
|
||||
''
|
||||
End h_
|
||||
Say
|
||||
|
||||
Return
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
make_headings:
|
||||
Procedure Expose headings.
|
||||
Do
|
||||
points = 32
|
||||
Do i_ = 0 to points
|
||||
heading = i_ * 360 / 32
|
||||
|
||||
it = i_ // 3
|
||||
Select
|
||||
When it = 1 then Do
|
||||
heading_h = heading + 5.62
|
||||
End
|
||||
|
||||
When it = 2 then Do
|
||||
heading_h = heading - 5.62
|
||||
End
|
||||
|
||||
Otherwise Do
|
||||
heading_h = heading
|
||||
End
|
||||
End
|
||||
|
||||
index = (i_ // points) + 1
|
||||
ix = headings.0 + 1; headings.0 = ix; headings.ix = heading_h
|
||||
End i_
|
||||
|
||||
Return
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
get_index:
|
||||
Procedure
|
||||
Do
|
||||
Parse Arg heading .
|
||||
|
||||
one_pt = 360 / 32
|
||||
hn = heading // 360
|
||||
hi = hn % one_pt
|
||||
|
||||
If hn > hi * one_pt + one_pt / 2 then Do
|
||||
hi = hi + 1 -- greater than max range for this point; bump to next point
|
||||
End
|
||||
|
||||
idx = hi // 32 + 1 -- add one to get index into points. stem
|
||||
|
||||
Return idx
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
get_point:
|
||||
Procedure Expose points. sign. (globs)
|
||||
Do
|
||||
Parse arg index .
|
||||
|
||||
Call get_points
|
||||
|
||||
Return points.index points.index.!FULL
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
get_points:
|
||||
Procedure Expose points. sign. (globs)
|
||||
Do
|
||||
|
||||
Drop !FULL
|
||||
|
||||
points. = ''
|
||||
p_ = 0
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'N'; points.p_.!FULL = 'North'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NbE'; points.p_.!FULL = 'North by East'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NNE'; points.p_.!FULL = 'North-Northeast'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NEbn'; points.p_.!FULL = 'Northeast by North'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NE'; points.p_.!FULL = 'Northeast'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NEbE'; points.p_.!FULL = 'Northeast by East'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'ENE'; points.p_.!FULL = 'East-Northeast'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'EbN'; points.p_.!FULL = 'East by North'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'E'; points.p_.!FULL = 'East'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'EbS'; points.p_.!FULL = 'East by South'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'ESE'; points.p_.!FULL = 'East-Southeast'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SEbE'; points.p_.!FULL = 'Southeast by East'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SE'; points.p_.!FULL = 'Southeast'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SEbS'; points.p_.!FULL = 'Southeast by South'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SSE'; points.p_.!FULL = 'South-Southeast'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SbE'; points.p_.!FULL = 'South by East'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'S'; points.p_.!FULL = 'South'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SbW'; points.p_.!FULL = 'South by West'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SSW'; points.p_.!FULL = 'South-Southwest'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SWbS'; points.p_.!FULL = 'Southwest by South'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SW'; points.p_.!FULL = 'Southwest'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'SWbW'; points.p_.!FULL = 'Southwest by West'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'WSW'; points.p_.!FULL = 'Southwest'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'WbS'; points.p_.!FULL = 'West by South'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'W'; points.p_.!FULL = 'West'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'WbN'; points.p_.!FULL = 'West by North'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'WNW'; points.p_.!FULL = 'West-Northwest'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NWbW'; points.p_.!FULL = 'Northwest by West'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NW'; points.p_.!FULL = 'Northwest'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NWbN'; points.p_.!FULL = 'Northwest by North'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NNW'; points.p_.!FULL = 'North-Northwest'
|
||||
p_ = p_ + 1; points.0 = p_; points.p_ = 'NbW'; points.p_.!FULL = 'North by West'
|
||||
|
||||
Return
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
get_decimal_angle:
|
||||
Procedure Expose sign. (globs)
|
||||
Do
|
||||
Parse Arg degrees ., minutes ., seconds .
|
||||
|
||||
degrees = degrees * 10 % 10
|
||||
minutes = minutes * 10 % 10
|
||||
|
||||
angle = degrees + minutes / 60 + seconds / 60 / 60
|
||||
|
||||
Return angle
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
format_decimal_angle:
|
||||
Procedure Expose sign. (globs)
|
||||
Do
|
||||
Parse Arg degrees ., minutes ., seconds .
|
||||
|
||||
Return get_decimal_angle(degrees, minutes, seconds)~format(5, 3) || sign.!DEG
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
get_degrees_minutes_seconds:
|
||||
Procedure Expose sign. (globs)
|
||||
Do
|
||||
Parse arg angle .
|
||||
|
||||
degrees = angle * 100 % 100
|
||||
minutes = ((angle - degrees) * 60) * 100 % 100
|
||||
seconds = ((((angle - degrees) * 60) - minutes) * 60) * 100 % 100
|
||||
|
||||
Return degrees minutes seconds
|
||||
End
|
||||
Exit
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
format_degrees_minutes_seconds:
|
||||
Procedure Expose sign. (globs)
|
||||
Do
|
||||
Parse arg angle .
|
||||
|
||||
Parse Value get_degrees_minutes_seconds(angle) with degrees minutes seconds .
|
||||
|
||||
formatted = degrees~right(3) || sign.!DEG || minutes~right(2, 0) || sign.!MIN || seconds~right(2, 0) || sign.!SEC
|
||||
|
||||
Return formatted
|
||||
End
|
||||
Exit
|
||||
Loading…
Add table
Add a link
Reference in a new issue