動機
で、この挑戦あなたのタスクは、2つの文字列を乗算した、これは当然の文字列の平方根を取るための方法を紹介します。
どのように機能しますか?
文字列(たとえばpub
)を指定すると、最初に行う必要があるのは、各文字のASCIIコードを決定することです。
"pub" -> [112, 117, 98]
次に、各値を[0..94]
減算してこれらのコードを範囲にマッピングし32
ます。
[112, 117, 98] -> [80, 85, 66]
ここで、各値のルートモジュロを見つける必要があります95
(たとえば40*40 % 95 = 80
、を選択することもできます55
)。
[80, 85, 66] -> [40, 35, 16]
そして最後に、範囲にマッピング[32..126]
し直して、文字列に変換します。
[40, 35, 16] -> [72, 67, 48] -> "HC0"
確かに"HC0" ⊗ "HC0" = "pub"
、ここで他の課題からのソリューションで検証できるように。
モジュラー演算に精通している人は、おそらく平方根モジュロ95
が常に存在するとは限らないことに気付いたでしょう2
。たとえば、にはルートがありません。そのような場合、文字列の平方根が定義されておらず、プログラム/関数がクラッシュしたり、無限にループしたりする可能性があります。
便宜上、平方根を持つ文字のリストを示します(最初の文字はスペースです):
!$%&)+03489:>CDGLMQVW]`bjlpqu
ルール
- あなたは、引数として文字列(または文字のリスト)を受け取り、返すプログラム/機能書きます任意のそれが存在する場合は平方根を
- 入力には常に平方根があると仮定できます
- 入力は空の文字列で構成できます
- 入力は印刷可能な範囲(
[32..126]
)になります - 出力はコンソールに出力されるか、平方根が存在する場合は文字列を返します
- 平方根が存在しない場合、プログラム/関数の動作は未定義のままになります
- ルートをコンソールに印刷することを選択した場合、末尾の改行または空白は問題ありません
テストケース
これらは必ずしも唯一のソリューションではないことに注意してください。
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(印刷可能な範囲)である必要がありますが、これはタイプミスです-ごめんなさい。