Zahlen, die Palindrome in N Basen sind

10

Geben Sie bei einer nicht negativen Ganzzahl n >= 0für immer die Folge von Ganzzahlen aus x_i >= 3, die Palindrome in genau nverschiedenen Basen sind b, in denen sich die Basis befinden kann 2 <= b <= x_i-2.

Dies ist im Grunde die Umkehrung von OEIS A126071 , wo Sie ausgeben, welche Indizes in dieser Sequenz den Wert haben n. Es ist ein bisschen anders, weil ich es so geändert habe, dass Sie Basen ignorieren b = x_i-1, x_i, x_i+1, da die Ergebnisse für diese Basen immer gleich sind (die Werte sind immer Palindrome oder immer nicht). Auch der Offset ist unterschiedlich.

x_iauf Zahlen beschränkt >= 3für jeden , so dass der erste Ausdruck des Ergebnisses nist A037183 .

Beachten Sie, dass das Ausgabeformat flexibel ist, die Zahlen jedoch gut abgegrenzt werden sollten.

Beispiele:

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 ...

Also für n=0, erhalten Sie die Ausgabe dieser Herausforderung (ab 3), da Sie Zahlen erhalten , die Palindrome in sind n=0Basen.

Für n=1, 5ist ein Palindrom in der Basis 2, und das ist die einzige Basis , 2 <= b <= (5-2)dass es in ein Palindrom ist. 7Ist ein Palindrom in der Basis 2, und das ist die einzige Basis , 2 <= b <= (7-2)dass es in ein Palindrom ist. Etc.


Wenn Ihre Sprache keine unendliche Ausgabe unterstützt, können Sie eine andere Ganzzahl zals Eingabe verwenden und die ersten zElemente der Sequenz oder alle Elemente kleiner als ausgeben z. Was auch immer du bevorzugst. Bitte geben Sie an, welche Sie in Ihrer Antwort verwendet haben, wenn dies der Fall ist.

verbunden

mbomb007
quelle
Um 100% klar zu sein, müssen die ausgegebenen Zahlen Palindrome in exakten nBasen sein, nicht noder mehr Basen?
Mike Bufardeci
1
Ja. Das ist richtig. Die Vereinigung aller Sequenzen für alle Werte von nist also die Menge der ganzen Zahlen >=3.
mbomb007

Antworten:

2

Gelee , 18 Bytes

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

Probieren Sie es online aus! - Der Online-Interpreter hat eine Zeitüberschreitung von 60 Sekunden und löscht dann die Ausgabe (es sei denn, er verfügt über eine zwischengespeicherte Kopie). Offline druckt er nacheinander.

Wie?

Wertet Zahlen von noben aus und druckt sie aus, wenn sie in der Reihenfolge vorliegen. Beachten Sie, dass die erste Zahl in einer Ausgabe größer ist als nsonst, da der Bereich von sonst bnicht groß genug ist, sodass der Prozess nicht mit Seed versehen werden muss 3. Beachten Sie auch, dass die Anzahl der Palindrome von Basis 2 bis einschließlich x i -2 nur zwei weniger beträgt als die Anzahl der Palindrome von Basis 1 bis 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.
Jonathan Allan
quelle
4

Mathematica, 80 71 Bytes

Vielen Dank an JungHwan Min für das Speichern von 9 Bytes!

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

( ist das Drei-Byte-Zeichen U + 221E.) Reine Funktion, die eine nichtnegative Ganzzahl als Eingabe verwendet. i~IntegerReverse~Range[2,i-2]erstellt eine Liste der Umkehrungen der Zahl iin allen Basen von 2bis i-2; Length[...~Cases~i]zählt dann, wie viele dieser Umkehrungen wieder gleich sind i. #!=...||Echo@iWird stillschweigend angehalten, wenn diese Anzahl nicht der Eingabe entspricht, und wird wiederholt, iwenn sie der Eingabe entspricht. Diese Prozedur ist in eine einfache Endlosschleife eingebettet.

Greg Martin
quelle
Cleverer Einsatz der Kurzschlussauswertung ! Der Echo@iBegriff wird nicht ausgewertet, wenn das erste Argument lautet True. Kann ich dies zu Tipps zum Golfen in Mathematica hinzufügen ?
JungHwan Min
Übrigens Do[...,{i,3,∞}]ist kürzer als (i=2;While[1>0,... ++i ...])und Caseswürde stattdessen funktionieren Position. -9 Bytes:Do[#!=Length[i~IntegerReverse~Range[2,i-2]~Cases~i]||Echo@i,{i,3,∞}]&
JungHwan Min
Ja, bitte fügen Sie den Tipp hinzu! - Ich bin überrascht, dass er noch nicht vorhanden ist, da ich ihn definitiv irgendwo von dieser Seite gelernt habe ...
Greg Martin
Casesfunktioniert gut anstelle von Position. Aber ich habe die DoKonstruktion getestet und sie funktioniert bei mir nicht, aber ich habe keine Ahnung warum nicht. Aus irgendeinem Grund werden die iWerte nicht eingefügt - ich erhalte Fehler wie "Range specification in Range[2,-2+i] does not have appropriate bounds.". (Und das Einfügen eines Print[i];Verifiziertes, dem ikeine Werte zugewiesen wurden.) Irgendwelche Ideen?
Greg Martin
Anscheinend gab es U + 200B und U + 200C im Code zwischen ,und {(wahrscheinlich etwas mit dem SE-System zu tun). Das bricht den Code, weil die Zeichen als Variable betrachtet werden. Ich hoffe das hat es nicht: Do[#!=Length[i~IntegerReverse~Range[2,i-2]~Cases~i]||Echo@i,{i,3,∞}]& EDIT: Hat es noch. Hier ist ein Pastebin-Link
JungHwan Min
1

Pyth, 21 19 18 Bytes

.V3IqQlf_IjbTr2tbb

Dies sollte theoretisch funktionieren. Es funktioniert einwandfrei, wenn ich die Endlosschleife durch eine endliche ersetze (z. B. JQFbr3 50*`bqJlf_IjbTr2tb3 bis 50, versuchen Sie es hier ), aber der Pyth-Interpreter weiß nicht, wann oder wie er eine buchstäblich unendliche Ausgabe drucken soll.

Erläuterung:

.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
quelle
1

Perl 6 , 90 Bytes

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

Versuch es

-> \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
}
Brad Gilbert b2gills
quelle
1

Bash + Unix-Dienstprogramme, 134 132 Byte

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
}

Probieren Sie es online aus!

Die Eingabe wird als Argument übergeben. Die Ausgabe ist auf stdout.

Wenn Sie dies normal ausführen, wird jeweils eine Nummer in der unendlichen Reihenfolge angezeigt.

Wenn Sie dies in TIO versuchen, wird so viel von der Ausgabe angezeigt, wie sie generiert hat, wenn nach 60 Sekunden eine Zeitüberschreitung auftritt.

Mitchell Spector
quelle
0

Python 2, 132 Bytes

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

Probieren Sie es online aus

Dem TIO-Programm wurde eine Fußzeile hinzugefügt, sodass Sie nicht 1 Minute warten müssen, bis das Programm eine Zeitüberschreitung aufweist, bevor die Ausgabe angezeigt wird.

mbomb007
quelle