ตัวเลขที่ไม่ใช่ Palindromic


16

จำนวนอย่างเคร่งครัดไม่ใช่ palindromic N เป็นตัวเลขที่ไม่ได้เป็น palindrome ในใด ๆฐาน (ฐาน 2 ถึง N-2) หมายเลขเหล่านี้มีการระบุไว้ในOEIS

ยกตัวอย่างเช่นตัวเลข19ในฐาน 2,3,4,5,6 ... 17: 10011, 201, 103, 34, ...31 12ไม่มีการรับรองเหล่านี้คือ palindromic ดังนั้นตัวเลขจึงไม่ใช่แบบ palindromic

สำหรับความท้าทายนี้คุณจะต้องส่งคืนค่าที่เป็นจริงหากจำนวนนั้นไม่ใช่ค่า palindromic มิฉะนั้นจะเป็นค่าที่ผิดพลาด

  • คุณอาจถือว่าจำนวนที่ส่งให้คุณมากกว่าหรือเท่ากับ 0
  • โปรแกรมของคุณควรใช้งานได้กับค่าสูงสุดถึงขนาดจำนวนเต็มของภาษาของคุณ

กรณีทดสอบ:

Truthy:

0
1
2
3
4
6
11
19
47
53
79
103
389
997
1459

Falsy:

5
7
8
9
10
13
16
43
48
61
62
101
113
211
1361

นี่คือเพื่อให้คำตอบของคุณสั้นที่สุด!


2
ใช่ฉันพลาดไป อย่างไรก็ตามคำตอบสำหรับความท้าทายนี้สามารถนำกลับมาใช้ใหม่ได้โดยเพิ่มการresult < n-2ตรวจสอบกับพวกเขาฉันคิดว่า
FryAmTheEggman

คำตอบ:


6

C, 82 ไบต์

p(n,a,b,c,r){c=0;for(b=1;++b<n-2;c+=r==n)for(a=n,r=0;a>0;a/=b)r=r*b+a%b;return!c;}

ไอเดียมัน!

คำอธิบาย

รหัสนี้ย้อนกลับnในฐานbและร้านค้าในr:

for(a=n,r=0;a>0;a/=b)r=r*b+a%b;

ลูปด้านนอกจะนับจำนวนของฐานจาก2ถึงn-1ซึ่งnเป็นพาลินโดรม

หากnไม่ใช่ palindromic การนับจะเป็น1( nต้องเป็น palindrome ในฐานn-1)


มี upvote เพราะฉันไม่สามารถ upvote SILOS ตอบสองครั้ง
Rohan Jhunjhunwala

3
@RohanJhunjhunwala เหตุผลที่ดีที่สุดในการโหวต
Leun Nun

@LeakyNun แต่เป็นส่วนหนึ่งของการลงคะแนนแบบต่อเนื่อง ...
Erik the Outgolfer


5

SILOS , 206 ไบต์

GOTO e
lbld
c - 1
GOTO c
lble
readIO 
n = i
i - 3
b = i
b + 1
GOTO f
lbla
a = n
r = 0
lblb
m = a
m % b
r * b
r + m
a / b
if a b
r - n
r |
if r d
lblc
c + 1
i - 1
b - 1
lblf
if i a
c / c
c - 1
c |
printInt c

ลองออนไลน์!

พอร์ตคำตอบของฉันใน CC


มีสอง upvote หนึ่งคำตอบสำหรับแต่ละคำตอบเพราะฉันไม่สามารถ upvote สองครั้งนี้
Rohan Jhunjhunwala

pheraps ถ้าคุณสามารถเขียนรหัสโดยใช้คำสั่งแยกหนึ่งคำว่า "|" คุณสามารถใช้ประโยชน์ในการเขียน 1 อักขระแทน 2 ตัวอักษรของ \ 13 \ 10 เป็น \ n เป็นคำสั่งแยก
RosLuP

@RosLuP ฉันใช้ \ r \ n เป็น \ n ตอนนี้หรือไม่
Leun Nun

ฉันไม่รู้ใน sys ของคุณ แต่ฉันคัดลอกโปรแกรมข้างต้นใน notepad กว่าบันทึก: ความยาวของไฟล์นั้นคือ 241 ไม่ใช่ 206 ดังนั้นที่นี่ฉันคิดว่า \ n เป็น 2 ตัวอักษรไม่ใช่ 1
RosLuP

@RosLuP แผ่นจดบันทึกของคุณแปลง EOL เป็น \ r \ n โดยอัตโนมัติ
Leun Nun


3

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

bRµ⁼"US<3

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมดตรวจสอบกรณีทดสอบทั้งหมด

มันทำงานอย่างไร

bRµ⁼"US<3  Main link. Argument: n

 R         Range; yield [1, ..., n].
b          Convert n to all bases between 1 and n, yielding a 2D array A>
  µ        Begin a new, monadic chain. Argument: A
     U     Upend; reverse the 1D arrays in A.
   ⁼"      Zipwith equal; yield 1 for each array that matches its inverse.
      S    Sum; add the resulting Booleans.
           If n > 1, the sum will be 2 if n is strictly non-palindromic (it is only
           a palindrome in bases 1 and n - 1), and greater than 2 otherwise.
           For 0 and 1, the sum will be 0 (sum of the empty array) and 1 (only a
           palindrome in base 1); both are less than 2.
       <3  Compare the sum with 3, yielding the desired Boolean.

+1 <3สำหรับ
Leun Nun

2

Mathematica, 58 43 ไบต์

!Or@@Table[#==#~IntegerReverse~i,{i,2,#-2}]&

TIL ที่#~IntegerReverse~iย้อนกลับตัวเลขของอินพุตเมื่อเขียนใน base i


2

Pyth, 12 10 ไบต์

บันทึกสองไบต์ด้วยกลอุบายของ Dennis

>3sm_IjQdS

ลองออนไลน์!

คำอธิบาย:

         S (Q)   Get all the bases we need by building a list from 1 to Q
   m               For all bases d in the bases list:
      jQd           cast Q to base d as a list
    _I              and check to see if the list is palindromic (invariant on reversal)
                  Compile all the results back into a list
  s                Sum the results (a shorter form of any), gives 3 or more for palindromics 
                    (2 is the usual because of bases 1 and Q-1)
>3                 And verify that the sum is greater than three to get non-palindromics


1

Perl6, 110 72 65

my &f={?all(map {{.reverse ne$_}(@(.polymod: $^a xx*))},2..$_-2)}

ไม่สามารถใช้ฐานได้เนื่องจากมันหักสำหรับฐานใด ๆ ที่สูงกว่า 36

ความพยายามครั้งก่อน

my &a={$^a??flat($a%$^b,a($a div$b,$b))!!()};my &f=-> $n {?all(map {.reverse ne$_ given @(a($n,$_))},2..$n-2)}
my &f=->\n {?all(map {.reverse ne$_ given @(n.polymod: $_ xx*)},2..n-2)}

ฉันจัดการเพื่อให้ได้ถึง 59 bytes ด้วยความพยายามครั้งแรกของฉัน คำแนะนำการใช้งาน.polymodกับรายการตัวหาร 1362.polymod: 226 xx *
แบรดกิลเบิร์ต b2gills

ทำ 53 นั่นและคำใบ้อื่น{...}และ-> $_ {...}เกือบจะเหมือนกันทุกประการ นอกจากนี้คุณไม่จำเป็นต้องเก็บแลมบ์ดาเอาไว้เพื่อที่คุณจะได้ลบออกmy &f =ได้
แบรดกิลเบิร์ต b2gills

1

Brachylogขนาด 14 ไบต์

¬{⟦₆bk∋;?ḃ₍.↔}

ลองออนไลน์!

เอาต์พุตผ่านเพรดิเคตที่สำเร็จหรือล้มเหลวซึ่งพิมพ์true.หรือfalse.หากรันเป็นโปรแกรม

¬{           }    It cannot be shown that
        ?         the input
       ; ḃ₍       in a base
      ∋           which is an element of
  ⟦₆              the range from 1 to the input - 1
    b             without its first element
     k            or its last element
           .      can be unified with both the output variable
            ↔     and its reverse.

0

C, 77 ไบต์

h(n,b,k,z){for(z=0,k=n;z+=k%b,k/=b;z*=b);return b+3>n?1:z==n?0:h(n,++b,0,0);}

การออกกำลังกายแบบเรียกซ้ำ ... ฉันเปลี่ยน (b + 2> = n) ด้วย (b + 3> n) โดยไม่มีการดีบัก ...

main()
{int  v[]={0,1,2,3, 4, 6,11,19,47,53,79,103,389,997,1459},
  n[]={5,7,8,9,10,13,16,43,48,61,62,101,113,211,1361}, m;
    // 0 1 2 3  4  5  6  7  8  9 10  11  12  13   14
 for(m=0; m<15; ++m)
    printf("%u=%u\n", v[m], h(v[m],2,0,0));
 for(m=0; m<15; ++m)
    printf("%u=%u\n", n[m], h(n[m],2,0,0));
}

/*
 77
 0=1
 1=1
 2=1
 3=1
 4=1
 6=1
 11=1
 19=1
 47=1
 53=1
 79=1
 103=1
 389=1
 997=1
 1459=1
 5=0
 7=0
 8=0
 9=0
 10=0
 13=0
 16=0
 43=0
 48=0
 61=0
 62=0
 101=0
 113=0
 211=0
 1361=0
*/

1
อย่าทำลายโพสต์ของคุณ
DJMcMayhem

0

C, 129 ไบต์

f(n,b,k,j){int a[99];for(b=2;b+2<n;++b){for(j=0,k=n;a[j]=k%b,k/=b;++j);for(;k<j&&a[k]==a[j];++k,--j);if(k>=j)return 0;}return 1;}

0

PHP, 68 ไบต์

for($b=$argn;--$b;)strrev($c=base_convert($argn,10,$b))!=$c?:die(1);

รับข้อมูลจาก STDIN ออกด้วย1เพื่อความเท็จ0เพื่อความจริง -Rทำงานด้วย


ถ้าฉันเห็นว่าถูกต้องคุณจะสามารถแก้ปัญหาได้ n <39
JörgHülsermann

0

APL (NARS), ตัวอักษร 47, ไบต์ 94

{⍵≤4:1⋄∼∨/{⍵≡⌽⍵}¨{⍵{(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}w}¨2..¯2+w←⍵}

โดยที่{(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}จะเป็นการแปลงฟังก์ชันหนึ่งโอเมก้าบวกในเลขฐานแอลฟาและ{⍵≡⌽⍵}จะเป็นฟังก์ชันตรวจสอบ palindrome ... test:

  f←{⍵≤4:1⋄∼∨/{⍵≡⌽⍵}¨{⍵{(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}w}¨2..¯2+w←⍵}
  f¨0 1 2 3 4 6 11 19 47 53 79 103 389 997 1459
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
  f¨5 7 8 9 10 13 16 43 48 61 62 101 113 211 1361
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.