逆にインデントすると、コードがより速く実行できるため、コンパイラは「ブランチ」の最上部からツリー設計パターンのようにコードを処理できると聞きました。これは、重力によりコードのコンパイルにかかる時間が短縮され、データ構造の効率が向上するためです。Javaスクリプトの例を次に示します。
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
しかし、何らかの理由で、メモ帳にはこれを自動的に行う設定がないため、それを行うプログラムが必要です。
説明
提出には、入力としてコードスニペットを使用し、インデントを反転し、結果のコードを出力する必要があります。
これは、次の手順で実行されます。
コードを行に分割します。各行はゼロ個以上のスペースで始まります(タブはありません)。
コード内のすべての一意のインデントレベルを見つけます。たとえば、上記の例では、これは
0 4 8 12
このインデントレベルのリストの順序を逆にし、逆のリストを元のリストにマッピングします。これは言葉で説明するのは難しいですが、例では、次のようになります
0 — 12 4 — 8 8 — 4 12 — 0
このマッピングを元のコードに適用します。この例では、0スペースのインデントがある行は12スペース分インデントされ、4スペースは8スペース分になります。
入出力
必要に応じて入力と出力を提供できます(STDIN / STDOUT、関数パラメーター/戻り値など)。ご使用の言語が複数行入力をサポートしていない(または単にしたくない)場合は、|
代わりに文字を使用して行を区切ることができます。
入力は印刷可能なASCII +改行のみで構成され、空の行は含まれません。
テストケース
入力:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
出力:上記のサンプルコード。
入力:
a
b
c
d
e
f
g
h
出力:
a
b
c
d
e
f
g
h
入力:
1
2
3
2
1
出力:
1
2
3
2
1
入力:
foo
出力:
foo