#!/usr/bin/env tclsh source ../prelude.tcl proc diff {lst} { set out {} for {set i 1} {$i < [llength $lst]} {incr i} { lappend out [expr {[lindex $lst $i] - [lindex $lst [expr {$i-1}]]}] } return $out } proc allzeros {lst} { foreach x $lst { if {$x != 0} { return 0 } } return 1 } proc predict {lst} { #puts "predict $lst" if {[allzeros $lst]} { return 0 } return [expr {[lindex $lst end] + [predict [diff $lst]]}] } proc unpredict {lst} { if {[allzeros $lst]} { return 0 } return [expr {[lindex $lst 0] - [unpredict [diff $lst]]}] } proc solve input { set fw {} set bw {} while {[gets $input line] >= 0} { set next [predict $line] set prev [unpredict $line] lappend fw $next lappend bw $prev puts "$prev {$line} $next" } puts [ladd $fw] puts [ladd $bw] } solve stdin