カーペット
締め切りが 2017/10/27 10:00 AM なので,その 1 分後に投稿されるように予約
【概要】
上図のように、正の整数が全て並んでいます。
数をひとつ指定しますので、その数に上下左右に隣接しているマスの数を、昇順にコンマ区切りで出力して下さい。
【入出力】
入力は
3
のようになっています。
ふつうに10進数です。
出力は、入力で指定された数に上下左右に隣接しているマスの数を、昇順にコンマ区切りで出力して下さい。
2,4,9
のような感じです。
【例】
入力 出力
3 2,4,9
20 19,21,72
100 99,101,184
【補足】
• 不正な入力に対処する必要はありません。
• 入力は、1以上 100万 以下です。
• Wikipedia - シェルピンスキーのカーペットが参考になるかもしれません(ならないかもしれません)。
=====================================================================
規則性をプログラムできれば簡単。
f = function(n) {
x = 8^(0:6)
size = 1
result = matrix(NA, 2187, 2187)
result[1, 1] = 1
for (k in 1:7) {
a = result[1:size, 1:size]
size0 = 1:size
size1 = size + 1:size
size2 = size * 2 + 1:size
result[size0, size1] = a + x[k]
result[size0, size2] = a + x[k]*2
result[size1, size0] = a + x[k]*7
result[size1, size2] = a + x[k]*3
result[size2, size0] = a + x[k]*6
result[size2, size1] = a + x[k]*5
result[size2, size2] = a + x[k]*4
size = size * 3
}
result = cbind(result, result[,1]+8^7) # 次のレベルの 1 列を付加
index = which(result == n, arr.ind = TRUE)
i = index[1]
j = index[2]
ans = c(result[i-1, j], result[i+1, j], result[i, j-1], result[i, j+1])
cat(sort(ans[!is.na(ans)]), sep = ",")
}
# f(scan(file("stdin", "r")))
f(1) # 2,8
f(2) # 1,3
f(4) # 3,5,16
f(10) # 9,11
f(101) # 100,102,183
f(1011) # 1001,1010,1012,1021
f(10008) # 9996,10001,10007
f(2341) # 2340,2342,7607,29843
f(16385) # 15799,16386,16392,21651
f(18725) # 18724,18726,60855,238739
f(902876) # 902875,902877,4190208
f(1000000) # 999580,999993,999999
最新の画像[もっと見る]
- さぬきうどん 山よし 佐文店 12時間前
- さぬきうどん 山よし 佐文店 12時間前
- 算額(その1394) 23時間前
- 算額(その1393) 1日前
- 和算の心(その008) 1日前
- ぶっかけうどん はな庄 2日前
- ぶっかけうどん はな庄 2日前
- 晴屋製麺所 3日前
- 晴屋製麺所 3日前
- 算額(その1391) 3日前
※コメント投稿者のブログIDはブログ作成者のみに通知されます