
packages
Contents
background
Youtubeを見てたらたまたまこんな動画に遭遇しました。
69という数字は、2乗した値と3乗した値に0から9までの数字が重複なく現れるそうです。Rを使って確認してみました。
using tidyverse
一番最初に思い付いた方法がこれ。
- 1
- 数字の桁数を取るのにこの書き方だと実は危ないと思います。理由は後述。
- 2
-
直前の
stringr::str_replace_all(pattern = ".")が、各文字を一文字ごとに分解した文字列ベクトルをlist形式にして返してくるので、purrr::map_*()を使って処理します。なお、map処理の中身は文字列ベクトルの中に重複が一つでもあるか否か(duplicated(x) |> any())で戻り値はTRUE/FALSEになるので、logicalベクトルを返すpurrr::map_lgl()を使います。
# A tibble: 1 × 4
number squared cubed is_dup
<int> <dbl> <dbl> <lgl>
1 69 4761 328509 FALSE
確かに69だけが残りました。
ViewPipeSteps::print_pipe_steps()がQuartoのコードアノテーションと相性が悪いので、別にしました。
Code
tibble(
number = 1:100,
squared = number^2,
cubed = number^3
) %>%
filter(
str_length(squared) + str_length(cubed) == 10
) %>%
mutate(
is_dup = str_c(squared, cubed) %>%
str_extract_all(pattern = ".") %>%
map_lgl(
.f = \(x) {
duplicated(x) %>%
any()
}
)
) %>%
filter(!is_dup) %>%
ViewPipeSteps::print_pipe_steps() -> results # for displaying pipeline processing1. tibble(number = 1:100, squared = number^2, cubed = number^3)
# A tibble: 100 × 3
number squared cubed
<int> <dbl> <dbl>
1 1 1 1
2 2 4 8
3 3 9 27
4 4 16 64
5 5 25 125
6 6 36 216
7 7 49 343
8 8 64 512
9 9 81 729
10 10 100 1000
# ℹ 90 more rows
2. filter(str_length(squared) + str_length(cubed) == 10)
# A tibble: 54 × 3
number squared cubed
<int> <dbl> <dbl>
1 47 2209 103823
2 48 2304 110592
3 49 2401 117649
4 50 2500 125000
5 51 2601 132651
6 52 2704 140608
7 53 2809 148877
8 54 2916 157464
9 55 3025 166375
10 56 3136 175616
# ℹ 44 more rows
3. mutate(is_dup = str_c(squared, cubed) %>% str_extract_all(pattern = ".") %>% map_lgl(.f = function(x) {
duplicated(x) %>% any()
}))
# A tibble: 54 × 4
number squared cubed is_dup
<int> <dbl> <dbl> <lgl>
1 47 2209 103823 TRUE
2 48 2304 110592 TRUE
3 49 2401 117649 TRUE
4 50 2500 125000 TRUE
5 51 2601 132651 TRUE
6 52 2704 140608 TRUE
7 53 2809 148877 TRUE
8 54 2916 157464 TRUE
9 55 3025 166375 TRUE
10 56 3136 175616 TRUE
# ℹ 44 more rows
4. filter(!is_dup)
# A tibble: 1 × 4
number squared cubed is_dup
<int> <dbl> <dbl> <lgl>
1 69 4761 328509 FALSE
mutate()の中身の部分。もとのmap_lgl()の部分はわかりやすく2つに分けてます。
Code
1. str_c((1:100)^2, (1:100)^3)
[1] "11" "48" "927" "1664" "25125" "36216" "49343"
[8] "64512" "81729" "1001000" "1211331" "1441728" "1692197" "1962744"
[15] "2253375" "2564096" "2894913" "3245832" "3616859" "4008000" "4419261"
[22] "48410648" "52912167" "57613824" "62515625" "67617576" "72919683" "78421952"
[29] "84124389" "90027000" "96129791" "102432768" "108935937" "115639304" "122542875"
[36] "129646656" "136950653" "144454872" "152159319" "160064000" "168168921" "176474088"
[43] "184979507" "193685184" "202591125" "211697336" "2209103823" "2304110592" "2401117649"
[50] "2500125000" "2601132651" "2704140608" "2809148877" "2916157464" "3025166375" "3136175616"
[57] "3249185193" "3364195112" "3481205379" "3600216000" "3721226981" "3844238328" "3969250047"
[64] "4096262144" "4225274625" "4356287496" "4489300763" "4624314432" "4761328509" "4900343000"
[71] "5041357911" "5184373248" "5329389017" "5476405224" "5625421875" "5776438976" "5929456533"
[78] "6084474552" "6241493039" "6400512000" "6561531441" "6724551368" "6889571787" "7056592704"
[85] "7225614125" "7396636056" "7569658503" "7744681472" "7921704969" "8100729000" "8281753571"
[92] "8464778688" "8649804357" "8836830584" "9025857375" "9216884736" "9409912673" "9604941192"
[99] "9801970299" "100001e+06"
2. str_extract_all(pattern = ".")
[[1]]
[1] "1" "1"
[[2]]
[1] "4" "8"
[[3]]
[1] "9" "2" "7"
[[4]]
[1] "1" "6" "6" "4"
[[5]]
[1] "2" "5" "1" "2" "5"
[[6]]
[1] "3" "6" "2" "1" "6"
[[7]]
[1] "4" "9" "3" "4" "3"
[[8]]
[1] "6" "4" "5" "1" "2"
[[9]]
[1] "8" "1" "7" "2" "9"
[[10]]
[1] "1" "0" "0" "1" "0" "0" "0"
[[11]]
[1] "1" "2" "1" "1" "3" "3" "1"
[[12]]
[1] "1" "4" "4" "1" "7" "2" "8"
[[13]]
[1] "1" "6" "9" "2" "1" "9" "7"
[[14]]
[1] "1" "9" "6" "2" "7" "4" "4"
[[15]]
[1] "2" "2" "5" "3" "3" "7" "5"
[[16]]
[1] "2" "5" "6" "4" "0" "9" "6"
[[17]]
[1] "2" "8" "9" "4" "9" "1" "3"
[[18]]
[1] "3" "2" "4" "5" "8" "3" "2"
[[19]]
[1] "3" "6" "1" "6" "8" "5" "9"
[[20]]
[1] "4" "0" "0" "8" "0" "0" "0"
[[21]]
[1] "4" "4" "1" "9" "2" "6" "1"
[[22]]
[1] "4" "8" "4" "1" "0" "6" "4" "8"
[[23]]
[1] "5" "2" "9" "1" "2" "1" "6" "7"
[[24]]
[1] "5" "7" "6" "1" "3" "8" "2" "4"
[[25]]
[1] "6" "2" "5" "1" "5" "6" "2" "5"
[[26]]
[1] "6" "7" "6" "1" "7" "5" "7" "6"
[[27]]
[1] "7" "2" "9" "1" "9" "6" "8" "3"
[[28]]
[1] "7" "8" "4" "2" "1" "9" "5" "2"
[[29]]
[1] "8" "4" "1" "2" "4" "3" "8" "9"
[[30]]
[1] "9" "0" "0" "2" "7" "0" "0" "0"
[[31]]
[1] "9" "6" "1" "2" "9" "7" "9" "1"
[[32]]
[1] "1" "0" "2" "4" "3" "2" "7" "6" "8"
[[33]]
[1] "1" "0" "8" "9" "3" "5" "9" "3" "7"
[[34]]
[1] "1" "1" "5" "6" "3" "9" "3" "0" "4"
[[35]]
[1] "1" "2" "2" "5" "4" "2" "8" "7" "5"
[[36]]
[1] "1" "2" "9" "6" "4" "6" "6" "5" "6"
[[37]]
[1] "1" "3" "6" "9" "5" "0" "6" "5" "3"
[[38]]
[1] "1" "4" "4" "4" "5" "4" "8" "7" "2"
[[39]]
[1] "1" "5" "2" "1" "5" "9" "3" "1" "9"
[[40]]
[1] "1" "6" "0" "0" "6" "4" "0" "0" "0"
[[41]]
[1] "1" "6" "8" "1" "6" "8" "9" "2" "1"
[[42]]
[1] "1" "7" "6" "4" "7" "4" "0" "8" "8"
[[43]]
[1] "1" "8" "4" "9" "7" "9" "5" "0" "7"
[[44]]
[1] "1" "9" "3" "6" "8" "5" "1" "8" "4"
[[45]]
[1] "2" "0" "2" "5" "9" "1" "1" "2" "5"
[[46]]
[1] "2" "1" "1" "6" "9" "7" "3" "3" "6"
[[47]]
[1] "2" "2" "0" "9" "1" "0" "3" "8" "2" "3"
[[48]]
[1] "2" "3" "0" "4" "1" "1" "0" "5" "9" "2"
[[49]]
[1] "2" "4" "0" "1" "1" "1" "7" "6" "4" "9"
[[50]]
[1] "2" "5" "0" "0" "1" "2" "5" "0" "0" "0"
[[51]]
[1] "2" "6" "0" "1" "1" "3" "2" "6" "5" "1"
[[52]]
[1] "2" "7" "0" "4" "1" "4" "0" "6" "0" "8"
[[53]]
[1] "2" "8" "0" "9" "1" "4" "8" "8" "7" "7"
[[54]]
[1] "2" "9" "1" "6" "1" "5" "7" "4" "6" "4"
[[55]]
[1] "3" "0" "2" "5" "1" "6" "6" "3" "7" "5"
[[56]]
[1] "3" "1" "3" "6" "1" "7" "5" "6" "1" "6"
[[57]]
[1] "3" "2" "4" "9" "1" "8" "5" "1" "9" "3"
[[58]]
[1] "3" "3" "6" "4" "1" "9" "5" "1" "1" "2"
[[59]]
[1] "3" "4" "8" "1" "2" "0" "5" "3" "7" "9"
[[60]]
[1] "3" "6" "0" "0" "2" "1" "6" "0" "0" "0"
[[61]]
[1] "3" "7" "2" "1" "2" "2" "6" "9" "8" "1"
[[62]]
[1] "3" "8" "4" "4" "2" "3" "8" "3" "2" "8"
[[63]]
[1] "3" "9" "6" "9" "2" "5" "0" "0" "4" "7"
[[64]]
[1] "4" "0" "9" "6" "2" "6" "2" "1" "4" "4"
[[65]]
[1] "4" "2" "2" "5" "2" "7" "4" "6" "2" "5"
[[66]]
[1] "4" "3" "5" "6" "2" "8" "7" "4" "9" "6"
[[67]]
[1] "4" "4" "8" "9" "3" "0" "0" "7" "6" "3"
[[68]]
[1] "4" "6" "2" "4" "3" "1" "4" "4" "3" "2"
[[69]]
[1] "4" "7" "6" "1" "3" "2" "8" "5" "0" "9"
[[70]]
[1] "4" "9" "0" "0" "3" "4" "3" "0" "0" "0"
[[71]]
[1] "5" "0" "4" "1" "3" "5" "7" "9" "1" "1"
[[72]]
[1] "5" "1" "8" "4" "3" "7" "3" "2" "4" "8"
[[73]]
[1] "5" "3" "2" "9" "3" "8" "9" "0" "1" "7"
[[74]]
[1] "5" "4" "7" "6" "4" "0" "5" "2" "2" "4"
[[75]]
[1] "5" "6" "2" "5" "4" "2" "1" "8" "7" "5"
[[76]]
[1] "5" "7" "7" "6" "4" "3" "8" "9" "7" "6"
[[77]]
[1] "5" "9" "2" "9" "4" "5" "6" "5" "3" "3"
[[78]]
[1] "6" "0" "8" "4" "4" "7" "4" "5" "5" "2"
[[79]]
[1] "6" "2" "4" "1" "4" "9" "3" "0" "3" "9"
[[80]]
[1] "6" "4" "0" "0" "5" "1" "2" "0" "0" "0"
[[81]]
[1] "6" "5" "6" "1" "5" "3" "1" "4" "4" "1"
[[82]]
[1] "6" "7" "2" "4" "5" "5" "1" "3" "6" "8"
[[83]]
[1] "6" "8" "8" "9" "5" "7" "1" "7" "8" "7"
[[84]]
[1] "7" "0" "5" "6" "5" "9" "2" "7" "0" "4"
[[85]]
[1] "7" "2" "2" "5" "6" "1" "4" "1" "2" "5"
[[86]]
[1] "7" "3" "9" "6" "6" "3" "6" "0" "5" "6"
[[87]]
[1] "7" "5" "6" "9" "6" "5" "8" "5" "0" "3"
[[88]]
[1] "7" "7" "4" "4" "6" "8" "1" "4" "7" "2"
[[89]]
[1] "7" "9" "2" "1" "7" "0" "4" "9" "6" "9"
[[90]]
[1] "8" "1" "0" "0" "7" "2" "9" "0" "0" "0"
[[91]]
[1] "8" "2" "8" "1" "7" "5" "3" "5" "7" "1"
[[92]]
[1] "8" "4" "6" "4" "7" "7" "8" "6" "8" "8"
[[93]]
[1] "8" "6" "4" "9" "8" "0" "4" "3" "5" "7"
[[94]]
[1] "8" "8" "3" "6" "8" "3" "0" "5" "8" "4"
[[95]]
[1] "9" "0" "2" "5" "8" "5" "7" "3" "7" "5"
[[96]]
[1] "9" "2" "1" "6" "8" "8" "4" "7" "3" "6"
[[97]]
[1] "9" "4" "0" "9" "9" "1" "2" "6" "7" "3"
[[98]]
[1] "9" "6" "0" "4" "9" "4" "1" "1" "9" "2"
[[99]]
[1] "9" "8" "0" "1" "9" "7" "0" "2" "9" "9"
[[100]]
[1] "1" "0" "0" "0" "0" "1" "e" "+" "0" "6"
3. map(.f = function(x) {
duplicated(x)
})
[[1]]
[1] FALSE TRUE
[[2]]
[1] FALSE FALSE
[[3]]
[1] FALSE FALSE FALSE
[[4]]
[1] FALSE FALSE TRUE FALSE
[[5]]
[1] FALSE FALSE FALSE TRUE TRUE
[[6]]
[1] FALSE FALSE FALSE FALSE TRUE
[[7]]
[1] FALSE FALSE FALSE TRUE TRUE
[[8]]
[1] FALSE FALSE FALSE FALSE FALSE
[[9]]
[1] FALSE FALSE FALSE FALSE FALSE
[[10]]
[1] FALSE FALSE TRUE TRUE TRUE TRUE TRUE
[[11]]
[1] FALSE FALSE TRUE TRUE FALSE TRUE TRUE
[[12]]
[1] FALSE FALSE TRUE TRUE FALSE FALSE FALSE
[[13]]
[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE
[[14]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[[15]]
[1] FALSE TRUE FALSE FALSE TRUE FALSE TRUE
[[16]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[[17]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE
[[18]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[[19]]
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE
[[20]]
[1] FALSE FALSE TRUE FALSE TRUE TRUE TRUE
[[21]]
[1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE
[[22]]
[1] FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
[[23]]
[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
[[24]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[[25]]
[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
[[26]]
[1] FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
[[27]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
[[28]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[[29]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE
[[30]]
[1] FALSE FALSE TRUE FALSE FALSE TRUE TRUE TRUE
[[31]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE
[[32]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
[[33]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE
[[34]]
[1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
[[35]]
[1] FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE
[[36]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
[[37]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[[38]]
[1] FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE FALSE
[[39]]
[1] FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE
[[40]]
[1] FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE
[[41]]
[1] FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
[[42]]
[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE
[[43]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
[[44]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE
[[45]]
[1] FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE TRUE
[[46]]
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE
[[47]]
[1] FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
[[48]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE
[[49]]
[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE
[[50]]
[1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[[51]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE
[[52]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE
[[53]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
[[54]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
[[55]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
[[56]]
[1] FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE
[[57]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[[58]]
[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE
[[59]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
[[60]]
[1] FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
[[61]]
[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE
[[62]]
[1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[[63]]
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE
[[64]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE
[[65]]
[1] FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
[[66]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE
[[67]]
[1] FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
[[68]]
[1] FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
[[69]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[[70]]
[1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[[71]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
[[72]]
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE
[[73]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE
[[74]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
[[75]]
[1] FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE
[[76]]
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
[[77]]
[1] FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
[[78]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
[[79]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
[[80]]
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE TRUE
[[81]]
[1] FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
[[82]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE
[[83]]
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[[84]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE
[[85]]
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[[86]]
[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
[[87]]
[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE
[[88]]
[1] FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE
[[89]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE
[[90]]
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE TRUE
[[91]]
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[[92]]
[1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[[93]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE
[[94]]
[1] FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE
[[95]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
[[96]]
[1] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE
[[97]]
[1] FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
[[98]]
[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE FALSE
[[99]]
[1] FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
[[100]]
[1] FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE
4. map_lgl(.f = function(x) {
any(x)
})
[1] TRUE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
[16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
[31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
[76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
よくよく考えてみたら、わざわざtibbleにしなくてもできることに気づいたので、ベクトルとして処理してみます。とりあえず、まず最初に1から100までの2乗と3乗をくっつけたベクトルを作っておきます。
1 2 3 4 5 6 7
"11" "48" "927" "1664" "25125" "36216" "49343"
8 9 10 11 12 13 14
"64512" "81729" "1001000" "1211331" "1441728" "1692197" "1962744"
15 16 17 18 19 20 21
"2253375" "2564096" "2894913" "3245832" "3616859" "4008000" "4419261"
22 23 24 25 26 27 28
"48410648" "52912167" "57613824" "62515625" "67617576" "72919683" "78421952"
29 30 31 32 33 34 35
"84124389" "90027000" "96129791" "102432768" "108935937" "115639304" "122542875"
36 37 38 39 40 41 42
"129646656" "136950653" "144454872" "152159319" "160064000" "168168921" "176474088"
43 44 45 46 47 48 49
"184979507" "193685184" "202591125" "211697336" "2209103823" "2304110592" "2401117649"
50 51 52 53 54 55 56
"2500125000" "2601132651" "2704140608" "2809148877" "2916157464" "3025166375" "3136175616"
57 58 59 60 61 62 63
"3249185193" "3364195112" "3481205379" "3600216000" "3721226981" "3844238328" "3969250047"
64 65 66 67 68 69 70
"4096262144" "4225274625" "4356287496" "4489300763" "4624314432" "4761328509" "4900343000"
71 72 73 74 75 76 77
"5041357911" "5184373248" "5329389017" "5476405224" "5625421875" "5776438976" "5929456533"
78 79 80 81 82 83 84
"6084474552" "6241493039" "6400512000" "6561531441" "6724551368" "6889571787" "7056592704"
85 86 87 88 89 90 91
"7225614125" "7396636056" "7569658503" "7744681472" "7921704969" "8100729000" "8281753571"
92 93 94 95 96 97 98
"8464778688" "8649804357" "8836830584" "9025857375" "9216884736" "9409912673" "9604941192"
99 100
"9801970299" "100001e+06"
stringrパッケージの関数で処理します。アップデートしてなくてバージョンが1.5.1のままなのでnamed vectorが返ってこないです。100個のベクトルのまま処理して最後にstr_which()でインデックスを返すことにします。(stringr 1.6.0からはnamed vectorが返ってきます1。updateすればいいじゃんという指摘は今回聞かなかったこととします。)
- 1
-
stringr::str_split()の引数patternに""を入れると、一文字ずつ文字を分けてくれます。 - 2
-
numeric = TRUEにすると、数字は数値としてソートしてくれます。今回は別になくてもいいです。 - 3
-
stringr::str_flatten()は文字列ベクトルを単一の文字列にしてくれます。デフォルトでcollapse = ""なので、コード補完を効かせていればstr_c(collapse = "")よりも入力が少ないです。 - 4
-
stringr::str_which()は引数patternに当てはまる要素のインデックスを返してくれます。
[1] 69
Code
1. vec_num_sqcu
1 2 3 4 5 6 7
"11" "48" "927" "1664" "25125" "36216" "49343"
8 9 10 11 12 13 14
"64512" "81729" "1001000" "1211331" "1441728" "1692197" "1962744"
15 16 17 18 19 20 21
"2253375" "2564096" "2894913" "3245832" "3616859" "4008000" "4419261"
22 23 24 25 26 27 28
"48410648" "52912167" "57613824" "62515625" "67617576" "72919683" "78421952"
29 30 31 32 33 34 35
"84124389" "90027000" "96129791" "102432768" "108935937" "115639304" "122542875"
36 37 38 39 40 41 42
"129646656" "136950653" "144454872" "152159319" "160064000" "168168921" "176474088"
43 44 45 46 47 48 49
"184979507" "193685184" "202591125" "211697336" "2209103823" "2304110592" "2401117649"
50 51 52 53 54 55 56
"2500125000" "2601132651" "2704140608" "2809148877" "2916157464" "3025166375" "3136175616"
57 58 59 60 61 62 63
"3249185193" "3364195112" "3481205379" "3600216000" "3721226981" "3844238328" "3969250047"
64 65 66 67 68 69 70
"4096262144" "4225274625" "4356287496" "4489300763" "4624314432" "4761328509" "4900343000"
71 72 73 74 75 76 77
"5041357911" "5184373248" "5329389017" "5476405224" "5625421875" "5776438976" "5929456533"
78 79 80 81 82 83 84
"6084474552" "6241493039" "6400512000" "6561531441" "6724551368" "6889571787" "7056592704"
85 86 87 88 89 90 91
"7225614125" "7396636056" "7569658503" "7744681472" "7921704969" "8100729000" "8281753571"
92 93 94 95 96 97 98
"8464778688" "8649804357" "8836830584" "9025857375" "9216884736" "9409912673" "9604941192"
99 100
"9801970299" "100001e+06"
2. str_split(pattern = "")
[[1]]
[1] "1" "1"
[[2]]
[1] "4" "8"
[[3]]
[1] "9" "2" "7"
[[4]]
[1] "1" "6" "6" "4"
[[5]]
[1] "2" "5" "1" "2" "5"
[[6]]
[1] "3" "6" "2" "1" "6"
[[7]]
[1] "4" "9" "3" "4" "3"
[[8]]
[1] "6" "4" "5" "1" "2"
[[9]]
[1] "8" "1" "7" "2" "9"
[[10]]
[1] "1" "0" "0" "1" "0" "0" "0"
[[11]]
[1] "1" "2" "1" "1" "3" "3" "1"
[[12]]
[1] "1" "4" "4" "1" "7" "2" "8"
[[13]]
[1] "1" "6" "9" "2" "1" "9" "7"
[[14]]
[1] "1" "9" "6" "2" "7" "4" "4"
[[15]]
[1] "2" "2" "5" "3" "3" "7" "5"
[[16]]
[1] "2" "5" "6" "4" "0" "9" "6"
[[17]]
[1] "2" "8" "9" "4" "9" "1" "3"
[[18]]
[1] "3" "2" "4" "5" "8" "3" "2"
[[19]]
[1] "3" "6" "1" "6" "8" "5" "9"
[[20]]
[1] "4" "0" "0" "8" "0" "0" "0"
[[21]]
[1] "4" "4" "1" "9" "2" "6" "1"
[[22]]
[1] "4" "8" "4" "1" "0" "6" "4" "8"
[[23]]
[1] "5" "2" "9" "1" "2" "1" "6" "7"
[[24]]
[1] "5" "7" "6" "1" "3" "8" "2" "4"
[[25]]
[1] "6" "2" "5" "1" "5" "6" "2" "5"
[[26]]
[1] "6" "7" "6" "1" "7" "5" "7" "6"
[[27]]
[1] "7" "2" "9" "1" "9" "6" "8" "3"
[[28]]
[1] "7" "8" "4" "2" "1" "9" "5" "2"
[[29]]
[1] "8" "4" "1" "2" "4" "3" "8" "9"
[[30]]
[1] "9" "0" "0" "2" "7" "0" "0" "0"
[[31]]
[1] "9" "6" "1" "2" "9" "7" "9" "1"
[[32]]
[1] "1" "0" "2" "4" "3" "2" "7" "6" "8"
[[33]]
[1] "1" "0" "8" "9" "3" "5" "9" "3" "7"
[[34]]
[1] "1" "1" "5" "6" "3" "9" "3" "0" "4"
[[35]]
[1] "1" "2" "2" "5" "4" "2" "8" "7" "5"
[[36]]
[1] "1" "2" "9" "6" "4" "6" "6" "5" "6"
[[37]]
[1] "1" "3" "6" "9" "5" "0" "6" "5" "3"
[[38]]
[1] "1" "4" "4" "4" "5" "4" "8" "7" "2"
[[39]]
[1] "1" "5" "2" "1" "5" "9" "3" "1" "9"
[[40]]
[1] "1" "6" "0" "0" "6" "4" "0" "0" "0"
[[41]]
[1] "1" "6" "8" "1" "6" "8" "9" "2" "1"
[[42]]
[1] "1" "7" "6" "4" "7" "4" "0" "8" "8"
[[43]]
[1] "1" "8" "4" "9" "7" "9" "5" "0" "7"
[[44]]
[1] "1" "9" "3" "6" "8" "5" "1" "8" "4"
[[45]]
[1] "2" "0" "2" "5" "9" "1" "1" "2" "5"
[[46]]
[1] "2" "1" "1" "6" "9" "7" "3" "3" "6"
[[47]]
[1] "2" "2" "0" "9" "1" "0" "3" "8" "2" "3"
[[48]]
[1] "2" "3" "0" "4" "1" "1" "0" "5" "9" "2"
[[49]]
[1] "2" "4" "0" "1" "1" "1" "7" "6" "4" "9"
[[50]]
[1] "2" "5" "0" "0" "1" "2" "5" "0" "0" "0"
[[51]]
[1] "2" "6" "0" "1" "1" "3" "2" "6" "5" "1"
[[52]]
[1] "2" "7" "0" "4" "1" "4" "0" "6" "0" "8"
[[53]]
[1] "2" "8" "0" "9" "1" "4" "8" "8" "7" "7"
[[54]]
[1] "2" "9" "1" "6" "1" "5" "7" "4" "6" "4"
[[55]]
[1] "3" "0" "2" "5" "1" "6" "6" "3" "7" "5"
[[56]]
[1] "3" "1" "3" "6" "1" "7" "5" "6" "1" "6"
[[57]]
[1] "3" "2" "4" "9" "1" "8" "5" "1" "9" "3"
[[58]]
[1] "3" "3" "6" "4" "1" "9" "5" "1" "1" "2"
[[59]]
[1] "3" "4" "8" "1" "2" "0" "5" "3" "7" "9"
[[60]]
[1] "3" "6" "0" "0" "2" "1" "6" "0" "0" "0"
[[61]]
[1] "3" "7" "2" "1" "2" "2" "6" "9" "8" "1"
[[62]]
[1] "3" "8" "4" "4" "2" "3" "8" "3" "2" "8"
[[63]]
[1] "3" "9" "6" "9" "2" "5" "0" "0" "4" "7"
[[64]]
[1] "4" "0" "9" "6" "2" "6" "2" "1" "4" "4"
[[65]]
[1] "4" "2" "2" "5" "2" "7" "4" "6" "2" "5"
[[66]]
[1] "4" "3" "5" "6" "2" "8" "7" "4" "9" "6"
[[67]]
[1] "4" "4" "8" "9" "3" "0" "0" "7" "6" "3"
[[68]]
[1] "4" "6" "2" "4" "3" "1" "4" "4" "3" "2"
[[69]]
[1] "4" "7" "6" "1" "3" "2" "8" "5" "0" "9"
[[70]]
[1] "4" "9" "0" "0" "3" "4" "3" "0" "0" "0"
[[71]]
[1] "5" "0" "4" "1" "3" "5" "7" "9" "1" "1"
[[72]]
[1] "5" "1" "8" "4" "3" "7" "3" "2" "4" "8"
[[73]]
[1] "5" "3" "2" "9" "3" "8" "9" "0" "1" "7"
[[74]]
[1] "5" "4" "7" "6" "4" "0" "5" "2" "2" "4"
[[75]]
[1] "5" "6" "2" "5" "4" "2" "1" "8" "7" "5"
[[76]]
[1] "5" "7" "7" "6" "4" "3" "8" "9" "7" "6"
[[77]]
[1] "5" "9" "2" "9" "4" "5" "6" "5" "3" "3"
[[78]]
[1] "6" "0" "8" "4" "4" "7" "4" "5" "5" "2"
[[79]]
[1] "6" "2" "4" "1" "4" "9" "3" "0" "3" "9"
[[80]]
[1] "6" "4" "0" "0" "5" "1" "2" "0" "0" "0"
[[81]]
[1] "6" "5" "6" "1" "5" "3" "1" "4" "4" "1"
[[82]]
[1] "6" "7" "2" "4" "5" "5" "1" "3" "6" "8"
[[83]]
[1] "6" "8" "8" "9" "5" "7" "1" "7" "8" "7"
[[84]]
[1] "7" "0" "5" "6" "5" "9" "2" "7" "0" "4"
[[85]]
[1] "7" "2" "2" "5" "6" "1" "4" "1" "2" "5"
[[86]]
[1] "7" "3" "9" "6" "6" "3" "6" "0" "5" "6"
[[87]]
[1] "7" "5" "6" "9" "6" "5" "8" "5" "0" "3"
[[88]]
[1] "7" "7" "4" "4" "6" "8" "1" "4" "7" "2"
[[89]]
[1] "7" "9" "2" "1" "7" "0" "4" "9" "6" "9"
[[90]]
[1] "8" "1" "0" "0" "7" "2" "9" "0" "0" "0"
[[91]]
[1] "8" "2" "8" "1" "7" "5" "3" "5" "7" "1"
[[92]]
[1] "8" "4" "6" "4" "7" "7" "8" "6" "8" "8"
[[93]]
[1] "8" "6" "4" "9" "8" "0" "4" "3" "5" "7"
[[94]]
[1] "8" "8" "3" "6" "8" "3" "0" "5" "8" "4"
[[95]]
[1] "9" "0" "2" "5" "8" "5" "7" "3" "7" "5"
[[96]]
[1] "9" "2" "1" "6" "8" "8" "4" "7" "3" "6"
[[97]]
[1] "9" "4" "0" "9" "9" "1" "2" "6" "7" "3"
[[98]]
[1] "9" "6" "0" "4" "9" "4" "1" "1" "9" "2"
[[99]]
[1] "9" "8" "0" "1" "9" "7" "0" "2" "9" "9"
[[100]]
[1] "1" "0" "0" "0" "0" "1" "e" "+" "0" "6"
3. map_chr(.f = function(x) {
str_sort(x, numeric = TRUE) %>% str_flatten()
})
[1] "11" "48" "279" "1466" "12255" "12366" "33449"
[8] "12456" "12789" "0000011" "1111233" "1124478" "1126799" "1244679"
[15] "2233557" "0245669" "1234899" "2233458" "1356689" "0000048" "1124469"
[22] "01444688" "11225679" "12345678" "12255566" "15666777" "12367899" "12245789"
[29] "12344889" "00000279" "11267999" "012234678" "013357899" "011334569" "122245578"
[36] "124566669" "013355669" "124444578" "111235599" "000001466" "111266889" "014467788"
[43] "014577899" "113456889" "011222559" "112336679" "0012223389" "0011223459" "0111244679"
[50] "0000012255" "0111223566" "0001244678" "0124778889" "1124456679" "0123355667" "1113356667"
[57] "1123345899" "1112334569" "0123345789" "0000012366" "1122236789" "2233344888" "0023456799"
[64] "0122444669" "2222445567" "2344566789" "0033446789" "1223344446" "0123456789" "0000033449"
[71] "0111345579" "1233445788" "0123357899" "0224445567" "1224555678" "3456677789" "2334555699"
[78] "0244455678" "0123344699" "0000012456" "1113445566" "1234556678" "1567778889" "0024556779"
[85] "1122245567" "0335666679" "0355566789" "1244467778" "0124677999" "0000012789" "1123557788"
[92] "4466778888" "0344567889" "0334568888" "0235557789" "1234667889" "0123467999" "0112446999"
[99] "0012789999" "+00000116e"
4. str_which(pattern = "0123456789")
[1] 69
using built-in functions
組み込み関数だけでやろうとするとこんな感じ?
vec_num_sqcu |>
grep(
1 "^\\d{10}$",
x = _,
value = TRUE
) |>
strsplit(split = "") |>
sapply(
FUN = \(x) {
sort(x) |>
paste(collapse = "")
}
) |>
grep(
"0123456789",
x = _,
value = TRUE
)- 1
-
正規表現で文頭と数字10文字と文末にしておくことで、科学的表記になる要素と数字10桁にならない要素を除外できますが……よくよく考えたら最後に
grep()で探すので、ここのgrep()は別になくてもいいかも。
69
"0123456789"
Code
1. vec_num_sqcu
1 2 3 4 5 6 7
"11" "48" "927" "1664" "25125" "36216" "49343"
8 9 10 11 12 13 14
"64512" "81729" "1001000" "1211331" "1441728" "1692197" "1962744"
15 16 17 18 19 20 21
"2253375" "2564096" "2894913" "3245832" "3616859" "4008000" "4419261"
22 23 24 25 26 27 28
"48410648" "52912167" "57613824" "62515625" "67617576" "72919683" "78421952"
29 30 31 32 33 34 35
"84124389" "90027000" "96129791" "102432768" "108935937" "115639304" "122542875"
36 37 38 39 40 41 42
"129646656" "136950653" "144454872" "152159319" "160064000" "168168921" "176474088"
43 44 45 46 47 48 49
"184979507" "193685184" "202591125" "211697336" "2209103823" "2304110592" "2401117649"
50 51 52 53 54 55 56
"2500125000" "2601132651" "2704140608" "2809148877" "2916157464" "3025166375" "3136175616"
57 58 59 60 61 62 63
"3249185193" "3364195112" "3481205379" "3600216000" "3721226981" "3844238328" "3969250047"
64 65 66 67 68 69 70
"4096262144" "4225274625" "4356287496" "4489300763" "4624314432" "4761328509" "4900343000"
71 72 73 74 75 76 77
"5041357911" "5184373248" "5329389017" "5476405224" "5625421875" "5776438976" "5929456533"
78 79 80 81 82 83 84
"6084474552" "6241493039" "6400512000" "6561531441" "6724551368" "6889571787" "7056592704"
85 86 87 88 89 90 91
"7225614125" "7396636056" "7569658503" "7744681472" "7921704969" "8100729000" "8281753571"
92 93 94 95 96 97 98
"8464778688" "8649804357" "8836830584" "9025857375" "9216884736" "9409912673" "9604941192"
99 100
"9801970299" "100001e+06"
2. grep("^\\d{10}$", x = ., value = TRUE)
47 48 49 50 51 52 53
"2209103823" "2304110592" "2401117649" "2500125000" "2601132651" "2704140608" "2809148877"
54 55 56 57 58 59 60
"2916157464" "3025166375" "3136175616" "3249185193" "3364195112" "3481205379" "3600216000"
61 62 63 64 65 66 67
"3721226981" "3844238328" "3969250047" "4096262144" "4225274625" "4356287496" "4489300763"
68 69 70 71 72 73 74
"4624314432" "4761328509" "4900343000" "5041357911" "5184373248" "5329389017" "5476405224"
75 76 77 78 79 80 81
"5625421875" "5776438976" "5929456533" "6084474552" "6241493039" "6400512000" "6561531441"
82 83 84 85 86 87 88
"6724551368" "6889571787" "7056592704" "7225614125" "7396636056" "7569658503" "7744681472"
89 90 91 92 93 94 95
"7921704969" "8100729000" "8281753571" "8464778688" "8649804357" "8836830584" "9025857375"
96 97 98 99
"9216884736" "9409912673" "9604941192" "9801970299"
3. strsplit(split = "")
$`47`
[1] "2" "2" "0" "9" "1" "0" "3" "8" "2" "3"
$`48`
[1] "2" "3" "0" "4" "1" "1" "0" "5" "9" "2"
$`49`
[1] "2" "4" "0" "1" "1" "1" "7" "6" "4" "9"
$`50`
[1] "2" "5" "0" "0" "1" "2" "5" "0" "0" "0"
$`51`
[1] "2" "6" "0" "1" "1" "3" "2" "6" "5" "1"
$`52`
[1] "2" "7" "0" "4" "1" "4" "0" "6" "0" "8"
$`53`
[1] "2" "8" "0" "9" "1" "4" "8" "8" "7" "7"
$`54`
[1] "2" "9" "1" "6" "1" "5" "7" "4" "6" "4"
$`55`
[1] "3" "0" "2" "5" "1" "6" "6" "3" "7" "5"
$`56`
[1] "3" "1" "3" "6" "1" "7" "5" "6" "1" "6"
$`57`
[1] "3" "2" "4" "9" "1" "8" "5" "1" "9" "3"
$`58`
[1] "3" "3" "6" "4" "1" "9" "5" "1" "1" "2"
$`59`
[1] "3" "4" "8" "1" "2" "0" "5" "3" "7" "9"
$`60`
[1] "3" "6" "0" "0" "2" "1" "6" "0" "0" "0"
$`61`
[1] "3" "7" "2" "1" "2" "2" "6" "9" "8" "1"
$`62`
[1] "3" "8" "4" "4" "2" "3" "8" "3" "2" "8"
$`63`
[1] "3" "9" "6" "9" "2" "5" "0" "0" "4" "7"
$`64`
[1] "4" "0" "9" "6" "2" "6" "2" "1" "4" "4"
$`65`
[1] "4" "2" "2" "5" "2" "7" "4" "6" "2" "5"
$`66`
[1] "4" "3" "5" "6" "2" "8" "7" "4" "9" "6"
$`67`
[1] "4" "4" "8" "9" "3" "0" "0" "7" "6" "3"
$`68`
[1] "4" "6" "2" "4" "3" "1" "4" "4" "3" "2"
$`69`
[1] "4" "7" "6" "1" "3" "2" "8" "5" "0" "9"
$`70`
[1] "4" "9" "0" "0" "3" "4" "3" "0" "0" "0"
$`71`
[1] "5" "0" "4" "1" "3" "5" "7" "9" "1" "1"
$`72`
[1] "5" "1" "8" "4" "3" "7" "3" "2" "4" "8"
$`73`
[1] "5" "3" "2" "9" "3" "8" "9" "0" "1" "7"
$`74`
[1] "5" "4" "7" "6" "4" "0" "5" "2" "2" "4"
$`75`
[1] "5" "6" "2" "5" "4" "2" "1" "8" "7" "5"
$`76`
[1] "5" "7" "7" "6" "4" "3" "8" "9" "7" "6"
$`77`
[1] "5" "9" "2" "9" "4" "5" "6" "5" "3" "3"
$`78`
[1] "6" "0" "8" "4" "4" "7" "4" "5" "5" "2"
$`79`
[1] "6" "2" "4" "1" "4" "9" "3" "0" "3" "9"
$`80`
[1] "6" "4" "0" "0" "5" "1" "2" "0" "0" "0"
$`81`
[1] "6" "5" "6" "1" "5" "3" "1" "4" "4" "1"
$`82`
[1] "6" "7" "2" "4" "5" "5" "1" "3" "6" "8"
$`83`
[1] "6" "8" "8" "9" "5" "7" "1" "7" "8" "7"
$`84`
[1] "7" "0" "5" "6" "5" "9" "2" "7" "0" "4"
$`85`
[1] "7" "2" "2" "5" "6" "1" "4" "1" "2" "5"
$`86`
[1] "7" "3" "9" "6" "6" "3" "6" "0" "5" "6"
$`87`
[1] "7" "5" "6" "9" "6" "5" "8" "5" "0" "3"
$`88`
[1] "7" "7" "4" "4" "6" "8" "1" "4" "7" "2"
$`89`
[1] "7" "9" "2" "1" "7" "0" "4" "9" "6" "9"
$`90`
[1] "8" "1" "0" "0" "7" "2" "9" "0" "0" "0"
$`91`
[1] "8" "2" "8" "1" "7" "5" "3" "5" "7" "1"
$`92`
[1] "8" "4" "6" "4" "7" "7" "8" "6" "8" "8"
$`93`
[1] "8" "6" "4" "9" "8" "0" "4" "3" "5" "7"
$`94`
[1] "8" "8" "3" "6" "8" "3" "0" "5" "8" "4"
$`95`
[1] "9" "0" "2" "5" "8" "5" "7" "3" "7" "5"
$`96`
[1] "9" "2" "1" "6" "8" "8" "4" "7" "3" "6"
$`97`
[1] "9" "4" "0" "9" "9" "1" "2" "6" "7" "3"
$`98`
[1] "9" "6" "0" "4" "9" "4" "1" "1" "9" "2"
$`99`
[1] "9" "8" "0" "1" "9" "7" "0" "2" "9" "9"
4. sapply(FUN = function(x) {
paste(sort(x), collapse = "")
})
47 48 49 50 51 52 53
"0012223389" "0011223459" "0111244679" "0000012255" "0111223566" "0001244678" "0124778889"
54 55 56 57 58 59 60
"1124456679" "0123355667" "1113356667" "1123345899" "1112334569" "0123345789" "0000012366"
61 62 63 64 65 66 67
"1122236789" "2233344888" "0023456799" "0122444669" "2222445567" "2344566789" "0033446789"
68 69 70 71 72 73 74
"1223344446" "0123456789" "0000033449" "0111345579" "1233445788" "0123357899" "0224445567"
75 76 77 78 79 80 81
"1224555678" "3456677789" "2334555699" "0244455678" "0123344699" "0000012456" "1113445566"
82 83 84 85 86 87 88
"1234556678" "1567778889" "0024556779" "1122245567" "0335666679" "0355566789" "1244467778"
89 90 91 92 93 94 95
"0124677999" "0000012789" "1123557788" "4466778888" "0344567889" "0334568888" "0235557789"
96 97 98 99
"1234667889" "0123467999" "0112446999" "0012789999"
5. grep("0123456789", x = ., value = TRUE)
69
"0123456789"
grep()は第二引数xにマッチさせたい文字列が来るので、パイプフローの中だと必ずプレスホルダーが必要になる点と、value = TRUEにしてくれないとインデックスしか返してくれない点がやはり面倒です。
Supplement
scientific notation
ちなみに、100^3みたいな大きな数は指数表記(科学的表記)になります。
このまま桁数を取ろうとしてstr_length()を使うとこうなります。
なんと全部5になってしまいました。なので、最初のtibbleから始めた方法では実はこうなっていました。
# A tibble: 1 × 3
number squared cubed
<dbl> <dbl> <dbl>
1 100 10000 1000000
本当だと11桁になるはずなのでdplyr::filter()には引っかからないはずですが、なぜか残っています。tibbleはデフォルトだと13桁まで表示してくれるようなので2、コンソールの見た目上ではうまくいきそうですが、処理のうえではそうはならないようです。
対処法ですが、いくつか方法があります。例えば、あらかじめoptions(scipen = 大きな数)をやっておくと、そのセッション内ではある程度は指数表記にならないようです。
[1] "10000" "1000000" "100000000" "10000000000"
[1] 5 7 9 11
もしくはformat(..., scientific = FALSE)を使うのもありかもしれません。特別なパッケージを使わずとも、ある程度の大きさの数まではちゃんと表示してくれます。なお、戻り値は文字列です。
options(scipen = 0) # restore defalut setting
format(
c(100^2, 100^3, 100^4, 100^5),
1 trim = TRUE,
scientific = FALSE
)- 1
-
デフォルトの
trim = FALSEのままだと、一番文字数が大きいものに合わせて、足りない部分がスペースで詰められちゃうので、桁数を数えるときはTRUEの方がいいです。
[1] "10000" "1000000" "100000000" "10000000000"
regular expression
文字列をスプリットせずに正規表現を多用してどうにかならないかも試してみました。69以外の数字は0から9までの数字で重複があるということなので、はじめは後方参照をそのまま使えばいいのかなと思ってました。
- 1
-
意図としては、
(\\d)で数字を1文字拾って、.*?で違う数字があってもなくても良くて、\\1の後方参照で最初に拾った数値の重複が表れる、という感じでした。 - 2
-
引数
invertがTRUEで、マッチしなかった要素を返すようにする。
49 52 53 54 60 61 63
"2401117649" "2704140608" "2809148877" "2916157464" "3600216000" "3721226981" "3969250047"
69 72 73 76 78 79 80
"4761328509" "5184373248" "5329389017" "5776438976" "6084474552" "6241493039" "6400512000"
83 85 86 87 90 95 96
"6889571787" "7225614125" "7396636056" "7569658503" "8100729000" "9025857375" "9216884736"
69以外は数字に重複がでるのでこれでできるかと思ったら、思いのほか絞れませんでした。残った数を見てみると、どうやら最初の一桁(左端の数字)が重複していないものが残っているっぽいです。grep()のHelpから飛んでhelp("regular expression")に飛んで、さらにPOSIX 1003.2 standard3に飛んで読んでみた結果、最初(\\d)が左端の数字にマッチするけど、マッチした文字が後方で見つからないので全体としてマッチせず、ということなんじゃないかと思います。
なお、引数perlをTRUEにして、Perl言語の正規表現の扱いにすると成功しました。
69
"4761328509"
他にも、重複がある数字にマッチしてほしいということで、最初に任意の文字(.*?)を追加したら、デフォルトのgrep()のままでもうまく行きました。
69
"4761328509"
ちなみにstringrだとgrep(..., perl = TRUE)のときと同じ結果になります。
- 1
-
stringr::str_view()はマッチしたところを表示してくれます。コンソール上だとマッチした部分が<>で囲まれて青色で出力されます。 - 2
- マッチの有無にかかわらず、全部出力する。
- 3
-
TRUEだとHTML出力になるけど、レンダリングした時にスクロールに対応してくれなかったので、デフォルトのFALSEに。
[1] │ <11>
[2] │ 48
[3] │ 927
[4] │ 1<66>4
[5] │ <2512>5
[6] │ 3<6216>
[7] │ <4934>3
[8] │ 64512
[9] │ 81729
[10] │ <1001><00>0
[11] │ <121><1331>
[12] │ <1441>728
[13] │ <16921>97
[14] │ 19627<44>
[15] │ <22><53375>
[16] │ 25<64096>
[17] │ 28<949>13
[18] │ <324583>2
[19] │ 3<616>859
[20] │ 4<00>8<00>0
[21] │ <44><19261>
[22] │ <484>10648
[23] │ 5<2912>167
[24] │ 57613824
[25] │ <625156>25
[26] │ <676>1<757>6
[27] │ 72<919>683
[28] │ 784<21952>
[29] │ <8412438>9
[30] │ 9<00>27<00>0
[31] │ <96129>791
[32] │ 10<2432>768
[33] │ 108<9359>37
[34] │ <11>56<393>04
[35] │ 1<22><542875>
[36] │ 129<646><656>
[37] │ 1<36950653>
[38] │ 1<44><454>872
[39] │ <1521>5<9319>
[40] │ 1<6006>4<00>0
[41] │ <1681>68921
[42] │ 1<7647>40<88>
[43] │ 184<979>507
[44] │ <1936851>84
[45] │ <202><591125>
[46] │ 2<11><697336>
[47] │ <22><0910><3823>
[48] │ <2304110592>
[49] │ 2<40111764>9
[50] │ <250012>5<00>0
[51] │ <2601132>651
[52] │ 27<04140>608
[53] │ 2<809148>8<77>
[54] │ 29<161>57<464>
[55] │ <30251663>75
[56] │ <313><61756>16
[57] │ <3249185193>
[58] │ <33>64<1951>12
[59] │ <34812053>79
[60] │ 3<600216><00>0
[61] │ 37<212>26981
[62] │ <384423><8328>
[63] │ 3<969>25<00>47
[64] │ <409626214>4
[65] │ <4225274>625
[66] │ <43562874>96
[67] │ <44>89<300763>
[68] │ <4624><31443>2
[69] │ 4761328509
[70] │ <490034>3<00>0
[71] │ <504135>79<11>
[72] │ 51<84373248>
[73] │ 5<3293>89017
[74] │ <5476405><22>4
[75] │ <5625>421875
[76] │ 5<77><6438976>
[77] │ <592945>65<33>
[78] │ 608<44>74<55>2
[79] │ 62<414><93039>
[80] │ 64<00>512<00>0
[81] │ <656><1531><44>1
[82] │ <672455136>8
[83] │ 6<88>95<717>87
[84] │ <70565927>04
[85] │ 7<22><5614125>
[86] │ 7<39663><6056>
[87] │ 7<56965>8503
[88] │ <77><44>681472
[89] │ <79217>04<969>
[90] │ 81<00>729<00>0
[91] │ <828><1753571>
[92] │ <8464778>6<88>
[93] │ <86498>04357
[94] │ <88><3683>0584
[95] │ 902<585><737>5
[96] │ 921<6884736>
[97] │ <9409>912673
[98] │ <96049>4<11>92
[99] │ <98019>702<99>
[100] │ <100001>e+06
10桁の中では69だけマッチしていないです。つまり、69が0から9の数字までで重複がないということですね。
Conclusion
69という数字が、2乗した値と3乗した値に0から9までの数字が重複なく現れる唯一の数であるというのを、Rを使って確かめてみました。思ったより手間がかからずにできました。正規表現についてはまだまだ勉強しないとです。
Session Infomation
R version 4.4.2 (2024-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 26100)
Matrix products: default
locale:
[1] LC_COLLATE=Japanese_Japan.utf8 LC_CTYPE=Japanese_Japan.utf8 LC_MONETARY=Japanese_Japan.utf8
[4] LC_NUMERIC=C LC_TIME=Japanese_Japan.utf8
time zone: Asia/Tokyo
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] lubridate_1.9.4 forcats_1.0.0 stringr_1.5.1 dplyr_1.1.4 purrr_1.1.0 readr_2.1.5
[7] tidyr_1.3.1 tibble_3.3.0 ggplot2_3.5.2 tidyverse_2.0.0
loaded via a namespace (and not attached):
[1] gtable_0.3.6 jsonlite_2.0.0 compiler_4.4.2 tidyselect_1.2.1
[5] systemfonts_1.2.3 scales_1.4.0 textshaping_1.0.1 yaml_2.3.10
[9] fastmap_1.2.0 R6_2.6.1 labeling_0.4.3 generics_0.1.4
[13] knitr_1.50 htmlwidgets_1.6.4 pillar_1.11.0 RColorBrewer_1.1-3
[17] tzdb_0.5.0 rlang_1.1.6 stringi_1.8.7 xfun_0.52
[21] ViewPipeSteps_0.1.0 timechange_0.3.0 cli_3.6.5 withr_3.0.2
[25] magrittr_2.0.3 digest_0.6.37 grid_4.4.2 rstudioapi_0.17.1
[29] hms_1.1.3 lifecycle_1.0.4 vctrs_0.6.5 evaluate_1.0.5
[33] glue_1.8.0 farver_2.1.2 ragg_1.4.0 rmarkdown_2.29
[37] tools_4.4.2 pkgconfig_2.0.3 htmltools_0.5.8.1
Footnotes
tibbleの表示に関する設定を行う
pillarパッケージのpillar.max_dec_widthに書いてある。 https://pillar.r-lib.org/reference/pillar_options.html↩︎https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html↩︎