Best Cow Line (POJ#3617)

by TmskSt
♥0 | Line 22 | Modified 2012-03-05 21:45:59 | MIT License
play

ActionScript3 source code

/**
 * Copyright TmskSt ( http://wonderfl.net/user/TmskSt )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/fHkA
 */

package {
     /*
     * BestCowLine (POJ#3617)
     * http://poj.org/problem?id=3617
     *
     *
     * 問題
     * 
     * N文字の文字列Sが与えられ、N文字の文字列Tを作ります。
     * はじめはTは長さ0の文字列で、次のいずれかの操作が行えます。
     * ・Sの先頭を1文字削除し、Tの末尾に追加する。
     * ・Sの末尾を1文字削除し、Tの末尾に追加する。
     * 辞書順比較でできるだけ小さくなるようにTを作ってください。
     *
     * 『プログラミングコンテストチャレンジブック 第2版』より引用
     */
    public class BestCowLine extends Example {
        
        private static const N:int = 6;
        private var S:String = "ACDBCB";
        private var T:String = "";
        
        public function BestCowLine() {
            var i:int = 0;
            
            f(i);
            trace(T);
            
            function f(i:int):void {
                
                var s:Number = S.charCodeAt(i);
                var e:Number = S.charCodeAt(S.length - 1 - i);
                
                if (s == e) f(++i);
                
                var p:int = (s < e) ? 1 : 0;
                T += S.substr(p ? 0 : S.length - 1, 1);
                S = S.slice(p, p + S.length - 1);
                
                if (S.length > 1) f(i = 0);
            }
        }
    }
    import com.actionscriptbible.Example;
}