Числа, які є паліндромами в 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)що це паліндром в. Etc.


Якщо ваша мова не підтримує нескінченний вихід, ви можете взяти інше ціле число zв якості введення та виведення перших zелементів послідовності або всіх елементів менше z. Що б вам не було зручніше. Будь ласка, вкажіть, що ви використовували у своїй відповіді, якщо це так.

Пов'язані


Щоб бути на 100% чітким, числа, які виводяться, повинні бути паліндромами в точно визначених nбазах, а не nчи більше підстав?
Майк Буфардечі

1
Так. Це правильно. Отже, об'єднання всіх послідовностей для всіх значень of n- це набір цілих чисел >=3.
mbomb007

Відповіді:


2

Желе , 18 байт

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

Спробуйте в Інтернеті! - інтернет-перекладач очікує час на 60 секунд, після чого вимикає його (якщо тільки у нього є кешована копія), а офлайн друкує кожен по черзі.

Як?

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

Ṅ‘µ‘µ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

Математика, 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 Min

До речі, 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 Min

Так, будь ласка, додайте підказку! - Я здивований, що його вже немає там, оскільки я, безумовно, дізнався це з цього сайту десь ....
Грег Мартін

Casesпрекрасно працює замість Position. Але я протестував Doконструкцію, і вона не працює для мене, але я поняття не знаю, чому ні. Чомусь він не підключається до iзначень - я отримую на зразок помилок "Range specification in Range[2,-2+i] does not have appropriate bounds.". (І вставляючи Print[i];підтвердження, яким iне присвоєні значення.) Будь-які ідеї?
Грег Мартін

По- видимому, були U + 200B і U + 200C в коді, між ,і {(можливо , що - то робити з системою системотехніки). Це порушує код, оскільки символи вважаються змінною. Я сподіваюся, що цього немає: 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

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
}

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
}

Спробуйте в Інтернеті!

Введення передається як аргумент. Вихід знаходиться на stdout.

Якщо це запустити нормально, воно відображатиметься по одному номеру одночасно у нескінченній послідовності.

Якщо ви спробуєте це в 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 хвилину, щоб програма вимкнулася, перш ніж побачити вихід.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.