ถ่านที่ n เท่ากับถ่านที่ n จากถ่านที่แล้วหรือไม่?


22

เเรงบันดาลใจจาก การเริ่มต้นเท่ากับจุดจบ

รับสตริงsและจำนวนเต็มnเอาท์พุทความจริง / เท็จว่าnถ่านในนั้นsเท่ากับnth จากถ่านปลายในsวันจากถ่านที่สิ้นสุดใน

อินพุต

สตริงที่ไม่ว่างและจำนวนเต็ม คุณสามารถใช้การจัดทำดัชนี 0 หรือทำดัชนีตาม 1 จำนวนเต็มรับประกันว่าถูกต้องตามสตริง ตัวอย่างเช่นหากสตริงคือ "supercalifragalistic123" จำนวนเต็มสามารถอยู่ระหว่าง 1 ถึง 23 สำหรับการจัดทำดัชนีแบบ 1 และ 0 ถึง 22 สำหรับการจัดทำดัชนีแบบ 0 โปรดทราบว่าจะมีขนาดใหญ่กว่าครึ่งหนึ่งของความยาวของns

อินพุตถูก จำกัด ไว้ที่ ASCII ที่พิมพ์ได้

เอาท์พุต

ค่าความจริง / falsey ขึ้นอยู่กับว่าnค่า th ในsเท่ากับnth จากมูลค่าสุดท้าย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เป็นจุดรหัส? (สำหรับภาษาที่ลึกลับเช่นคลื่นสมอง)
DJMcMayhem

@DJMcMayhem แน่นอน
Stephen

คำตอบ:


11

เยลลี่ , 5 4 ไบต์

=UƓị

ลองออนไลน์!

ไม่ควรมีคำตอบสั้น ๆ ในเยลลี่ โปรแกรมจะต้องมีการเปรียบเทียบการกลับรายการ / การปฏิเสธการเรียกดัชนีและไบต์สำหรับโฟลว์การควบคุม ( Ɠในกรณีนี้) ซึ่งเพิ่มได้สูงสุดสี่ไบต์

มันทำงานอย่างไร

 =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 ไบต์โดยใช้ @ ais523 Ɠ


การแก้ปัญหา 4 ไบต์ล้มเหลวจากเวอร์ชันต้นฉบับของโพสต์:ịµU=
CalculatorFeline

คุณสามารถปรับปรุงให้เป็นสี่ไบต์ได้โดยทำให้เป็น monadic แทนที่จะเป็น dyadic (และนำnจากอินพุตมาตรฐานแทนที่จะเป็นอาร์กิวเมนต์): ลองออนไลน์! เทคนิคนี้มักจะมีประโยชน์เมื่อคุณสูญเสียไบต์ในโฟลว์การควบคุมและไบต์เพิ่มเติม³เนื่องจากเป็นƓค่าใช้จ่ายหนึ่งไบต์ แต่สร้าง³โดยปริยายและทำให้คุณมีความยืดหยุ่นในการควบคุมโฟลว์มากขึ้น

@ ais512 ความคิดที่ดีฉันไม่เคยใช้อินพุตมาก่อนในการตอบเพราะข้อโต้แย้งโดยนัยมีแนวโน้มที่จะมีประสิทธิภาพมากขึ้น
fireflame241

14

JavaScript (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)

อีกโซลูชัน 26 ไบต์ที่@RickHitchcockชี้ให้เห็น:

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

3
การใช้งานที่ดี~จะไม่มีทางเกิดขึ้นได้สำหรับสิ่งนี้
สตีเฟ่น

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
@LuisMendo ขอขอบคุณ! นั่นคือความเงียบสงบที่มาจากคุณ :)
DJMcMayhem

ตอนนี้เรามาดูกันว่าเยลลี่สามารถเอาชนะ xD นี้ได้หรือไม่
Stephen

5

อ็อกเทฟ 22 ไบต์

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

ลองออนไลน์!

หรือจำนวนเดียวกัน:

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

ลองออนไลน์!

คำอธิบาย:

มันค่อนข้างตรงไปตรงมา อันแรกใช้สตริงsและจำนวนเต็มnเป็นอินพุตและตรวจสอบองค์ประกอบที่ n'ths(n)กับ "last-n + 1" เพื่อความเท่าเทียมกัน

อันที่สองตรวจสอบองค์ประกอบที่ n'th s(n)กับองค์ประกอบที่ n ของการsกลับรายการ


5

05AB1E , 7 5 ไบต์

-2 ไบต์ขอบคุณAdnan

ÂøsèË

ลองออนไลน์! หรือลองทดสอบทั้งหมด

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

ลองออนไลน์!


ÂøsèËบันทึกสองไบต์
Adnan

@Adnan ขอบคุณ! ฉันรู้ว่ามีวิธี 1 ไบต์ในการเพิ่มสำเนาที่กลับด้านฉันจำไม่ได้ว่ามันมีป้ายกำกับอย่างไร
Riley

@ComradeSparklePony ฉันลืมอัปเดตเพื่อรวมคำแนะนำของ Adnan
Riley


5

อลิซ 24 ไบต์

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

ลองออนไลน์!

อินพุตประกอบด้วยสตริงในหนึ่งบรรทัดและตัวเลขในบรรทัดที่สอง ผลผลิตคือJabberwockyถ้าอักขระเหมือนกันและไม่มีอะไรเป็นอย่างอื่น

คำอธิบาย

โปรแกรมนี้ส่วนใหญ่อยู่ในโหมดปกติโดยมีหนึ่งคำสั่งในโหมดที่สำคัญ เป็น Linearized โปรแกรมดังต่อไปนี้:

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?
สตีเฟ่น


@StephenS Btw ฉันไม่ได้รับการแจ้งเตือนหากคุณเพียงแค่พูดถึงฉันโพสต์แบบสุ่ม Pings ใช้งานได้เฉพาะเมื่อโพสต์เป็นของฉันหรือฉันแสดงความคิดเห็นด้วยตัวเอง (และฉันคิดว่าถ้าฉันแก้ไขโพสต์) โดยปกติแล้วคุณจะดีกว่าส่ง Ping ให้ฉันในการแชท
Martin Ender

@ มาร์ตินฉันรู้ดีว่ามัน แต่มันก็ไม่สำคัญพอที่จะ ping คุณ ขอบคุณสำหรับการยืนยันและการเชื่อมโยง :)
สตีเฟ่น

5

งูหลาม , 24 22 ไบต์

-2 ไบต์ขอบคุณ Adnan

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

ลองออนไลน์!


3
ฉันคิดว่าคุณสามารถแทนที่โดย-n-1 ~n
Adnan

ทำไมต้อง Python2 เท่านั้น ดูเหมือนว่าจะทำงานกับ Python3 ได้ดีคุณควรเปลี่ยนเป็น 'Python'
sagiksp

@sagiksp เป็นผลลัพธ์เทมเพลตเริ่มต้นใน TIO
Felipe Nardi Batista

โอ้เหมาะสมแล้ว
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 ตอบตัวเอง :) การปฏิบัติการไบต์ไม่ได้เป็นความเชี่ยวชาญของฉันจริงๆ
Kevin Cruijssen


3

R 51 ไบต์

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

ฟังก์ชั่นไม่ระบุชื่อใช้การจัดทำดัชนีแบบ 1


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

3

Ruby, 22 20 18 ไบต์

->s,n{s[n]==s[~n]}

3
ฉันเดาว่า->s,n{s[n]==s[~n]}ควรทำงานอย่างไร (ไม่มีความคิดเรื่องทับทิม)
Christoph

มันทำได้ดีมาก! ขอบคุณ!
reitermarkus


3

APL (Dyalog) , 10 5 ไบต์

⊃=⊃∘⌽

นี้เป็นฟังก์ชั่นโดยปริยายซึ่งจะต้องมีการกำหนดชื่อเช่นแล้วเรียกว่าเป็นf←⊃=⊃∘⌽int f string

ขอบคุณ @ Adámสำหรับพื้นที่ขนาด 5 ไบต์

มันทำงานอย่างไร:

⊃=⊃∘⌽  ⍝ 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 ไบต์แล้ว หากคุณต้องการดูให้ตรวจสอบประวัติการแก้ไข


"ใช้อินพุตในแบบที่ไม่ธรรมดา" - การรับอินพุต 2 องค์ประกอบเนื่องจากส่วนซ้ายและขวาใน APL นั้นเป็นมาตรฐานที่สมบูรณ์และเป็นที่ยอมรับเสมอเว้นแต่ว่า OP จะห้ามเฉพาะเจาะจงด้วยเหตุผลบางอย่างที่แปลกประหลาด
โยนาห์

@Jonah ใช่ผู้คนในแชทรู้แจ้งฉันเกี่ยวกับเรื่องนั้น ฉันทิ้งไว้เพราะเป็นเพราะ OP ไม่ได้ระบุไว้อย่างชัดเจนว่ามันโอเคหรือไม่ ฉันจะแก้ไขมันเมื่อฉันกลับไปที่พีซีของฉันดังนั้นคำตอบที่สั้นกว่าจะปรากฏขึ้นก่อน
J. Sallé

เกี่ยวกับ "อนุมานโดยนัย": ที่จริงแล้วฟังก์ชั่นนี้จะใช้งานได้แม้ในขณะที่เรียกว่าเป็นแบบ monadically และจากนั้นจะปรากฏขึ้นเพื่อใช้1เป็นอาร์กิวเมนต์ซ้ายเริ่มต้น ลองออนไลน์! ฟังก์ชั่นไม่คิดอะไรเลย พวกเขาถูกนำไปใช้อย่างผิดเพี้ยนเพราะพวกเขาได้รับทั้งซ้ายและอาร์กิวเมนต์ที่เหมาะสม
Adám

@ Adámฉันคิดว่าเกิดขึ้นเพราะเมื่อเรียกว่า monadically ใช้องค์ประกอบแรกของการโต้แย้ง? อย่างไรก็ตามฉันจะแก้ไขเพื่อชี้แจง
J. Sallé

3

V , 26, 16 , 13 ไบต์

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

ลองออนไลน์!

hexdump:

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)

hexdump:

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

ลองออนไลน์! สั้นกว่านี้เล็กน้อย ผู้ชายÀñx$x|ñรู้สึกเหมือนตัวละครมากเกินไป ฉันลองใช้ regex เพียงอย่างเดียว แต่มันจบลงด้วยความยาว 24 ปี!
nmjcman101

1
@ nmjcman101 กลายเป็นว่ามันสั้นกว่าการใช้ฟีเจอร์ที่ใหม่กว่ามาก
DJMcMayhem

โอ้ว้าวฉันไม่ได้ฝึกเลยฉันสามารถอ่าน V ได้อีกแล้ว
nmjcman101

@ nmjcman101 ฉันได้โพสต์คำอธิบาย (และเพิ่มอีกนิด)
DJMcMayhem

2

Mathematica, 34 ไบต์

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

StringTake[#, #2]เตะครั้งแรก ของตัวละคร#2 จะทำงานได้ดีในกรณีนี้ #StringPart#~(s=StringPart)~-#2==s@##&
JungHwan Min Min

ฉันผิด การแก้ไข!
J42161217

#~s~{#2}==#~s~{#2}&มักจะให้ผลTrue...
JungHwan Min

แก้ไขครั้งสุดท้าย! ....
J42161217

1
ที่จริงแล้วคุณสามารถใช้เวลาListของStrings เป็น input จึง#[[#2]]==#[[-#2]]&จะพอเพียง
จองฮวานนาที

2

Perl 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 ไบต์

-4 ไบต์ขอบคุณ FrownyFrog

{(=|.)

ดูคำอธิบายคำตอบดั้งเดิม - ความคิดนั้นคล้ายคลึงกันมากพอ แต่สิ่งนี้สามารถทำได้โดยใช้ตะขอ dyadic ซึ่งคำกริยาที่ถูกต้องนั้นเป็นตะขอ monadic

ลองออนไลน์!

คำตอบเดิม (10 ไบต์)

{=/@(,:|.)

,:|. 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

นี้ดูเหมือนว่าจะทำงานที่ TIO , 26 ไบต์:

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

Truthy = nothing, falsey = ขยะ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.