バックグラウンド:
現実の世界での基本的な加算や乗算などの標準演算は、次のように機能します。
12 + 123 = 135
そして
12 * 123 = 1476
それは面白くて退屈ではありません!多くの学校では、これをすでに公式アルゴリズムの実践、実践、実践として解釈しています。これは、かなり厳格で退屈な数学的食事を意味し、この課題で意図されているものではありません。私たちの最愛のサイトでいくつかの楽しみをする準備をしてください。
2つの正の整数を追加し、その結果のすべての数字を再度追加するプロセスを検討してください。1桁のみが取得されるまで、追加を繰り返します。例えば:
- 結果
12 + 123
は135です。 - 135のすべての数字を追加して取得し
1 + 3 + 5 = 9
ます。
この繰り返し加算で1桁の値9を取得するために必要なステップ数は2です。
前の加算プロセスと同様に、2つの正の整数の乗算は同じプロセスに従います。結果のすべての数字を乗算し、1桁だけが残るまでこのプロセスを繰り返します。上記の例を見てください。
- 結果
12 * 123
は1476です。 - 取得する1476のすべての数字を乗算します
1 * 4 * 7 * 6 = 168
。 - 168のすべての桁を再度乗算します
1 * 6 * 8 = 48
。 - 取得し
4 * 8 = 32
た48のすべての桁を再度乗算します。 - 取得し
3 * 2 = 6
た32のすべての数字をもう一度乗算します。
この繰り返される乗算で1桁の値6を取得するために必要なステップ数は5です。
この挑戦の酒と数学表記の誤用を避けるために、私はこれらの2つのダミーの表記を導入:(+)
そして(*)
、あなたはあなたが好きな表記を使用する以下のように、仕事を:
- 単一の値を取得するための繰り返し加算プロセスの操作は
12 (+) 123 = 9
です。 - 単一の値を取得するために繰り返される乗算プロセスの操作は
12 (*) 123 = 6
です。
チャレンジ:
課題は、実行可能なプログラムまたは機能のいずれか書くことにある操作の両方を背景技術の項で説明したように:(+)
および(*)
。
入力:
プログラムまたは関数の入力は、2つの正の整数と1つの演算で、(+)
とのいずれか(*)
です。入力の形式は、プログラマーの任意の選択です。たとえば、入力をフォーマットするa (+) b
か、F(a, (+), b)
または任意のフォーマットを使用できます。
出力:
プログラムまたは関数の出力には、操作の結果と、必要に応じてフリースタイル形式で必要なステップ数が含まれている必要があります。
テストケース(入力および出力形式を無視):
81 (+) 31 --> (4 ; 2)
351 (+) 14568 --> (6 ; 3)
21 (*) 111 --> (8 ; 3)
136 (*) 2356 --> (0 ; 2)
一般的なルール:
- これはcode-golfであるため、バイト単位の最短回答が課題に勝ちます。
esolangが通常の言語で回答を投稿することを妨げないようにしてください。プログラミング言語で可能な限り短い回答を提供することにより、この課題をお楽しみください。賢明な回答と明確な説明を投稿すると、使用するプログラミング言語に関係なく、回答が高く評価されます(したがって、賛成票になります)。 - 回答には標準ルールが適用されるため、STDIN / STDOUT、適切なパラメーターを使用した関数/メソッド、完全なプログラムなどを使用できます。選択はユーザー次第です。
- 可能であれば、プログラムは大きな数値を適切に処理できます。そうでない場合は、それで十分です。