Data update
This commit is contained in:
parent
81fd053722
commit
52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions
|
|
@ -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))))))
|
||||
56
Task/Roman-numerals-Decode/Ed/roman-numerals-decode.ed
Normal file
56
Task/Roman-numerals-Decode/Ed/roman-numerals-decode.ed
Normal 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
|
||||
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue