Обратные цифры in R

Если вы сделаете это:

if (var1 == true) {
    if (var2 == true) {
        if (var3 == true) {
            ...
        }
    }
}

Тогда вы также можете реагировать на случаи, когда что-то не так. Например, если вы проверяете ввод, вы можете дать пользователю подсказку о том, как правильно его отформатировать, или как угодно.

8
задан user446667 21 September 2010 в 18:59
поделиться

1 ответ

Используя intToUtf8 для разделения затем инвертируйте:

tmp <- c(100001, 123321, 123456)

res <- sapply(tmp, function(i) intToUtf8(rev(utf8ToInt(as.character(i)))))

res
# [1] "100001" "123321" "654321"

, Чтобы проверить, является ли это палиндром:

tmp == res
# [1]  TRUE  TRUE FALSE

Сравнительный тест

# bigger vector
tmpBIG <- rep(c(100001, 123321, 123456), 4000)

bench::mark(
  GregSnow = { grepl( '^([0-9])([0-9])([0-9])\\3\\2\\1, tmpBIG) },
  bartektartanus = { tmpBIG == stringi::stri_reverse(tmpBIG) },
  Spacedman = { tmpBIG == sub( '^([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])','\\6\\5\\4\\3\\2\\1', tmpBIG) },
  Joshua = { tmpBIG == sapply(strsplit(as.character(tmpBIG),""), function(i) paste(rev(i),collapse="")) },
  zx8754 = { tmpBIG == sapply(tmpBIG, function(i) intToUtf8(rev(utf8ToInt(as.character(i))))) },
  relative = TRUE)[, 1:9]

# expression         min median `itr/sec` mem_alloc `gc/sec` n_itr  n_gc total_time
# <bch:expr>       <dbl>  <dbl>     <dbl>     <dbl>    <dbl> <int> <dbl>   <bch:tm>
# 1 GregSnow        1      1         6.82      1         NaN    23     0      517ms
# 2 bartektartanus  1.38   1.34      5.02      2.33      NaN    17     0      520ms
# 3 Spacedman       1.58   1.55      4.52      2.33      NaN    15     0      509ms
# 4 Joshua          5.82   5.56      1.24      5.29      Inf     5     6      617ms
# 5 zx8754          6.06   6.17      1         3.98      Inf     4     4      614ms
0
ответ дан 5 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: