challenge 割り算の筆算

整数 n, m を与えれば、 n ÷ m の筆算を出力するような
プロシージャ(関数)を創ってください。

ウィンドウに描画するもよし、
コンソールに出力するもよし、です。

Posted feedbacks - Bash

$ wari 12345 67
     184
  ------
67)12345
    67
  ------
    564
    536
  ------
     285
     268
  ------
      17
 1
 2
 3
 4
 5
 6
 7
 8
 9
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
function wari() {
    local -i m=$1
    local -i n=$2
    local r=$(printf '%*d' ${#m} $((m / n)))
    write_head $m $n "$r"
    write_body $m $n "$r"
}

function write_head() {
    local m=$1
    local n=$2
    local r=$3

    repeat_char ' ' $((${#n} + 1))
    echo "$r"
    write_bar $m $n
    echo "$n)$m"
}

function write_body() {
    local m=$1
    local n=$2
    local r=$3
    local rest flag i

    for ((i = 0; i < ${#r}; i++)) {
        local c=${r:i:1}
        rest="$rest${m:i:1}"
        if [[ "$c" == [1-9] ]]; then
            [ -n "$flag" ] && printf '%*d\n' $((i + ${#n} + 2)) $rest
            printf '%*d\n' $((i + ${#n} + 2)) $((c * n))
            write_bar $m $n
            rest=$((rest - (c * n)))
            flag=1
        fi
    }
    [ -z "$flag" ] && write_bar $m $n
    printf '%*d\n' $((i + ${#n} + 1)) $rest
}

function write_bar() {
    local m=$1
    local n=$2
    repeat_char ' ' ${#n}
    repeat_char - $((${#m} + 1))
    echo
}

function repeat_char() {
    local c=$1
    local n=$2
    while ((n--)); do
        echo -n "$c"
    done
}

Index

Feed

Other

Link

Pathtraq

loading...