# obfusc.awk - show encoding for program, student ID and (optionally) UAC ID. # input: program student_ID [UAC_ID] => show encoding # code => decode (without splitting into fields) BEGIN { OFS = "\t" } NF >= 2 { prog = $1 ID = $2 UAC = $3 code = $1 $2 $3 rev = reverse(code) ncomp = nines_comp(rev) # rejected this one sd = rem_sum(rev) print prog, ID, UAC, sd next } NF == 1 { print $1, decode($1) } END { } function reverse(s, len,i,r) { r = "" len = length(s) for (i=1; i <= len; i++) r = substr(s,i,1) r return r } function nines_comp(s, len,i,r) { r = "" len = length(s) for (i=1; i <= len; i++) r = r (9 - substr(s,i,1)) return r } function rem_sum(s, len,i,r,sum) { r = ""; sum = 0 len = length(s) for (i=1; i <= len; i++) { sum += substr(s,i,1) r = r (sum % 10) } return r } function decode(s, len,i,r,sum,c) { r = ""; prev = 0 len = length(s) for (i=1; i <= len; i++) { c = substr(s,i,1) - prev prev = substr(s,i,1) # print i, prev, c if (c < 0) c += 10 r = c r } return r }