裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

実力判定:Bランク

2017年12月31日 | ブログラミング

実力判定:Bランク

締め切りが 2017/12/31 10:00 AM なので,その 1 分後に投稿されるように予約
きっと,締め切りは,再来年,再々来年...と繰り延べられるのだろうけど

【問題】
20桁の数字が提示されます。
一番左の桁を先頭として、右の桁へと順に見ていきます。
そして、隣り合った数が連続する数だった場合は、その双方を削除して先頭に戻ります。
最終的に、削除ができなくなった時点で数字を出力してください。


「95422357545868773174」→「95422357545868773174」→
「922357545868773174」→「922357545868773174」→
「9257545868773174」→「9257545868773174」→
「92575868773174」→「92575868773174」→
「925758673174」→「925758673174」→
「9257583174」(削除ができなくなったので、これが答え)

【入力】
標準入力から、複数行のデータが与えられます。1行のデータが、1つの20桁の数字になります。
 
【出力】
1行ずつ処理を行ない、その答えを1行ごと標準出力に出力します。
 
【入出力サンプル】
Input
95422357545868773174
24566191298259441958
34757881545564825469
86423251489513547814

Output
9257583174
26619259441958
75818269
8642511314

============================================

R による例解の一つ

f = function(S) {
    invisible(sapply(S, function(s) {
        x = as.integer(unlist(strsplit(s, "")))
        repeat {
            n = length(x)
            found = FALSE
            if (n == 1) break
            for (i in 1:(n - 1)) {
                if (abs(x[i] - x[i + 1]) == 1) {
                    found = TRUE
                    break
                }
            }
            if (!found) break
            x = x[-(i + 0:1)]
        }
        cat(paste(x, collapse = ""), "\n", sep = "")
    }))
}
f(readLines(file("stdin", "r")))

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 切手の選び方は何通り? | トップ | カエル跳びゲームを一般化して! »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事