Числа, которые являются палиндромами в N основаниях

10

Учитывая неотрицательное целое число n >= 0, выведите навсегда последовательность целых чисел, x_i >= 3которые являются палиндромами в совершенно nразных основаниях b, где может быть основание 2 <= b <= x_i-2.

Это, в основном, инверсия OEIS A126071 , где вы выводите , какие индексы в этой последовательности имеют значение n. Это немного отличается, потому что я изменил его, чтобы вы игнорировали базы b = x_i-1, x_i, x_i+1, поскольку результаты для этих баз всегда одинаковы (значения всегда палиндромы или всегда нет). Кроме того, смещение отличается.

x_iограничивается чисел >= 3так , что первый член результата для каждого nявляется A037183 .

Обратите внимание, что формат вывода является гибким, но числа должны быть хорошо разделены.

Примеры:

n   seq
0   3 4 6 11 19 47 53 79 103 137 139 149 163 167 ...
1   5 7 8 9 12 13 14 22 23 25 29 35 37 39 41 43 49 ...
2   10 15 16 17 18 20 27 30 31 32 33 34 38 44 ...
3   21 24 26 28 42 45 46 50 51 54 55 56 57 64 66 68 70 ...
4   36 40 48 52 63 65 85 88 90 92 98 121 128 132 136 138 ...
5   60 72 78 84 96 104 105 108 112 114 135 140 156 162 164 ...
10  252 400 420 432 510 546 600 648 784 800 810 816 819 828 858 882 910 912 1040 1056 ...

Таким образом n=0, вы получаете результат этой задачи (начиная с 3), потому что вы получаете числа, которые являются палиндромами в n=0базах.

Ибо n=1, 5это палиндром в основании 2, и это единственная основа 2 <= b <= (5-2), в которой находится палиндром. 7Это палиндром в основании 2, и это единственная база 2 <= b <= (7-2), в которой находится палиндром. И т.д.


Если ваш язык не поддерживает бесконечный вывод, вы можете взять другое целое число в zкачестве входных данных и вывести первые zэлементы последовательности или все элементы меньше, чем z. Что бы вы ни предпочли. Пожалуйста, укажите, что вы использовали в своем ответе, если это так.

связанные с

mbomb007
источник
Чтобы быть на 100% ясным, числа, которые выводятся, должны быть палиндромами в точках nбаз, а не в nнескольких базах?
Майк Буфардечи
1
Да. Это правильно. Таким образом, объединение всех последовательностей для всех значений nявляется набором целых чисел >=3.
mbomb007

Ответы:

2

Желе , 18 байт

Ṅ‘µ‘µbRŒḂ€S_2⁼³µ?ß

Попробуйте онлайн! - онлайн-интерпретатор отключится через 60 секунд, а затем сбросит свои выходные данные (если у него нет кэшированной копии), в автономном режиме он будет печатать каждую по очереди.

Как?

Оценивает числа nвверх, печатая их, если они в последовательности. Обратите внимание, что первое число в любом выводе будет больше, чем, nпоскольку в противном случае диапазон bне достаточно велик, поэтому нет необходимости начинать процесс с 3. Также обратите внимание, что число палиндромов от основания 2 до x i -2 включительно всего на два меньше, чем количество палиндромов от основания 1 до x .

Ṅ‘µ‘µbRŒḂ€S_2⁼³µ?ß - Main link: n
 AµBµC         µ?  - ternary if: if C then A else B
      R            - range: [1,2,3...,n]
     b             - n converted to those bases
       ŒḂ€         - is palindromic? for €ach
          S        - sum: counts the 1s
           _2      - subtract 2: throw away the truthy unary and base n-1 effect
             ⁼³    - equals input: Does this equal the ORIGINAL n?
Ṅ                  - if so: print n
 ‘                 -        increment n
   ‘               - else: just increment n
                 ß - calls this link as a monad, with the incremented n.
Джонатан Аллан
источник
4

Mathematica, 80 71 байт

Спасибо JungHwan Min за сохранение 9 байтов!

Do[#!=Length[i~IntegerReverse~Range[2,i-2]~Cases~i]||Echo@i,{i,3,∞}]&

( является трехбайтовым символом U + 221E.) Чистая функция, принимающая неотрицательное целое число в качестве входных данных. i~IntegerReverse~Range[2,i-2]создает список обращений числа iво всех базах от 2до i-2; затем Length[...~Cases~i]считает, сколько из этих обращений iснова равно . #!=...||Echo@iмолча останавливается, если это число не равно входу, и выводит эхо, iесли оно равно входу. Эта процедура встроена в простой бесконечный цикл.

Грег Мартин
источник
Умное использование оценки короткого замыкания ! Echo@iТермин не вычисляется , если первый аргумент True. Могу ли я добавить это в Советы по игре в гольф в Mathematica ?
JungHwan Мин
Кстати, Do[...,{i,3,∞}]короче (i=2;While[1>0,... ++i ...]), и Casesбудет работать вместо Position. -9 байт:Do[#!=Length[i~IntegerReverse~Range[2,i-2]~Cases~i]||Echo@i,{i,3,∞}]&
JungHwan Мин
Да, пожалуйста, добавьте совет! - Я удивлен, что его там еще нет, поскольку я определенно узнал об этом где-то на этом сайте ...
Грег Мартин
Casesотлично работает вместо Position. Но я проверил Doконструкцию, и она не работает для меня, но я понятия не имею, почему нет. По некоторым причинам, он не включает iзначения - я получаю такие ошибки, как "Range specification in Range[2,-2+i] does not have appropriate bounds.". (И вставка Print[i];проверяет, что iне присваиваются значения.) Есть идеи?
Грег Мартин
Очевидно, в коде были U + 200B и U + 200C, между ,и {(вероятно, что-то связанное с системой SE). Это нарушает код, потому что символы считаются переменными. Я надеюсь, что это не имеет: Do[#!=Length[i~IntegerReverse~Range[2,i-2]~Cases~i]||Echo@i,{i,3,∞}]& EDIT: все еще есть. Вот ссылка для
вставки
1

Pyth, 21 19 18 байт

.V3IqQlf_IjbTr2tbb

Это должно работать в теории. Это работает правильно, если я заменяю бесконечный цикл на любой конечный (например, JQFbr3 50*`bqJlf_IjbTr2tbот 3 до 50, попробуйте здесь ), но интерпретатор Pyth не знает, когда или как печатать буквально бесконечный вывод.

Объяснение:

.V3IqQlf_IjbTr2tbb
.V3                     increase b infinitely, starting from 3
             r2Tb       range of integers including 2 to b - 2
      lf                length of elements retained if:
          jbT             b in that base
        _I                is invariant under reversal
    qQ                  check if the length is equivalent to the input
   I             b      output b if so
notjagan
источник
1

Perl 6 , 90 байт

->\n{->{$_=++($ //=2);$_ if n==grep {($/=[.polymod($^b xx*)])eq[$/.reverse]},2..$_-2}...*}

Попробуй это

-> \n {

  # sequence generator
  ->{         # using a code block with no parameter

    $_ =      # set the default scalar to the value being tested
      ++(     # preincrement
        $     # anonymous state variable
        //= 2 # initialized to 2 
      );

    # the anonymous state var maintains its state
    # only for this current sequence
    # every time the outer block gets called it is created anew

    $_    # return the current value
      if  # if the following is true

        n == grep # find all that match the following code

          {
            # convert the current value to the base being tested
            # store as an Array in $/
            ($/ = [ .polymod($^b xx*) ] )

            eq    # is string equal to: (shorter than eqv)

            [ $/.reverse ]
          },

          2 .. $_ - 2 # from the list of bases to test
  }

  ...  # keep using that code block to produce values

  *    # indefinitely
}
Брэд Гилберт b2gills
источник
1

Утилиты Bash + Unix, 134 132 байта

for((x=3;;x++)){
c=$1
for((b=x-1;--b>1;)){
s=`bc<<<"for(y=$x;y;y/=$b)y%$b"`
t=`tac<<<"$s"`
[ "${s#$t}" ]||((c--))
}
((c))||echo $x
}

Попробуйте онлайн!

Ввод передается в качестве аргумента. Выход на стандартный вывод.

Если вы запустите это нормально, он будет отображать одно число за раз в бесконечной последовательности.

Если вы попробуете это в TIO, он отобразит столько же выходных данных, сколько сгенерировал, когда истечет 60 секунд.

Митчелл Спектор
источник
0

Python 2, 132 байта

B=lambda n,b:[]if(n<1)else B(n/b,b)+[n%b]
n=input()
x=3
while 1:
    if sum(B(x,b)==B(x,b)[::-1]for b in range(2,x-1))==n:print x
    x+=1

Попробуйте онлайн

В программу TIO добавлен нижний колонтитул, поэтому вам не нужно ждать 1 минуту, пока программа не остановится, прежде чем увидеть результат.

mbomb007
источник