単語が同形かどうかを確認する


63

2つの単語が同じ文字の繰り返しパターンを持っている場合、2つの単語は同形です。たとえば、両方ESTATEDUELEDパターンを持っていますabcdca

ESTATE
DUELED

abcdca

文字1と6は同じであるため、文字3と5は同じであり、それ以上はありません。これは、単語が置換暗号によって関連付けられていることも意味しますE <-> D, S <-> U, T <-> E, A <-> L。ここでは一致しています。

2つの単語を取り、それらが同形かどうかをチェックするコードを記述します。最少バイトが勝ちます。

入力:大文字の2つの空でない文字列A..Z。必要に応じて、これらを2つの文字列のコレクションまたはセパレータ付きの単一の文字列として使用できます。

出力:一貫Truthy値同形体、と一貫しているペアのFalsey値そうでない場合。異なる長さの文字列は、同形ではない有効な入力です。

テストケース:

正しい:

ESTATE DUELED
DUELED ESTATE
XXX YYY
CBAABC DEFFED
RAMBUNCTIOUSLY THERMODYNAMICS
DISCRIMINATIVE SIMPLIFICATION

偽:

SEE SAW
ANTS PANTS
BANANA SERENE
BANANA SENSES
AB CC
XXY XYY
ABCBACCBA ABCBACCAB
ABAB CD

便利だと思うテストケースを自由に追加してください。

リーダーボード

これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

# Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

# Ruby, <s>104</s> <s>101</s> 96 bytes


2つの入力の長さは同じであることが保証されていますか?
オプティマイザー

@Optimizerいいえ、長さは異なっていてもかまいません。
xnor

@Jakubeいいえ、あなたのコードは理論的にはどんな長さの入力でも動作するはずです。ただし、メモリオーバーフローやスタック深度などの問題が原因でハードウェアで大量の入力が失敗した場合でも問題ありません。
xnor

それでは答えを削除します。
ジャクベ

重要なテストケース:ABAB CD(zipのようなアプローチの場合)
-Sp3000

回答:


95

J、4バイト

-:&=

使用法

   'THERMODYNAMICS' (-:&=) 'RAMBUNCTIOUSLY'  NB. parens are optional
1 

説明

  • = 引数が1の場合、入力の要素とそのナブを比較する等値表が作成されます。

    ='ESTATE' gives the binary matrix
    
    = | E S T A T E    
    --+------------
    E | 1 0 0 0 0 1
    S | 0 1 0 0 0 0
    T | 0 0 1 0 1 0
    A | 0 0 0 1 0 0
    
  • -:2つの引数を使用すると、それらの等価性がチェックされます(==一般的に行われます)。これは、異なるサイズのマトリックス(または異なるタイプ)でも機能します。

  • f&gは、両方の入力に別々にgを適用し、2つの結果にfを適用しますx f&g y == f(g(x), g(y))

  • したがって、この場合、2つの等式テーブルを比較します。

こちらからオンラインでお試しください。


2
興味深くエレガントなアプローチ。それに相当する&ものがなければ、Kでできる最も近いことはおそらくで~/{x=/:x}'、これは少し長くなります。
JohnE

17
イエス。これは、コードゴルフの殿堂の競争相手にならなければなりません。
ブライアンゴードン

うわー、分類の=発生をカウントする以外の用途があるとは思っていませんでした。
マイル

37

K、5バイト

これはKで楽しくエレガントなソリューションを持っています!

~/=:'

「グループ」演算子(単項=)は、単語同型に必要な署名を正確に作成します。ベクトルの各要素のインデックスのベクトルを、出現順にグループ化して収集します。

  ="ABBAC"
(0 3
 1 2
 ,4)

  ="DCCDF"
(0 3
 1 2
 ,4)

文字列のペアをベクトルとして取得し、各要素にグループを適用し(=:')、それから「match」(~)、深等式演算子で縮小するだけです。

  ~/=:'("RAMBUNCTIOUSLY";"THERMODYNAMICS")
1
  ~/=:'("BANANA";"SERENE")
0

15

Python 2、41バイト

f=lambda a,b:map(a.find,a)==map(b.find,b)

4
これが、このチャレンジを生み出すきっかけとなった解決策でした!
XNOR

12

CJam、9バイト

r_f#r_f#=

プリント1単語が同形体ある場合と0そうでないなら。

CJamインタープリターでオンラインで試してください。

使い方

r    e# Read a whitespace separated token from STDIN.
_    e# Push a copy.
f#   e# Get the indexes of all characters from the first copy in the second.
r_f# e# Repeat for the second word.
=    e# Check for equality.

10

JavaScript、ES7、62 55 54 52 51バイト

f=(x,y,g=z=>[for(i of z)z.search(i)]+0)=>g(x)==g(y)

ロジックは簡単です。両方の入力を対応する文字インデックス値に変換し、その配列を文字列に変換して比較するだけです。

f=(x, y,                  // Create a function named f which takes two arguments x and y
   g=                     // There is a third default argument to f which equals to
     z=>                  // and arrow function which takes argument z
     [                    // Return this array which is created using array comprehension
      for(i of z)         // For each character of z
      z.search(i)         // Use the index of that character in z in place of the character
     ]+0                  // And finally type cast that array to a string
                          // Here, the array elements are automatically joined by a ','
                          // and appended by a 0.
                          // Its funny how JS type casts Array + Number to a string
   )=>                    // Now the body of function f starts
      g(x)==g(y)          // It simply returns if index map of x equals index map of y

以下のスニペットを使用して上記のコードを試してください。

@ edc65のおかげで2バイト節約


7
+1、試してみたが、うまくいく。+0代わりに+""
edc65

1
@ edc65すごい、WTF型キャスト
オプティマイザー

1
文字列が 'A-Z'であることに気付いたので、indexOfの代わりに検索を安全に使用して、さらに1バイトをカットできます。
edc65

配列の理解は、最終的にes7のカットされていませんか?このコードはどこで機能しますか?私はmozillaでのみ考える
DanielIndie

8

Bash + coreutils、38

[ `tr $@<<<$1``tr $2 $1<<<$2` = $2$1 ]

ここでは真実/偽の通常のシェルのアイデアを使用していることに注意してください-ゼロは成功またはTRUEを意味し、非ゼロはエラーまたはFALSEを意味します。

$ for t in "ESTATE DUELED" "DUELED ESTATE" "XXX YYY" "CBAABC DEFFED" "RAMBUNCTIOUSLY THERMODYNAMICS" "DISCRIMINATIVE SIMPLIFICATION" "SEE SAW" "ANTS PANTS" "BANANA SERENE" "BANANA SENSES" "AB CC" "XXY XYY" "ABCBACCBA ABCBACCAB"; do
> ./isomorph.sh $t
> echo $t $?
> done
ESTATE DUELED 0
DUELED ESTATE 0
XXX YYY 0
CBAABC DEFFED 0
RAMBUNCTIOUSLY THERMODYNAMICS 0
DISCRIMINATIVE SIMPLIFICATION 0
SEE SAW 1
ANTS PANTS 1
BANANA SERENE 1
BANANA SENSES 1
AB CC 1
XXY XYY 1
ABCBACCBA ABCBACCAB 1
$ 

8

ハスケル、33 29

編集:

これは遅すぎますが、2015年3月にのみプレリュードに追加されたapplicativeを使用してこの改善を見つけました。

s%k=g s==g k
g s=(==)<$>s<*>s

旧版:

s%k=g s==g k
g s=[a==b|a<-s,b<-s]

チェック機能は (%)

これは、各文字列に対して「等価レコード」を生成することにより機能します。2つのインデックスijごとに、等しい文字があるかどうかを記録します。レコードは、2つのインデックスi、jのレコードが常に同じ場所*にあるように順序付けられているため、レコードの等価性をチェックすると、文字列が同じパターンであるかどうかが返されます。

たとえば、「ABC」の等価レコードは[1,0,0,0,1,0,0,0,1](trueの場合は1、falseの場合は0)- Trueインデックスがそれ自体と比較される場所があります。それ以外の場所はすべて偽です。(これらのチェックをスキップする方が効率的かもしれませんが、golfngの観点からは難しいです)

* 文字列が同じ長さの場合。それ以外の場合は、レコードの長さが異なるだけでfalseを返します


6

Haskell、45 41バイト

h l=map(`lookup`zip l[1..])l
x!y=h x==h y

Trueまたはを返しますFalse(例:"ESTATE" ! "DUELED"->)True

他の多くの回答に見られるように、map-char-to-first-indexメソッドを使用します。以前のエントリが優先されるため、連想リストが役立ちます。常にフェッチする場所に"aba"なります-> 。[(a,1),(b,2),(a,3)]lookupa1

編集:@Maurisは保存する4バイトを見つけました。


あなたは置き換えることができます(flip lookup$zip l[1..])によって(`lookup`zip l[1..])
リン

6

Brainfuck、169 168 162 144 140 131 130

Alex Pankratov のbff(SPOJおよびideoneで使用されるbrainfuckインタープリター)およびThomas CortのBFI(Anarchy Golfで使用される)と互換性があります。

予想される入力は、タブで区切られた2つの文字列で、2番目の文字列の後に改行はありません。出力は1アイソモルフと0非アイソモルフ用であり、結果を視覚的に確認するのに便利ですが、最短のオプションではありません。(更新:回答の下部に出力として、セパレータとして短いバージョンが\x01あります。)\x00\x00

イデオンのデモンストレーション

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

この問題は、ブレインファックにとって非常に良いことがわかりました。

インデックス付けの基本的な考え方は、現在の文字列プレフィックスの末尾から後方に移動することです。文字が以前に発生していない場合は、文字列プレフィックスの長さを取得できます。例えば:

STATES
123255

コード内のインデックスは実際にはわずかに異なりますが、同じ原則を使用します。

メモリレイアウトは5ブロックです:

0 0 0 0 0 0 c 0 i p 0 c 0 i p 0 c 0 i p 0 0 0 0

c文字、iインデックス、およびp前(インデックス)を表します。最初の文字列が処理されているとき、すべてのpスロットはゼロです。左側のセルcは、インデックスを見つけようとしている現在の文字のコピーを保持するために使用されます。現在の左側のセルは、ポインタナビゲーションを容易にiする-1ためにを保持するために使用されます。

慎重に検討する必要がある多くの条件があります。最後に、(i,p)ペアを比較して同形をチェックし(i,p)、文字列が同形である場合にのみ、左端のペアの左にあるゼロセルのクラスターに到達します。わかりやすくするために、コードのコメントバージョンを示します。

,+
[                       while there is input
  -
  ---------
  >+<                   increment char (adjust later)
  [                     if not tab
    >>-<                set navigation flag
    [                   loop to find index
      <                 travel to copy
      [
        >+<             restore char
        <<<<-<+>>>>>-   compare chars and create copy
      ]
      ++[->+]           travel between navigation flags
      ->+[+<-]          increment index by 2 and go back
      >[<<<<]           proceed if not fallen off string
      <                 compare chars
    ]
    <[>+<-]             restore char (or no op)
    +[->+]              go back to navigation flag
    <->                 adjust char
    >>>                 alignment
  ]
  >
  [                     if tab
    [[-]<<<<<]          erase chars and go to beginning
    >>>>                alignment
  ]
  <,+
]
>>>+>+                  check string lengths and start loop
[
  [<->-]                compare indices
  <[>>>>>]              realign if not equal
  <<<<                  proceed
]
-<[>]                   cell to left is zero iff isomorphs
+++++++[<+++++++>-]
<.

更新:

以下は、\x01同形および\x00非同形の場合に出力されるバージョンです。これは間違いなく、方法[]仕事のために、brainfuckのTruthyとFalseyのより正確な解釈です。唯一の違いは最後にあります。

追加:\x0010バイトを節約するためにセパレーターとして使用するようになりました。

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

5

JavaScript(ES6)、62

hたとえば、PASS-> [1,2,3,3]のように、各単語を単語内の各文字の位置を含む配列にマッピングするaux関数を使用します。h2つの単語を適用した関数が同じ結果を与える場合、trueを返します。

f=(a,b,h=w=>0+[for(c of(n=k=[],w))k[c]=k[c]||++n])=>h(b)==h(a)

// TEST

;[
// True
 ['ESTATE','DUELED']
,['DUELED','ESTATE']
,['XXX','YYY']
,['CBAABC','DEFFED']
,['RAMBUNCTIOUSLY','THERMODYNAMICS']
,['DISCRIMINATIVE','SIMPLIFICATION']

// False:

,['SEE','SAW']
,['ANTS','PANTS']
,['BANANA','SERENE']
,['BANANA','SENSES']
,['XXY','XYY']
,['ABCBACCBA','ABCBACCAB']
]
.forEach(t=>(f(t[0],t[1])?OK:KO).innerHTML+=t+'\n')
Ok<br>
<pre id=OK></pre><br>
KO<br>
<pre id=KO></pre>


1
時々、単純な方が短い;)
オプティマイザー

5

R、78

function(x,y)identical((g=function(z)match(a<-strsplit(z,"")[[1]],a))(x),g(y))

脱ゴルフ:

word_to_num <- function(word) {
   chars <- strsplit(word,"")[[1]]
   match(chars, chars)
}
are_isomorph <- function(word1, word2) identical(word_to_num(word1), 
                                                 word_to_num(word2))

それに私を打つ!(+1)
シャドウトーカー

私が考えるall( (g=...)(x)==g(y))よりも短くなっているidentical...
ジュゼッペ

5

Ruby、83バイト

t=->x{y=0;z=?`;x.gsub!(y[0],z.succ!)while y=x.match(/[A-Z]/);x};f=->a,b{t[a]==t[b]}

これfは、2つの引数を取り、trueor を返す関数ですfalse

説明:

test = -> str {
    y = nil  # we're just initializing this; it doesn't matter to what
             # this is the variable we use to store the `match' result
    z = '`'  # backtick is the ASCII character before `a'
    while y = str.match(/[A-Z]/) do  # while there is an uppercase letter in str
        str.gsub!(y[0], z.succ!)  # replace all instances of the uppercase letter
                                  # with the next unused lowercase letter
    end
    str  # return the new string
}
# self-explanatory
f=->a,b{test[a]==test[b]}

1
これは、4つのバイトを保存する必要がありますt=->x{z=?`;x.chars.to_a.uniq.map{|c|x.gsub!(c,z.succ!)};x};f=->a,b{t[a]==t[b]}、そしてあなたは、交換を取得するためのハッシュを使用する場合は、68にそれを得ることができる:t=->x{h={};i=9;x.gsub!(/./){|c|h[c]||h[c]=i+=1}};f=->a,b{t[a]==t[b]}
blutorange

5

Java、107

(s,t)->java.util.Arrays.equals(s.chars().map(s::indexOf).toArray(),t.chars().map(t::indexOf).toArray())

各文字マップするsと、tその場所には、と平等のためにチェックします。

拡張:

class Isomorphs {
    public static void main(String[] args) {
        java.util.function.BiFunction<String, String, Boolean> f =
            (s, t) -> java.util.Arrays.equals(
                                              s.chars().map(s::indexOf).toArray(),
                                              t.chars().map(t::indexOf).toArray()
                                             )
           ;
        System.out.println(f.apply("XXY", "XYY"));
    }
}

文字列の長さが異なる場合、これが正しく機能するとは思わない。
JohnE

@JohnEはい、そうです。
Ypnypn

ああ、わかりました。「拡張」バージョンは誤解を招くと思います。
JohnE

4

Python 3、85バイト

f=lambda a,b:''.join(map(lambda g:dict(zip(a,b))[g],a))==b
g=lambda a,b:f(a,b)&f(b,a)

この入力/出力はどこにありますか?
DJMcMayhem

@DJMcMayhem gは主な機能でfあり、ヘルパーです。g内部変数の混乱を招く選択がありますがf、それは無関係なバインドされた変数ですg=
xnor

4

Pyth、9バイト

qFmmxdkdQ

次の形式で入力を受け取ります。

"ESTATE", "DUELED"

それが受け入れられない場合、次のコードは10バイトです。

qFmmxdkd.z

次の入力フォームを使用します。

ESTATE
DUELED

文字列表現でcharのインデックスを使用します。


最初の入力形式で問題ありません。私はあなたが平等をチェックするためにどのように減らしているのか興味がありますがF、フォールドとしてどのように機能するのかはわかりません。なに<binary>F
xnor

@xnor <binary>F<seq><binary>折り返され<seq>ます。これは、の<binary>すべての要素ペアの間に点在することと同等です<seq>。したがって、<binary>F2要素のシーケンスでは、.*Pythまたは*Pythonの場合と同じように、単純に関数をシーケンスに適用します。
isaacg

トレーリングQはPythで暗黙的だと思いましたか?
チョイス

@Cyoce当時ではなく、その機能はほぼ1年後の2016年4月に追加されました。
isaacg

4

Matlab、50バイト

f=@(s,t)isequal(bsxfun(@eq,s,s'),bsxfun(@eq,t,t'))

この関数は、スペースを節約するために匿名として定義されています。

例:

>> f=@(s,t)isequal(bsxfun(@eq,s,s'),bsxfun(@eq,t,t'));
>> f('ESTATE','DUELED')
ans =
     1
>> f('ANTS','PANTS')
ans =
     0

4

オクターブ、26バイト

@(s,t)isequal(s==s',t==t')

3
面白そうです。説明?
誇りに思ってhaskeller

==行列の要素ごとの等価であり、そしてためss'異なるサイズである、オクターブの「放送」は、自動的に作動するように同じ大きさの行列を取得しようとする-この場合、行の繰り返しを意味するsとカラムs'
rakslice

@LuisMendoのMatlabソリューションと同じアプローチですが、拡張は明示的です。
rakslice


4

APL(Dyalog)5 4バイト

-1 ngnのヒントのおかげ。

引数として2つの文字列のリストを取る匿名の暗黙のプレフィックス関数。

≡.⍳⍨

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

これは内積であるが、代わりに通常の+×、それは使用しています

 同一性

. そして

ɩの NDEX(各要素の最初の発生)

 両方の引数として使用される単語の2要素リスト全体

単語Aand を呼び出すとB、次のように以前のソリューションを導出できます。

≡.⍳⍨ A B
A B ≡.⍳ A B
(A⍳A) ≡ (B⍳B)
(⍳⍨A) ≡ (⍳⍨B)
≡/ ⍳⍨¨ A B

以前のソリューション

引数として2つの文字列のリストを取る匿名の暗黙のプレフィックス関数。

≡/⍳⍨¨

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

 同一性

/ に渡って

ɩの NDEX(各要素の最初の発生...)

 自撮り(…自体)

¨ それぞれの


内積が見えますか?:)
ngn

@ngnはい、もちろんです。ただ私。
アダム

トップリンクは古いソリューションにリンクすることになっていますか?
ザカリー

残念ながら、これは上位の配列では機能しません:P-
ザカリー

1
@Zacharý約束どおり:ngn.github.io/apl-codegolf-2017/readme.txt
ngn


3

ルビー、50バイト

30バイト短いルビーコード。私が解決策を見る前に書かれ、両方の文字列の各文字について、その文字の最初の出現のインデックスが一致するかどうかをチェックします。すなわち。文字列を正規化された形式01121などに変換し、それらを比較します。

->x,y{g=->z{z.chars.map{|c|z=~/#{c}/}};g[x]==g[y]}

ideoneのテストケース追加のボーナスとして、これはideoneのコードの強調表示を壊します。


3

、5バイト

¤=´×=

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

説明

       -- implicit input A, B (strings aka character lists)       | "ab" "12"
¤=     -- apply the following function to A & B, then compare:    | [1,0,0,1] == [1,0,0,1] -> 1
  ´×   --   Cartesian product with itself under                   | ["aa","ba","ab","bb"] ["11","21","12","22"]
    =  --   equality                                              | [ 1  , 0  , 0  , 1  ] [ 1  , 0  , 0  , 1  ]

3

PCRE、84バイト

^((.)(?=.+ (\3.|)(.))(?=((?=(\2|)?+.* \3\4(\7?(?(?=.*+\6)(?!\4).|\4))).)+ ))+. \3..$ 

件名は、OPのようにスペースで区切られた2つの単語である必要があります。以下に大まかな説明を示します。

最初の単語の各文字Xについて:

2番目の単語を先読みし、後方参照を確立して、Xに対応する2番目の単語の文字Yと同様に、私たちがどれだけ遠くにいるかを思い出します。

最初の単語の現在位置を過ぎた各文字Zについて:

上記と同様の後方参照を確立します。

2番目の単語の対応する文字を先読みし、Z = XがYに一致するかどうかを確認し、そうでない場合はY以外の文字に一致します。

この反復は、最初の単語の最後から2番目の文字まで一致したら終了できます。この時点で、それ以上の検証は必要ないため、残っているのは単語が同じ長さであることをテストすることだけです(2番目の単語の蓄積部分文字列を含む後方参照は常に1文字後ろにあります)。


2

ルビー、31バイト

->a{!!a.uniq!{|s|s.tr s,'a-z'}}

文字列の配列を受け取り、互いに同型であるかどうかをチェックするProc。tr s,'a-z'これらの引数を使用するsと、各文字がアルファベットのn番目の文字に置き換えられ、文字列が正規化されnます。例えば、estateなりfbedefそうであるよう、dueled


1

コブラ、72バイト

do(a='',b='')=(for i in a get a.indexOf(i))==for i in b get b.indexOf(i)

これでAB CCテストケースがFalseとマークされますか?
xnor

@xnor今固定
Οurous

1

JavaScript(ES5)、142 98

かなり大きなものですが、ES5バージョンはまだ見ていません。

for(l=j=2;j--;){c=prompt();for(i=c.length;i--;)c=c.replace(RegExp(c[i],"g"),i);b=l==c;l=c}alert(b)

最初の文字が出現するたびに、その逆インデックス値に置き換えます。すべてのキャラクターに対してこれを繰り返します。

両方の入力に対して同じことを行い、生成されたパターンを比較します。

比較は非常にいですが、配列を使用してそれを保存および比較することは望ましくありません。


1
バイトに移動;l=cfor(l=j=2;j--;て保存できませんか?
ジョナサンフレッチ

1

Perl、38バイト

($_,$a)=@ARGV;eval"y/$_/$a/";say$_~~$a

として実行 perl -E '($_,$a)=@ARGV;eval"y/$_/$a/";say$_~~$a' RAMBUNCTIOUSLY THERMODYNAMICS

trueの場合は1を出力し、falseの場合は何も出力しません。



1

C ++、213の 196 162バイト

ザカリーのおかげで-51バイト

#include<map>
#define F(X,x)for(auto&e:X){if(x.end()==x.find(e))x[e]=65+x.size();e=x[e];}
auto i=[](auto a,auto b){std::map<int,int>c,d;F(a,c)F(b,d)return a==b;};

ラムダを呼び出すには、std::stringデータ型の2つの引数を渡す必要があります

テストするコード:

std::initializer_list<std::pair<std::string, std::string>> test{
    {"ESTATE","DUELED"},
    {"DUELED","ESTATE"},
    {"XXX","YYY"},
    {"CBAABC","DEFFED"},
    {"RAMBUNCTIOUSLY","THERMODYNAMICS"},
    {"DISCRIMINATIVE","SIMPLIFICATION"},
    {"SEE","SAW"},
    {"ANTS","PANTS"},
    {"BANANA","SERENE"},
    {"BANAnA","SENSES"},
    {"AB","CC"},
    {"XXY","XYY"},
    {"ABCBACCBA","ABCBACCAB"},
    {"ABAB","AC"}
};

for (const auto& a : test) {
    std::cout << "Test with " << a.first << " and " << a.second <<
        " outputs : " << (i(a.first, a.second)?"TRUE":"FALSE") << '\n';
}

ヘッダーファイルを含むiostream、テストするコードのstring場合


1
文字列ヘッダーから何かを使用しているようには見えないので、それを削除してユーザーに自分で含めることができますか?
ザカリー

これは161バイトで機能しますか?
ザカリー

@Zacharýのe引数としてを追加するとfind、はい、機能します
-HatsuPointerKun

あなたがBrainfuckに負けた瞬間> _ <
ザカリー

1

JavaScript(ES6)、52 51 50バイト

このバージョンは配列内包表記を使用せず、カリー化構文を使用して入力を受け取ります。

a=>b=>(f=x=>0+[...x].map(c=>x.search(c)))(a)==f(b)

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