---
id: 5e44412c903586ffb414c94c
title: 計算の縦書き整形プログラム
challengeType: 10
forumTopicId: 462359
dashedName: arithmetic-formatter
---

# --description--

<a href="https://replit.com/github/freeCodeCamp/boilerplate-arithmetic-formatter" target="_blank" rel="noopener noreferrer nofollow">このプロジェクトには Replit スターターコードを使用します</a>。

-   まず、Replit でプロジェクトをインポートします。
-   すると、`.replit` ファイルのウィンドウが表示されます。
-   `Use run command` を選択して `Done` ボタンをクリックします。


# --instructions--

小学校の算数では計算問題を解きやすくするために縦書きにすることが多くあります。 たとえば「235 + 52」を次のように記述します。

```py
  235
+  52
-----
```

計算問題を表す文字列のリストを受け取り、問題を縦書きに整形して返す関数を作成してください。 この関数はオプションで第 2 引数を受け取れるようにしてください。 第 2 引数が `True` に設定されている場合は、解答を表示する必要があります。

## 例

関数呼び出し:

```py
arithmetic_arranger(["32 + 698", "3801 - 2", "45 + 43", "123 + 49"])
```

出力:

```py
   32      3801      45      123
+ 698    -    2    + 43    +  49
-----    ------    ----    -----
```

関数呼び出し:

```py
arithmetic_arranger(["32 + 8", "1 - 3801", "9999 + 9999", "523 - 49"], True)
```

出力:

```py
  32         1      9999      523
+  8    - 3801    + 9999    -  49
----    ------    ------    -----
  40     -3800     19998      474
```

## ルール

入力された問題が正しく整形されている場合、この関数は正しい変換結果を返します。それ以外の場合は、ユーザーにとって意味のあるエラーを記述した**文字列**を**返します**。


- エラーを返す場合:
  - 関数に入力した**問題の数が多すぎる**場合。 上限を **5** つとし、それを超える場合は `Error: Too many problems.` (エラー: 問題が多すぎます) を返します。
  - 関数が受け取ることのできる適切な演算子は**足し算**と**引き算**です。 掛け算と割り算はエラーを返します。 この箇条書きで指示していない他の演算子についてはテストする必要はありません。 次のようなエラーを返します: `Error: Operator must be '+' or '-'.` (エラー: '+' または '-' の演算子を使用してください)。
  - 数値 (オペランド) にはそれぞれ数字だけしか入れることができません。 数値以外の場合、関数は次のエラーを返します: `Error: Numbers must only contain digits.` (エラー: 数値には数字のみを含める必要があります)。
  - それぞれのオペランド (演算子の両側の数値) の幅は最大 4 桁です。 それ以外の場合は、次のようなエラー文字列を返します: `Error: Numbers cannot be more than four digits.` (エラー: 数値は 4 桁以内にする必要があります)。
- ユーザーが問題を正しい形式で入力した場合は、次のルールに従って変換結果を返します。
  - 2 つの項の長い方と演算子の間が、スペース 1 つ分空くようにしてください。演算子は 2 つ目の項と同じ行に置き、両方の項は与えられたとおりの順序に配置してください (1 つ目の項を上に、2 つ目の項を下に配置してください) 。
  - 数値は右揃えにする必要があります。
  - それぞれの問題の間に 4 つのスペースが必要です。
  - それぞれの問題の一番下にダッシュが必要です。 ダッシュは、各問題の全体の長さに沿った長さにする必要があります (上の表示例を参考にしてください)

## 開発

`arithmetic_arranger.py` にコードを記述してください。 開発時には `main.py` を使用して `arithmetic_arranger()` 関数をテストできます。 「Run」ボタンをクリックすると `main.py` が実行されます。

## テスト

このプロジェクトの単体テストは `test_module.py` にあります。 `test_module.py` のテストを `main.py` で実行できるようになっています。 「Run」ボタンを押すと自動的にテストが実行されます。 または、コンソールに `pytest` と入力してテストを実行することもできます。

## 提出

プロジェクトの URL をコピーし、下記に提出してください。

# --hints--

計算問題を正しく整形し、すべてのテストを成功させる必要があります。

```js

```

# --solutions--

```js
/**
  Backend challenges don't need solutions,
  because they would need to be tested against a full working project.
  Please check our contributing guidelines to learn more.
*/
```
