Box the compass: Difference between revisions
Content added Content deleted
(add RPL) |
Recombinant (talk | contribs) m (→{{header|Zig}}: Updated to use 0.11.0 enum casts) |
||
Line 7,804: | Line 7,804: | ||
=={{header|Zig}}== |
=={{header|Zig}}== |
||
{{works with|Zig|0.11. |
{{works with|Zig|0.11.0}} |
||
<syntaxhighlight lang="zig">const std = @import("std");</syntaxhighlight> |
<syntaxhighlight lang="zig">const std = @import("std");</syntaxhighlight> |
||
<syntaxhighlight lang="zig">/// Degrees |
<syntaxhighlight lang="zig">/// Degrees is not constrained to the range 0 to 360 |
||
fn degreesToCompassPoint(degrees: f32) []const u8 { |
fn degreesToCompassPoint(degrees: f32) []const u8 { |
||
var d = degrees + comptime (11.25 / 2.0); |
var d = degrees + comptime (11.25 / 2.0); |
||
while (d < 0) d += 360; |
while (d < 0) d += 360; |
||
while (d >= 360) d -= 360; |
while (d >= 360) d -= 360; |
||
const index: usize = @ |
const index: usize = @intFromFloat(@divFloor(d, 11.25)); |
||
⚫ | |||
// Concatenation to overcome the inability of "zig fmt" to nicely format long arrays. |
|||
"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", |
|||
}; |
|||
.{ "Northwest", "Northwest by north", "North-northwest", "North by west" }; |
|||
return points[index]; |
return points[index]; |
||
Line 7,829: | Line 7,829: | ||
const stdout = std.io.getStdOut().writer(); |
const stdout = std.io.getStdOut().writer(); |
||
try stdout.print("Index Heading Compass point\n", .{}); |
|||
for (0..33) |i| { |
for (0..33) |i| { |
||
var heading = @ |
var heading = @as(f32, @floatFromInt(i)) * 11.25; |
||
heading += switch (i % 3) { |
heading += switch (i % 3) { |
||
1 => 5.62, |
1 => 5.62, |
||
Line 7,839: | Line 7,839: | ||
}; |
}; |
||
const index = i % 32 + 1; |
const index = i % 32 + 1; |
||
try stdout.print(" {d:2} {d:>6.2}° {s}\n", .{ index, heading, degreesToCompassPoint(heading) }); |
|||
} |
} |
||
}</syntaxhighlight> |
}</syntaxhighlight> |