問題:http://codeforces.com/contest/64/problem/G
参加形式:本番
ファイルのパスの文字列が与えられる.カレントディレクトリ(.)や親ディレクトリ(..)などが含まれているため,これらを取り除いた形で正しいパスで表される文字列を求める.
カレントディレクトリ表記は単に削除.親ディレクトリ表記は直前のディレクトリを削除するだけ.削除は「lreplace 文字列 開始位置 終了位置」でできる.
コード
set path [split [gets stdin] "/"] while {1} { if {[lsearch $path "."]>=0} { set j [lsearch $path "."] } else { break } set path [lreplace $path [expr $j] [expr $j]] } while {1} { if {[lsearch $path ".."]>=0} { set i [lsearch $path ".."] } else { if {[llength $path]==1} { puts "/" } else { puts [join $path "/"] } break } if {$i<2} { puts "-1" break } set path [lreplace $path [expr $i-1] [expr $i]] }