시작이 끝과 같습니까?


36

작업

이 도전에서, 당신의 임무는 입력 문자열의 첫 문자와 마지막 문자가 같은지 여부에 따라 문자열을 가져 와서 참 또는 거짓 값을 출력하는 프로그램이나 함수를 작성하는 것입니다.

입력

합리적인 방법으로 입력을받을 수 있습니다. 그러나 입력이 사전 정의 된 변수에 있다고 가정하는 것은 허용되지 않습니다. 파일, 콘솔, 명령 행, 입력 필드 등에서 읽거나 함수 인수로 입력하는 것이 허용됩니다.

산출

결과를 변수에 할당하는 것을 제외하고는 합리적인 형식으로 출력 할 수 있습니다. 파일, 콘솔, 명령 행, 모달 박스, 함수 return명령문 등에 쓸 수 있습니다.

추가 규칙

  • 입력 값도 비어있을 수 있으며, 잘못된 값을 반환해야합니다.

  • 단일 문자 입력 문자열은 확실한 결과를 가져야합니다.

  • 프로그램은 대소 문자를 구분해야합니다. helloH잘못된 값을 출력해야합니다.

  • 단일 Truthy 값과 단일 Falsey 값만 가질 수 있습니다. 예를 들어, false입력 문자열 및 0다른 입력 문자열을 Falsey 값으로 출력 할 수 없습니다.

  • 표준 허점 은 허용되지 않습니다.

테스트 사례

Input    ->    Output

"10h01"        Truthy
"Nothing"      Falsey
"Acccca"       Falsey
"wow!"         Falsey
"wow"          Truthy
"H"            Truthy
""             Falsey

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!


입력에 어떤 문자가 나타날 수 있습니까? 인쇄 가능한 ASCII?
Martin Ender

@MartinEnder 인쇄 가능한 ASCII. 비록 그것이 중요하지 않다고 생각합니다.
Arjun

물론 중요합니다. 일부 언어는 비 ASCII 문자 또는 null 바이트를 처리 할 수없고 정규 표현식에서 인쇄 가능한 ASCII 문자를와 일치시킬 수 .있지만 줄 바꿈과 일치하지 않습니다. 일반적으로 문자열 태그를 사용하는 경우 입력에 표시 할 문자를 정확하게 지정하십시오.
Martin Ender

@MartinEnder 좋아. 앞으로 돌볼 것입니다.
Arjun

제안 된 테스트 사례 :AbAb => false
caird coinheringaahing

답변:



17

파이썬 3 , 23 바이트

s=input()
s[0]!=s[-1]<e

출력은 종료 코드를 통해 이루어 지므로 0 (성공)은 정확하고 1 (실패)은 거짓입니다. 경우 허용하는 바이트를 저장할 수 있습니다.

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

작동 원리

경우 우선, s는 빈 문자열, s[0]올릴 것이다 IndexError를 실패 할 프로그램을 일으키는.

비어를 들어 첫 번째와 마지막 문자가 동일한 경우, s[0]!=s[-1]로 평가됩니다 거짓 프로그램이 종료 너무 깨끗하게 즉시.

마지막으로, 문자가 다르면 True로s[0]!=s[-1] 평가되어 비교 가 수행됩니다. e 가 정의되어 있지 않기 때문에 NameError가 발생 합니다.s[-1]<e

Python 2와의 하위 호환성이 필요하지 않은 경우

s[0]!=s[-1]<3

문자열을 정수와 비교하면 TypeError 가 발생하기 때문에 작동합니다 .


람다와 함께 1 바이트 저장
OldBunny2800

1
예, 일반 함수는 바이트를 절약합니다. 종료 코드를 통한 출력은 확립 된 합의이지만 기능에 대한 비 오류 / 오류는 아닙니다. 내 답변에서 제안서와 연결되었습니다.
데니스

파이썬 REPL을 사용하는 것은 어떻습니까?
OldBunny2800

나는 그것이 도움이되지 않는다고 생각합니다. 여전히 종료 코드가 아닙니다.
데니스

9

자바 스크립트, 19 바이트

a=>a.endsWith(a[0])

와. endsWithString 객체 의 메서드 가 있다는 것을 몰랐습니다 . 좋은! :)
Arjun

내가 어떻게 잊었 endsWith()습니까?! 나는 그것을 사용할 기회를 기다리고 있었다.
Shaggy

7

Mathematica, 15 바이트

#&@@#===Last@#&

문자 배열을 취합니다. 입력이 비어 있지만 무시할 수 있으면 오류가 발생합니다.


4
===빈 사건 을 다루는 사실을 발견하는 좋은 직업 :)
Greg Martin



7

C ++, 39 바이트

[](auto s){return s[0]&&s[0]==s.back();}

전체 프로그램 :

#include <string>
#include <iostream>

using namespace std;

int main()
{
    string t = "";
    auto f = [](auto s){return s[0]&&s[0]==s.back();};
    cout << f(t);
}

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


1
나는 (I 일반적으로 C를 사용) C ++에서 최고의 아니지만, 당신의 경우 변경 될 수 있습니다 s[0]*s두 바이트 각을 저장할을?
MD XF

1
@MDXF는 C 유형 배열에서만 작동합니다.
Johan du Toit


6

자바, 81 77 바이트

  • -4 바이트, 감사합니다 @KevinCruijssen

온라인 시도

boolean f(String s){int l=s.length();return l>0&&s.charAt(l-1)==s.charAt(0);}
  • 반환 true그들은 그렇지 않으면 동일한 있다면 false, false빈 문자열

배열 버전, 60 바이트

boolean f(char[]s){int l=s.length;return l>0&&s[0]==s[l-1];}

왜 int 대신에 오랫동안?
corvus_192

@ corvus_192 유니 코드 문자는 1-6 바이트 일 수 있습니다.
Khaled.K

두 문자의 차이는 최대 Charcter.MAX_VALUE - Character.MIN_VALUE65535 일 수 있습니다.
corvus_192

@ corvus_192 알 겠어요, 이제 고
쳤어요

1
@KevinCruijssen 마지막으로 s.charAt(l-1)==s.charAt(0)두 바이트를 절약합니다.
JollyJoker


5

brainfuck , 43 바이트

+>,[<,[>[->+<<->],]]<[[-]-<]-[----->+<]>--.

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

설명

메인 루프는 [>[->+<<->],]입니다. 각 반복 후에 현재 위치의 오른쪽에있는 셀이 문자열의 첫 번째 바이트이고 왼쪽에있는 셀은 가장 최근에 처리 된 문자와 첫 번째 문자의 차이입니다. <[[-]-<]0이 아닌 경우 최종 결과를 -1로 변환하고 나머지는 -1과 0을 각각 48과 49 ( "0"및 "1")로 변환합니다.


5

하스켈 , 21 바이트

ca를 가져와 a String를 반환합니다 Bool.

c s=take 1s==[last s]

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

  • 빈 문자열이 아닌 경우 16 바이트 일 수 있습니다 c s=s!!0==last s.
  • take 1s비어 s있지 않은 경우 를 제외 하고 첫 번째 요소 인 목록을 제공합니다 s.이 경우에도 비어 있습니다.
  • last s 빈 문자열에서 오류가 발생하지만 Haskell의 게으름은 저장합니다. 단일 요소가있는 문자열은 요소를 평가하지 않고 항상 빈 문자열과 다릅니다.

5

MATL, 5 바이트

&=PO)

MATL Online 에서 사용해보십시오 !

설명

       % Implicitly grab input as a string (of length N)
&=     % Perform an element-wise equality check yielding an N x N matrix
P      % Flip this matrix up-down
O)     % Get the last value in the matrix (column-major ordering)
       % Implicitly display the result

빈 입력 문자열을 처리 해야하는 경우 다음 (8 바이트)과 같은 것이 작동합니다.

&=POwhO)

이 솔루션은 단순히 0N x N 행렬의 앞에 a 를 추가 하여 빈 입력의 경우 행렬이 0 x 0일 때 여전히 0값을 얻습니다.0)

MATL Online 에서 사용해보십시오


매우 영리한 접근법!
Luis Mendo

또한 5 바이트 : 5L)d~.
Sanchises

2
내 의견이나 대답이 빈 입력을 처리하지 않습니다. 이것은 의견에서 논쟁의 여지가 있다고 주장 되었으므로이 요구 사항이 변경 될 것으로 기대합니다. 그러나이 항목은 유효하지 않습니다.
Sanchises

1
(물론 tn?&=PO)}F빈 입력을 처리 할 수 있습니다 . 더 효율적인 방법이 있는지 확실하지 않습니다)
Sanchises


4

APL (Dyalog) , 4 바이트

⊃⌽=⊃

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

설명

  =                     Compare
                       The first element of the right argument with
                       The right argument reversed
                        This will return an array of the length of the reversed argument. Each element in the resulting array will be either 0 or 1 depending on whether the element at that position of the reversed argument equals the first element of the original right argument
                        So with argument 'abcda', we compare 'a' with each character in 'adcba' which results in the array 1 0 0 0 1
                       From this result, pick the first element.

이것이 빈 문자열에서 작동하는 이유입니다. 빈 문자열에 적용 하면 공백이 반환됩니다 . 그러나 빈 문자열을 되 돌리면 여전히 빈 문자열이 반환되므로 빈 문자열을 비어 있지 않은 문자열 (이 경우 ) 과 비교 하면 빈 숫자 벡터가 생성됩니다. 그리고 빈 숫자 형 벡터에 적용 하면가 반환 0됩니다. 따라서 빈 문자열을 전달하면을 반환합니다 0.


이것은 실제로 멋진 답변이지만 설명이 옳지 않습니다. (⊃⌽)=⊃또는에 맞을 ⊢/=⊃것이지만 둘 다 올바른 결과를 제공하지는 않습니다. 대신 ⌽=⊃반전 된 문자열을 첫 번째 문자와 비교 한 다음 첫 번째 요소를 선택합니다. 문자열이 비어있는 경우, (강제)의 첫 번째 요소가있는 빈 부울 목록을 제공합니다 빈 문자열에 공백을 비교 끝 입니다 0빈 문자열에 대한 정답을 -. 정식 ⊃⊃=⌽이기 때문에 당신의 표현은 동등합니다 =.
Adám

@ Adám 설명에서 실수를 볼 수 있도록 도와 주셔서 감사합니다.
Kritixi Lithos

천만에요. 이제 당신의 메모가 정확하지 않습니다. ⊃⌽=⊃와 동일하지 않습니다 (⊃⌽)=⊃. 첫 번째 요소와 마지막 요소가 아닌 모든 요소를 ​​비교하기 때문에 더 비쌉니다. 또한 OP 대신 문자열 대신 숫자를 사용하면 작동하지 않습니다.
Adám

The first argument reversedThe right argument reversed
Adám

왜 이것이 빈 문자열에서 작동하는지 설명하고 싶을 수도 있습니다.
Adám

4

자바, 52 43 바이트

s->!s.isEmpty()&&s.endsWith(""+s.charAt(0))

그것이 작동하게하려면 이것을 람다를 "go"로 만드는 다음과 같은 함수에 공급하십시오 :

private static boolean f(Function<String, Boolean> func, String value) {
  return func.apply(value);
}

1
당신이 사용하는 9 개 문자 면도 할 수 있습니다 s.endsWith(""+s.charAt(0))대신s.charAt(0)==s.charAt(s.length()-1)
SpaceBison

s->""!=s&&s.endsWith(""+s.charAt(0))
JollyJoker

1
작동하지 않는 @JollyJoker : new String()람다에 먹이 십시오. 예외가 발생합니다. 여기서는 참조 의미론이 작동하지 않습니다.

2
@KevinCruijssen 빈 문자열에 대한 charAt (0)에 대한 범위를 벗어난 예외를 피하기 위해 &&의 단락 효과가 필요합니다
PunPun1000

4

루비, 26 24 바이트

@philomory 덕분에 2 바이트를 절약했습니다 !

->e{!!e[0]>0&&e[0]==e[-1]}

codegolf의 첫 번째 게시물-))


1
PPCG에 오신 것을 환영합니다!
마틴 엔더

1
PPCG에 오신 것을 환영합니다! 좋은 첫 골프. 미래에 행운을 빕니다!
Arjun

1
비어 e[0]&&e[0]==e[-1]있으면 nil 이기 때문에을 수행하여 4 바이트를 절약 할 수 있습니다. 사실, 생각해 보면, 그것은 거짓이지만 비교가 반환하는 것과 같은 거짓이 아니기 때문에 좋지 않습니다. 여전히 추가 한 후에도 여전히 2자를 저장합니다. ee[0]nil!!
철학

3

PHP> = 7.1, 23 바이트

1이 같고 문자가 다른 경우 아무것도 인쇄하지 않습니다.

<?=$argn[0]==$argn[-1];

3

스위프트, 57 바이트

var s=readLine()!,a=Array(s.characters);a[0]==a.last ?1:0

코드를 편집했습니다.
Leena 2016 년

PPCG에 오신 것을 환영합니다! a.last필요한 공간이 있습니까?
HyperNeutrino

a.last 주위에 대괄호를 추가하거나 a.last 뒤에 공백을 추가 할 수 있습니다
Leena

3

C #, 38 30 바이트

s=>s!=""&&s[0]==s[s.Length-1];

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


1
길이를 확인하는 대신와 s비교하십시오 "". 또한 ?:-Operator 가 필요하지 않습니다 . 사용 &&하는 결과는 동일합니다.
raznagul

@ raznagul 좋은 장소 감사합니다, 그것이 그것이 현재 잘 작동하는지 확인할 수 없으므로 희망적으로 작동합니다! 또한 &같은 효과가 없을까요?
TheLethalCoder

@ TheLeathalCoder : 아니요 &작동하지 않습니다. 와 &&제 발현이 확인되지 않은 첫번째 식은 거짓이면. &초를 사용 하면 표현식의 유효성이 항상 검사되고 IndexOutOfRangeException빈 문자열 테스트 사례에서 실패합니다 .
raznagul

@ raznagul 아 그래 ... 뇌 방귀.
TheLethalCoder

아마도 조금 늦었지만 s.Last()대신 사용하면 5 바이트를 절약 할 수 있습니다.s[s.Length-1]
Bojan B

3

R, 40 바이트

function(x)x>""&&rev(y<-charToRaw(x))==y

-2 바이트를위한 Nitrodon에게 감사합니다.

-8 바이트의 MickyT에게 감사드립니다.

테스트:

f=function(x)x>""&&rev(y<-charToRaw(x))==y
test <- c("10h01", "Nothing", "Acccca", "wow!", "wow", "H", "")
sapply(test, f)
all(sapply(test, f) == c(T, F, F, F, T, T, F))

산출:

> f=function(x)x>""&&rev(y<-charToRaw(x))==y
> test <- c("10h01", "Nothing", "Acccca", "wow!", "wow", "H", "")
> sapply(test, f)
  10h01 Nothing  Acccca    wow!     wow       H         
   TRUE   FALSE   FALSE   FALSE    TRUE    TRUE   FALSE 
> all(sapply(test, f) == c(T, F, F, F, T, T, F))
[1] TRUE

2
을 사용하여 하나의 괄호 세트를 제거 할 수 있습니다 rev(y<-el(strsplit(x,"")))==y.
Nitrodon

1
명명되지 않은 함수도 사용할 수 있으므로f=
MickyT

1
charToRaw를 사용하여 비교를 위해 문자열을 분할 할 수 있습니다function(x)x>""&&rev(y<-charToRaw(x))==y
MickyT

3

> <> , 39 33 바이트

 2i&01. >~&-?v1v
  i:1+?!^01. >0>n;

> <>를 사용하고 코드 골프를하는 것은 이번이 처음이므로 유용한 제안을 부탁드립니다.

코드는 세 가지 기본 섹션에 있습니다.

2i&01. Pushes an arbitrary number (2 in this case, this causes an empty string to print 0) onto the stack and puts the input's first character in the register.

>i:1+?!^01. Main loop. Pushes the next character onto the stack. If the string has been read completely, then go to the last section

>~&-?v1v
     >0>n;  Compare the first and last characters. Print 1 if they're the same, 0 if not

여보세요! PPCG에 오신 것을 환영합니다! 좋은 첫 골프! 미래에 행운을 빕니다! :)
Arjun

3

Google 스프레드 시트, 33 바이트

셀로부터 입력을 받아 [A1]출력한다 1truthy 입력 및 0falsey 입력.

=(A1<>"")*Exact(Left(A1),Right(A1

사용자가 수식 텍스트를 입력하고 Enter 키를 눌러 해당 셀을 나가 자마자 Google 스프레드 시트에서 자동으로이를 수정 하므로 괄호 안에 들어 Exact(있고 Right(닫히지 않습니다.

산출

GS 버전


Excel 버전이 중요합니까? 2013 년 내 사본에서는 그렇게 사용할 수 없기 때문에 실패 &합니다. 또한 A=a사실로 간주 됩니다. 내가 얻을 수있는 가장 짧은 것은 38 바이트 =AND(EXACT(LEFT(A1),RIGHT(A1)),A1<>"")또는 대안 =IFERROR(CODE(A1)=CODE(RIGHT(A1)),1=0)입니다.
엔지니어 토스트

나는 엑셀 온라인 (16.0.9222.5051)에서 그것을 시도하고 반환 TRUE을 위해 어떤 오류가 아닌 입력. ( 스크린 샷 ) 모든 테스트 사례에 대해 사본에서 작동합니까? ExcelGuy는이 대답을 하는 것과 같은 이유로 위의 광산 같은 끝까지.
엔지니어 토스트

1
@EngineerToast 당신은 완전히 정확 합니다. 바이너리와 명령문 *대신 대신 사용해야 &했지만 여전히 "A"="a"간과 된 문제 가 남아 있습니다. 이 모든 것들과 약간의 구문 수정으로 인해 =EXACT(LEFT(A1),RIGHT(A1))*(A1<>"")35로 나아 갔지만 언어를 Google 스프레드 시트로 전환했습니다.이 Exact문장 에서 터미널을 이중 괄호로 묶어 =(A1<>"")*Exact(Left(A1),Right(A133 바이트를 렌더링 할 수있었습니다.
Taylor Scott

3

아르 자형, 50 43 41 40 64

@ niczky12 및 @Giuseppe 덕분에 호출 가능한 함수를위한 41 바이트의 두 번째 솔루션-x = ""에 대해 수정 됨

r=function(x,y=utf8ToInt(x))ifelse(x=="","FALSE",(y==rev(y))[1])

첫 번째는 50 바이트이지만 챌린지는 아닙니다.

function(x){charToRaw(x)[1]==rev(charToRaw(x))[1]}

당신은 대체 할 수 charToRawutf8ToInt생산가 NA문자열이 비어있을 때이야.
niczky12

{}함수 본문 주위의 중괄호를 제거 할 수도 있습니다 .
Giuseppe

(y==rev(y))[1]바이트가 더 짧을 것 같습니다
Giuseppe

이 과제는 하나의 Truthy와 하나의 Falsey 값만 사용하면되지만 NA빈 문자열 은 생성하지만을 생성 FALSE합니다 "ab". 온라인으로 사용해보십시오! .
Ørjan Johansen

@ ØrjanJohansen 귀하의 의견에 감사드립니다. "ab"는 FALSE를 제공해서는 안됩니까?
Riccardo Camon

2

옥타브, 16 바이트

@(s)s(1)==s(end)

문자열 s을 입력으로 사용하고 첫 번째 s(1)요소를 마지막 요소와 비교합니다 s(end).

이 수 @(s)s(1)-s(end)는 스왑 OK 인 경우 true/falsefalse/true.


2

GNU grep , 12 바이트

^(.)(.*\1)?$

확장 또는 PCRE 모드에서 실행하십시오.

이것이 속임수로 간주되는지 모르겠습니다.


빈 문자열을 처리합니까?
박수

@ConfusedMr_C 그래, 빈 문자열 ⇒ 코드 1
eush77

2

자바 스크립트, 20 바이트

f=시작 부분에 추가 하고처럼 호출하십시오 f(arg).

_=>_[0]==_.slice(-1)

f=_=>_[0]==_.slice(-1)

i.oninput = e => o.innerHTML = f(i.value);
<input id=i><pre id=o></pre>

설명

이 함수는 인수를 _받습니다. 함수 본문 에서 ( 번째 인덱스) _[0]==_.slice(-1)의 첫 번째 요소가 마지막 요소와 같은지 확인하고 적절한 또는 부울을 반환합니다 ._0truefalse



2

공통 리스프, 83 74 61 58 바이트

원본 : 83 바이트

저는 Common Lisp를 배우기 시작했습니다. 그래서 퍼터를 드라이빙 레인지로 데려 오는 것 같습니다. 내가 볼 수없는 일종의 재귀 매크로 마법사 또는 배열 조작이 있어야합니다.

이것은 문자열을 입력으로 받아들이는 익명 함수입니다.

(lambda (s) (let ((n (- (length s) 1))) (when (> n 0) (eq (char s 0) (char s n)))))

확인 됨 :

(lambda (s)
  (let ((n (- (length s) 1)))
    (when (> n 0)
      (eq (char s 0)
          (char s n)))))

더 매끄러운 솔루션을보고 싶습니다!

개정 1:74 바이트

표준 라이브러리 기능을 좋아해야합니다!

추한:

(lambda (s) (when (> (length s) 0) (eq (elt s 0) (elt (reverse s) 0))))

예쁜:

(lambda (s)
  (when (> (length s) 0)
    (eq (elt s 0)
        (elt (reverse s) 0))))

개정판 1.5 : 61 바이트

공백!

(lambda(s)(when(>(length s)0)(eq(elt s 0)(elt(reverse s)0))))

개정 2 : 58 바이트

추한:

(lambda(s)(and(>(length s)0)(not(mismatch s(reverse s)))))

예쁜:

(lambda (s)
  (and (> (length s) 0)
       (not (mismatch s (reverse s)))))

지금은 여기까지입니다! 나는 이미 똑똑하다고 생각합니다.


1
제안 if대신 and하고 (mismatch(reverse s)s)대신(mismatch s(reverse s))
ceilingcat

2

AWK, 29 34 바이트

다음 옵션을 사용하여 AWK를 호출해야하기 때문에 약간 부정 행위 일 수 있습니다.

`-F ''`

GNU Awk에서는 긴 형식 동의어를 사용할 수 있습니다.

`--field-separator=''`

그래서 이것을 설명하기 위해 총 5 바이트를 추가했습니다.

추한:

NR==1{a=$1}END{print(a==$NF)}

예쁜:

NR == 1
{
    a = $1
}

END
{
    print(a == $NF)
}

1
규칙은 플래그 / 옵션을 사용할 수 있지만 바이트 수에 포함시켜야한다고 생각합니다.
Ørjan Johansen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.