RosettaCodeData/Task/Cistercian-numerals/Mathematica/cistercian-numerals.math
2023-07-01 13:44:08 -04:00

41 lines
1.9 KiB
Text

ClearAll[CistercianNumberEncodeHelper, CistercianNumberEncode]
\[Delta] = 0.25;
CistercianNumberEncodeHelper[0] := {}
CistercianNumberEncodeHelper[1] := Line[{{0, 1}, {\[Delta], 1}}]
CistercianNumberEncodeHelper[2] := Line[{{0, 1 - \[Delta]}, {\[Delta], 1 - \[Delta]}}]
CistercianNumberEncodeHelper[3] := Line[{{0, 1}, {\[Delta], 1 - \[Delta]}}]
CistercianNumberEncodeHelper[4] := Line[{{0, 1 - \[Delta]}, {\[Delta], 1}}]
CistercianNumberEncodeHelper[5] := Line[{{0, 1 - \[Delta]}, {\[Delta], 1}, {0, 1}}]
CistercianNumberEncodeHelper[6] := Line[{{\[Delta], 1 - \[Delta]}, {\[Delta], 1}}]
CistercianNumberEncodeHelper[7] := Line[{{\[Delta], 1 - \[Delta]}, {\[Delta], 1}, {0, 1}}]
CistercianNumberEncodeHelper[8] := Line[{{0, 1 - \[Delta]}, {\[Delta], 1 - \[Delta]}, {\[Delta], 1}}]
CistercianNumberEncodeHelper[9] := Line[{{0, 1}, {\[Delta], 1}, {\[Delta], 1 - \[Delta]}, {0, 1 - \[Delta]}}]
CistercianNumberEncode::nnarg = "The argument `1` should be an integer between 0 and 9999 (inclusive).";
CistercianNumberEncode[n_Integer] := Module[{digs},
If[0 <= n <= 9999,
digs = IntegerDigits[n, 10, 4];
Graphics[{Line[{{0, 0}, {0, 1}}],
CistercianNumberEncodeHelper[digs[[4]]],
GeometricTransformation[CistercianNumberEncodeHelper[digs[[3]]],
ReflectionTransform[{1, 0}]],
GeometricTransformation[CistercianNumberEncodeHelper[digs[[2]]],
ReflectionTransform[{0, 1}, {0, 1/2}]],
GeometricTransformation[CistercianNumberEncodeHelper[digs[[1]]],
RotationTransform[Pi, {0, 1/2}]]
},
PlotRange -> {{-1.5 \[Delta], 1.5 \[Delta]}, {0 - 0.5 \[Delta],
1 + 0.5 \[Delta]}},
ImageSize -> 50
]
,
Message[CistercianNumberEncode::nnarg, n]
]
]
CistercianNumberEncode[0]
CistercianNumberEncode[1]
CistercianNumberEncode[20]
CistercianNumberEncode[300]
CistercianNumberEncode[4000]
CistercianNumberEncode[5555]
CistercianNumberEncode[6789]
CistercianNumberEncode[1337]