나는 회문이다. 당신은?


103

이 질문을하기 위해 몇 번의 이전 시도 가 있었지만이 사이트의 현대 표준에 부합하지는 않습니다. 당 메타에 대한 논의 , 나는 우리의 현대 규칙 세트에서 공정 경쟁을 허용하는 방법으로 그것을 다시 게시하고 있습니다.

배경

문자열의 반대 문자열 자체와 동일합니다 즉, "이전 버전과 같은 전달과를 읽고"하는 문자열입니다. 우리는 여기서 "편리한 회문"에 대해 이야기하는 것이 아니라 엄격한 문자 별 반전을 말합니다. 예를 들어 ()()회문은 아니지만 그렇습니다 ())(.

작업

문자열 S (또는 해당 언어의 해당 항목)를 입력으로 사용하고 하나의 출력 Q (선택한 유형)가 있는 프로그램 또는 함수를 작성 하십시오. 당신이 사용할 수있는 합리적인 수단을 입력을 받아 출력을 제공합니다.

  • 입력 S 가 회 문인 경우, 출력 Q 는 값 A를 가져야합니다 (즉, 회문 S 와 동일 함 ).
  • 입력 S 가 회문이 아닌 경우, 출력 Q 는 값 B를 가져야합니다 (비 회문 S에 대해 동일 함 ).
  • AB 는 서로 구별되어야합니다.

즉, 모든 회문을 하나의 값에 매핑하고 모든 비 회문을 다른 값에 매핑하십시오.

또한 작성하는 프로그램이나 함수는 회문 자체 여야합니다 (즉, 소스 코드는 회 문식이어야 함). 이는 문제입니다.

설명

  • 하지만 truefalse대한 분명한 선택입니다 와 B는 , 당신은 당신의 "회문이다"에 대한 임의의 두 가지 값을 사용할 수 있습니다 및 부울 일 필요는 없다 출력, "회문 아니다".
  • 여기서 캐릭터 레벨 에서 문자열 반전을 정의하고 있습니다. éé프로그램이 UTF-8 인코딩 후 팔린 트로의 옥텟 시퀀스가 ​​아니더라도 프로그램이 UTF-8 또는 Latin-1로 인코딩되는지 여부에 관계없이 palindromic입니다.
  • 그러나 프로그램에 ASCII가 아닌 문자가 포함되어 있어도 ASCII 입력에 대해서만 작동하면됩니다. 특히 입력 S 에는 인쇄 가능한 ASCII 문자 만 포함됩니다 (공백은 포함하지만 개행은 포함하지 않음). 무엇보다도 이것은 입력을 문자 시퀀스가 ​​아닌 바이트 시퀀스로 취급하더라도 프로그램이 스펙을 준수 할 가능성이 높다는 것을 의미합니다 (언어의 I / O 인코딩이 매우 이상 하지 않은 경우 ). 따라서 이전 글 머리 기호에서 회문 정의는 프로그램이 올바른 형식인지 확인하는 경우에만 중요합니다.
  • 독창적이지만 주석이나 문자열 리터럴로 프로그램의 절반을 숨기는 것은 합법적입니다. 창의성이 아니라 길이에 따라 점수를 받고 있으므로 프로그램이 회문이되도록 "지루한"방법을 사용하십시오. 물론, 당신은 길이에 점수를 받고 있기 때문에, 아무것도하지 않는 프로그램의 일부는 점수를 떨어 뜨릴 것이므로, 프로그램의 두 부분을 모두 사용할 수 있다면 그것을 관리 할 수 ​​있다면 도움이 될 것입니다 .
  • 승리 기준은 바이트 단위로 측정되므로 프로그램이 점수를 매길 수 있도록 작성된 인코딩을 지정해야합니다 (많은 경우에 어떤 인코딩을 사용하고 있는지는 분명합니다).

승리 기준

프로그램은 캐릭터 레벨에서 회문이되어야하지만, 누가이기는지를보기 위해 바이트를 사용하고 있습니다. 특히, 프로그램이 짧을수록 바이트 단위로 측정할수록 좋습니다. 이것은 도전입니다. 제출 (특히 동일한 언어로 제출)을 비교하려면 제출 헤더에 프로그램의 바이트 수 (바이트 수와 다른 경우 문자 수)를 추가하십시오.


12
누군가 () ()가 회문이 아닌 이유를 설명해 주시겠습니까?
Emilio M Bumachar

58
교체 시도 @EmilioMBumachar (a)함께 b. 가 abab회문은? 아니요,이어야 abba합니다. 그렇다면 ()()회문도 아닙니다. 그럴 것 ())(입니다.
DLosc

7
프로그램을 회문으로 만들기 위해 주석을 완전히 사용하는 솔루션은 나에게 허점처럼 보입니다. (
kennytm

15
@kennytm 언어에 구애받지 않는 방식으로 객관적으로이를 수행 할 수있는 만족스러운 방법이 없기 때문에 허용하지 않는 것이 더 나쁩니다. (설명은 무엇입니까? 사용하지 않는 반은 버려지는 문자열 리터럴에 넣는 것은 어떻습니까? 단순히 도달 할 수없는 완벽하게 실행 가능한 코드를 가질 수있는 2D 언어는 어떻습니까?)
Martin Ender

답변:


137

Brachylog (2), Brachylog의 코드 페이지에서 3 바이트

I↔I

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

이것은 표준 입력을 통한 입력 (상수에 대한 Brachylog의 구문 사용, 즉 문자열은 큰 따옴표로 묶음)을 사용하고 표준 출력을 통해 출력하는 전체 프로그램입니다. 출력은 true.palindromic 입력 및 false.non-palindromic 입력을위한 것입니다.

이 프로그램은 palindromic 일뿐만 아니라 왼쪽 / 오른쪽 (어쩌면 일부 글꼴에서는 위 / 아래) 미러 대칭도 있습니다.

설명

Brachylog에서 대문자는 프로그램에서 동일한 값을 갖는 점을 나타냅니다. 이것은 프로그램의 한 부분에서 다른 부분으로 정보를 전달하기 위해 전기 회로와 거의 비슷합니다. 이것의 한 가지 결과는 같은 대문자 쌍 사이에 명령을 묶으면 명령의 입력과 출력이 동일하다는 것을 효과적으로 주장하는 것입니다. Brachylog는 암시 적으로 입력을 받기 때문에이 경우 명령 입력이 프로그램 입력과 동일하다고 주장합니다. 이 프로그램에서 우리는 command (이 경우 문자열)을 반대로 사용합니다 . 따라서 프로그램은 입력이 앞뒤로 동일하다는 것을 효과적으로 주장합니다.

Brachylog의 전체 프로그램 (함수와 달리) false.은 프로그램의 모든 어설 션을 한 번에 올바르게 만들 수있는 방법이 없거나 프로그램 true.의 어설 션이 서로 호환 가능한 경우 부울을 반환합니다 . 우리는 여기에 단 하나의 주장이 있습니다 – 입력을 되돌려도 변경되지 않습니다 – 프로그램은 회문 검사기 역할을합니다.


49
그리고 180도 회전 대칭, 그것은 아름답습니다.
ATaco

7
... 및 수직 및 수평 축을 따라 대칭 :-)
Luis Mendo

13
@SteakOverflow Brachylog는 사용자 정의 코드 페이지 를 사용하므로 해당 문자는 UTF-8로 인코딩되지 않습니다.
DJMcMayhem

4
이 프로그램에 투표하기 위해이 커뮤니티에 가입했습니다. 와.
Bill Michell 2012

4
@ATaco 왼쪽 / 오른쪽 및 위 / 아래 대칭의 조합은 180도 회전 대칭을 의미합니다. ;)
Eric Duminil

55

Pyth , 3 바이트

_I_

True 또는 False를 반환합니다 .

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

작동 원리

  _  Reverse the input.
_I   Invariant-reverse; test if the reversed input is equal to its reverse.

1
왜 최종이 필요한 _가요?
busukxuan

34
@busukxuan "추가로, 여러분이 작성하는 프로그램이나 기능은 회문 그 자체 여야합니다"
isaacg

1
왜 그렇게 많은 투표를했는지 ...이 대답은 그렇게 어렵지 않은 것 같습니다 ...?
ghosts_in_the_code

1
나는 그렇게 생각한다. 여전히 불공평 한 것 같습니다. 어떤 질문에는 대답하기 위해 많은 노력을 기울여야하고 다른 질문은 훨씬 더 쉽습니다. 여전히 지불금은 동일합니다. Btw 또한 upvoted했습니다 : P
ghosts_in_the_code

4
@ghosts_in_the_code 100+에 대한 내 대답 중 하나만 실제로 작성하기가 어려웠지만 몇 일 동안 보냈던 답은 소수였습니다. 결국, 그것은 모두 고르게 ...
Dennis


33

젤리 , 5 바이트

ḂŒ
ŒḂ

1 또는 0을 반환합니다 . 첫 번째 줄은 실행되지 않은 도우미 링크이고 두 번째 줄은 회문 테스트입니다.

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


와우, 최근 추가.
Jonathan Allan

6
네, 18 시간 밖에되지 않았습니다.
데니스

인코딩을 지정하지 않았습니다. UTF-8을 추측하고 있습니까?
Brian Minton 2012

1
@BrianMinton 아니요, UTF-8의 경우 11 바이트입니다. 젤리는 이 코드 페이지를 사용 합니다 .
Dennis

@Dennis, 정보 주셔서 감사합니다.
Brian Minton 2012


23

매스 매 티카, 23 바이트

QemordnilaP;PalindromeQ

별로 흥미롭지는 않지만 완전성을 위해 ...

위의 내용은 을 해결하는 내장 기능으로 CompoundExpression평가됩니다 PalindromeQ. QemordnilaP는 정의되지 않은 식별자이며로 인해 무시 ;됩니다.


21

하스켈, 87 85 44 34 바이트

p=(==)<*>reverse--esrever>*<)==(=p

설명 : ((->) a)와, 실용적 (감사 @faubiguy)의 인스턴스 <*>로 정의

(<*>) f g x = f x (g x)

따라서 논증을 대체함으로써 이것이 왜 효과가 있는지 알 수 있습니다.


1
코드를 설명 할 수 있습니까?
bli

1
@bli 이후의 모든 --것은 주석입니다.
theonlygusti

3
@theonlygusti Haskell은 절반 밖에 도움이되지 않는 충분히 외계인입니다.
Yakk

@Yakk 그것은 조합의 일종이다 (==), reverseid기능 ( id신원 기능이다).
tbodt

<*><$><*>id
faubi


17

PHP, 55 바이트

<?=strrev($s=$_GET[s])==$s;#;s$==)]s[TEG_$=s$(verrts=?<

게다가 언어의 이름은 회문이므로 보너스 포인트입니다!


부적절한 솔루션.
Martijn

16

MATL , 7 바이트

tPX=XPt

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

[1; 1] 회문 입력 및 [0; 그렇지 않으면 0].

t       % duplicate the input
P       % reverse the second string
X=      % check the two strings are exactly equal (returns 0 or 1)
XP      % flip array (does nothing)
t       % duplicate the answer, giving either [1;1] or [0;0]
        % (implicit) convert to string and display

15

, 12 11 바이트

이제 코멘트가 없습니다!

x:RVaQaVR:x

입력을 명령 행 인수로 사용합니다. 1회문에 0대한 출력 , 비 회문에 대한 출력 . 온라인으로 사용해보십시오!

우리가하고 싶은 일의 핵심은 RVaQa다음과 같습니다 reverse(a) string-equals a. 코드 x:RVaQa는이 결과를 계산하여에 할당합니다 x. 그런 다음 VR:x의 값을 x변수에 할당합니다 VR. 이 지정은 프로그램의 마지막 명령문이므로 해당 값도 자동 인쇄됩니다. 짜잔!

정의되지 않은 동작을 사용하는 이전의 흥미로운 버전은 개정 내역을 참조하십시오.



9

R, 111103 바이트

all((s<-el(strsplit(scan(,"",,,"\n"),"")))==rev(s))#))s(ver==)))"",)"n\",,,"",(nacs(tilpsrts(le-<s((lla

가장 독창적 인 대답은 아닙니다. R# 의 주석 문자입니다

언 골프 드 :

all((s<-el(strsplit(scan(,"",,,"\n"),"")))==rev(s))
#
))s(ver==)))"",)"n\",,,"",(nacs(tilpsrts(le-<s((lla

함수 scan덕분에 from에서 문자열 이 원시 바이트로 변환됩니다 charToRaw. 이 원시 바이트는 rev()함수 의 대응 바이트와 하나씩 비교 되며 인수의 순서를 반대로합니다. 이 부분의 출력은 TRUE및 / 또는 의 벡터입니다 FALSE. 함수는 출력 모든 요소가 있다면
allTRUETRUE

여기서, "\n"에서 scan기능 둘 이상의 단어를 입력하기 위해 필요한 것이다.

이전 답변 (바이트 단위), 81 바이트

function(s)all((s=charToRaw(s))==rev(s))#))s(ver==))s(waRoTr‌​ahc=s((lla)s(noitcnu‌​f

- 24 바이트 감사합니다 @rturnbull .


charToRaw할당하기 전에 변환을 수행 s하고 sep인수를 scan다음 과 같이 설정하는 방법을 변경 하여 몇 바이트를 절약 할 수 있습니다 .all((s<-charToRaw(scan(,"",,,"\n")))==rev(s))#))s(ver==)))"n\",,,"",(nacs(waRoTrahc-<s((lla
rturnbull

(이 방법은 ééUTF-8 인코딩으로 입력 하는 경우 에는 작동하지 않지만 문제 의 규칙을 위반한다고 생각하지 않습니다.)
rturnbull

@rturnbull : 입력 주셔서 감사합니다! 실제로 인코딩 으로 테스트 éé했습니다 latin1.
Frédéric

테스트는 문자 단위로 수행해야하므로 현재 프로그램이 규칙을 위반한다고 생각합니다.
프레데릭

이전 버전이 규칙을 위반하는지 잘 모르겠습니다. OP 상태 : "다른 것들과 마찬가지로, 이는 입력을 문자 시퀀스가 ​​아닌 바이트 시퀀스로 취급하더라도 프로그램이 스펙을 준수 할 가능성이 높습니다 (언어의 I / O 인코딩이 매우 이상하지 않은 경우). "
rturnbull

8

RProgN , 11 바이트

~]S.E E.S]~

이 중 절반은 모든 무거운 작업을 수행하며 RProgN의 편의를 통해 후반은 No-op입니다.

~]S.E E.S]~
~           # Treat the word as a Zero Space Segment
 ]          # Duplicate the top of the stack
  S.        # Reverse the top of the stack
    E       # Compare if these values are equal
      E.S]~ # A no-op, because the ~ is at the end of the word, not the start.

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


8

레티 나 , 53 바이트

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

$
¶$`
O$^`\G.
»
D`
M$`^.+$
$+.^`$M
`D
»
.G\`^$O
`$¶
$

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

나는 이것이 아직 최적이 아니라고 확신합니다 ( »라인은 특히 낭비 적이며 한 문자를 제외하고 회 문식 인 45 바이트 솔루션이 있습니다). 그러나 그것이 시작이라고 생각합니다.


8

GNU sed , 64 59 + 1 (r 플래그) = 60 바이트 UTF-8

주석 섹션을 사용하여 코드를 회문으로 만들지 않는 sed answer를 생각해내는 데 시간이 걸렸습니다. 대신 c코드의 첫 번째 절반을 역순으로 인쇄 하는 명령을 사용하지만 이 명령에 도달하지 않았는지 확인합니다.

:;s:^(.)(.*)\1$:\2:;t;/../c1
d
1c/../;t;:2\:$1\)*.().(^:s;:

1입력 문자열이 회문이 아닌 경우 스크립트가 인쇄 합니다 (오류가 있다고 생각합니다). 문자열이 회 문인 경우 출력 이 제공 되지 않습니다 (성공적으로 종료되는 것으로 생각).

예제를 실행하십시오 : 또는 온라인으로 사용해보십시오!

me@LCARS:/PPCG$ sed -rf palindrome_source.sed <<< "level"
me@LCARS:/PPCG$ sed -rf palindrome_source.sed <<< "game"
1

설명:

:                              # start loop
s:^(.)(.*)\1$:\2:              # delete first and last char, if they are the same
t                              # repeat if 's' was successful
/../c1                         # if at least 2 chars are left, print 1. 'c' reads
                               #till EOL, so next command must be on a new line.
d                              # delete pattern space. This line must be a
                               #palindrome itself, and must end the script.
1c/../;t;:2\:$1\)*.().(^:s;:   # (skipped) print first half of code in reverse
                               #order. Everything after 'c' is treated as string.

1
TIO는 sed를 지원합니다. -r작동하지 않지만 BASH로 모든 것을 래핑 할 수 있습니다. 온라인으로 사용해보십시오!
라일리

@Riley TIO에서 머리글과 바닥 글을 잘 사용했습니다. 감사합니다. 이전 해결 방법은 코드를 -e를 사용하여 인수 목록으로 옮기는 것이었지만 훨씬 더 좋습니다. 나는 그것이 고치기를 기다리고 있었지만, 이렇게 할 필요는 없다.
seshoumara

7

Alice , 19 바이트

/@.nzRoi\
\ioRzn.@/

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

Jabberwocky회 문용으로 인쇄 하고 비회 문용으로 인쇄 하지 않습니다. 임의의 UTF-8 입력에서 작동합니다.

설명

이것은 문자열 처리 작업이므로 Alice는이를 해결하기 위해 서수 모드에서 작동해야합니다. 이는 명령 포인터가 대각선으로 움직여야한다는 의미이므로 IP가 위 아래로 튀어 오를 수 있도록 최소한 두 줄이 필요합니다. 이러한 프로그램의 줄 바꿈은 회 문의 중간 특성을 배치하기에 좋은 위치에 있습니다. 즉, 두 번째 줄은 첫 번째 줄의 반대 여야합니다. 그러나 우리는 각 줄마다 다른 모든 문자를 실행하기 때문에 줄 길이가 홀수인지 확인하면 코드의 반대 부분이 자체 간격에 깔끔하게 맞습니다. 전혀 사용되지 않는 유일한 문자는 백 슬래시이지만 임의적이므로 프로그램을 멋지게 대칭으로 보이도록 선택했습니다.

어쨌든 실제 관련 코드는 다음과 같습니다.

/ . z o
 i R n @

왼쪽에서 오른쪽으로 지그재그로 실행됩니다.

/   Reflect the IP southeast, enter Ordinal mode.
i   Read all input as a single string.
.   Duplicate the input.
R   Reverse the copy.
z   Pop the reverse Y and the original X. If X contains Y, drop everything
    up to its first occurrence. Since we know that X and Y are the same length,
    Y can only be contained in X if X=Y, which means that X is a palindrome.
    So this will result in an empty string for palindromes and in the non-empty
    input for non-palindromes.
n   Logical NOT. Replaces non-empty strings with "", and empty strings with
    "Jabberwocky", the "default" truthy string.
o   Output the result.
@   Terminate the program.

6

하스켈 , 34 바이트

f=(==)=<<reverse--esrever<<=)==(=f

온라인으로 사용해보십시오! 로 전화 하거나 f "some string", True또는을 반환합니다 False.

=<<함수 의 연산자는과 같이 작동 f=<<g = \s -> f (g s) s하므로 코드는와 같습니다. f s=s==reverse s방금 알았 듯이 동일한 바이트 수를 얻습니다.


주석이없는 버전 : (49 바이트)

e x y=x/=y
p=e=<<reverse
esrever<<=e=p
y=/x=y x e

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

로 전화하십시오 p "some string". 이 출력 False주어진 문자열이있는 경우 입니다 회문, 그리고 True그것의 경우 하지 회문.

설명:

주석 버전으로 시작하고 주석을 새 줄로 바꿔서이 주석이없는 회문을 찾았습니다.

p=(==)=<<reverse
esrever<<=)==(=p

괄호가 일치하지 않기 때문에 두 번째 줄은 실패하므로 제거해야합니다. e평등을 검사 하는 기능 이 있다면

p=e=<<reverse
esrever<<=e=p

두 번째 <<=인수 esrever를 사용 e하고 함수를 반환 하는 infix-operator 를 정의하는 두 번째 줄로 컴파일 합니다 p.

e평등 함수로 정의하기 위해서는 일반적으로 e=(==)쓰지만 )==(=e다시 컴파일하지는 않습니다. 대신 우리는 명시 적으로 두 개의 인수를 가지고에 전달할 수있다 ==: e x y=x==y. 이제 역 코드 y==x=y x e==연산자를 컴파일하지만 재정 의하여 정의 e x y=x==y에 실패합니다. 그러나 부등식 연산자로 전환 /=하면 역 정의가 원래 연산자를 방해하지 않는 연산자 가 y=/x=y x e되어 정의합니다 .=//=


5

OIL , 178 바이트

입력을 읽고, 분해하고, 문자열 다음에 주소를 알기 위해 길이에 증분 및 감소를 통해 천천히 길이를 추가하고, 코드의 다른 부분으로 이동 (중간), 밴드 방향을 반대로 바꿈 다시 원래 문자열과 같은지 확인합니다. TL; DR : 평소와 같이 그것은 고통입니다.

40문자열이 회문이 아닌 경우 출력 합니다 0.

5
0
12
0
40
1
40
2
1
40
34
10
2
3
22
16
9
2
8
35
6
11
6
37

3
4
4
27
26
0
1
10
1

40
13
2
31
04

1
01
1
0
62
72
4
4
3

73
6
11
6
53
8
2
9
61
22
3
2
01
43
04
1
2
04
1
04
0
21
0
5

2
깔끔한 언어! :)
DLosc

5

자바 스크립트, 64 바이트

f=s=>s==[...s].reverse().join``//``nioj.)(esrever.]s...[==s>=s=f

f문자열로 함수 호출

f("abba") // returns true
f("abab") // returns false

소스 코드는 회문이 아닙니다!
seshoumara 2012

@seshoumara 코드 업데이트
Prasanth Bendra

이제 괜찮습니다. 문자열이 회문이 아닌 경우 완료를 위해 반환 값을 언급 할 수 있습니다.
seshoumara 2012

@apsillers는 답변을 편집 해 주셔서 감사합니다.
Prasanth Bendra

함수가 없습니다. f코드에서 화살표 함수를 변수에 할당하지 않아 호출 할 수 없습니다.
spex

5

Japt , 7 2 바이트

êê

그것을 실행

오래된 해결책 :

U¥UwU¥U

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

설명

U¥UwU¥U
U¥        U is the input, ¥ is a shortcut for == 
  Uw      w is a reverse function.
    U¥U   This calculates U == U (always true), but the result is ignored
          because w does not look at its arguments.

닫는 괄호 (또는 공백)에 도달하지 않으면 Japt가 함수를 이스케이프하지 않습니다.

다시 쓸 수 있습니다 : U¥Uw(U¥U)U¥UwU==Uw. Japt에서는 함수의 시작과 끝에 남은 괄호가 자동으로 삽입됩니다.


w인수를 사용하지 않는 함수 인 경우를 제외하고는 모든 것이 의미 가 있습니다 U. 그것은 같은 것 U.reverse()입니까?
DLosc

@DLosc 맞습니다. U와 같은 방식으로 반전 됩니다 U.reverse().
Oliver

4

Bash + Unix 유틸리티, 49 바이트

[ "$1" = "`rev<<<$1`" ] # ] "`1$<<<ver`" = "1$" [

입력은 인수로 전달됩니다.

회 문의 경우 출력이 결과 코드로 반환됩니다-회 문의 경우 0, 회문이 아닌 경우 1

어쩌면 누군가가 코드 자체를 회문으로 만들기 위해 주석에 의존하지 않고 더 잘 할 수 있습니다.

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


[[ $1 = `rev<<<$1` ]]더 짧습니다. (Bash [[구문, 따옴표 필요 없음)
Arthur2e5

2
@ Arthur2e5 나는 당신의 제안을 시도했지만 해결책에 rev<<<$1조차도 따옴표 가 필요 하다고 생각합니다 [[...]]. 입력 문자열 '[$]]$['(palindrome)로 테스트하십시오 . 따옴표가 추가되어 작동하게되면 솔루션의 길이가 내 솔루션과 동일합니다.
Mitchell Spector 2019

대단하다! ==in 의 RHS가 유사한 패턴 [[으로 해석되는 것을 잊었습니다 case.
Arthur2e5

@ Arthur2e5 나는 여전히 이것을 더 짧게 만드는 영리한 방법이 있다고 생각합니다.
Mitchell Spector 2019

입력에 줄 바꿈이 있으면 여전히 작동합니까? rev 대신 tac이 필요하다고 생각합니다.
b_jonas

4

> <>, 11 바이트

{=?!;
;!?={

여기 사용해보십시오!

유효한 회문에서 "\ nsomething smelly ..."를 반환하며, 유효하지 않은 회문에서 출력되지 않습니다. 회문을 스택에 놓습니다.


입력이 이미 스택에 필요하면 이것을 스 니펫으로 만듭니다. 이 과제에는 스 니펫이 아닌 프로그램이나 기능이 필요합니다.
pppery

4

자바 - 171 169 160 바이트

int q(String s){return s.equals(new StringBuffer(s).reverse().toString())?1:2;}//};2:1?))(gnirtSot.)(esrever.)s(reffuBgnirtS wen(slauqe.s nruter{)s gnirtS(q tni

마지막 의견은 회문으로 만드는 것입니다. P(alindrome)입력이 회문 일 N(ot)때 와 없을 때를 반환 합니다 .

언 골프 버전 :

int q(String s) {
    return s.equals(new StringBuffer(s).reverse().toString()) ? 'P' : 'N';
}//};'N':'P'?))(gnirtSot.)(esrever.)s(reffuBgnirtS wen(slauqe.s nruter{)s gnirtS(q tni

@DLosc 덕분에 2 바이트 절약

잘못된 바이트 수를 지적한 @Olivier Grégoire에게 감사드립니다! 지금 수정


ints 대신 s를 반환하여 일부 바이트를 절약 할 수 있다고 생각합니다 char.
DLosc

바이트 수를 확인하는 방법을 모르지만 161이 아닌 160 바이트가 있습니다.
Olivier Grégoire

더 많은 바이트를 저장하기 위해 다른 문자에 'P'대해 80 및 78을 반환하여 2 바이트를 절약 할 수 있습니다 'N'.
Selim

1
new StringBuffer(s).reverse()+""new StringBuffer(s).reverse().toString()
Selim

1
당신이 int대신에 어떤 이유를 반환 bool합니까?
코드 InChaos

4

자바 8, 92 90 바이트

이것은 댓글 버전입니다. 문자열에 반전이 포함되어 있으면 회문 ( true)이고 그렇지 않으면 ( )이 아닙니다 false.

s->s.contains(new StringBuffer(s).reverse())//))(esrever.)s(reffuBgnirtS wen(sniatnoc.s>-s

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

최신 정보

  • -2 [18-04-05] 포함하도록 전환되었습니다. @Kevin Cruijssen 에게 감사합니다 !
  • -2 [17-02-20] 삭제 ;년대
  • -16 [17-02-22] 자동 변환

이 코드는 람다식이 아닙니다.
Jakob

@ 야콥 나는 생각했다. 람다를 사용한다면 선행 및 후행 줄 바꿈을 원할 것입니다. (나는 티오 링크를 추가)
NonlinearFruit

예, 제 의견은 라인 주석이 제출을 단순한 람다 식 이상으로 만들어 람다 솔루션으로 유효하지 않다는 것입니다. 지금은 걱정하지 마십시오. 아마 합의를 모으기 위해 메타 포스트를 만들 것입니다.
Jakob

@Jakob Lambda 솔루션은 때로는 외부 코드 가있을 수 있으므로 이것이 유효하다고 생각합니다. 그러나 판매하지 않으면 메타 게시물이 손상되지 않습니다.
NonlinearFruit

1
시간이 오래 걸렸지 만로 변경하여 2 바이트를 골프 수 있습니다 s->s.contains(new StringBuffer(s).reverse())//))(esrever.)s(reffuBgnirtS wen(sniatnoc.s>-s. 온라인으로 90 바이트를 시도하십시오 .
케빈 크루이 센

3

실제로 5 바이트

;R=R;

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

진실 출력은 [1]\n[1]이고 거짓 출력은 []\n[](두 출력 모두 \n에서 리터럴 개행을 나타냅니다).

설명:

;R=R;
;R=    duplicate input, reverse one copy, test equality (the main palindrome-testing part)
   R   range(1, x+1) - if palindrome, this pushes [1], else it pushes []
    ;  duplicate

왜 그냥하지 않는 ?
Leaky Nun

1
@LeakyNun 그것은 회문이어야합니다
caird coinheringaahing

3

C ++, 154 바이트

int m(){std::string g,p="";g=p;std::reverse(p.begin(),p.end());return g==p;}//};p==g nruter;))(dne.p,)(nigeb.p(esrever::dts;p=g;""=p,g gnirts::dts{)(m tni

나는 그 반대 진술이 비용이 많이 들었지만, 그것을 바꾸기 위해 할 수있는 일이 많이 있다고 상상할 수 없다. std :: 기호를 잘라낼 수 있으면 약 10자를 절약 할 수 있지만 "namespace std; 꽤 많이 있습니다.

C ++이 간결성을위한 것이 아니라고 가정합니다.


3

프롤로그, 44 바이트

p-->[]|[_]|[E],p,[E].%.]E[,p,]E[|]_[|][>--p

이것은 명확한 절 문법을 사용합니다. 실제로 전체 컨텍스트 프리 문법입니다.

p -->
      []            % the empty string
   |                % or
      [_]           % a one character string
   |                % or
      [E],          % one character, followed by
      p,            % a palindrome, followed by
      [E].          % that same character

용법:

?- phrase(p,"reliefpfeiler").
true 

?- phrase(p,"re").
false.

2

CJam, 13 바이트

l_W%=e#e=%W_l

설명:

l_W%=e#e=%W_l
l_            e#Read input twice
  W%          e#Reverse one input
    =         e#Test for equality
     e#e=%W_l e#Comment to be a palindrome

예:

> l_W%=e#e=%W_l
l_W%=e#e=%W_l
1

> l_W%=e#e=%W_l
Hi
0

> l_W%=e#e=%W_l
hh
1

l_W%#e#%W_l
aditsu

2

J, 15 바이트, 15 자

-:|.NB. .BN.|:-

회문이면 1을, 그렇지 않으면 0을 반환합니다.

산출:

   f '())('
1
   f 'nope'
0

설명:

-:    NB. "Match" verb, checks for equality
|.    NB. Reverses the string
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.