Inscriptio Labyrinthica


22

アストゥリアス王サイロの埋葬場所には、SILO PRINCEPS FECITサイロ王がこれを作った)と書かれた碑文があります。

SILO PRINCEPS FECIT

最初の文字は真ん中にあり、そこから外側に向かって放射状に広がる非対角線方向に向かって読みます。最後の手紙は四隅すべてにあります。この課題では、プロセスを一般化してそれらを作成します。

入力

文字列(または同等のもの)、および整数。入力について次のことを想定できます。

  • 文字列の長さは奇数になります。
  • 整数は、1からストリングの長さの2倍未満の奇数です。

出力

高さまたは幅に整数を使用した、文字列のinscriptio迷路(高さの例についてはモデルを参照)。出力は、スペースを含まない各文字、システム/言語のデフォルトとして改行する必要があります。

テストケース

1または(長さ* 2-1)を入力すると、水平または垂直の回文が発生することに注意してください。

 Input: FOO, 3    Input: BAR, 1    Input: BAR, 3    Input: BAR, 5

Output: OOO      Output: RABAR    Output: RAR       Output: R
        OFO                               ABA               A
        OOO                               RAR               B
                                                            A
                                                            R

 Input: ABCDE, 5   Input: ABCDE, 3   Input: *<>v^, 5

Output: EDCDE     Output: EDCBCDE           ^v>v^
        DCBCD             DCBABCD           v><>v
        CBABC             EDCBCDE           ><*<>
        DCBCD                               v><>v
        EDCDE                               ^v>v^

得点

これはので、バイト単位の最短回答が勝ちです。 標準的な抜け穴は禁止されています。



入力にスペースを含めることはできますか?もしそうなら、それらはどのように扱われるべきですか?
ニトロドン

1
入力を文字のリストとして取得できますか?
ロビンライダー

1
@Charlieは明らかに、あなたはすべての私のPerl6の答えを逃してきた:-)私はあまりにもあなたからの回答を期待し、それがスペインの第五王に触発されていますので、(よくAsturiesのが、Asturiesがたエスパーニャ、YトロDEMASがたティエラconquistao笑)
user0721090601

1
高さの代わりに幅をとってもいいですか?
attinat

回答:


6

J、27バイト

([{~]+/&(|@i:)#@[-1+])-:@<:

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

例では、高レベルのアプローチを明確にします。

検討する 'ABCDE' f 3

求めているのは、1 0 1andの「クロス加算」テーブルであり3 2 1 0 1 2 3、次のようになっています。

4 3 2 1 2 3 4
3 2 1 0 1 2 3
4 3 2 1 2 3 4

次に、元の文字列からこれらのインデックスを取得します[{~

コードの残りの部分はすべて退屈な算術であり、を使用i:して引数1 0 1and を構築します3 2 1 0 1 2 3


6

ゼリー、12バイト

Uṡṛ‘HɗŒBŒḄZY

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

文字列を左、高さを右引数とするダイアディックリンク。改行を含む文字列を返します。文字列のリストが出力に受け入れられた場合、最終的Yなバイトを削除することができます。興味深いことに、オリジナルの「SILO PRINCEPS FECIT」は、TIOで見ると、3DダイヤモンドのASCIIアートのように見えます。

説明

U            | Reverse input
 ṡ   ɗ       | All overlapping substrings of the length given by:
  ṛ          | - The right argument
   ‘         | - Incremented by 1
    H        | - Halved
      ŒB     | Concatenate to the reverse, keeping a single copy of the last character (so creating a palindrome)
        ŒḄ   | Do the same, but this time using the lists of characters generated by the last atom
          Z  | Transpose
           Y | Join with newlines

2
試しにクリックしてみて、はい、確かに、3Dを実行します。奇妙だがクール。
user0721090601

6

R93 91 87バイト

-ジュゼッペのおかげで2バイト。OPで許可されているように、高さではなく幅を入力して-4バイト。

function(s,W,w=W%/%2,h=length(s)-w-1)write(s[1+outer(abs(-w:w),abs(-h:h),`+`)],1,W,,"")

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

入力を文字のベクトルとして受け取ります。重要な部分はs[1+outer(abs(-w:w),abs(-h:h),'+')]です。

wh(2w+1)×(2h+1)

(i,j)1+|ih|+|jw|abs(-w:w)abs(-h:h)abs(-h:h)[h,h1,h2,,2,1,0,1,2,,h1,h]outer(abs(-2:2), abs(-1:1), '+')

32123
21012
32123

(Rは1から始まるため、1を追加する必要があります。)中央の0は、入力の最初の文字が入る場所です。

残りは書式設定です。


5

25 19バイト

E⊘⊕η✂θι⁺ι⁻Lθ⊘⊖η‖O←↑

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

E⊘⊕η✂θι⁺ι⁻Lθ⊘⊖η

碑文の1/4を描きます。

‖O←↑

反映して碑文を完成させます。


1
印象的!私はこのサイトを初めて使用します。以下の質問がいくつかの愚かな質問である場合、事前に謝罪します。1.間違いなく19文字ですが、19バイトですか?および2.そのテキストはどのエンコードで19バイトかかりますか?
damix911

ええ、UTF-8でエンコードされた場合、19文字かかりますが、実際には51バイトです。UTF-16では、これはまだエンコードに39バイトかかります
ルオホラ

1
@ damix911 Charcoalには独自のエンコーディングがあり、Wikiで見つけることができます。コードページ以外の文字は3バイトかかると思います。deverbosifierは正しい長さを計算しようとしますが、実際のエンコーディングへの転写は煩わしくありません。
ニール

1
@Neil Okey、合法的なようです!
ルオホラ

3

Japt -R19 16バイト

z
ò@VÔtXUaVÊ)êÃê

それを試してみてください

z\nò@VÔtXUaVÊ)êÃê     :Implicit input of integer U & string V
z                     :Floor divide U by 2
 \n                   :Reassign result to U
   ò                  :Range [0,U]
    @                 :Map each X
     VÔ               :  Reverse V
       tX             :  Substring from index X to index ...
         Ua           :    Absolute difference between U and ...
           VÊ         :    Length of V
             )        :  End substring
              ê       :  Palindromise
               Ã      :End map
                ê     :Palindromise
                      :Implicit output, joined by newlines

2

Wolfram言語(Mathematica)57 54バイト

(g=Reverse@Rest@#~Join~#&)@BlockMap[g,#,⌈#2/2⌉,1]&

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

入力として幅を取ります。


1
@lirtosiastの場合、g関数が最初に呼び出されたときに最初の関数は評価されません。オンラインでお試しください!
attinat

興味深いことに、@@または@@@を使用すると、なぜ機能するように見えるのでしょうか。
リルトシアスト

@lirtosiast考えるPrint/@f[...]-> Print/@Transpose[g[...]]-> Transpose[Print@g[...]]、それによって時間gが定義されます。
attinat



2

Python 3、104バイト

私はそれほど長くゴルフをしていません...これはもっと短くなると確信しています。

詳細

このコードは、2つの引数(文字列と高さ)を取り、標準出力に結果を与える関数を定義しています。

文字列へのインデックスは、グリッドの中心からのマンハッタン距離です。幅wと高さのグリッドのh場合、セルの距離(x, y)abs(x - (w - 1) / 2) + abs(v - (h - 1) / 2)です。

グリッドの幅は、角のマンハッタン距離(たとえば、(0, 0))が文字列の長さより1小さくなるようにする必要があります。代入(0, 0)上記と簡素化に、私たちは、幅が単純であることがわかります2 * len(s) - h

コード

def b(s,h):
 w=2*len(s)-h
 for y in range(h):print(''.join(s[abs(x-w//2)+abs(y-h//2)]for x in range(w)))

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



1

Pyth、19バイト

L+_btbjyyM.:Q-lQ/E2

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

L+_btbjyyM.:Q-lQ/E2   Implicit: Q=string, E=height
L                     Define a function, y(b):
  _b                    Reverse b
 +  tb                  Append all be first element of b
                      y is now a palindromisation function
              lQ      Length of Q
             -  /E2   Subtract floored division of E by 2
          .:Q         All substrings of Q with the above length
        yM            Palindromise each substring
       y              Palindromise the set
      j               Join on newlines, implicit print




1

TCL188の 170 162バイト

{{w s} {join [lmap C [lrepeat $w string] {join [$C reverse [set y [$C range $s [set x [expr abs($w/2+1-[incr i])]] end-[expr $w/2-$x]]]][$C range $y 1 end]}] \n}} bytes

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

TCLでこの問題を解決するには、100万の悪い方法があるようです。これはそれらの最悪ではありません。

ラムダに変換することにより、最小18バイトを保存(行のリストの戻り値が許容される場合、さらに13バイトまで保存できます)

lmap反復子が追加の定数として機能するため、さらに8を保存しました


1

キャンバス、18 バイト

±X↕┌L╵┌-Y{x;1y1@]┼

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

Canvasは部分文字列を実行しないため、アートオブジェクトのように扱い、そのようにしてサブセクションを取得する必要があります。これには2バイトかかると思いますが、何ができるでしょうか。

キャンバスの回文機能は特定の文字をミラーリングします(たとえば、垂直にミラーリングされたVは^になります)。これを完全に無効にすることはできません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.