実力判定: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")))
※コメント投稿者のブログIDはブログ作成者のみに通知されます