Liệu char thứ n có bằng thứ n từ char cuối cùng không?


22

Lấy cảm hứng từ việc bắt đầu bằng kết thúc

Đưa ra một chuỗi svà một số nguyên n, xuất ra một giá trị trung thực / falsey xem liệu nchar thứ trong có sbằng với nthứ thứ từ char cuối không s.

Đầu vào

Một chuỗi không trống và một số nguyên. Bạn có thể sử dụng lập chỉ mục dựa trên 0 hoặc lập chỉ mục dựa trên 1. Số nguyên được đảm bảo là hợp lệ dựa trên chuỗi. Ví dụ: nếu chuỗi là "supercalifragalistic123", số nguyên có thể từ 1 đến 23 cho lập chỉ mục dựa trên 1 và 0 đến 22 cho lập chỉ mục dựa trên 0. Xin lưu ý rằng ncó thể lớn hơn một nửa chiều dài s.

Đầu vào được giới hạn ở ASCII có thể in.

Đầu ra

Giá trị trung thực / falsey dựa trên việc ngiá trị thứ sbằng bằng giá trị nthứ từ giá trị cuối cùng trong s.

Xin lưu ý rằng char cuối cùng ở vị trí 0 cho lập chỉ mục dựa trên 0 và vị trí 1 cho lập chỉ mục dựa trên 1. Hãy nghĩ về nó như so sánh chuỗi với đảo ngược của nó.

Các trường hợp thử nghiệm

Chỉ số 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 chỉ mục

"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ó có được chấp nhận để lấy nlàm điểm mã không? (đối với các ngôn ngữ bí truyền như não bộ)
DJMcMayhem

@DJMcMayhem chắc chắn.
Stephen

Câu trả lời:


11

Thạch , 5 4 byte

=UƓị

Hãy thử trực tuyến!

Không nên có câu trả lời ngắn hơn trong Jelly. Một chương trình sẽ cần so sánh, đảo ngược / phủ định, gọi chỉ mục và một byte cho luồng điều khiển ( Ɠtrong trường hợp này), có thêm tối đa bốn byte.

Làm thế nào nó hoạt động

 =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

-1 byte nhờ @ ais523, sử dụng Ɠ


Giải pháp 4 byte không thành công từ phiên bản gốc của bài đăng:ịµU=
CalculatorFeline

Bạn có thể cải thiện nó thành bốn byte bằng cách biến nó thành đơn âm thay vì dyadic (và lấy n từ đầu vào tiêu chuẩn thay vì đối số): Hãy thử trực tuyến! Kỹ thuật này thường hữu ích khi bạn lãng phí một byte cho luồng điều khiển và một byte bổ sung ³, vì Ɠchi phí một byte nhưng làm cho ³ẩn và thường mang lại cho bạn sự linh hoạt hơn về luồng điều khiển.

@ ais512 Ý kiến ​​hay, tôi thực sự chưa bao giờ sử dụng đầu vào trước đây trong câu trả lời vì các đối số ngầm có xu hướng hiệu quả hơn.
fireflame241

14

JavaScript (ES6), 26 byte

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

Cách khác:

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

Cái này gần như hoạt động, nhưng thất bại khi n == 0(vì s.slice(-1,0) == ""):

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

Một giải pháp 26 byte khác mà @RickHitchcock đã chỉ ra:

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

3
Sử dụng tốt ~, sẽ không bao giờ có mặc dù điều đó cho điều này.
Stephen

10

MATL , 5 byte

tP=w)

Hãy thử trực tuyến!

Giải trình:

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
Cách tiếp cận rất thông minh!
Luis Mendo

3
@LuisMendo Cảm ơn bạn! Đó là sự yên tĩnh bổ sung đến từ bạn :)
DJMcMayhem

Bây giờ chúng ta xem liệu Jelly có thể đánh bại xD này không
Stephen

5

Octave , 22 byte

@(s,n)s(n)==s(end-n+1)

Hãy thử trực tuyến!

Hoặc cùng một bytecount:

@(s,n)s(n)==flip(s)(n)

Hãy thử trực tuyến!

Giải trình:

Nó khá thẳng về phía trước. Cái đầu tiên lấy một chuỗi svà một số nguyên nlàm đầu vào và kiểm tra phần tử thứ n s(n)so với phần tử "last-n + 1" để tìm đẳng thức.

Phần thứ hai kiểm tra phần tử thứ n s(n)so với phần tử thứ n của sđảo ngược.


5

05AB1E , 7 5 byte

-2 byte nhờ Adnan

ÂøsèË

Hãy thử trực tuyến! hoặc Thử tất cả các bài kiểm tra

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

Hãy thử trực tuyến!


ÂøsèËlưu hai byte
Adnan

@Ad Nam Cảm ơn! Tôi biết có một cách 1 byte để thêm một bản sao đảo ngược, tôi chỉ không thể nhớ nó được dán nhãn như thế nào.
Riley

@ComradeSparklePony Tôi quên cập nhật nó để đưa vào đề xuất của Adnan.
Riley


5

Alice , 24 byte

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

Hãy thử trực tuyến!

Đầu vào bao gồm chuỗi trên một dòng và số trên dòng thứ hai. Đầu ra là Jabberwockynếu các ký tự giống nhau, và không có gì khác.

Giải trình

Chương trình này chủ yếu ở chế độ thứ tự, với một lệnh ở chế độ hồng y. Tuyến tính hóa, chương trình như sau:

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, tôi không nhận được thông báo nếu bạn chỉ đề cập đến tôi trên các bài đăng ngẫu nhiên. Ping chỉ hoạt động nếu bài đăng là của tôi hoặc tôi đã tự nhận xét (và tôi nghĩ nếu tôi chỉnh sửa bài đăng). Bạn thường hay hơn khi đưa tôi vào trò chuyện.
Martin Ender

@MartinEnder Tôi biết điều đó, nhưng nó không đủ quan trọng để ping bạn. Cảm ơn bạn đã xác nhận và liên kết :)
Stephen

5

Python , 24 22 byte

-2 byte nhờ Adnan.

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

Hãy thử trực tuyến!


3
Tôi nghĩ bạn có thể thay thế -n-1bằng ~n.
Ad Nam

Tại sao chỉ có Python2? Có vẻ như hoạt động trên Python3 tốt, bạn nên đổi nó thành 'Python'.
sagiksp

@sagiksp đó là đầu ra mẫu mặc định trong TIO
Felipe Nardi Batista

Ồ, có ý nghĩa.
sagiksp

@sagiksp Vâng, đó là mẫu từ TIO nhưng được cập nhật. :)
hoàn toàn là

4

Khối , 22 byte

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

1-lập chỉ mục, có đầu vào như index, string, cách nhau bởi một dấu cách.

Dùng thử trực tuyến

Tạo khối

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

Giải trình

Điều này chủ yếu là tuyến tính. Logic chính là

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.

Sau đó, chúng tôi phân nhánh với ?để thông Obáo 1nếu kết quả là 0 và 0nếu không.



3

C #, 28 27 byte

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

Đã lưu một byte nhờ @KevinCruijssen.

Biên dịch thành a Func<string, Func<int, bool>>.


Bạn có thể lưu một byte bằng cách thay đổi s.Length-n-1thành s.Length+~n.
Kevin Cruijssen

@KevinCruijssen Cảm ơn, mẹo hay không bao giờ có thể nghĩ về điều đó.
TheLethalCoder

1
Tôi sẽ hoàn toàn trung thực, tôi đã nhận được nó từ nhận xét của câu trả lời JS. :) Hoạt động của Byte không thực sự là chuyên môn của tôi.
Kevin Cruijssen


3

R 51 byte

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

Hàm ẩn danh, sử dụng lập chỉ mục dựa trên 1


1
43 byte:function(s,n)(s=utf8ToInt(s))[n]==rev(s)[n]
Giuseppe


3

Clojure, 27 byte

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

Wow, cái này ngắn hơn tôi mong đợi.


3

APL (Dyalog) , 10 5 byte

⊃=⊃∘⌽

Đây là một hàm ngầm, cần được gán một tên như f←⊃=⊃∘⌽, và sau đó được gọi là int f string.

Cảm ơn @ Adám cho một con số khổng lồ 5 byte.

Làm thế nào nó hoạt động:

⊃=⊃∘⌽  ⍝ 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)⍵'

Hãy thử trực tuyến!

Câu trả lời 22 byte đã được chỉnh sửa. Nếu bạn muốn xem nó, hãy kiểm tra lịch sử sửa đổi.


"Nó lấy đầu vào theo cách không thông thường" - lấy 2 yếu tố đầu vào làm đối số trái và phải trong APL là hoàn toàn tiêu chuẩn và luôn được chấp nhận trừ khi OP đặc biệt cấm nó vì một lý do kỳ quái nào đó.
Giô-na

@Jonah yeah, mọi người trong cuộc trò chuyện đã khai sáng cho tôi về điều đó. Tôi đã để nó như vậy bởi vì OP không chỉ định rõ ràng nếu nó ổn hay không. Tôi sẽ chỉnh sửa điều đó khi tôi quay lại PC để câu trả lời ngắn hơn xuất hiện trước.
J. Sallé

Về "giả định ngầm": Trên thực tế, chức năng này sẽ hoạt động ngay cả khi được gọi một cách đơn điệu, và sau đó sẽ xuất hiện để sử dụng 1làm đối số bên trái mặc định. Hãy thử trực tuyến! Các chức năng không giả định bất cứ điều gì; chúng đang được áp dụng một cách tự nhiên bởi vì chúng được đưa ra cả một đối số trái và phải.
Adám

@ Adám Tôi nghĩ điều đó đã xảy ra bởi vì, khi được gọi một cách đơn điệu, lấy yếu tố đầu tiên của đối số? Dù sao, tôi sẽ chỉnh sửa để làm rõ.
J. Sallé

3

V , 26, 16 , 13 byte

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

Hãy thử trực tuyến!

Hexdump:

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

1 chỉ mục.

Giải trình:

ä$                  " 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

Để tham khảo, câu trả lời ban đầu của tôi là:

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

Hãy thử trực tuyến!(0 được lập chỉ mục)

Hexdump:

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

Hãy thử trực tuyến! Cái này ngắn hơn một chút. Đàn ông Àñx$x|ñcảm thấy như quá nhiều nhân vật. Tôi đã thử một regex duy nhất, nhưng cuối cùng nó đã dài như 24!
nmjcman101

1
@ nmjcman101 Hóa ra nó có thể ngắn hơn nhiều so với việc sử dụng các tính năng mới hơn.
DJMcMayhem

Ôi, tôi không còn thực hành nữa, tôi thậm chí còn không thể đọc được V nữa
nmjcman101

@ nmjcman101 Tôi đã đăng một lời giải thích (và chơi gôn nhiều hơn một chút)
DJMcMayhem

2

Toán học, 34 byte

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

StringTake[#, #2]mất các ký tự đầu tiên #2 của #. StringPartsẽ hoạt động tốt trong trường hợp này. #~(s=StringPart)~-#2==s@##&
JungHwan Min

sai của tôi đã sửa!
J42161217

#~s~{#2}==#~s~{#2}&sẽ luôn mang lại True...
JungHwan Min

sửa lỗi cuối cùng! ....
J42161217

1
Trên thực tế, bạn có thể lấy một Listtrong số Stringđó làm đầu vào, vì vậy #[[#2]]==#[[-#2]]&sẽ đủ
JungHwan Min

2

Perl 6 , 27 byte

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

Kiểm tra nó

{ # 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

Bình thường , 8 7 byte

q@zQ@_z

Với đầu vào đảo ngược: đầu tiên là chỉ mục, sau đó là chuỗi. Nó là 0 chỉ mục.

Giải thích:

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

Hãy thử trực tuyến!



2

J, 6 byte

-4 byte nhờ FrownyFrog

{(=|.)

Xem giải thích câu trả lời ban đầu - ý tưởng là đủ tương tự, nhưng điều này được thực hiện với một cái móc dyadic mà động từ bên phải của nó là một cái móc đơn âm.

Hãy thử trực tuyến!

câu trả lời gốc (10 byte)

{=/@(,:|.)

,:|. arg bên phải trên đỉnh của arg phải

=/ chúng có bằng nhau không?

{ lấy từ danh sách boolean đó chỉ mục được chỉ ra bởi arg bên trái

Hãy thử trực tuyến!




1

QBIC , 18 byte

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

Giải trình

?        =     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

> <> (với trình thông dịch này ), 25 byte

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

Nó không hoạt động trong TIO: trình thông dịch TIO không đảo ngược ngăn xếp mới khi thực hiện [hướng dẫn, nhưng sân chơi cá thì có - ví dụ như "abcde"5[ooooo;chạy ở đâyở đây .

Đầu vào chuỗi được lấy từ STDIN và chúng tôi giả sử n đã có trên ngăn xếp. Sử dụng 1 chỉ mục.

Con cá nhận được nhân vật thứ n với [:}]&, hút tất cả n thứ đầu tiên trên ngăn xếp thành một ngăn xếp mới, đảo ngược, thao tác một chút, sau đó đặt mọi thứ lại và lưu lại n th nhân vật trong sổ đăng ký. Sau đó, nó đảo ngược toàn bộ ngăn xếp và thực hiện lại như cũ và trả về 1 nếu hai ký tự bằng nhau và 0 khác.

Điều này dường như hoạt động tại TIO , với 26 byte:

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

1

C, 73 byte

Biên dịch nguyên trạng với GCC 6.3.1 (không có cờ). Một số obfuscation không cần thiết bao gồm.

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

Sử dụng

$./a.out abcdcba 6

Truthy = nothing, falsey = rác.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.