2つの文字列が与えられた場合、2つの間の変換テーブル(置換暗号)を見つけ、変換が不可能な場合はfalseを出力します。答えは最小化し、左から右に作成する必要があります。単語間で翻訳される最初の文字は、翻訳テーブルの最初の文字でなければなりません。これに加えて、翻訳されていない(元の場所と同じ場所にある)手紙は、翻訳テーブルに入れないでください。
おそらく例を通して最も簡単に定義できます:
有効なケース
"bat", "sap" => ["bt","sp"]
順序に注意してください。出力は["tb","ps"]
このチャレンジでは無効です。
"sense", "12n12" => ["se","12"]
n
は1対1の関係であるため、がどのように変換されないかに注意してください。
"rabid", "snail" => ["rabd","snal"]
i
は1対1の関係であるため、がどのように変換されないかに注意してください。
"ass", "all" => ["s","l"]
Aは含まれず、同じままで、パターンマッチのためにs
マッピングできますl
。
"3121212", "ABLBLBL" => ["312","ABL"]
パターンと完全に一致します。
偽のケース
"banana", "angular" => false
(同じ長さではなく、不可能です)。
"animal", "snails" => false
(各文字は、翻訳の両側で1回のみ使用できます)。
"can","cnn" => false
(nは変換で暗黙的に使用されるため、n-> aで変換テーブルを定義することは無効になります)
したがって、これ[aimal,sails]
は無効な答えであり、これは偽物です。
"a1", "22" => false
「警告」を参照してください。これは偽物としてリストされています。ので、この場合、それはだa
と1
の両方にマップすることはできません2
。(各文字は、翻訳の両側で1回のみ使用できます)。
この答えは良いベンチマークのようです:https : //codegolf.stackexchange.com/a/116807/59376
リストにない2つの単語ペアの機能について質問がある場合は、この実装を延期してください。
I / Oルール
- 入力は、2要素の配列または2つの個別の入力として可能です。
- 出力は、表示方法と同様に、配列または改行/スペースで区切られています。
- 誤った出力は、0、-1、またはfalseです。エラー/空の出力でも問題ありません。
- あなたは
a
平等b
でもa
なくb
、空でもないことを保証されます。 a
およびb
は、印刷可能なASCIIのみの文字のシーケンスです。
注意事項
- 翻訳は左から右に行わなければなりません。例1を参照してください。
- 同じままの文字を出力しないでください。
- あなたのプログラムは、二つの文字列にかかる場合があります
a
とb
。 - 各文字は、翻訳の両側で1回のみ使用できます。これが、翻訳
snails
をanimals
不可能にするものです。 - 再帰的な置換は発生しません。再帰的な置換の例:
"a1","22"->[a1,12]
aが最初に1に置換され、結果の両方の1が2に置換されます。これは正しくありません。すべての翻訳が互いに独立して行われていると仮定してください。これは偽りです。意味:[a1,12]の変換テーブルを持つ「a1」は12(22ではなく)に評価されます