Box the compass: Difference between revisions

Content added Content deleted
m (syntax highlighting fixup automation)
m (Automated syntax highlighting fixup (second round - minor fixes))
Line 22: Line 22:
* The column of indices can be thought of as an enumeration of the thirty two cardinal points (see [[Talk:Box the compass#Direction, index, and angle|talk page]])..
* The column of indices can be thought of as an enumeration of the thirty two cardinal points (see [[Talk:Box the compass#Direction, index, and angle|talk page]])..
<br><br>
<br><br>

=={{header|11l}}==
=={{header|11l}}==
{{trans|Python}}
{{trans|Python}}
<syntaxhighlight lang=11l>V majors = ‘north east south west’.split(‘ ’)
<syntaxhighlight lang="11l">V majors = ‘north east south west’.split(‘ ’)
majors *= 2
majors *= 2
V quarter1 = ‘N,N by E,N-NE,NE by N,NE,NE by E,E-NE,E by N’.split(‘,’)
V quarter1 = ‘N,N by E,N-NE,NE by N,NE,NE by E,E-NE,E by N’.split(‘,’)
Line 63: Line 62:
1 North 354.38°
1 North 354.38°
</pre>
</pre>

=={{header|Action!}}==
=={{header|Action!}}==
Atari 8-bit computer is able to show up to 40 characters per row. Therefore abbreviations of direction have been used instead of the full names.
Atari 8-bit computer is able to show up to 40 characters per row. Therefore abbreviations of direction have been used instead of the full names.
{{libheader|Action! Tool Kit}}
{{libheader|Action! Tool Kit}}
<syntaxhighlight lang=Action!>INCLUDE "D2:PRINTF.ACT" ;from the Action! Tool Kit
<syntaxhighlight lang="action!">INCLUDE "D2:PRINTF.ACT" ;from the Action! Tool Kit
INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit


Line 194: Line 192:
1 N 354.38
1 N 354.38
</pre>
</pre>

=={{header|Ada}}==
=={{header|Ada}}==


Inspired by [[#C++|the C++ program]], but without the need for a specific library.
Inspired by [[#C++|the C++ program]], but without the need for a specific library.


<syntaxhighlight lang=Ada>with Ada.Text_IO;
<syntaxhighlight lang="ada">with Ada.Text_IO;


procedure Box_The_Compass is
procedure Box_The_Compass is
Line 303: Line 300:
354.37 | 32 | North by west
354.37 | 32 | North by west
354.38 | 1 | North</pre>
354.38 | 1 | North</pre>

=={{header|ALGOL 68}}==
=={{header|ALGOL 68}}==
{{works with|ALGOL 68|Revision 1 - no extensions to language used.}}
{{works with|ALGOL 68|Revision 1 - no extensions to language used.}}
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny].}}
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny].}}
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d] - due to extensive use of '''format'''[ted] ''transput''.}}
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d] - due to extensive use of '''format'''[ted] ''transput''.}}
<syntaxhighlight lang=algol68>#!/usr/local/bin/a68g --script #
<syntaxhighlight lang="algol68">#!/usr/local/bin/a68g --script #


[]STRING
[]STRING
Line 476: Line 472:
32|North by West |NbW | |343°07.50′|348°45.00′|354°22.49′
32|North by West |NbW | |343°07.50′|348°45.00′|354°22.49′
</pre>
</pre>

=={{header|AppleScript}}==
=={{header|AppleScript}}==


Line 486: Line 481:
Functional composition, allowing for additional languages, and different numbers of compass points – see the test section)
Functional composition, allowing for additional languages, and different numbers of compass points – see the test section)


<syntaxhighlight lang=AppleScript>use framework "Foundation"
<syntaxhighlight lang="applescript">use framework "Foundation"
use scripting additions
use scripting additions


Line 913: Line 908:
32 354.37° North by west 北微西
32 354.37° North by west 北微西
1 354.38° North 北 </pre>
1 354.38° North 北 </pre>

=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==
{{trans|C++}}
{{trans|C++}}
{{works with|AutoHotkey_L}}
{{works with|AutoHotkey_L}}
<syntaxhighlight lang=AHK>get_Index(angle){
<syntaxhighlight lang="ahk">get_Index(angle){
return Mod(floor(angle / 11.25 +0.5), 32) + 1
return Mod(floor(angle / 11.25 +0.5), 32) + 1
}
}
Line 990: Line 984:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</pre>
1 North 354.38</pre>

=={{header|AutoIt}}==
=={{header|AutoIt}}==


<syntaxhighlight lang=AutoIt>
<syntaxhighlight lang="autoit">
Local $avArray[33] = [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, _
Local $avArray[33] = [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, _
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, _
Line 1,047: Line 1,040:
31 : North by west : 354.37
31 : North by west : 354.37
0 : North : 354.38</pre>
0 : North : 354.38</pre>

=={{header|AWK}}==
=={{header|AWK}}==
<syntaxhighlight lang=awk>#!/usr/bin/awk -f
<syntaxhighlight lang="awk">#!/usr/bin/awk -f
BEGIN {
BEGIN {
split("N NbE NNE NEbN NE NEbE ENE EbN E EbS ESE SEbE SE SEbS SSE SbE S SbW SSW SWbS SW SWbW WSW WbS W WbN WNW NWbW NW NWbN NNW NbW",A," ");
split("N NbE NNE NEbN NE NEbE ENE EbN E EbS ESE SEbE SE SEbS SSE SbE S SbW SSW SWbS SW SWbW WSW WbS W WbN WNW NWbW NW NWbN NNW NbW",A," ");
Line 1,102: Line 1,094:
354.37 : 32 NbW
354.37 : 32 NbW
354.38 : 1 N</pre>
354.38 : 1 N</pre>

=={{header|BASIC256}}==
=={{header|BASIC256}}==
<syntaxhighlight lang=BASIC256>arraybase 1
<syntaxhighlight lang="basic256">arraybase 1


dim names$ = {"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", "North"}
dim names$ = {"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", "North"}
Line 1,115: Line 1,106:
print rjust(string(j),2); " "; ljust(string(names$[j+1]),20); grados[i]
print rjust(string(j),2); " "; ljust(string(names$[j+1]),20); grados[i]
next i</syntaxhighlight>
next i</syntaxhighlight>

=={{header|BBC BASIC}}==
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
{{works with|BBC BASIC for Windows}}
<syntaxhighlight lang=bbcbasic> DIM bearing(32)
<syntaxhighlight lang="bbcbasic"> DIM bearing(32)
bearing() = 0.0, 16.87, 16.88, 33.75, 50.62, 50.63, 67.5, 84.37, \
bearing() = 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, \
\ 84.38, 101.25, 118.12, 118.13, 135.0, 151.87, 151.88, 168.75, \
Line 1,180: Line 1,170:
354.37 32 North by west
354.37 32 North by west
354.38 1 North</pre>
354.38 1 North</pre>

=={{header|Befunge}}==
=={{header|Befunge}}==
<syntaxhighlight lang=befunge>>>::"}"9**\4+3%79*9*5-*79*9*5--+:5>>>06p:55+%68*+v
<syntaxhighlight lang="befunge">>>::"}"9**\4+3%79*9*5-*79*9*5--+:5>>>06p:55+%68*+v
^_@#!`*84:+1<v*9"}"*+55,,,".",,,$$_^#!:-1g60/+55\<
^_@#!`*84:+1<v*9"}"*+55,,,".",,,$$_^#!:-1g60/+55\<
>_06g:v>55+,^>/5+55+/48*::::,,,,%:1+.9,:06p48*\-0v
>_06g:v>55+,^>/5+55+/48*::::,,,,%:1+.9,:06p48*\-0v
Line 1,232: Line 1,221:
354.37 32 North by west
354.37 32 North by west
354.38 1 North</pre>
354.38 1 North</pre>

=={{header|C}}==
=={{header|C}}==
Like [[wp:Box the compass|Wikipedia's article]], this program uses indexes to count the headings. There are now 33 headings, from 1 to 33, because 0.0 and 354.38 are different angles. (This differs from the task pseudocode, which mapped the 32 compass points to indexes.)
Like [[wp:Box the compass|Wikipedia's article]], this program uses indexes to count the headings. There are now 33 headings, from 1 to 33, because 0.0 and 354.38 are different angles. (This differs from the task pseudocode, which mapped the 32 compass points to indexes.)


<syntaxhighlight lang=C>#include <stdio.h>
<syntaxhighlight lang="c">#include <stdio.h>


int main()
int main()
Line 1,324: Line 1,312:
1 North 354.38
1 North 354.38
</pre>
</pre>

=={{header|C sharp|C#}}==
=={{header|C sharp|C#}}==
<syntaxhighlight lang=csharp>
<syntaxhighlight lang="csharp">
using System;
using System;
using System.Collections.Generic;
using System.Collections.Generic;
Line 1,400: Line 1,387:
1: North : 354.38
1: North : 354.38
</pre>
</pre>

=={{header|C++}}==
=={{header|C++}}==
Using the Boost libraries
Using the Boost libraries
{{libheader|Boost}}
{{libheader|Boost}}
<syntaxhighlight lang=cpp>#include <string>
<syntaxhighlight lang="cpp">#include <string>
#include <boost/array.hpp>
#include <boost/array.hpp>
#include <boost/assign/list_of.hpp>
#include <boost/assign/list_of.hpp>
Line 1,499: Line 1,485:
1 North 354.38
1 North 354.38
</pre>
</pre>

=={{header|Clojure}}==
=={{header|Clojure}}==
{{trans|Tcl}}
{{trans|Tcl}}
<syntaxhighlight lang=lisp>(ns boxing-the-compass
<syntaxhighlight lang="lisp">(ns boxing-the-compass
(:use [clojure.string :only [capitalize]]))
(:use [clojure.string :only [capitalize]]))
Line 1,562: Line 1,547:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</pre>
1 North 354.38</pre>

=={{header|COBOL}}==
=={{header|COBOL}}==
Works with GnuCOBOL
Works with GnuCOBOL
<syntaxhighlight lang=cobol> identification division.
<syntaxhighlight lang="cobol"> identification division.
program-id. box-compass.
program-id. box-compass.
data division.
data division.
Line 1,670: Line 1,654:
1 North 354.38
1 North 354.38
</pre>
</pre>

=={{header|D}}==
=={{header|D}}==
{{trans|Java}}
{{trans|Java}}
<syntaxhighlight lang=d>import std.stdio, std.string, std.math, std.array;
<syntaxhighlight lang="d">import std.stdio, std.string, std.math, std.array;


struct boxTheCompass {
struct boxTheCompass {
Line 1,743: Line 1,726:


===Alternative version===
===Alternative version===
<syntaxhighlight lang=d>void main() {
<syntaxhighlight lang="d">void main() {
import std.stdio;
import std.stdio;


Line 1,801: Line 1,784:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</pre>
1 North 354.38</pre>

=={{header|Delphi}}==
=={{header|Delphi}}==
See [https://rosettacode.org/wiki/Box_the_compass#Pascal Pascal].
See [https://rosettacode.org/wiki/Box_the_compass#Pascal Pascal].

=={{header|Elixir}}==
=={{header|Elixir}}==
{{trans|Ruby}}
{{trans|Ruby}}
<syntaxhighlight lang=elixir>defmodule Box do
<syntaxhighlight lang="elixir">defmodule Box do
defp head do
defp head do
Enum.chunk(~w(north east south west north), 2, 1)
Enum.chunk(~w(north east south west north), 2, 1)
Line 1,868: Line 1,849:
1 North 354.38
1 North 354.38
</pre>
</pre>

=={{header|Euphoria}}==
=={{header|Euphoria}}==
<syntaxhighlight lang=euphoria>constant names = {"North","North by east","North-northeast","Northeast by north",
<syntaxhighlight lang="euphoria">constant names = {"North","North by east","North-northeast","Northeast by north",
"Northeast","Northeast by east","East-northeast","East by north","East",
"Northeast","Northeast by east","East-northeast","East by north","East",
"East by south","East-southeast","Southeast by east","Southeast","Southeast by south",
"East by south","East-southeast","Southeast by east","Southeast","Southeast by south",
Line 1,928: Line 1,908:
354.37 32 North by west
354.37 32 North by west
354.38 1 North</pre>
354.38 1 North</pre>

=={{header|F_Sharp|F#}}==
=={{header|F_Sharp|F#}}==
{{trans|Perl}}
{{trans|Perl}}
<syntaxhighlight lang=fsharp>let box = [|
<syntaxhighlight lang="fsharp">let box = [|
"North"; "North by east"; "North-northeast"; "Northeast by north";
"North"; "North by east"; "North-northeast"; "Northeast by north";
"Northeast"; "Northeast by east"; "East-northeast"; "East by north";
"Northeast"; "Northeast by east"; "East-northeast"; "East by north";
Line 1,982: Line 1,961:
32 North by west 354.37°
32 North by west 354.37°
1 North 354.38°</pre>
1 North 354.38°</pre>

=={{header|Factor}}==
=={{header|Factor}}==
<syntaxhighlight lang=Factor>USING: formatting kernel math sequences ;
<syntaxhighlight lang="factor">USING: formatting kernel math sequences ;


CONSTANT: box
CONSTANT: box
Line 2,047: Line 2,025:
354.38° 1 North
354.38° 1 North
</pre>
</pre>

=={{header|Fortran}}==
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
{{works with|Fortran|90 and later}}
<syntaxhighlight lang=fortran>Program Compass
<syntaxhighlight lang="fortran">Program Compass
implicit none
implicit none


Line 2,123: Line 2,100:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</pre>
1 North 354.38</pre>

=={{header|FreeBASIC}}==
=={{header|FreeBASIC}}==
<syntaxhighlight lang=freebasic>' version 04-11-2016
<syntaxhighlight lang="freebasic">' version 04-11-2016
' compile with: fbc -s console
' compile with: fbc -s console


Line 2,191: Line 2,167:
354.37 31 North by west
354.37 31 North by west
354.38 0 North</pre>
354.38 0 North</pre>

=={{header|Gambas}}==
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=823a56ac094b8963cf11f792b381fbcc Click this link to run this code]'''
'''[https://gambas-playground.proko.eu/?gist=823a56ac094b8963cf11f792b381fbcc Click this link to run this code]'''
<syntaxhighlight lang=gambas>Public Sub Main()
<syntaxhighlight lang="gambas">Public Sub Main()
Dim fDeg As Float[] = [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]
Dim fDeg As Float[] = [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]
Dim cHeading As Collection = ["N": "North", "S": "South", "W": "West", "E": "East", "b": "by"]
Dim cHeading As Collection = ["N": "North", "S": "South", "W": "West", "E": "East", "b": "by"]
Line 2,249: Line 2,224:
Index= 1 354.38 degrees = North
Index= 1 354.38 degrees = North
</pre>
</pre>

=={{header|Go}}==
=={{header|Go}}==
<syntaxhighlight lang=go>package main
<syntaxhighlight lang="go">package main


import "fmt"
import "fmt"
Line 2,354: Line 2,328:
1 North 354.38°
1 North 354.38°
</pre>
</pre>

=={{header|Groovy}}==
=={{header|Groovy}}==
<syntaxhighlight lang=groovy>def asCompassPoint(angle) {
<syntaxhighlight lang="groovy">def asCompassPoint(angle) {
def cardinalDirections = ["north", "east", "south", "west"]
def cardinalDirections = ["north", "east", "south", "west"]


Line 2,412: Line 2,385:
32 North by west 354.37°
32 North by west 354.37°
1 North 354.38°</pre>
1 North 354.38°</pre>

=={{header|Haskell}}==
=={{header|Haskell}}==
<syntaxhighlight lang=haskell>import Data.Char (toUpper)
<syntaxhighlight lang="haskell">import Data.Char (toUpper)


import Data.Maybe (fromMaybe)
import Data.Maybe (fromMaybe)
Line 2,518: Line 2,490:
32 North by west 354.37°
32 North by west 354.37°
1 North 354.38°</pre>
1 North 354.38°</pre>

=={{header|Huginn}}==
=={{header|Huginn}}==
<syntaxhighlight lang=huginn>import Algorithms as algo;
<syntaxhighlight lang="huginn">import Algorithms as algo;
import Text as text;
import Text as text;


Line 2,601: Line 2,572:
32 | 354.37° | North by west
32 | 354.37° | North by west
1 | 354.38° | North</pre>
1 | 354.38° | North</pre>

=={{header|Icon}} and {{header|Unicon}}==
=={{header|Icon}} and {{header|Unicon}}==
{{incomplete|Icon|354.38?}}
{{incomplete|Icon|354.38?}}
<syntaxhighlight lang=Icon>link strings,numbers
<syntaxhighlight lang="icon">link strings,numbers
procedure main()
procedure main()
Line 2,667: Line 2,637:
31 north-northwest 337.50
31 north-northwest 337.50
32 north by west 354.37</pre>
32 north by west 354.37</pre>

=={{header|IS-BASIC}}==
=={{header|IS-BASIC}}==
<syntaxhighlight lang=IS-BASIC>100 PROGRAM "Compass.bas"
<syntaxhighlight lang="is-basic">100 PROGRAM "Compass.bas"
110 STRING DR$(1 TO 33)*18
110 STRING DR$(1 TO 33)*18
120 FOR I=1 TO 33
120 FOR I=1 TO 33
Line 2,717: Line 2,686:
354.37 32 North by west
354.37 32 North by west
354.38 1 North</pre>
354.38 1 North</pre>

=={{header|J}}==
=={{header|J}}==


<syntaxhighlight lang=j>require'strings'
<syntaxhighlight lang="j">require'strings'
subs=: 'N,north,S,south,E,east,W,west,b, by ,'
subs=: 'N,north,S,south,E,east,W,west,b, by ,'
dirs=: subs (toupper@{., }.)@rplc~L:1 0&(<;._2) 0 :0 -. ' ',LF
dirs=: subs (toupper@{., }.)@rplc~L:1 0&(<;._2) 0 :0 -. ' ',LF
Line 2,731: Line 2,699:
Example use:
Example use:


<syntaxhighlight lang=j> i.10
<syntaxhighlight lang="j"> i.10
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
deg2pnt i.10
deg2pnt i.10
Line 2,740: Line 2,708:
Required example:
Required example:


<syntaxhighlight lang=j> (":@>:@indice,.' ',.>@deg2pnt,.' ',.":@,.)(*&11.25 + 5.62 * 0 1 _1 {~ 3&|) i.33
<syntaxhighlight lang="j"> (":@>:@indice,.' ',.>@deg2pnt,.' ',.":@,.)(*&11.25 + 5.62 * 0 1 _1 {~ 3&|) i.33
1 North 0
1 North 0
2 North by east 16.87
2 North by east 16.87
Line 2,774: Line 2,742:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</syntaxhighlight>
1 North 354.38</syntaxhighlight>

=={{header|Java}}==
=={{header|Java}}==
{{trans|Visual Basic .NET}}
{{trans|Visual Basic .NET}}
<syntaxhighlight lang=java>public class BoxingTheCompass{
<syntaxhighlight lang="java">public class BoxingTheCompass{
private static String[] points = new String[32];
private static String[] points = new String[32];
Line 2,860: Line 2,827:
32 North by west 354.37°
32 North by west 354.37°
1 North 354.38°</pre>
1 North 354.38°</pre>

=={{header|JavaScript}}==
=={{header|JavaScript}}==
===ES5===
===ES5===
An iterative, web-based approach:
An iterative, web-based approach:


<syntaxhighlight lang=javascript>function createRow(i, point, heading) {
<syntaxhighlight lang="javascript">function createRow(i, point, heading) {
var tr = document.createElement('tr'),
var tr = document.createElement('tr'),
td;
td;
Line 2,949: Line 2,915:


Functional composition, allowing for additional languages (and different numbers of compass points)
Functional composition, allowing for additional languages (and different numbers of compass points)
<syntaxhighlight lang=JavaScript>(() => {
<syntaxhighlight lang="javascript">(() => {
'use strict';
'use strict';


Line 3,223: Line 3,189:
32 354.37° North by west 北微西
32 354.37° North by west 北微西
1 354.38° North 北 </pre>
1 354.38° North 北 </pre>

=={{header|Julia}}==
=={{header|Julia}}==
{{works with|Julia|1.2}}
{{works with|Julia|1.2}}
{{trans|Python}}
{{trans|Python}}


<syntaxhighlight lang=julia>using Printf
<syntaxhighlight lang="julia">using Printf


function degree2compasspoint(d::Float64)
function degree2compasspoint(d::Float64)
Line 3,286: Line 3,251:
32 North By West 354.37°
32 North By West 354.37°
1 North 354.38°</pre>
1 North 354.38°</pre>

=={{header|K}}==
=={{header|K}}==
The representation of the names was inspired by Tcl (etc.).
The representation of the names was inspired by Tcl (etc.).


<syntaxhighlight lang=K> d:("N;Nbe;N-ne;Nebn;Ne;Nebe;E-ne;Ebn;")
<syntaxhighlight lang="k"> d:("N;Nbe;N-ne;Nebn;Ne;Nebe;E-ne;Ebn;")
d,:("E;Ebs;E-se;Sebe;Se;Sebs;S-se;Sbe;")
d,:("E;Ebs;E-se;Sebe;Se;Sebs;S-se;Sbe;")
d,:("S;Sbw;S-sw;Swbs;Sw;Swbw;W-sw;Wbs;")
d,:("S;Sbw;S-sw;Swbs;Sw;Swbw;W-sw;Wbs;")
Line 3,308: Line 3,272:
The table:
The table:
<syntaxhighlight lang=K> `0:{((2$(1+x!32))," ",(-19$cc@dd[x]),(6.2$f@x))}'!#dd
<syntaxhighlight lang="k"> `0:{((2$(1+x!32))," ",(-19$cc@dd[x]),(6.2$f@x))}'!#dd
1 North 0.00
1 North 0.00
2 North by east 16.87
2 North by east 16.87
Line 3,342: Line 3,306:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</syntaxhighlight>
1 North 354.38</syntaxhighlight>

=={{header|Kotlin}}==
=={{header|Kotlin}}==
<syntaxhighlight lang=scala>// version 1.1.2
<syntaxhighlight lang="scala">// version 1.1.2


fun expand(cp: String): String {
fun expand(cp: String): String {
Line 3,420: Line 3,383:
1 354.38 North
1 354.38 North
</pre>
</pre>

=={{header|langur}}==
=={{header|langur}}==
{{trans|D}}
{{trans|D}}
{{works with|langur|0.6.13}}
{{works with|langur|0.6.13}}
<syntaxhighlight lang=langur>val .box = ["North", "North by east", "North-northeast", "Northeast by north",
<syntaxhighlight lang="langur">val .box = ["North", "North by east", "North-northeast", "Northeast by north",
"Northeast", "Northeast by east", "East-northeast", "East by north",
"Northeast", "Northeast by east", "East-northeast", "East by north",
"East", "East by south", "East-southeast", "Southeast by east",
"East", "East by south", "East-southeast", "Southeast by east",
Line 3,484: Line 3,446:
1 354.38 North
1 354.38 North
</pre>
</pre>

=={{header|Lasso}}==
=={{header|Lasso}}==
<syntaxhighlight lang=Lasso>define pointsarray() => {
<syntaxhighlight lang="lasso">define pointsarray() => {
local(points = array)
local(points = array)
loop(-from=0,-to=32) => {
loop(-from=0,-to=32) => {
Line 3,575: Line 3,536:
354.37 | 32 | North by west
354.37 | 32 | North by west
354.38 | 1 | North</pre>
354.38 | 1 | North</pre>

=={{header|Liberty BASIC}}==
=={{header|Liberty BASIC}}==
<syntaxhighlight lang=lb>dim point$( 32)
<syntaxhighlight lang="lb">dim point$( 32)


for i =1 to 32
for i =1 to 32
Line 3,646: Line 3,606:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</pre>
1 North 354.38</pre>

=={{header|LLVM}}==
=={{header|LLVM}}==
{{trans|C}}
{{trans|C}}
<syntaxhighlight lang=llvm>; This is not strictly LLVM, as it uses the C library function "printf".
<syntaxhighlight lang="llvm">; This is not strictly LLVM, as it uses the C library function "printf".
; LLVM does not provide a way to print values, so the alternative would be
; LLVM does not provide a way to print values, so the alternative would be
; to just load the string into memory, and that would be boring.
; to just load the string into memory, and that would be boring.
Line 3,752: Line 3,711:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</pre>
1 North 354.38</pre>

=={{header|Logo}}==
=={{header|Logo}}==
<syntaxhighlight lang=logo>; List of abbreviated compass point labels
<syntaxhighlight lang="logo">; List of abbreviated compass point labels
make "compass_points [ N NbE N-NE NEbN NE NEbE E-NE EbN
make "compass_points [ N NbE N-NE NEbN NE NEbE E-NE EbN
E EbS E-SE SEbE SE SEbS S-SE SbE
E EbS E-SE SEbE SE SEbS S-SE SbE
Line 3,855: Line 3,813:
354.37 | North by west | 32
354.37 | North by west | 32
354.38 | North | 1</pre>
354.38 | North | 1</pre>

=={{header|Lua}}==
=={{header|Lua}}==
{{trans|Logo}}
{{trans|Logo}}
<syntaxhighlight lang=lua>-- List of abbreviated compass point labels
<syntaxhighlight lang="lua">-- List of abbreviated compass point labels
compass_points = { "N", "NbE", "N-NE", "NEbN", "NE", "NEbE", "E-NE", "EbN",
compass_points = { "N", "NbE", "N-NE", "NEbN", "NE", "NEbE", "E-NE", "EbN",
"E", "EbS", "E-SE", "SEbE", "SE", "SEbS", "S-SE", "SbE",
"E", "EbS", "E-SE", "SEbE", "SE", "SEbS", "S-SE", "SbE",
Line 3,943: Line 3,900:
354.37 | North by west | 32
354.37 | North by west | 32
354.38 | North | 1</pre>
354.38 | North | 1</pre>

=={{header|M2000 Interpreter}}==
=={{header|M2000 Interpreter}}==
In a For Next loop we can change loop variable inside block, but the actual loop hidden variable can't change so for next iteration we get the proper value.
In a For Next loop we can change loop variable inside block, but the actual loop hidden variable can't change so for next iteration we get the proper value.


<syntaxhighlight lang=M2000 Interpreter>
<syntaxhighlight lang="m2000 interpreter">
Module CheckIt {
Module CheckIt {
Locale 1033 'change decimal point char to dot.
Locale 1033 'change decimal point char to dot.
Line 4,015: Line 3,971:
354.38°| 1 | North
354.38°| 1 | North
</pre >
</pre >

=={{header|Mathematica}} / {{header|Wolfram Language}}==
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<syntaxhighlight lang=Mathematica>Map[List[Part[#,1], dirs[[Part[#,1]]], ToString@Part[#,2]<>"°"]&,
<syntaxhighlight lang="mathematica">Map[List[Part[#,1], dirs[[Part[#,1]]], ToString@Part[#,2]<>"°"]&,
Map[{Floor[Mod[ #+5.625 , 360]/11.25]+1,#}&,input] ]//TableForm</syntaxhighlight>
Map[{Floor[Mod[ #+5.625 , 360]/11.25]+1,#}&,input] ]//TableForm</syntaxhighlight>
<pre>1 North 0.°
<pre>1 North 0.°
Line 4,052: Line 4,007:
32 North by west 354.37°
32 North by west 354.37°
1 North 354.38°</pre>
1 North 354.38°</pre>

=={{header|MATLAB}} / {{header|Octave}}==
=={{header|MATLAB}} / {{header|Octave}}==
<syntaxhighlight lang=MATLAB>function b = compassbox(d)
<syntaxhighlight lang="matlab">function b = compassbox(d)
b = ceil(mod(d+360/64,360)*32/360);
b = ceil(mod(d+360/64,360)*32/360);
end; </syntaxhighlight>
end; </syntaxhighlight>
Line 4,094: Line 4,048:
354.37 : 32
354.37 : 32
354.38 : 1</pre>
354.38 : 1</pre>

=={{header|Modula-2}}==
=={{header|Modula-2}}==
<syntaxhighlight lang=modula2>MODULE BoxTheCompass;
<syntaxhighlight lang="modula2">MODULE BoxTheCompass;
FROM FormatString IMPORT FormatString;
FROM FormatString IMPORT FormatString;
FROM RealStr IMPORT RealToStr;
FROM RealStr IMPORT RealToStr;
Line 4,178: Line 4,131:
ReadChar
ReadChar
END BoxTheCompass.</syntaxhighlight>
END BoxTheCompass.</syntaxhighlight>

=={{header|MUMPS}}==
=={{header|MUMPS}}==
The TCL implementation was the starting point, but this isn't an exact translation.
The TCL implementation was the starting point, but this isn't an exact translation.
<syntaxhighlight lang=MUMPS>BOXING(DEGREE)
<syntaxhighlight lang="mumps">BOXING(DEGREE)
;This takes in a degree heading, nominally from 0 to 360, and returns the compass point name.
;This takes in a degree heading, nominally from 0 to 360, and returns the compass point name.
QUIT:((DEGREE<0)||(DEGREE>360)) "land lubber can't read a compass"
QUIT:((DEGREE<0)||(DEGREE>360)) "land lubber can't read a compass"
Line 4,250: Line 4,202:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</pre></p>
1 North 354.38</pre></p>

=={{header|NetRexx}}==
=={{header|NetRexx}}==
<syntaxhighlight lang=NetRexx>/* NetRexx */
<syntaxhighlight lang="netrexx">/* NetRexx */
options replace format comments java crossref savelog symbols nobinary utf8
options replace format comments java crossref savelog symbols nobinary utf8


Line 4,526: Line 4,477:
1 N North 354.380
1 N North 354.380
</pre>
</pre>

=={{header|Nim}}==
=={{header|Nim}}==
<syntaxhighlight lang=nim>import math, sequtils, strformat, strutils
<syntaxhighlight lang="nim">import math, sequtils, strformat, strutils


const
const
Line 4,592: Line 4,542:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</pre>
1 North 354.38</pre>

=={{header|Objeck}}==
=={{header|Objeck}}==
<syntaxhighlight lang=objeck>
<syntaxhighlight lang="objeck">
class BoxCompass {
class BoxCompass {
function : Main(args : String[]) ~ Nil {
function : Main(args : String[]) ~ Nil {
Line 4,667: Line 4,616:
1 North 354.38
1 North 354.38
</pre>
</pre>

=={{header|OCaml}}==
=={{header|OCaml}}==
<syntaxhighlight lang=ocaml>
<syntaxhighlight lang="ocaml">
let test_cases = [0.0; 16.87; 16.88; 33.75; 50.62; 50.63; 67.5;
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;
84.37; 84.38; 101.25; 118.12; 118.13; 135.0;
Line 4,739: Line 4,687:
1 North 354.38
1 North 354.38
</pre>
</pre>

=={{header|OoRexx}}==
=={{header|OoRexx}}==
<syntaxhighlight lang=OOREXX>/* Rexx */
<syntaxhighlight lang="oorexx">/* Rexx */


Do
Do
Line 5,072: Line 5,019:
1 N North 354.380° (354°22′48″)
1 N North 354.380° (354°22′48″)
</pre>
</pre>

=={{header|PARI/GP}}==
=={{header|PARI/GP}}==
<syntaxhighlight lang=parigp>box(x)={["North","North by east","North-northeast","Northeast by north","Northeast",
<syntaxhighlight lang="parigp">box(x)={["North","North by east","North-northeast","Northeast by north","Northeast",
"Northeast by east","East-northeast","East by north","East","East by south","East-southeast",
"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",
"Southeast by east","Southeast","Southeast by south","South-southeast","South by east","South",
Line 5,116: Line 5,062:
32 North by west 354.370000
32 North by west 354.370000
1 North 354.380000</pre>
1 North 354.380000</pre>

=={{header|Pascal}}==
=={{header|Pascal}}==
{{trans|Fortran}}
{{trans|Fortran}}
<syntaxhighlight lang=pascal>program BoxTheCompass(output);
<syntaxhighlight lang="pascal">program BoxTheCompass(output);


function compasspoint(angle: real): string;
function compasspoint(angle: real): string;
Line 5,193: Line 5,138:
1 North 354.3800
1 North 354.3800
</pre>
</pre>

=={{header|Perl}}==
=={{header|Perl}}==
Don't waste brain cells calculating names, not worth the effort. Code is probably shorter, faster, and easier to read this way.
Don't waste brain cells calculating names, not worth the effort. Code is probably shorter, faster, and easier to read this way.
<syntaxhighlight lang=Perl>use utf8;
<syntaxhighlight lang="perl">use utf8;


my @names = (
my @names = (
Line 5,240: Line 5,184:
my $i = int(($_ * 32 / 360) + .5) % 32;
my $i = int(($_ * 32 / 360) + .5) % 32;
printf "%3d %18s %6.2f°\n", $i + 1, $names[$i], $_;
printf "%3d %18s %6.2f°\n", $i + 1, $names[$i], $_;
}</syntaxhighlight>output<syntaxhighlight lang=text> 1 North 0.00°
}</syntaxhighlight>output<syntaxhighlight lang="text"> 1 North 0.00°
2 North by east 16.87°
2 North by east 16.87°
3 North-northeast 16.88°
3 North-northeast 16.88°
Line 5,273: Line 5,217:
32 North by west 354.37°
32 North by west 354.37°
1 North 354.38°</syntaxhighlight>
1 North 354.38°</syntaxhighlight>

=={{header|Phix}}==
=={{header|Phix}}==
Unlike the Perl guy, for me the maths is the boring bit, building those strings is the fun!<br>
Unlike the Perl guy, for me the maths is the boring bit, building those strings is the fun!<br>
<!--<syntaxhighlight lang=Phix>(phixonline)-->
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">get225</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">string</span> <span style="color: #000000;">p1</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">string</span> <span style="color: #000000;">p2</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">string</span> <span style="color: #000000;">p4</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">get225</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">string</span> <span style="color: #000000;">p1</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">string</span> <span style="color: #000000;">p2</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">string</span> <span style="color: #000000;">p4</span><span style="color: #0000FF;">)</span>
Line 5,362: Line 5,305:
</pre>
</pre>
of course the following (more sensible but less fun, full standalone program) way works just as well, and produces the same output
of course the following (more sensible but less fun, full standalone program) way works just as well, and produces the same output
<!--<syntaxhighlight lang=Phix>(phixonline)-->
<!--<syntaxhighlight lang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">compass_points</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span> <span style="color: #008000;">"North"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"North by east"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"North-northeast"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Northeast by north"</span><span style="color: #0000FF;">,</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">compass_points</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span> <span style="color: #008000;">"North"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"North by east"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"North-northeast"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"Northeast by north"</span><span style="color: #0000FF;">,</span>
Line 5,380: Line 5,323:
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<!--</syntaxhighlight>-->
<!--</syntaxhighlight>-->

=={{header|Picat}}==
=={{header|Picat}}==
{{trans|Nim}}
{{trans|Nim}}
<syntaxhighlight lang=Picat>go =>
<syntaxhighlight lang="picat">go =>
Names = ["North", "North by east", "North-northeast", "Northeast by north",
Names = ["North", "North by east", "North-northeast", "Northeast by north",
"Northeast", "Northeast by east", "East-northeast", "East by north",
"Northeast", "Northeast by east", "East-northeast", "East by north",
Line 5,436: Line 5,378:
32 North by west 354.37
32 North by west 354.37
1 North 354.38</pre>
1 North 354.38</pre>

=={{header|PicoLisp}}==
=={{header|PicoLisp}}==
<syntaxhighlight lang=PicoLisp>(scl 3)
<syntaxhighlight lang="picolisp">(scl 3)


(setq *Compass # Build lookup table
(setq *Compass # Build lookup table
Line 5,506: Line 5,447:
32 north by west 354.37
32 north by west 354.37
1 north 354.38</pre>
1 north 354.38</pre>

=={{header|PowerShell}}==
=={{header|PowerShell}}==
<syntaxhighlight lang=powershell>function Convert-DegreeToDirection ( [double]$Degree )
<syntaxhighlight lang="powershell">function Convert-DegreeToDirection ( [double]$Degree )
{
{
Line 5,559: Line 5,499:
north</pre>
north</pre>
A more general solution allowing you to choose whether to use 4, 8, 16, or 32 compass points.
A more general solution allowing you to choose whether to use 4, 8, 16, or 32 compass points.
<syntaxhighlight lang=powershell>function Convert-DegreeToDirection ( [double]$Degree, [int]$Points )
<syntaxhighlight lang="powershell">function Convert-DegreeToDirection ( [double]$Degree, [int]$Points )
{
{
Line 5,618: Line 5,558:
354.37 north by west north north north
354.37 north by west north north north
354.38 north north north north</pre>
354.38 north north north north</pre>

=={{header|Prolog}}==
=={{header|Prolog}}==
Part 1 : The following knowledge base takes a heading in degrees and returns the correct 32-point compass heading. It can also go in the other direction.
Part 1 : The following knowledge base takes a heading in degrees and returns the correct 32-point compass heading. It can also go in the other direction.
<syntaxhighlight lang=prolog>
<syntaxhighlight lang="prolog">
compassangle(1, 'North',n, 0.00).
compassangle(1, 'North',n, 0.00).
compassangle(2, 'North by east', nbe, 11.25).
compassangle(2, 'North by east', nbe, 11.25).
Line 5,661: Line 5,600:
</syntaxhighlight>
</syntaxhighlight>
Part 2 : The following rules print a table of indexes.
Part 2 : The following rules print a table of indexes.
<syntaxhighlight lang=prolog>
<syntaxhighlight lang="prolog">
printTableRow(Angle) :- compassangle(Index, Name, _, Angle),
printTableRow(Angle) :- compassangle(Index, Name, _, Angle),
write(Index), write(' '),
write(Index), write(' '),
Line 5,671: Line 5,610:
</syntaxhighlight>
</syntaxhighlight>
The following query prints the required table.
The following query prints the required table.
<syntaxhighlight lang=prolog>
<syntaxhighlight lang="prolog">
?- printTable([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,
?- printTable([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]).
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]).
Line 5,709: Line 5,648:
true.
true.
</syntaxhighlight>
</syntaxhighlight>

=={{header|PureBasic}}==
=={{header|PureBasic}}==
<syntaxhighlight lang=PureBasic>DataSection
<syntaxhighlight lang="purebasic">DataSection
Data.s "N", "north", "E", "east", "W", "west", "S", "south", "b", " by " ;abbreviations, expansions
Data.s "N", "north", "E", "east", "W", "west", "S", "south", "b", " by " ;abbreviations, expansions
Data.s "N NbE N-NE NEbN NE NEbE E-NE EbN E EbS E-SE SEbE SE SEbS S-SE SbE" ;dirs
Data.s "N NbE N-NE NEbN NE NEbE E-NE EbN E EbS E-SE SEbE SE SEbS S-SE SbE" ;dirs
Line 5,818: Line 5,756:
32 North by west 354.37
32 North by west 354.37
1 354.38</pre>
1 354.38</pre>

=={{header|Python}}==
=={{header|Python}}==
<syntaxhighlight lang=python>majors = 'north east south west'.split()
<syntaxhighlight lang="python">majors = 'north east south west'.split()
majors *= 2 # no need for modulo later
majors *= 2 # no need for modulo later
quarter1 = 'N,N by E,N-NE,NE by N,NE,NE by E,E-NE,E by N'.split(',')
quarter1 = 'N,N by E,N-NE,NE by N,NE,NE by E,E-NE,E by N'.split(',')
Line 5,880: Line 5,817:
32 North by west 354.37°
32 North by west 354.37°
1 North 354.38°</pre>
1 North 354.38°</pre>


=={{header|QBasic}}==
=={{header|QBasic}}==
{{works with|QBasic|1.1}}
{{works with|QBasic|1.1}}
{{works with|QuickBasic|4.5}}
{{works with|QuickBasic|4.5}}
{{trans|Liberty BASIC}}
{{trans|Liberty BASIC}}
<syntaxhighlight lang=qbasic>DECLARE FUNCTION compasspoint$ (h!)
<syntaxhighlight lang="qbasic">DECLARE FUNCTION compasspoint$ (h!)


DIM SHARED point$(32)
DIM SHARED point$(32)
Line 5,920: Line 5,855:
compasspoint$ = point$(INT(x))
compasspoint$ = point$(INT(x))
END FUNCTION</syntaxhighlight>
END FUNCTION</syntaxhighlight>


=={{header|R}}==
=={{header|R}}==


R (also known as Arrr me hearties!) is ideally suited to this task. Here's an easy to understand but inefficient way to solve it:
R (also known as Arrr me hearties!) is ideally suited to this task. Here's an easy to understand but inefficient way to solve it:


<syntaxhighlight lang=rsplus>
<syntaxhighlight lang="rsplus">
# Build a table of directions
# Build a table of directions
pts <- data.frame(
pts <- data.frame(
Line 5,951: Line 5,884:
Here are the test inputs:
Here are the test inputs:


<syntaxhighlight lang=rsplus>
<syntaxhighlight lang="rsplus">
test <- data.frame(
test <- data.frame(
deg = c( 0.0, 16.87, 16.88, 33.75, 50.62, 50.63, 67.5, 84.37,
deg = c( 0.0, 16.87, 16.88, 33.75, 50.62, 50.63, 67.5, 84.37,
Line 5,966: Line 5,899:
Check that the output headings cover the full range of headings:
Check that the output headings cover the full range of headings:


<syntaxhighlight lang=R>
<syntaxhighlight lang="r">
all.equal(test$heading, pts$des)
all.equal(test$heading, pts$des)
</syntaxhighlight>
</syntaxhighlight>
Line 6,011: Line 5,944:
[1] TRUE
[1] TRUE
</pre>
</pre>

=={{header|Racket}}==
=={{header|Racket}}==
<syntaxhighlight lang=racket>#lang racket
<syntaxhighlight lang="racket">#lang racket


;;; Generate the headings and boxes
;;; Generate the headings and boxes
Line 6,105: Line 6,037:
32 | 354.37 | North by west
32 | 354.37 | North by west
1 | 354.38 | North</pre>
1 | 354.38 | North</pre>

=={{header|Raku}}==
=={{header|Raku}}==
(formerly Perl 6)
(formerly Perl 6)
{{works with|Rakudo|2015.12}}
{{works with|Rakudo|2015.12}}
<syntaxhighlight lang=raku line>sub point (Int $index) {
<syntaxhighlight lang="raku" line>sub point (Int $index) {
my $ix = $index % 32;
my $ix = $index % 32;
if $ix +& 1
if $ix +& 1
Line 6,167: Line 6,098:
1 354.38° North</pre>
1 354.38° North</pre>
=={{header|Red}}==
=={{header|Red}}==
<syntaxhighlight lang=Rebol>Red []
<syntaxhighlight lang="rebol">Red []


d: charset [#"N" #"E" #"S" #"W"] ;; main directions
d: charset [#"N" #"E" #"S" #"W"] ;; main directions
Line 6,229: Line 6,160:
=={{header|REXX}}==
=={{header|REXX}}==
This version does normalization of the (degree) heading and can also handle negative headings.
This version does normalization of the (degree) heading and can also handle negative headings.
<syntaxhighlight lang=rexx>/*REXX program "boxes the compass" [from degree (º) headings ───► a 32 point set]. */
<syntaxhighlight lang="rexx">/*REXX program "boxes the compass" [from degree (º) headings ───► a 32 point set]. */
parse arg $ /*allow º headings to be specified.*/
parse arg $ /*allow º headings to be specified.*/
if $='' then $= 0 16.87 16.88 33.75 50.62 50.63 67.5 84.37 84.38 101.25 118.12 118.13 ,
if $='' then $= 0 16.87 16.88 33.75 50.62 50.63 67.5 84.37 84.38 101.25 118.12 118.13 ,
Line 6,298: Line 6,229:
354.38º north
354.38º north
</pre>
</pre>

=={{header|Ring}}==
=={{header|Ring}}==
<syntaxhighlight lang=ring>
<syntaxhighlight lang="ring">
# Project : Box the compass
# Project : Box the compass


Line 6,367: Line 6,297:
354.38 0 North
354.38 0 North
</pre>
</pre>

=={{header|Ruby}}==
=={{header|Ruby}}==


<syntaxhighlight lang=ruby>Headings = %w(north east south west north).each_cons(2).flat_map do |a, b|
<syntaxhighlight lang="ruby">Headings = %w(north east south west north).each_cons(2).flat_map do |a, b|
[a,
[a,
"#{a} by #{b}",
"#{a} by #{b}",
Line 6,429: Line 6,358:
32 north by west 354.37
32 north by west 354.37
1 north 354.38</pre>
1 north 354.38</pre>

=={{header|Run BASIC}}==
=={{header|Run BASIC}}==
<syntaxhighlight lang=runbasic>global direct$
<syntaxhighlight lang="runbasic">global direct$
dim direct$(22)
dim direct$(22)
direct$(1) = "y" 'by
direct$(1) = "y" 'by
Line 6,504: Line 6,432:
</table>
</table>
</code>
</code>

=={{header|Rust}}==
=={{header|Rust}}==
{{trans|Kotlin}}
{{trans|Kotlin}}
<syntaxhighlight lang=Rust>fn expand(cp: &str) -> String {
<syntaxhighlight lang="rust">fn expand(cp: &str) -> String {
let mut out = String::new();
let mut out = String::new();
for c in cp.chars() {
for c in cp.chars() {
Line 6,583: Line 6,510:
32 354.37 north by west
32 354.37 north by west
1 354.38 north</pre>
1 354.38 north</pre>

=={{header|Scala}}==
=={{header|Scala}}==
Inspired by Java version
Inspired by Java version
<syntaxhighlight lang=Scala>object BoxingTheCompass extends App {
<syntaxhighlight lang="scala">object BoxingTheCompass extends App {
val cardinal = List("north", "east", "south", "west")
val cardinal = List("north", "east", "south", "west")
val pointDesc = List("1", "1 by 2", "1-C", "C by 1", "C", "C by 2", "2-C", "2 by 1")
val pointDesc = List("1", "1 by 2", "1-C", "C by 1", "C", "C by 2", "2-C", "2 by 1")
Line 6,645: Line 6,571:
1 North 354.38°
1 North 354.38°
</pre>
</pre>

=={{header|Seed7}}==
=={{header|Seed7}}==
<syntaxhighlight lang=seed7>$ include "seed7_05.s7i";
<syntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "float.s7i";
include "float.s7i";


Line 6,708: Line 6,633:
1 North 354.38
1 North 354.38
</pre>
</pre>

=={{header|Sidef}}==
=={{header|Sidef}}==
{{trans|Raku}}
{{trans|Raku}}
<syntaxhighlight lang=ruby>func point (index) {
<syntaxhighlight lang="ruby">func point (index) {
var ix = (index % 32);
var ix = (index % 32);
if (ix & 1) { "#{point((ix + 1) & 28)} by #{point(((2 - (ix & 2)) * 4) + ix & 24)}" }
if (ix & 1) { "#{point((ix + 1) & 28)} by #{point(((2 - (ix & 2)) * 4) + ix & 24)}" }
Line 6,762: Line 6,686:
1 354.38° North
1 354.38° North
</pre>
</pre>

=={{header|smart BASIC}}==
=={{header|smart BASIC}}==
<syntaxhighlight lang=smart BASIC>/*Boxing The Compass by rbytes December 2017*/
<syntaxhighlight lang="smart basic">/*Boxing The Compass by rbytes December 2017*/
GET SCREEN SIZE sw,sh
GET SCREEN SIZE sw,sh
OPTION BASE 1
OPTION BASE 1
Line 6,839: Line 6,762:
32 North by west NbW 343.13 348.75 354.37
32 North by west NbW 343.13 348.75 354.37
</pre>
</pre>

=={{header|Tcl}}==
=={{header|Tcl}}==
<syntaxhighlight lang=tcl>proc angle2compass {angle} {
<syntaxhighlight lang="tcl">proc angle2compass {angle} {
set dirs {
set dirs {
N NbE N-NE NEbN NE NEbE E-NE EbN E EbS E-SE SEbE SE SEbS S-SE SbE
N NbE N-NE NEbN NE NEbE E-NE EbN E EbS E-SE SEbE SE SEbS S-SE SbE
Line 6,904: Line 6,826:
1 North 354.38°
1 North 354.38°
</pre>
</pre>

=={{header|True BASIC}}==
=={{header|True BASIC}}==
{{trans|QBasic}}
{{trans|QBasic}}
<syntaxhighlight lang=qbasic>DIM point$(32)
<syntaxhighlight lang="qbasic">DIM point$(32)


FUNCTION compasspoint$ (h)
FUNCTION compasspoint$ (h)
Line 6,941: Line 6,862:
NEXT i
NEXT i
END</syntaxhighlight>
END</syntaxhighlight>

=={{header|uBasic/4tH}}==
=={{header|uBasic/4tH}}==
{{trans|C}}
{{trans|C}}
Since uBasic is an integer interpreter, we have to do some scaling to perform this task.
Since uBasic is an integer interpreter, we have to do some scaling to perform this task.
<syntaxhighlight lang=text>Push 0, 1687, 1688, 3375, 5062, 5063, 6750, 8437, 8438, 10125, 11812, 11813
<syntaxhighlight lang="text">Push 0, 1687, 1688, 3375, 5062, 5063, 6750, 8437, 8438, 10125, 11812, 11813
Push 13500, 15187, 15188, 16875, 18562, 18563, 20250, 21937, 21938, 23625
Push 13500, 15187, 15188, 16875, 18562, 18563, 20250, 21937, 21938, 23625
Push 25312, 25313, 27000, 28687, 28688, 30375, 32062, 32063, 33750, 35437
Push 25312, 25313, 27000, 28687, 28688, 30375, 32062, 32063, 33750, 35437
Line 7,037: Line 6,957:
0 OK, 0:900
0 OK, 0:900
</pre>
</pre>

=={{header|UNIX Shell}}==
=={{header|UNIX Shell}}==
{{works with|Bourne Again SHell}}
{{works with|Bourne Again SHell}}
Line 7,044: Line 6,963:
Requires the standard POSIX bc(1) command to perform floating-point arithmetic.
Requires the standard POSIX bc(1) command to perform floating-point arithmetic.


<syntaxhighlight lang=sh># List of abbreviated compass point labels
<syntaxhighlight lang="sh"># List of abbreviated compass point labels
compass_points=( N NbE N-NE NEbN NE NEbE E-NE EbN
compass_points=( N NbE N-NE NEbN NE NEbE E-NE EbN
E EbS E-SE SEbE SE SEbS S-SE SbE
E EbS E-SE SEbE SE SEbS S-SE SbE
Line 7,130: Line 7,049:
354.38 | North | 1
354.38 | North | 1
</pre>
</pre>

=={{header|VBA}}==
=={{header|VBA}}==
<syntaxhighlight lang=vb>Public Sub box_the_compass()
<syntaxhighlight lang="vb">Public Sub box_the_compass()
Dim compass_point As Integer
Dim compass_point As Integer
Dim compass_points_all As New Collection
Dim compass_points_all As New Collection
Line 7,199: Line 7,117:
32 North by west 354,37
32 North by west 354,37
1 North 354,38 </pre>
1 North 354,38 </pre>

=={{header|Visual Basic .NET}}==
=={{header|Visual Basic .NET}}==


<syntaxhighlight lang=vbnet>Module BoxingTheCompass
<syntaxhighlight lang="vbnet">Module BoxingTheCompass
Dim _points(32) As String
Dim _points(32) As String


Line 7,285: Line 7,202:
1: North 354.38°
1: North 354.38°
</pre>
</pre>

=={{header|Wren}}==
=={{header|Wren}}==
{{trans|Go}}
{{trans|Go}}
{{libheader|Wren-fmt}}
{{libheader|Wren-fmt}}
<syntaxhighlight lang=ecmascript>import "/fmt" for Fmt
<syntaxhighlight lang="ecmascript">import "/fmt" for Fmt


// 'cpx' returns integer index from 0 to 31 corresponding to compass point.
// 'cpx' returns integer index from 0 to 31 corresponding to compass point.
Line 7,393: Line 7,309:
1 North 354.38°
1 North 354.38°
</pre>
</pre>

=={{header|Yabasic}}==
=={{header|Yabasic}}==
{{trans|Liberty BASIC}}
{{trans|Liberty BASIC}}
<syntaxhighlight lang=Yabasic>
<syntaxhighlight lang="yabasic">
dim point$(32)
dim point$(32)
Line 7,434: Line 7,349:
80 data "Northwest by west ", "Northwest ", "Northwest by north", "North-northwest "
80 data "Northwest by west ", "Northwest ", "Northwest by north", "North-northwest "
90 data "North by west "</syntaxhighlight>
90 data "North by west "</syntaxhighlight>

=={{header|zkl}}==
=={{header|zkl}}==
{{trans|AWK}}
{{trans|AWK}}
<syntaxhighlight lang=zkl>A:=("X N NbE NNE NEbN NE NEbE ENE EbN E EbS ESE " // one based array
<syntaxhighlight lang="zkl">A:=("X N NbE NNE NEbN NE NEbE ENE EbN E EbS ESE " // one based array
"SEbE SE SEbS SSE SbE S SbW SSW SWbS SW SWbW "
"SEbE SE SEbS SSE SbE S SbW SSW SWbS SW SWbW "
"WSW WbS W WbN WNW NWbW NW NWbN NNW NbW").split(" ");
"WSW WbS W WbN WNW NWbW NW NWbN NNW NbW").split(" ");
Line 7,466: Line 7,380:
354.38 : 1 N
354.38 : 1 N
</pre>
</pre>

=={{header|ZX Spectrum Basic}}==
=={{header|ZX Spectrum Basic}}==
{{trans|Liberty BASIC}}
{{trans|Liberty BASIC}}
<syntaxhighlight lang=zxbasic>10 DATA "North","North by east","North-northeast"
<syntaxhighlight lang="zxbasic">10 DATA "North","North by east","North-northeast"
20 DATA "Northeast by north","Northeast","Northeast by east","East-northeast"
20 DATA "Northeast by north","Northeast","Northeast by east","East-northeast"
30 DATA "East by north","East","East by south","East-southeast"
30 DATA "East by north","East","East by south","East-southeast"