결코 홀수 또는 짝수 “첫 번째 숫자 와 마지막 숫자가

이것이 회문이라는 것을 알았습니까?


음수가 아닌 정수 또는 숫자를 나타내는 문자열을 입력 하십시오.

출력
수의 두 가지 속성을 나타내는 4 개 개의 가능한 출력 :

  • 회문인가요?
  • 까다로운 # 2

까다로운 # 2 속성
숫자가 회문이 아닌 경우이 속성은 “첫 번째 숫자 와 마지막 숫자가 같은 패리티를 갖습니까?”라는 질문에 대답합니다.
숫자가 회 문인 경우이 속성은 “첫 번째 숫자 와 중간 숫자가 같은 패리티를 갖습니까?” 라는 질문에 대답합니다 . 짝수 길이의 경우 가운데 숫자는 가운데 두 자리 중 하나입니다.

12345678-> False False
회문이 아니며 첫 번째와 마지막 숫자가 다른 패리티를 갖습니다.

12345679-> False True
회문이 아니며 첫 번째와 마지막 숫자가 동일한 패리티를 갖습니다.

12344321-> True False
그것은 회문이며 첫 번째 숫자 1과 가운데 숫자 4는 다른 패리티를 갖습니다.

123454321-> True True
이것은 회문이며 첫 번째 숫자 1과 가운데 숫자 5는 동일한 패리티를 갖습니다.

PS
출력 유형과 형식을 결정해야합니다. 4 개의 고유 한 값이 될 수 있습니다. 답에 언급하십시오.



답변

05AB1E, 15 , 14 13 바이트 (라일리 및 카루소 컴퓨팅에 감사)

ÐRQi2ä¨}ȹRÈQ

온라인으로 시도

회 문인 경우 대괄호와 함께 반환

패리티가 다르면 0으로, 동일하면 1로 리턴

Ð 입력 할 수 있도록 입력을 추가하십시오.

R 스택의 마지막 요소를 뒤집습니다

Q 동일한 지 확인하십시오 (두 개의 최상위 요소를 취하고 == 수행).

i if 문은 회문 인 경우에만 통과합니다.

2 숫자 2를 누릅니다

ä 입력을 2 개의 동일한 슬라이스로 분할

¨ 스플릿의 첫 번째 요소를 밉니다 (1264621 결과 1264).

} 경우 종료

È 마지막 요소가 짝수인지 확인하십시오.

¹ 첫 번째 입력을 다시 누릅니다

R 그 입력을 반대로

È 지금도 확인

Q 그 결과조차 동일하고 내재적으로 인쇄되는지 확인하십시오.


답변

PHP, 55 52 바이트

echo$p=strrev($n=$argn)==$n,$n-$n[$p*log($n,100)]&1;

STDIN에서 입력을받습니다. 로 실행하십시오 -R.

산출:

  • 10 회문과 같은 패리티
  • 11 회문과 다른 패리티를 위해
  • 0 비 회문 및 동일한 패리티
  • 1 비 회문과 다른 패리티

노트:

  • strlen($n)/2== log($n,10)/2==log($n,100)
  • 회 문인 경우 중간 자릿수 비교 $n[1*log($n,100)]
  • 그렇지 않은 경우 첫 번째 숫자 $n[0*log($n,100)]
  • …를 정수로 (<-가장 낮은 비트 <-마지막 숫자)

답변

젤리 , 16 14 바이트

DµŒḂṄHC×LĊị+ḢḂ

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

두 줄을 출력합니다 :

  • 1회문을 0위해
  • 0대한 까다로운 # 2 , 1하지 않는

설명

DµŒḂṄHC×LĊị+ḢḂ    Main link. Argument: n (number)
D                 Get the digits of n
 µ                Start a new monadic chain
  ŒḂ              Check if the digit array is a palindrome (1 if yes, 0 if no)
    Ṅ             Print the result with a newline
     H            Halve (0.5 if palindrome, 0 if not)
      C           Subtract from 1 (0.5 if palindrome, 1 if not)
       ×          Multiply by...
        L         ...length of array (length/2 if palindrome, length if not)
         Ċ        Round up
          ị       Take item at that index from the digits
           +      Add...
            Ḣ     ...first item of digits
             Ḃ    Result modulo 2

답변

파이썬 2 , 70 68 66 바이트

lambda n:(n==n[::-1],(ord(n[-1])+ord(n[(n==n[::-1])*len(n)/2]))&1)

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


답변

PowerShell , 114 99 바이트

param($n)((0,(($z=$n[0]%2)-eq$n[-1]%2)),(1,($z-eq$n[$n.length/2]%2)))[($n-eq-join$n[$n.length..0])]

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

@Sinusoid 덕분에 15 바이트가 절약되었습니다.

문자열로 입력합니다. 유형의 어레이 출력 (0|1) (True|False)와, 0“회문 없습니다”와 의미 1를 나타내는 “팔린 드롬”및 True패리티가 일치를 나타내는와 False달리.

이것은 의사 삼항을 사용하고 적절한 장소에 색인을 생성하여 수행됩니다 (a,b)[index]. 색인 ($n-eq-join$n[$n.length..0])은 입력이 회문인지 확인합니다. 그렇지 않은 경우에는 취할 aA는 부분, 0첫 번째 자리의 패리티 여부 결합 $n[0]이고 -eq마지막 숫자의 패리티를 연간 $n[-1]. 그렇지 않으면, 우리는 (첫 번째 숫자 의 패리티)가 중간 숫자 의 패리티 와 일치하는지 여부와 결합 된 b부분에 있습니다.1$z-eq$n[$n.length/2]

이전 "$($n[0])"에는 첫 번째 숫자를 정수로 올바르게 캐스트해야했습니다. $n[0]결과는 a char및 modulo 연산자 가 리터럴 값이 아닌 ASCII 값을 기반으로 %합병 char하는 반면 a string는 리터럴 값을 나타냅니다. 그러나 @Sinusoid를 사용 0,1,2,...,9하면 리터럴 값이 모두와 동일한 패리티를 가지 48,49,50,...,57므로 ASCII 값을 사용하면 여전히 동일한 결과를 얻을 수 있습니다.

해당 배열은 파이프 라인에 남아 있으며 출력은 암시 적입니다.


답변

VBA, 117 99 바이트

Titus 덕분에 18 바이트 절약

Sub p(s)
b=s
If s=StrReverse(s)Then r=2:b=Left(s,Len(s)/2+.1)
Debug.?r+(Left(s,1)-b And 1);
End Sub

한 번 포맷하면 크게 확장되지 않습니다.

Sub p(s)
    b = s
    If s = StrReverse(s) Then r = 2: b = Left(s, Len(s) / 2 + 0.1)
    Debug.Print r + (Left(s, 1) - b And 1);
End Sub

주어진 테스트 사례 결과는 다음과 같습니다.

s = 12345678     p(s) = 1 = False False
s = 12345679     p(s) = 0 = False True
s = 12344321     p(s) = 3 = True False
s = 123454321    p(s) = 2 = True True

답변

펄 6 , 48 바이트

{($/=.flip==$_),[==] .ords[0,($/??*/2!!*-1)]X%2}

시도 해봐

(True True) (True False) (False True)또는 결과(False False)

넓히는:

{                  # bare block lambda with implicit parameter 「$_」

  (
    $/ =           # store in 「$/」
    .flip == $_    # is 「$_」 equal backwards and forwards
  ),


  [==]             # reduce the following using &infix:<==> (are they equal)

    .ords\         # list of ordinals (short way to make 「$_」 indexable)
    [
      0,           # the first digit's ordinal
      (
        $/         # if the first test is True (palindrome)
        ??   * / 2 # get the value in the middle
        !!   * - 1 # else get the last value
      )
    ]
    X[%] 2         # cross those two values with 2 using the modulus operator
}