#!/usr/bin/env tclsh9.0 namespace import ::tcl::mathop::+ namespace import ::tcl::mathop::- set rows 0 set grid [list] while {[gets stdin line] >= 0} { if {$line eq ""} continue incr rows set cols [string length $line] lappend grid [split $line ""] } proc search {grid rows cols} { set count 0 for {set r 0} {$r < $rows} {incr r} { for {set c 0} {$c < $cols} {incr c} { if {[lindex $grid $r $c] ne "X"} continue # Right if {[+ $c 3] < $cols} { if {[lindex $grid $r [+ $c 1]] eq "M" && [lindex $grid $r [+ $c 2]] eq "A" && [lindex $grid $r [+ $c 3]] eq "S"} { incr count } } # Left if {[- $c 3] >= 0} { if {[lindex $grid $r [- $c 1]] eq "M" && [lindex $grid $r [- $c 2]] eq "A" && [lindex $grid $r [- $c 3]] eq "S"} { incr count } } # Down if {[+ $r 3] < $rows} { if {[lindex $grid [+ $r 1] $c] eq "M" && [lindex $grid [+ $r 2] $c] eq "A" && [lindex $grid [+ $r 3] $c] eq "S"} { incr count } } # Up if {[- $r 3] >= 0} { if {[lindex $grid [- $r 1] $c] eq "M" && [lindex $grid [- $r 2] $c] eq "A" && [lindex $grid [- $r 3] $c] eq "S"} { incr count } } # Down-Right if {[+ $r 3] < $rows && [+ $c 3] < $cols} { if {[lindex $grid [+ $r 1] [+ $c 1]] eq "M" && [lindex $grid [+ $r 2] [+ $c 2]] eq "A" && [lindex $grid [+ $r 3] [+ $c 3]] eq "S"} { incr count } } # Down-Left if {[+ $r 3] < $rows && [- $c 3] >= 0} { if {[lindex $grid [+ $r 1] [- $c 1]] eq "M" && [lindex $grid [+ $r 2] [- $c 2]] eq "A" && [lindex $grid [+ $r 3] [- $c 3]] eq "S"} { incr count } } # Up-Right if {[- $r 3] >= 0 && [+ $c 3] < $cols} { if {[lindex $grid [- $r 1] [+ $c 1]] eq "M" && [lindex $grid [- $r 2] [+ $c 2]] eq "A" && [lindex $grid [- $r 3] [+ $c 3]] eq "S"} { incr count } } # Up-Left if {[- $r 3] >= 0 && [- $c 3] >= 0} { if {[lindex $grid [- $r 1] [- $c 1]] eq "M" && [lindex $grid [- $r 2] [- $c 2]] eq "A" && [lindex $grid [- $r 3] [- $c 3]] eq "S"} { incr count } } } } return $count } puts [search $grid $rows $cols]