type inputs = [
"00", "01", "02", "03", "04", "05", "06", "07", "08", "09",
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
"20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
"30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
"40", "41", "42", "43", "44", "45", "46", "47", "48", "49",
"50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
"60", "61", "62", "63", "64", "65", "66", "67", "68", "69",
"70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
"80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
"90", "91", "92", "93", "94", "95", "96", "97", "98", "99",
]
type outputs = [
"00", "01", "02", "03", "04", "05", "06", "07", "08", "09",
"01", "02", "03", "04", "05", "06", "07", "08", "09", "10",
"02", "03", "04", "05", "06", "07", "08", "09", "10", "11",
"03", "04", "05", "06", "07", "08", "09", "10", "11", "12",
"04", "05", "06", "07", "08", "09", "10", "11", "12", "13",
"05", "06", "07", "08", "09", "10", "11", "12", "13", "14",
"06", "07", "08", "09", "10", "11", "12", "13", "14", "15",
"07", "08", "09", "10", "11", "12", "13", "14", "15", "16",
"08", "09", "10", "11", "12", "13", "14", "15", "16", "17",
"09", "10", "11", "12", "13", "14", "15", "16", "17", "18",
]
procedure add_digits(x, y, r, c) {
copy x - /./ r
copy y -a /./ r
replace r inputs outputs
copy r - /^./ c
alter r - /./ ""
}
# I get warnings if I don't declare these even though they're outparams
embroider carry ""
embroider next_carry ""
embroider result ""
embroider final_result ""
embroider _ ""
embroider a "0"
embroider b "1"
condition true = a == a
while (true) {
copy a garment
embroider garment -a " "
sell
copy b old_b
embroider total ""
embroider current_carry "0"
condition a_is = a - /./ update
condition b_is = b - /./ update
condition one_is = a_is or b_is update
while one_is {
alter a - /^$/ "0"
alter b - /^$/ "0"
copy a - /.$/ fst
copy b - /.$/ snd
alter a - /.$/ ""
alter b - /.$/ ""
do add_digits(fst, snd, result, carry)
do add_digits(result, current_carry, final_result, next_carry)
do add_digits(carry, next_carry, current_carry, _)
copy final_result -p /./ total
}
condition is_carry = current_carry - /[^0]/
if is_carry {
copy current_carry -p /./ total
}
copy old_b a
copy total b
}
post a comment