アリスは、Brainfuckをクライアント側とサーバー側の両方の開発の主要言語として使用している会社のインターンです。アリスは最初のコードを書いたばかりで、最初のコードレビューの準備をしているので少し緊張しています。
アリスはコードを適切にフォーマットして見栄えを良くしたいと考えていますが、328ページの会社コードスタイルガイドを読む時間がないため、完全な正方形としてフォーマットすることにしました。残念ながら、正方形を形成するにはコード長が不十分な場合があるため、彼女は中央に長方形の隙間を残すことにしました。ギャップは完全に中央に配置され、可能な限り正方形に近い必要があります。
例
++++++ +++++ +++++ +++++ +++++ +++++
++++++ +++++ +++++ + ++ ++ ++ +++++
++++++ ++ ++ + + + ++ + +
++++++ +++++ +++++ +++++ ++ ++ +++++
++++++ +++++ +++++ +++++ +++++ +++++
Perfect OK Acceptable Unacceptable No way! Nope.
Aliceを支援するプログラムまたは関数を作成します。Aliceのコードを入力文字列として指定し、可能であれば、以下で説明するように適切にフォーマットされたコードを出力します。フォーマットが不可能な場合、泣いている絵文字を出力します:~(
。
これはコードゴルフなので、回答はバイト単位でスコアリングされ、より少ないバイトが目標になります。
制約
- プログラムまたは関数は、単一の文字列を入力として使用し、1行以上のテキストを出力する必要があります(または、関数を実装する場合は、複数行の文字列または文字列の配列を返します)。
- 入力文字列には、空白を含むASCII文字を含めることができます。
- 入力内のすべての空白は無視する必要があります。コードの長さを数えるべきではなく、出力に使用すべきではありません。
- 入力文字列に少なくとも1つの非空白文字が含まれています。
- フォーマットされたコードには、入力コードと同じ順序で同じ非空白文字が含まれている必要があります。
- 書式設定されたコードは完全な正方形である必要があります。つまり、すべての行は同じ長さで、行数は行の長さと等しくなければなりません。
- フォーマットされたコードには、中央にギャップが含まれる場合があります。
- ギャップにはスペース文字(ASCIIコード32)のみを使用できます。
- ギャップ(存在する場合)は長方形でなければなりません。
- フォーマットされたコードのすべての行には、少なくとも1つの非空白文字が含まれている必要があります。つまり、ギャップ幅は厳密に正方形の幅より小さくなければなりません(5x5の正方形ではギャップ5x1は受け入れられません)。
- ギャップは水平でなければなりません。つまり、ギャップ幅はギャップ高さ以上でなければなりません。
- ギャップは完全に中央に配置する必要があります。
- したがって、ギャップの幅と高さのパリティは、正方形の幅のパリティと同じである必要があります(たとえば、5x5の正方形のギャップは1x1、3x1、または3x3です)。
- 可能であれば、隙間のない正方形を出力します。
- 複数のソリューションの場合、ギャップが正方形に最も近いものを選択します。つまり、ギャップ幅とギャップ高さの差は最小です(たとえば、ギャップ10x10は8x6よりも好ましく、8x6は6x2よりも好ましいです)。
- それでも同点の場合は、ギャップ面積が最小のソリューションを選択します(たとえば、ギャップ2x2は4x4よりも望ましい)。
- コードをまったくフォーマットできない場合は、を出力します
:~(
。 - 最後の行の後の改行はオプションです。
- [新規]コードが33未満の文字はすべて空白であると想定しても安全です。ゴルフに役立つことを願っています。
テスト
Input Output Code length Comment
+++++++++ +++ 9 Alice is lucky,
+++ her code perfectly fits a square.
+++
++++++++ +++ 8 Though code length isn't enough for a square,
+ + a small gap fixes it.
+++
++++++ :~( 6 No luck, code cannot be formatted.
Hello, Hell 12 Input may contain any ASCII characters,
World! o , but whitespaces in input should be ignored.
W o
rld!
+++++ + +++++ +++++ 22 Gap is not required to be a square,
+++++ + +++++ +++++ it can be a rectangle.
+ +
+++++
+++++
+++ + +++ ++++++++ 28 There exists another solution:
+++ + +++ + + 6x6 square with 4x2 gap,
+++ + +++ + + but in Alice's opinion square gap
+++ + +++ + + makes code more readable.
+ +
+ +
+ +
++++++++
難しいテスト
This must be Thism 24 7x7 with 5x5 gap looks good,
5x5 with 1x1 ustbe but 5x5 with 1x1 gap is better,
gap. 5x 5w because gap area is smaller.
ith1x
1gap.
+++ +++ +++ :~( 18 In case you tried 5x5 square
+++ +++ +++ with 7x1 gap ;)
資源
スペースを節約するために、tio.runでサンプルコードと追加のテストケースを見つけることができます。
[新規]あなたは見てとることができ、100文字件までの入力のために受け入れソリューションのテーブルを。幅と高さを入れ替えたのは、もっと直感的に見えるようだからです。
インスピレーション:テキストの正方形
変更点
2つのテストを追加し、サンプルコードのバグを修正しました。
100までのソリューションの表を追加し、空白の説明を追加しました。