회문이 아닌 숫자


16

엄격 비 대칭 수 N이있는 회문 아닌 숫자 임의 염기 (염기 2 N-2). 이 번호는 OEIS에 나와 있습니다

예를 들어, 숫자 19베이스에 2,3,4,5,6- ... 17 : 10011, 201, 103, 34, 31, ... 12. 이 표현들 중 어느 것도 회문식이 아니므로, 그 숫자는 엄격하게 회문이 아닙니다.

이 문제를 해결 하려면 숫자가 회문이 아닌 경우 참 값을, 그렇지 않으면 거짓 값반환 해야 합니다 .

  • 전달 된 숫자가 0보다 크거나 같다고 가정 할 수 있습니다.
  • 프로그램은 언어의 정수 크기까지의 값으로 작동해야합니다.

테스트 사례 :

진실한 :

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

거짓 :

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;

외부 루프에서 염기의 수를 계산 2n-1있는 n회문이다.

n회문이 아닌 경우 , 개수는 1( n기본 회문이어야합니다 n-1).


내가 SILOS 답변을 두 번지지 할 수 없었기 때문에 투표하다
Rohan Jhunjhunwala

3
@RohanJhunjhunwala 이제까지 찬성하는 가장 좋은 이유.
Leaky Nun

@LeakyNun하지만 약간의 연속 투표 ...
Outgolfer Erik

5

파이썬 2, 71 바이트

n=input();b=1
while b<n-2:
 m=n;r=0;b+=1
 while m/(r!=n):r=r*b+m%b;m/=b

출력은 종료 코드 를 통해 이루어지며 , 여기서 0 은 진실이고 1 은 거짓입니다. Ideone에서 테스트하십시오 .


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

온라인으로 사용해보십시오!

내 대답의 포트 C 입니다.


나는이 두 번 upvote에 할 수 없기 때문에, 두 upvotes 각 답변에 대한 하나가
로한 Jhunjhunwala

하나의 분리 명령문을 "|"로 사용하여 코드를 작성할 수있는 경우 분리 문으로 \ n으로 \ 13 \ 10의 2 문자 대신 1 문자를 쓸 수 있습니다
RosLuP

@RosLuP 지금 \ r \ n을 \ n으로 사용하고 있습니까?
Leaky Nun

나는 당신의 sys에서 모르지만, 위의 프로그램을 메모장에 복사하여 저장하는 것보다 저장하십시오. 그 파일의 길이는 241이 아닌 241입니다. 따라서 여기에서 \ n은 2 개의 문자가 아닌 1 인 것 같습니다
RosLuP

@RosLuP 메모장이 자동으로 EOL을 \ r \ n으로 변환했습니다.
Leaky Nun

4

하스켈, 75 68 바이트

(a!c)b|a<1=c|x<-c*b+mod a b=div a b!x$b
f n=all((/=n).(n!0))[2..n-2]

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

2

매스 매 티카, 58 43 바이트

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

#~IntegerReverse~i기본 i로 쓸 때 입력의 숫자 를 반대로하는 TIL .


2

피스, 12 10 바이트

Dennis의 트릭으로 2 바이트를 절약했습니다.

>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

자바 스크립트 (ES6), 83 바이트

f=(n,i=n-2,g=n=>n<i?[n]:[...g(n/i|0),n%i])=>i<2||`${a=g(n)}`!=a.reverse()&&f(n,i-1)
<input type=number oninput=o.textContent=f(this.value);><pre id=o>


1

펄 6, 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 바이트로 줄였습니다. .polymod무한한 제수 목록과 함께 사용하십시오 . 1362.polymod: 226 xx *
Brad Gilbert b2gills

그 53과 다른 힌트를 {...}만들고 -> $_ {...}거의 똑같습니다. 또한을 제거 할 수 있도록 람다를 어디에도 저장할 필요가 없습니다 my &f =.
Brad Gilbert 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 + 3> n)으로 (b + 2> = 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örg Hülsermann

0

APL (NARS), 문자 47, 바이트 94

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

여기서 {(⍺⍴⍨⌊1+⍺⍟⍵)⊤⍵}숫자 기수 (α)의 함수 변환 한 포지티브 오메가 것 및 {⍵≡⌽⍵}기능 검사 회문 ... 테스트 할 것이다 :

  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.