이것이 회문이라는 것을 알았습니까?
음수가 아닌 정수 또는 숫자를 나타내는 문자열을 입력 하십시오.
출력
수의 두 가지 속성을 나타내는 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])
은 입력이 회문인지 확인합니다. 그렇지 않은 경우에는 취할 a
A는 부분, 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
}