n番目の文字は最後の文字のn番目と同じですか?


22

インスピレーション開始は終了と等しいか

文字列sと整数nを指定すると、nth char in snend char inのth と等しいかどうかについて、true / falseyを出力しsます。

入力

空ではない文字列と整数。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

@DJMcMayhem確かに。
スティーブン

回答:


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

-1バイト、@ ais523のおかげで、 Ɠ


投稿の元のバージョンからの4バイトソリューションに失敗しました:ịµU=
CalculatorFeline

ダイアディックではなくモナドにする(および引数ではなく標準入力からnを取得する)ことで、4バイトに改善できます:オンラインで試してみてください!この手法は、制御フローに1バイト、さらに1バイトを浪費している場合に役立ちます。1バイト³Ɠコストがかかりますが、³暗黙的になり、制御フローの柔軟性が向上することがよくあります。

@ ais512いいですね。暗黙の引数はより効率的である傾向があるので、私は実際に回答で入力を使用したことがありません。
fireflame241

14

JavaScript(ES6)、26バイト

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

代わりに:

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

この1はほとんど動作しますが、時に失敗した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
このために~、をうまく使用することはありません。
スティーブン

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
非常に賢いアプローチ!
ルイスメンドー

3
@LuisMendoありがとう!それはあなたからの補完が静かだ:)
DJMcMayhem

ゼリーは、このxDさんを倒すことができれば今、私たちは見る
スティーブン

5

オクターブ、22バイト

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

オンラインでお試しください!

または同じバイト数:

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

オンラインでお試しください!

説明:

とても簡単です。最初のものは、入力として文字列sと整数nを取り、s(n)等しいかどうか「最後のn + 1」要素に対してn番目の要素をチェックします。

2番目の要素s(n)は、n番目の要素とs反転したn 番目の要素を照合します。


5

05AB1E7 5バイト

アドナンのおかげで-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ありがとう!リバースコピーを追加する1バイトの方法があることは知っていましたが、それがどのようにラベル付けされているか思い出せませんでした。
ライリー

@ComradeSparklePony Adnanの提案を含めるために更新するのを忘れました。
ライリー


5

アリス、24バイト

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

オンラインでお試しください!

入力は、1行目の文字列と2行目の数字で構成されます。出力はJabberwocky、文字が同じ場合であり、それ以外は何もありません。

説明

このプログラムは主に序数モードで、1つのコマンドが基本モードになっています。線形化されたプログラムは次のとおりです。

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ところで、あなたがランダムな投稿で私に言及しただけでは、通知を受け取りません。pingが機能するのは、投稿が私の投稿であるか、自分でコメントを投稿した場合のみです(投稿を編集した場合はそう思います)。通常、チャットでpingを実行する方が良いでしょう。
マーティンエンダー

@MartinEnder私はそれを知っていましたが、あなたにpingするのに十分ではありませんでした。確認とリンクをお寄せいただきありがとうございます:)
スティーブン

5

Python24 22バイト

アドナンのおかげで-2バイト。

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

オンラインでお試しください!


3
私はあなたが交換することができると思い-n-1~n
アドナン

なぜPython2だけなのですか?Python3で問題なく動作するようです。これを単に「Python」に変更する必要があります。
sagiksp

@sagiksp TIOのデフォルトのテンプレート出力です
フェリペナルディバティスタ

ああ、理にかなっています。
sagiksp

@sagikspええ、それはTIOのテンプレートですが、更新されました。:)
完全に人間

4

Cubix、22バイト

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

1インデックスは、入力を受け取りindexstringスペースで区切られました。

オンラインで試す

立方体

    . .
    @ .
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のおかげで1バイト節約できました。

にコンパイルしますFunc<string, Func<int, bool>>


に変更s.Length-n-1すると、バイトを保存できますs.Length+~n
ケビンCruijssen

@KevinCruijssenありがとう、素敵なトリックはそれを考えたことがなかったでしょう。
TheLethalCoder

1
私は完全に正直になりますが、私はJS回答のコメントからそれを得ました。:)バイト操作は本当に私の専門知識ではありません。
ケビンCruijssen


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]
ジュゼッペ


3

Clojure、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の左右の引数として2要素の入力を取得することは完全に標準であり、OPが何らかの奇妙な理由で特に禁止しない限り、常に受け入れられます。
ジョナ

@Jonahええ、チャットの人々はそれについて私を啓発しました。OPが大丈夫かどうかを明確に指定していないため、そのままにしました。PCに戻ったときに編集し、短い回答が最初に表示されるようにします。
J.サール

「暗黙的に想定」に関して:実際には、この関数は単項で呼び出されても機能し1、デフォルトの左引数として使用するように見えます。オンラインでお試しください!関数は何も想定していません。それらは、左引数と右引数の両方が与えられているため、動的に適用されています。
アダム

@Adám私はそれが起こったと思った、なぜなら、単項で呼び出されたとき、引数の最初の要素を取るから?とにかく、明確にするために編集します。
J.サール

3

V26、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|ñあまりにも多くのキャラクターのように感じています。正規表現のみを試してみましたが、最終的には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@##&
ジョンファンミン

私の間違い。一定!
-J42161217

#~s~{#2}==#~s~{#2}&常にもたらすであろうTrue...
JungHwan分

最終修正!
....-J42161217

1
実際には、入力としてa Listを受け取ることができるStringので#[[#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

Pyth8 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バイト

{(=|.)

元の回答の説明を参照してください-アイデアは十分に似ていますが、これは、右動詞がそれ自体モナドフックであるダイアディックフックで達成されます。

オンラインでお試しください!

元の回答(10バイト)

{=/@(,:|.)

,:|. 右逆引数の上にある右引数

=/ それらは要素ごとに等しいですか?

{ そのブールリストから左引数で示されるインデックスを取得します

オンラインでお試しください!




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個を保存します番目の文字をレジスタにします。次に、スタック全体を反転させて同じことを繰り返し、2つの文字が等しい場合は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

真実=なし、偽=ゴミ。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.