n 번째 문자는 마지막 문자의 n 번째 문자와 동일합니까?


22

영감 은 시작이 끝과 같습니까?

문자열 s과 정수가 주어지면 th char in 이 end char in th 의 th 와 같은지에 n대한 진실 / 거짓을 출력합니다 .nsns

입력

비어 있지 않은 문자열과 정수 0 기반 인덱싱 또는 1 기반 인덱싱을 사용할 수 있습니다. 정수는 문자열을 기반으로 유효한 것으로 보장됩니다. 예를 들어 문자열이 "supercalifragalistic123"인 경우 정수는 1 기반 색인의 경우 1-23이고 0 기반 색인의 경우 0-22 일 수 있습니다. 그주의 사항 n의 절반 길이보다 클 수 있습니다 s.

입력은 인쇄 가능한 ASCII로 제한됩니다.

산출

nth 값 s이의 n마지막 값과 th 와 같은지 여부를 기반으로하는 참 / 거짓 값입니다 s.

마지막 문자는 0 기반 색인의 경우 위치 0에 있고 1 기반 색인의 경우 위치 1에 있습니다. 문자열을 반대와 비교하는 것으로 생각하십시오.

테스트 사례

0 인덱스

"1", 0         Truthy 1 == 1
"abc", 1       Truthy b == b
"aaaaaaa", 3   Truthy a == a
"[][]", 1      Falsey ] != [
"[][]", 0      Falsey [ != ]
"ppqqpq", 2    Truthy q == q
"ababab", 5    Falsey a != b
"12345", 0     Falsey 1 != 5
"letter", 1    Truthy e == e
"zxywv", 3     Falsey w != x

1- 색인

"1", 1         Truthy 1 == 1
"abc", 2       Truthy b == b
"aaaaaaa", 4   Truthy a == a
"[][]", 2      Falsey ] != [
"[][]", 1      Falsey [ != ]
"ppqqpq", 3    Truthy q == q
"ababab", 6    Falsey a != b
"12345", 1     Falsey 1 != 5
"letter", 2    Truthy e == e
"zxywv", 4     Falsey w != x


n코드 포인트로 받아 들일 수 있습니까? (brain-flak와 같은 난해한 언어의 경우)
DJMcMayhem

트윗 담아 가기
Stephen

답변:


11

젤리 , 5 4 바이트

=UƓị

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

젤리에는 더 짧은 대답이 없어야합니다. 프로그램은 비교, 반전 / 음화, 인덱스 호출 및 제어 흐름 바이트 ( Ɠ이 경우)를 필요로하므로 최대 4 바이트가 필요합니다.

작동 원리

 =UƓị 
       - (implicit) input string
 =     - equals (vectorizing by characters because a string is a charlist)
  U    - the reversed string
    ị  - get the element at the index of:
   Ɠ   - the input index

@ ais523 덕분에 -1 바이트 Ɠ


원본 게시물의 4 바이트 솔루션이 실패했습니다 :ịµU=
CalculatorFeline

Dyadic 대신 모나 딕하게 만들어서 4 바이트로 향상시킬 수 있습니다 (그리고 인수가 아닌 표준 입력에서 n 을 가져옴 ) : 온라인으로 사용해보십시오! 이 기술은 제어 흐름에서 바이트를 낭비하고 추가 바이트를 낭비 할 때 유용합니다. 1 바이트 ³Ɠ비용이 들지만 ³암시 적이며 더 많은 제어 흐름 유연성을 제공하기 때문입니다.

@ ais512 암묵적인 인수가 더 효율적인 경향이 있기 때문에 실제로는 대답에서 이전에 입력을 사용한 적이 없습니다.
fireflame241

14

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

s=>n=>s[n]==s.substr(~n,1)

또는

s=>n=>s[n]==s.slice(~n)[0]

이것은 거의 작동하지만 n == 0(왜냐하면 s.slice(-1,0) == "") 실패합니다 .

s=>n=>s[n]==s.slice(~n,-n)

@RickHitchcock이 지적한 또 다른 26 바이트 솔루션 :

s=>n=>s[n]==s[s.length+~n]

3
를 잘 사용 ~하면 결코 그렇게 할 수는 없습니다.
Stephen

10

MATL , 5 바이트

tP=w)

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

설명:

t   % Duplicate the input

Stack:
    ['ppqqpq' 'ppqqpq']

P   % Reverse the top element of the stack

Stack:
    ['ppqqpq' 'qpqqpp']

=   % Equals. Push an array of the indices that are equal

Stack:
    [[0 1 1 1 1 0]]

w   % Swap the top two elements

Stack:
    [[0 1 1 1 1 0], 3]

)   % Grab the a'th element of b 

1
매우 영리한 접근법!
Luis Mendo

3
트윗 담아 가기 그것은 당신에게서 오는 보완을 조용합니다 :)
DJMcMayhem

이제 우리는 젤리가이 xD를 이길 수 있는지를 봅니다
Stephen


5

05AB1E , 7 5 바이트

Adnan 덕분에 -2 바이트

ÂøsèË

온라인으로 사용해보십시오! 또는 모든 테스트를 시도하십시오

     # Add a reversed copy on top of the original string
 ø    # Zip
  sè  # Extract the nth element
    Ë # Check if they are equal

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


ÂøsèË2 바이트 절약
Adnan

@Adnan 감사합니다! 리버스 사본을 추가하는 1 바이트 방법이 있다는 것을 알았습니다. 라벨이 어떻게 표시되는지 기억할 수 없었습니다.
Riley

@ComradeSparklePony Adnan의 제안을 포함하도록 업데이트하는 것을 잊었습니다.
Riley


5

Alice , 24 바이트

/t.~e?/-mom
\I!RtI&1n;@/

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

입력은 한 줄의 문자열과 두 번째 줄의 숫자로 구성됩니다. 출력은 Jabberwocky문자가 동일하고 그렇지 않은 경우입니다.

설명

이 프로그램은 주로 순서 모드에 있으며 하나의 명령은 기본 모드에 있습니다. 선형화 된 프로그램은 다음과 같습니다.

I.ReI&1m;mt!~t?&-no

I  % Input first line
   % STACK: ["ppqqpq"]
.  % Duplicate top of stack
   % STACK: ["ppqqpq", "ppqqpq"]
R  % Reverse top of stack
   % STACK: ["ppqqpq", "qpqqpp"]
e  % Push empty string
   % STACK: ["ppqqpq", "qpqqpp", ""]
I  % Input next line
   % STACK: ["ppqqpq", "qpqqpp", "", "3"]
&  % (cardinal mode) Pop stack and repeat next command that many times
   % STACK: ["ppqqpq", "qpqqpp", ""], ITERATOR: [3]
1  % Append "1" to top of stack
   % STACK: ["ppqqpq", "qpqqpp", "111"]
m  % Truncate so the top two strings on the stack have the same length
   % STACK: ["ppqqpq", "qpq", "111"]
;  % Discard top of stack
   % STACK: ["ppqqpq", "qpq"]
m  % Truncate again
   % STACK: ["ppq", "qpq"]
t  % Extract last character
   % STACK: ["ppq", "qp", "q"]
!  % Move top of stack to tape
   % STACK: ["ppq", "qp"]
~  % Swap
   % STACK: ["qp", "ppq"]
t  % Extract last character
   % STACK: ["qp", "pp", "q"]
?  % Copy data from tape onto top of stack
   % STACK: ["qp', "pp", "q", "q"]
&  % Iterator: effectively a no-op in ordinal mode when the top of the stack is a 1-character string
   % STACK: ["qp", "pp", "q"], ITERATOR: ["q"]
-  % Remove occurrences: here, result is "" iff the characters are equal
   % STACK: ["qp", "pp", ""]
n  % Logical Not (for a consistent truthy value)
   % STACK: ["qp", "pp", "Jabberwocky"]
o  % Output top of stack

@MartinEnder Jabberwocky?
Stephen


@StephenS Btw, 임의의 게시물에 나를 언급하면 ​​알림을받지 못합니다. 핑은 게시물이 내 것이거나 내가 댓글을 달았을 때만 작동합니다 (그리고 게시물을 편집하면 생각합니다). 당신은 일반적으로 채팅에서 나를 핑하는 것이 좋습니다.
Martin Ender 2012 년

@ MartinEnder 나는 그것을 알고 있었지만 핑을하기에는 충분하지 않았습니다. 확인 및 링크 주셔서 감사합니다 :)
Stephen

5

파이썬 , 24 22 바이트

Adnan 덕분에 -2 바이트

lambda s,n:s[n]==s[~n]

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


3
나는 당신이 바꿀 수 있다고 생각 -n-1하여 ~n.
Adnan

왜 파이썬 2 만? Python3에서 잘 작동하는 것 같습니다 .Python으로 변경해야합니다.
sagiksp

@sagiksp는 TIO의 기본 템플릿 출력입니다
펠리페 나르디 바티스타

오, 말이 되네요
sagiksp

@sagiksp 예, TIO의 템플릿이지만 업데이트되었습니다. :)
완전히 인간적인

4

Cubix , 22 바이트

..@.IAp):tBvpptc?1.\O0

1- 인덱스가 입력을 받아 index, string공백으로 분리된다.

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

Cubified

    . .
    @ .
I A p ) : t B v
p p t c ? 1 . \
    O 0
    . .

설명

이것은 대부분 선형입니다. 주요 논리는

IAp):tBpptc

IA           Get the first input as an int and the rest as a string.
  p):        Move the index to the top of the stack, increment it, and copy it.
     t       Look up the appropriate character in the string.
      Bpp    Reverse the stack and put the index and character back on top.
         t   Look up the appropriate character in the reversed string.
          c  XOR the two characters.

우리는 다음 분기 ?Output 1결과가 0 인 경우 0그렇지.



3

C #, 28 27 바이트

s=>n=>s[n]==s[s.Length+~n];

@KevinCruijssen 덕분에 바이트를 절약했습니다.

로 컴파일합니다 Func<string, Func<int, bool>>.


로 변경 s.Length-n-1하여 바이트를 저장할 수 있습니다 s.Length+~n.
Kevin Cruijssen

@KevinCruijssen 고마워, 좋은 트릭은 생각하지 못했을 것입니다.
TheLethalCoder

1
나는 정직하게 말할 것입니다 .JS 답변의 의견에서 얻었습니다. :) 바이트 연산은 실제로 내 전문 지식이 아닙니다.
케빈 크루이 센


3

R 51 바이트

function(s,n){s=el(strsplit(s,''));s[n]==rev(s)[n]}

익명 함수, 1 기반 인덱싱 사용


1
43 바이트 :function(s,n)(s=utf8ToInt(s))[n]==rev(s)[n]
Giuseppe


3

클로저, 27 바이트

#(nth(map =(reverse %)%)%2)

와우, 이것은 내가 예상했던 것보다 짧았다.


3

APL (Dyalog) , 10 5 바이트

⊃=⊃∘⌽

이것은 암묵적인 기능으로, 같은 이름을 할당 한 f←⊃=⊃∘⌽다음로 호출해야 int f string합니다.

무려 5 바이트의 @ Adám에게 감사합니다.

작동 방식 :

⊃=⊃∘⌽  ⍝ Main function; tacit. 
       ⍝ Inputs are ⍺ = 1 (left) and ⍵ = 'abca' (right).
⊃      ⍝ ⍺⊃⍵, meaning 'pick the ⍺-th element of ⍵'
 =     ⍝ Compare to
    ⌽  ⍝ ⌽⍵, meaning 'invert ⍵'
  ⊃    ⍝ Again, ⍺⊃⍵, but:
   ∘   ⍝ Compose. This turns ⌽ into the right argument for ⊃,
       ⍝ which becomes 'pick the ⍺-th element from ⌽(the inverse of)⍵'

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

22 바이트 답변이 편집되었습니다. 확인하려면 개정 내역을 확인하십시오.


"비 통상적 인 방식으로 입력을받습니다"– APL에서 왼쪽과 오른쪽 args로 2 요소 입력을 취하는 것은 완전히 표준이며 OP가 특별한 기괴한 이유로 금지하지 않는 한 항상 수용 가능합니다.
Jonah

@Jonah 네, 채팅하는 사람들이 저에 대해 깨달았습니다. OP가 괜찮은지 여부를 명확하게 지정하지 않기 때문에 그대로 두었습니다. PC로 돌아 오면 짧은 ​​답변이 먼저 표시되도록 편집하겠습니다.
J. Sallé

"암시 적으로 가정"에 관하여 : 실제로,이 함수는 모나드 방식으로 호출 된 경우에도 작동 1하며 기본 왼쪽 인수 로 사용 됩니다. 온라인으로 사용해보십시오! 함수는 아무것도 가정하지 않습니다. 그들은 왼쪽과 오른쪽 인수가 모두 주어지기 때문에 dyadically 적용됩니다.
Adám

@ Adám 저는 모나 딕 방식으로 호출 할 때 인수의 첫 번째 요소를 취하기 때문에 이런 일이 발생했다고 생각 했습니까? 어쨌든, 나는 명확히하기 위해 편집 할 것입니다.
J. Sallé

3

V , 26, 16 , 13 바이트

ä$Àñã2xñVpøˆ±

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

16 진 덤프 :

00000000: e424 c0f1 e332 78f1 5670 f888 b1         .$...2x.Vp...

1 색인.

설명:

ä$                  " Duplicate this line horizontally
  Àñ   ñ            " Arg1 times...
    ã               "   Move to the center of this line
     2x             "   And delete two characters
        V           " Select this whole line
         p          " And replace it with the last pair of characters we deleted
          ø         " Count the number of matches of the following regex...
           <0x88>   "   Any character
                 ±  "   Followed by itself

참고로 원래의 대답은 다음과 같습니다.

Àñx$x|ñxv$hhpÓ¨.©±/1
ñllS0

온라인으로 사용해보십시오! (0 인덱스)

16 진 덤프 :

00000000: c0f1 7824 787c f178 7624 6868 70d3 a82e  ..x$x|.xv$hhp...
00000010: a9b1 2f31 0af1 6c6c 5330                 ../1..llS0

온라인으로 사용해보십시오! 조금 짧습니다. 사람은 Àñx$x|ñ너무 많은 캐릭터처럼 느껴집니다. 정규식 만 시도했지만 24 세가되었습니다.
nmjcman101

1
@ nmjcman101 새로운 기능을 사용하는 것보다 훨씬 짧을 수 있습니다.
DJMcMayhem

오 와우 내가 연습 나갈거야, 나는 거의 심지어 더 이상 V를 읽을 수 있습니다
nmjcman101

@ nmjcman101 나는 설명을 게시했다 (그리고 조금 더
골프를 쳤다

2

수학, 34 바이트

s=StringTake;s[#,{#2}]==s[#,{-#2}]&

StringTake[#, #2] #2 문자를 사용 #합니다. StringPart이 경우 잘 작동합니다. #~(s=StringPart)~-#2==s@##&
JungHwan Min

내 잘못이야 결정된!
J42161217

#~s~{#2}==#~s~{#2}&항상 항복 True...
정환 민

최종 고정! ....
J42161217

1
실제로, 당신은 입력 List으로 Strings를 취할 수 있으므로 #[[#2]]==#[[-#2]]&충분합니다
JungHwan Min

2

펄 6 , 27 바이트

{[eq] $^a.comb[$^b,*-1-$b]}

그것을 테스트

{ # bare block lambda with two placeholder parameters 「$a」 and 「$b」

  [eq]        # reduce using string equality operator

    $^a       # declare first positional parameter

    .comb\    # split that into individual characters

    [         # index into that sequence

      $^b,    # declare and use second parameter

      *-1-$b  # closure that subtracts one and the 
              # second parameter of the outer block
              # (「*」 is the parameter of this closure)

    ]
}


2

Pyth , 8 7 바이트

q@zQ@_z

입력이 반대로 된 경우 : 먼저 색인과 문자열. 0 인덱스입니다.

설명 :

q@zQ@_z
 @zQ        Get the nth (Qth) character
     _z     Reverse the string
    @       Get the nth character of the reversed string. Implicit input of the index
q           Test equality

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



2

J, 6 바이트

FrownyFrog 덕분에 -4 바이트

{(=|.)

원래 답변 설명을 참조하십시오. 아이디어는 충분히 비슷하지만 오른쪽 동사 자체가 모나 딕 훅 인 2 개의 훅으로 수행됩니다.

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

원래 답변 (10 바이트)

{=/@(,:|.)

,:|. 오른쪽 오른쪽 arg 위에 오른쪽 arg

=/ 그것들은 요소 적으로 동등합니까?

{ 부울 목록에서 왼쪽 arg로 표시된 인덱스를 가져옵니다.

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




1

QBIC , 18 바이트

?_s;,:,1|=_sA,-a,1

설명

?        =     PRINT -1 if equal, 0 otherwise, between
 _s     |      A substring of
   ;,:,1          A$ string (read from cmd line), from the n'th pos, length 1
 _sA,-a,1      And a substring of A$, n'th pos from the right, also 1 length
               The second Substring is auto-terminated because EOF.


1

> <> ( 인터프리터 포함), 25 바이트

i:0(?v
]&=n;>~{:}[:}]&r[}

TIO에서는 작동하지 않습니다. TIO 인터프리터는 [명령을 수행 할 때 새 스택을 뒤집지 않지만 물고기 놀이터는 비교합니다."abcde"5[ooooo; 여기여기 에서 실행 합니다 .

문자열 입력은 STDIN에서 가져 오며 n 이 이미 스택에 있다고 가정 합니다. 1- 인덱싱을 사용합니다.

물고기는 얻을 수 N 과 일 문자를 [:}]&첫 번째 오프하는 사이펀 N . 스택 항목을 새로운 역 스택으로 하고 비트를 조작 한 다음 사물을 다시 넣고 n 번째 문자를 레지스터에 저장합니다 . 그런 다음 전체 스택을 되돌리고 다시 동일하게 수행하고 두 문자가 같으면 1을, 그렇지 않으면 0을 반환합니다.

이것은 26 바이트 동안 TIO 에서 작동하는 것 같습니다 .

i:0(?v
]&=n;>~{:}[{:}]&r[{

1

C, 73 바이트

GCC 6.3.1을 사용하여 그대로 컴파일합니다 (플래그 없음). 불필요한 난독 화가 포함되었습니다.

main(c,v)char**v;{c=atoi(v[2]);putchar((*++v)[c]-(*v)[strlen(*v+1)-c]);}

용법

$./a.out abcdcba 6

진실 = 아무것도, 거짓 = 쓰레기.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.