「展開」された回数を出力する正方形プログラムを作成する


22

1より大きい奇数の整数Nに対して、テキストの正方形のブロック、幅N文字、高さNを考えます。

例として、N = 5とし、テキストを次のようにします。

MLKJI
NWVUH
OXYTG
PQRSF
ABCDE

これは、左下隅から反時計回りに螺旋状になったアルファベット(Zを除く)であることに注意してください。まるで丸いカーペットのようなものです。

スパイラルアルファベット

テキストを時計回りに4分の1回転だけ「展開」FGHIすると、次のABCDE結果と同じレベルになります。

     PONM
     QXWL
     RYVK
     STUJ
ABCDEFGHI

この展開は、テキストが1行になるまでさらに7回実行できます。

         SRQP
         TYXO
         UVWN
ABCDEFGHIJKLM

             UTS
             VYR
             WXQ
ABCDEFGHIJKLMNOP

                WVU
                XYT
ABCDEFGHIJKLMNOPQRS

                   XW
                   YV
ABCDEFGHIJKLMNOPQRSTU

                     YX
ABCDEFGHIJKLMNOPQRSTUVW

                       Y
ABCDEFGHIJKLMNOPQRSTUVWX

ABCDEFGHIJKLMNOPQRSTUVWXY

チャレンジ

課題は、展開パターンに再配置して実行したときに、1/4回転で「展開」した回数を出力するテキストのN×Nブロックであるプログラムを作成することです。

ここには本当に2つのコンテストがあります:(うまくいけば乱雑になりません)

  1. 最小のNでこれを行います(N = 3の制限まで)
  2. 最大のNでこれを行います(制限なし)

受け入れられる回答はありませんが、これらの各カテゴリの勝者には、少なくとも50の報奨金が返されます。同点の場合、最も古い回答が勝ちます。

コードブロックが

MyP
rog
ram

そのまま実行すると、0が出力されます。

ランニング

   rM
   oy
ramgP

1を出力するはずです。

ランニング

     or
ramgPyM

出力されるはずです2。

ランニング

       o
ramgPyMr

出力3。

最後に、実行ramgPyMroすると4が出力されるはずです。

詳細

  • 出力は、それ自体でstdout(または最も近い代替)に出力する必要があります。入力はありません。
  • コードでは、印刷可能なASCII(スペースを含む16進コード20〜7E)のみを使用できます。
  • 展開配置の空きスペースはスペースで埋められます。(左に展開しない限り。)
  • 有効な出力が必要なのは、完全に正方形から完全にフラットまでの配置だけです。他の手配は実行されません。
  • 独自のソースを読むことはできません。
  • コメントを使用できます。
  • 多くの言語でプログラム0が機能するため、N = 1は除外されます。
  • 必要に応じて、右ではなく左に展開できます。例えば

    MyP
    rog
    ram
    

    になる

    Pg
    yo
    Mrram
    

    等々。このようにローリングしても、余分なスペースは追加されません。行が終わりました

(関連:回転した回数を出力する長方形のプログラムを書く


私は「挑戦」の段落を読む前に、私は、出力自体が巻き出さというプログラムの書き込みに挑戦を期待していた
ジョンドヴォルザーク

1
なぜNは奇数でなければならないのですか?
ジョンドヴォルザーク14年

1
@JanDvorak Nは奇数である必要はなかったと思いますが、スパイラルがより標準化されます。そのままですが、コメントが見つかった場合は、N = 2をコメントとして投稿してください。
カルビンの趣味14年

8
アイデア:右側の「カーペット」を展開すると、空白文字で始まる行が多数作成され、Pythonなどの言語が削除されます。左への展開を許可する場合、追加の空白は不要であり、Pythonは(理論的に)可能です。
ファルコ14年

5
あなたは無限の素晴らしい挑戦のアイデアを備えた魔法の本を持っていますか?他にどのようにこのような興味深い課題を思いつき続けていますか?
ジャスティン14年

回答:


27

Golfscript、N <-[5,7 ..]

.   .
 . . 
 ..  
.  .#
],9\-

完全に展開:

],9\-#  .   .  .  . . ...

説明:

  • . (複数回)-入力を複製します
  • ] -スタックを単一の配列に収集します
  • , -その長さを取る
  • 9\- -9から減算します
  • # -行コメント

空白はNOPですが、他のNOPも同様に機能します。

完全にロールアップされ、入力として9つのコピー(コンテンツは無視されます)がスタックとして使用されます。9-9 = 0; 展開されていません。

各展開は、コメントの後ろにもう1つのドットを隠し(重複)、スタックを1回縮小し、出力を増やします。

完全に展開され、スタックとして入力(コンテンツは無視されます)のみを使用します。9-1 = 8; 8回展開されました。

N> 4でも同じアプローチが機能します:92 * N + 1の適切な値に変更し、同じスパイラルパターンを使用してドットのパターンを拡張(複製)します。


まあ、誰かがN = 3を見つけない限り、これは両方のカテゴリーで勝ちの答えになります。
カルビンの趣味14年

3
@ Calvin'sHobbies私は完全なペニスになり、同様に左展開ソリューションを投稿すべきですか?:-)
ジョンドヴォルザーク

何故なの。別の答えはそうでなければありそうにないようです:P
カルビンの趣味14年

1
両方の方向に展開できるものを探してみませんか?:)
ベータ崩壊14年

@BetaDecayうーん... :-)
ジョンドヴォルザーク14年

13

GolfScript、N = 4

これは、元の仕様として正しく機能します。

.. . 
...# 
.#.~
],8-

展開は次のとおりです。

    ...
    #..
    ..
],8-~#.

       .#.
       ...
],8-~#. ..

          ..
          .#
],8-~#. ....

            ..
],8-~#. ....#.

              .
],8-~#. ....#..

],8-~#. ....#...

ここで試してみてください


この取り決めをどう思いましたか?
誇りに思ってhaskeller 14年

3
あなたがわからない場合は、それが良いでしょう@proudhaskeller ...
オプティマイザ

8
ソリューションをブルートサーチしましたか?
誇りに思ってhaskeller 14年

特別な課題:.sと#s から1つを作成できますか?
ジョン・ドヴォルザーク

末尾が好き~です。たぶん、N = 3で盗むことができますか?
ジョンドヴォルザーク14年

9

APL、N = 3

201
340
5|0

展開:

   32
   40
5|001

     43
5|00102

       4
5|001023

5|0010234

オンラインでお試しください。

5で割ったその数値の剰余を計算します。最後の行の結果のみが出力されます。

APL、N = 2

⍬∞
≡0

展開:

  ⍬
≡0∞

≡0∞⍬

オンラインでお試しください。

配列の深さ(次元または長さと混同しないでください)を返します。

  • 0配列ではありません。したがって、深さは0です。
  • 0∞2つの項目0(無限)を持つ配列です。深さ1です。
  • 0∞⍬深さ1の空の配列である別の項目があります0∞⍬。深さ2もあります。

これらの2つのプログラムは、オンラインインタープリターでも機能します。後者が構文的に正しいかどうかはわかりません。

⍬0
≡∞


⍬¯
≡0

APL、N> = 4の場合

N = 4の場合:

∞  ∞
 ∞∞
∞ ∞
⍴1↓∞

完全に展開:

⍴1↓∞  ∞  ∞ ∞ ∞∞∞

N = 5の場合:

∞   ∞
 ∞ ∞
 ∞∞
∞  ∞
⍴1↓ ∞

完全に展開:

⍴1↓ ∞   ∞   ∞  ∞  ∞ ∞ ∞∞∞

1↓配列内のアイテムを削除します。引数がスカラーの場合は、空の配列も返します。配列の長さを取得します。


説明はありますか?
誇りに思ってhaskeller 14年

@proudhaskeller編集。
jimmy23013 14年

理想的には、どのNにも同じ深さのロジックを使用できます。APLのおかげで
オプティマイザー14年

@Optimizerそれほど簡単ではありません。最後の行の前のものはまだ構文的に正しい必要があります。そのため()[]、不要な場所に表示されるようなほとんどの関数やその他の句読点文字は使用できません。
jimmy23013 14年

私は次のように意味しました: `⍬\n⍬⍬0\n≡∞`(正確にはそうではありませんが、あなたはアイデアを得る)
オプティマイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.