八角形の単語を作る


14

先週の木曜日のユーザー@SpookyGengarは、Squared Wordsの作成についての彼/彼女の最初の挑戦を喜んでくれました。辺の数を2倍にしたらどうなりますか?

チャレンジ

次の例のように、必要な妥当な形式(stringchar配列...)で文字列を入力として受け取り、入力の八角形表現(任意の妥当な形式:stringstringsのリスト、char行列...)を出力します。

Input: golf
Output:

   golf
  o    l
 l      o
f        g
l        o
o        l
g        f
 o      l
  l    o
   flog


Input: HelloWorld
Output:

         HelloWorld
        e          l
       l            r
      l              o
     o                W
    W                  o
   o                    l
  r                      l
 l                        e
d                          H
l                          e
r                          l
o                          l
W                          o
o                          W
l                          o
l                          r
e                          l
H                          d
 e                        l
  l                      r
   l                    o
    o                  W
     W                o
      o              l
       r            l
        l          e
         dlroWolleH


Input: a
Output:

a


Input: ab
Output:

 ab
b  a
a  b
 ba


Input: code golf
Output:

        code golf
       o         l
      d           o
     e             g

   g                 e
  o                   d
 l                     o
f                       c
l                       o
o                       d
g                       e

e                       g
d                       o
o                       l
c                       f
 o                     l
  d                   o
   e                 g

     g             e
      o           d
       l         o
        flog edoc

ノート

  • 入力は、印刷可能なASCII文字のみで構成されます。
  • 八角形の形状が維持されている限り、先頭および/または末尾の空白と改行を使用できます。
  • これはであるため、各言語のソートされたプログラム/関数が勝つかもしれません!

5
「辺の数を2倍にしたらどうなりますか?」< -その後、炭はまだ勝つ
漏れ修道女

推奨テストケース:code golf
漏れ修道女

@LeakyNunは<Space>印刷可能と見なされますか?
V.クルトワ

2
@ V.Courtois はい
リーキー修道女

@LeakyNunがテストケースを追加しました。
チャーリー

回答:


10

木炭、16バイト(非競合の10バイト)

F⁸«✂θ⁰±¹↷¹A⮌θθ»θ

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

F⁸«                 Repeat for each side of the octagon
   ✂θ⁰±    ¹        Print the input except the last character
        ↷¹          Rotate 45° clockwise
          A⮌θθ      Reverse the input string
              »θ    Print the input again, to handle the length 1 case

代替の長さ1の修正、16バイト:詳細バージョン。

PθF⁸«✂θ⁰±¹↷¹A⮌θθ

炭のバグ修正は、次の10バイトコードが機能するようになったことを意味します。詳細バージョン。

F⁴«θ←↘⮌θ↖⟲

これを行うだけでいいようです。笑
魔法のタコUr

1
うーん、うまくいくとは思わないcode golf
エリックアウトゴルファー

ああ、これは実際には16バイト(置き換えであるθθθθθ»θ)。
エリックアウトゴルファー

@EriktheOutgolferおっと、申し訳ありませんが、長さ1のケースの修正をテストするつもりはありませんでした...質問に関する私のテスト記録はあまり良くありませんでしたか?
ニール

@Neilしかし、問題はcode golfどうですか?それは、チャコールが入力を受け取る方法に関係していると思いますが、残念ながら、それは回避できないため、この挑戦​​から完全に失格になります。
エリックアウトゴルファー

5

JavaScript(ES6)、156バイト

f=
s=>[...Array((l=s.length-1)*3+1)].map((_,i,a)=>a.map((_,j)=>s[i+j-l?l*5-i-j?i+l*2-j?j+l*2-i?i%(l*3)?j%(l*3)?-1:j?i-l:l+l-i:i?l+l-j:j-l:j:l-i:l*3-i:i]||` `))
<input oninput=o.textContent=this.value?f(this.value).map(function(a){return(a.join``)}).join`\n`:``><pre id=o>

文字配列を返します。


1
長さ4の文字列でのみ動作するようです
チャーリー

1
@CarlosAlejo申し訳ありませんが、十分に慎重にチェックしませんでした。便利なことに、保存された2バイトを修正してください!
ニール

ああ、それはたくさんの三項?:です!
エリックアウトゴルファー

@EriktheOutgolfer良いこと、それはpythonではないか、それは本当に冗長です:P
スティーブン

3

Mathematica、247バイト

(T=Table;k=Length[s=Characters@#];If[k==1,#,Column[Flatten@{#,T[""<>{s[[i]],T["  ",k/2-2+i],s[[-i]]},{i,2,k}],T[""<>{s[[-i]],T["  ",k+k/2-2],s[[i]]},{i,2,k}],T[""<>{s[[i]],T["  ",3k/2-1-i],s[[-i]]},{i,2,k-1}],StringReverse@#},Alignment->Center]])&

必要はありませんAlignment。delayedset(:=)を使用してs[[i]]and の繰り返しを減らすことでバイトを節約します。s[[-i]]これらのアイデアで224バイトになります:(T = Table; q:= s [[i]]; r: = s [[-i]]; k = Length [s = Characters @#]; If [k == 1、#、Column [Flatten @ {#、T ["" <> {q、T [""、 k / 2-2 + i]、r}、{i、2、k}]、T ["" <> {r、T [""、k + k / 2-2]、q}、{i、 2、k}]、T ["" <> {q、T [""、3k / 2-1-i]、r}、{i、2、k-1}]、StringReverse @#}、Center] ])&また、このコメントの時点でたった145バイトの代替ソリューションがあります。
マークS。17年


2

Japt84 79バイト

@ETHproductionsのおかげで-5バイト。


Ål
VoA{A?(UÅw +Uê)£Y¥V*2+AªY¥V-A?X:SÃ:Vç +U+Vç
Wf cU¬£V?(V*3 ç hUg~Y)+X:XÃcWz2

主要な改行はプログラムの一部です。入力として文字列を受け取り、文字列の配列を返します。

オンラインでお試しください!-R改行を有する得られた配列を結合するフラグ。

私の最も誇りに思っている仕事ではありませんが、少なくとも100バイトから削減しました。ここでの私の考えは、上部と中央部を作成し、上部を180°回転させて追加することでした。


いいね 私はすぐに多くの改善が表示されていないが、あなたは変更される可能性Ul ÉUÅl、スイッチVおよびWは、2バイト以上を節約するために:codepen.io/justinm53/full/...
ETHproductions

また、AnV ?-> V-A?、およびUq £->U¬£
ETHproductions

@ETHproductions素晴らしい、ありがとう!忘れたなんて信じられない¬
ジャスティンマリナー

1

Pythonの2220の 213バイト

  • 想像していたよりも驚くほど長い。
a=input()
l=len(a)
r=range(l)
print'\n'.join(p.center(l*3-2)for p in[a]+(l>1)*([a[i]+(2*i-2+l)*' '+a[~i]for i in r[1:-1]]+[a[~i]+(l*3-4)*' '+a[i]for i in r]+[a[i]+(3*l-2*i-4)*' '+a[~i]for i in r[1:-1]]+[a[::-1]]))

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


1

PHP 7.1、230 156 155バイト

for($x=$e=strlen($s=$argn)-1;$n<9;$r[$y][$x+=$n+1&3?$n&4?-1:1:0]=$s[$i],$i+=($n+=!$i||$i==$e)&1?:-1)$r[$y+=$n-1&3?$n<6?:-1:0]=$r[$y]?:"";echo join("
",$r);

でパイプとして実行する-nR、オンラインで試してください

壊す

for($x=$e=strlen($s=$argn)-1;   # import to $s, set $e to length-1, init $x
    $n<9;                       # loop through 8 repetitions of string
    $r[$y][
        $x+=$n+1&3?$n&4?-1:1:0      # 3. increment/decrement $x depending on $n
    ]=$s[$i],                       # 4. copy character to current position
    $i+=(
        $n+=!$i||$i==$e             # 5. if first or last character of string, increment $n
    )&1?:-1                         # 6. if odd repetition next, else previous character
)
    $r[
        $y+=$n-1&3?$n<6?:-1:0       # 1. increment/decrement $y depending on $n
    ]=$r[$y]?:"";                   # 2. if empty, init row to string
echo join("\n",$r);             # output

1

Mathematicaの、168の 166 147 127バイト

(n=Length@#;b=Array[" "&,3{n,n}-2];Do[l={{1,n+k-1},{k,n-k+1}};l=Join[l,Cross/@l];b=ReplacePart[b,Join[l,-l]->#[[k]]],{k,n}];b)&

これは、1文字の文字列のリストを受け取り、1文字の文字列のマトリックスを出力します。

私が使用する対称性を利用して18のバイトを保存-lし、Cross/@lその取りクロスプロダクトのようなもの取るために2つの2Dベクトルのそれぞれの{x,y}には{-y,x}。基本的に、2つの初期方向は東(上端)と南西(上端)です。次に、それらの90度の反時計回りの回転を追加しCrossます。左端はNorth、左下端はSoutheastです。次に、他の4つのピースを使用-lして、カバーした4つを反転します。

次のようなものを使用して、サンドボックスでテストできます。

(n=Length@#;b=Array[" "&,3{n,n}-2];Do[l={{1,n+k-1},{k,n-k+1}};l=Join[l,Cross/@l];b=ReplacePart[b,Join[l,-l]->#[[k]]],{k,n}];b)&[{"H","e","l","l","o"," ","G","o","l","f"}]//MatrixForm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.