Data update

This commit is contained in:
Ingy döt Net 2024-10-16 18:07:41 -07:00
parent 81fd053722
commit 52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions

View file

@ -0,0 +1,10 @@
(defun chr->num (chr)
(nth (position chr "IVXLCDM") '(1 5 10 50 100 500 1000)))
(defun parse-rmn (str)
(let ((lst (map 'list #'chr->num str)))
(apply '+
(mapcar
(lambda (a b) (if (< a b) (- a) a))
(cons 0 lst)
(append lst '(0))))))

View file

@ -0,0 +1,56 @@
H
g/[^MDCLXVI]/s///g
# simplify the quirky parts
g/CM/s//CCCCCCCCC/
g/D/s//CCCCC/
g/CD/s//CCCC/
g/XC/s//XXXXXXXXX/
g/L/s//XXXXX/
g/XL/s//XXXX/
g/IX/s//IIIIIIIII/
g/V/s//IIIII/
g/IV/s//IIII/
# convert simplified numerals to integers
g/MMMMMMMMM/s//9/
g/MMMMMMMM/s//8/
g/MMMMMMM/s//7/
g/MMMMMM/s//6/
g/MMMMM/s//5/
g/MMMM/s//4/
g/MMM/s//3/
g/MM/s//2/
g/M/s//1/
v/^[0-9].*$/s/.*/0&/
g/CCCCCCCCC/s//9/
g/CCCCCCCC/s//8/
g/CCCCCCC/s//7/
g/CCCCCC/s//6/
g/CCCCC/s//5/
g/CCCC/s//4/
g/CCC/s//3/
g/CC/s//2/
g/C/s//1/
v/^[0-9]{2}.*$/s/^([0-9])(.*)$/\10\2/
g/XXXXXXXXX/s//9/
g/XXXXXXXX/s//8/
g/XXXXXXX/s//7/
g/XXXXXX/s//6/
g/XXXXX/s//5/
g/XXXX/s//4/
g/XXX/s//3/
g/XX/s//2/
g/X/s//1/
v/^[0-9]{3}.*$/s/^([0-9]{2})(.*)$/\10\2/
g/IIIIIIIII/s//9/
g/IIIIIIII/s//8/
g/IIIIIII/s//7/
g/IIIIII/s//6/
g/IIIII/s//5/
g/IIII/s//4/
g/III/s//3/
g/II/s//2/
g/I/s//1/
v/^[0-9]{4}.*$/s/^([0-9]{3})(.*)$/\10\2/
g/^0+([0-9])/s//\1/
,p
Q

View file

@ -0,0 +1,28 @@
function romanDecode(roman: String): Integer;
begin
result := 0;
if roman = '' then exit;
var n := 0;
var last := 'O';
foreach var c in roman do
begin
case c of
'I': n += 1;
'V': if (last = 'I') then n += 3 else n += 5;
'X': if (last = 'I') then n += 8 else n += 10;
'L': if (last = 'X') then n += 30 else n += 50;
'C': if (last = 'X') then n += 80 else n += 100;
'D': if (last = 'C') then n += 300 else n += 500;
'M': if (last = 'C') then n += 800 else n += 1000;
end;
last := c;
end;
result := n;
end;
begin
var romans := |'I', 'III', 'IV', 'VIII', 'XLIX', 'CCII',
'CDXXXIII', 'MCMXC', 'MMVIII', 'MDCLXVI'|;
foreach var roman in romans do
writeln(roman:10, romanDecode(roman):10);
end.

View file

@ -1,35 +1,24 @@
#!/bin/bash
roman_to_dec() {
local rnum=$1
local n=0
local prev=0
roman-to-decimal() {
local rnum="$1"
local -i n prev
local -riA R=(
[M]=1000 [D]=500 [C]=100
[L]=50 [X]=10 [V]=5 [I]=1
)
for ((i=${#rnum}-1;i>=0;i--))
do
case "${rnum:$i:1}" in
M) a=1000 ;;
D) a=500 ;;
C) a=100 ;;
L) a=50 ;;
X) a=10 ;;
V) a=5 ;;
I) a=1 ;;
esac
if [[ $a -lt $prev ]]
then
let n-=a
else
let n+=a
fi
prev=$a
do ((
a=R[${rnum:i:1}],
n += a < prev ? -a : +a,
prev=a
))
done
echo "$rnum = $n"
}
roman_to_dec MCMXC
roman_to_dec MMVIII
roman_to_dec MDCLXVI
roman-to-decimal MCMXC
roman-to-decimal MMVIII
roman-to-decimal MDCLXVI