ตัวเลขที่เป็น palindromes ใน N base


10

ได้รับจำนวนเต็มไม่เป็นลบn >= 0ออกไปตลอดกาลลำดับเลขx_i >= 3ที่มี palindromes ในตรงnฐานที่แตกต่างกันที่ฐานที่สามารถb2 <= b <= x_i-2

นี้เป็นพื้นผกผันของOEIS A126071nที่คุณส่งออกที่ดัชนีอยู่ในลำดับที่มีค่า มันแตกต่างกันเล็กน้อยเพราะฉันเปลี่ยนดังนั้นคุณจึงไม่สนใจเบส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) เพราะคุณได้รับตัวเลขที่เป็น palindromes ในn=0ฐาน

สำหรับn=1, 5คือ palindrome ใน base 2, และนั่นเป็นเพียงเบสเดียว2 <= b <= (5-2)ที่เป็น palindrome ค่ะ. 7คือ palindrome ใน base 2, และนั่นเป็นเบสเดียว2 <= b <= (7-2)ที่มันเป็น palindrome ค่ะ.


iff ภาษาของคุณไม่สนับสนุนการส่งออกที่ไม่มีขีด จำกัด คุณอาจใช้เวลาจำนวนเต็มอีกzเป็น input และ output แรกองค์ประกอบของลำดับหรือองค์ประกอบทั้งหมดน้อยกว่าz zแล้วแต่ว่าคุณจะชอบอะไร โปรดระบุว่าคุณใช้คำตอบอย่างไรในกรณีนี้

ที่เกี่ยวข้อง


เพื่อให้ชัดเจน 100% ตัวเลขที่ส่งออกจะต้องเป็น palindromes ในnฐานที่แน่นอนไม่ใช่nหรือมากกว่าฐาน?
Mike Bufardeci

1
ใช่. ถูกต้อง. ดังนั้นสหภาพลำดับทั้งหมดสำหรับทุกค่าของเป็นชุดของจำนวนเต็มn >=3
mbomb007

คำตอบ:


2

เยลลี่ขนาด 18 ไบต์

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

ลองออนไลน์! - ล่ามออนไลน์จะหมดเวลาที่ 60 วินาทีจากนั้นล้างข้อมูลออก

อย่างไร?

ประเมินตัวเลขจากด้านnบนพิมพ์พวกเขาหากอยู่ในลำดับ โปรดทราบว่าหมายเลขแรกในการส่งออกใดจะสูงกว่าnตั้งแต่มิฉะนั้นช่วงของการไม่เพียงพอที่ดีดังนั้นจึงไม่มีความจำเป็นที่จะเมล็ดกระบวนการที่มีb 3นอกจากนี้ยังทราบว่าจำนวนของ palindromes จากฐาน2จะx ฉัน -2รวมเป็นเพียงสองน้อยกว่าจำนวนของ palindromes จากฐาน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.) ฟังก์ชั่น Pure รับจำนวนเต็มที่ไม่ใช่ค่าลบเป็นอินพุต i~IntegerReverse~Range[2,i-2]สร้างรายชื่อของการพลิกผันของจำนวนที่iอยู่ในฐานจาก2ไปi-2; จากนั้นLength[...~Cases~i]นับจำนวนการพลิกกลับที่เท่ากันiอีกครั้ง #!=...||Echo@iหยุดนิ่งถ้าจำนวนนั้นไม่เท่ากับอินพุทและเสียงก้องiถ้ามันเท่ากับอินพุท โพรซีเดอร์นั้นถูกฝังในลูป infinite ที่ไม่ซับซ้อน


ใช้การประเมินการลัดวงจรอย่างชาญฉลาด! คำที่ไม่ได้รับการประเมินเมื่ออาร์กิวเมนต์แรกคือEcho@i Trueฉันสามารถเพิ่มสิ่งนี้ลงในTips for golfing in 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

ใช่โปรดเพิ่มคำแนะนำด้วย - ฉันประหลาดใจที่มันไม่ได้อยู่ในนั้นเพราะฉันเรียนรู้จากเว็บไซต์นี้ที่ไหนซักแห่ง ....
Greg Martin

CasesPositionใช้งานได้ดีในสถานที่ของ แต่ฉันทดสอบการDoก่อสร้างและมันไม่ได้ผลสำหรับฉัน แต่ฉันไม่รู้ว่าทำไมไม่ ด้วยเหตุผลบางอย่างมันไม่ได้เสียบค่า-ฉันได้รับข้อผิดพลาดเช่นi "Range specification in Range[2,-2+i] does not have appropriate bounds."(และการแทรกการPrint[i];ตรวจสอบที่iไม่ได้รับการกำหนดค่า) ความคิดใด ๆ
Greg Martin

เห็นได้ชัดว่ามีรหัส U + 200B และ U + 200C อยู่ระหว่าง,และ{(อาจเป็นสิ่งที่เกี่ยวข้องกับระบบของ SE) ที่ทำลายรหัสเพราะตัวละครถือว่าเป็นตัวแปร ฉันหวังว่ามันจะไม่มี: Do[#!=Length[i~IntegerReverse~Range[2,i-2]~Cases~i]||Echo@i,{i,3,∞}]& แก้ไข:ยังมีอยู่ นี่คือลิงค์ของ Pastebin
JungHwan Min

1

Pyth, 21 19 18 ไบต์

.V3IqQlf_IjbTr2tbb

สิ่งนี้ควรทำงานในทางทฤษฎี มันทำงานได้อย่างถูกต้องหากฉันแทนที่ลูปที่ไม่มีขีด จำกัด สำหรับอันใดอัน จำกัด (เช่นJQFbr3 50*`bqJlf_IjbTr2tb3 ถึง 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 นาทีเพื่อให้โปรแกรมหมดเวลาก่อนที่จะเห็นผลลัพธ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.