アリスの最初のコードレビュー


20

アリスは、Brainfuckをクライアント側とサーバー側の両方の開発の主要言語として使用している会社のインターンです。アリスは最初のコードを書いたばかりで、最初のコードレビューの準備をしているので少し緊張しています。

アリスはコードを適切にフォーマットして見栄えを良くしたいと考えていますが、328ページの会社コードスタイルガイドを読む時間がないため、完全な正方形としてフォーマットすることにしました。残念ながら、正方形を形成するにはコード長が不十分な場合があるため、彼女は中央に長方形の隙間を残すことにしました。ギャップは完全に中央に配置され、可能な限り正方形に近い必要があります。

++++++         +++++         +++++         +++++         +++++         +++++
++++++         +++++         +++++         +  ++         ++ ++         +++++
++++++         ++ ++         +   +         +  ++         +   +
++++++         +++++         +++++         +++++         ++ ++         +++++
++++++         +++++         +++++         +++++         +++++         +++++

Perfect         OK         Acceptable   Unacceptable    No way!        Nope.

Aliceを支援するプログラムまたは関数を作成します。Aliceのコードを入力文字列として指定し、可能であれば、以下で説明するように適切にフォーマットされたコードを出力します。フォーマットが不可能な場合、泣いている絵文字を出力します:~(

これはので、回答はバイト単位でスコアリングされ、より少ないバイトが目標になります。

制約

  1. プログラムまたは関数は、単一の文字列を入力として使用し、1行以上のテキストを出力する必要があります(または、関数を実装する場合は、複数行の文字列または文字列の配列を返します)。
  2. 入力文字列には、空白を含むASCII文字を含めることができます。
  3. 入力内のすべての空白は無視する必要があります。コードの長さを数えるべきではなく、出力に使用すべきではありません。
  4. 入力文字列に少なくとも1つの非空白文字が含まれています。
  5. フォーマットされたコードには、入力コードと同じ順序で同じ非空白文字が含まれている必要があります。
  6. 書式設定されたコードは完全な正方形である必要があります。つまり、すべての行は同じ長さで、行数は行の長さと等しくなければなりません。
  7. フォーマットされたコードには、中央にギャップが含まれる場合があります。
  8. ギャップにはスペース文字(ASCIIコード32)のみを使用できます。
  9. ギャップ(存在する場合)は長方形でなければなりません。
  10. フォーマットされたコードのすべての行には、少なくとも1つの非空白文字が含まれている必要があります。つまり、ギャップ幅は厳密に正方形の幅より小さくなければなりません(5x5の正方形ではギャップ5x1は受け入れられません)。
  11. ギャップは水平でなければなりません。つまり、ギャップ幅はギャップ高さ以上でなければなりません。
  12. ギャップは完全に中央に配置する必要があります。
  13. したがって、ギャップの幅と高さのパリティは、正方形の幅のパリティと同じである必要があります(たとえば、5x5の正方形のギャップは1x1、3x1、または3x3です)。
  14. 可能であれば、隙間のない正方形を出力します。
  15. 複数のソリューションの場合、ギャップが正方形に最も近いものを選択します。つまり、ギャップ幅とギャップ高さの差は最小です(たとえば、ギャップ10x10は8x6よりも好ましく、8x6は6x2よりも好ましいです)。
  16. それでも同点の場合は、ギャップ面積が最小のソリューションを選択します(たとえば、ギャップ2x2は4x4よりも望ましい)。
  17. コードをまったくフォーマットできない場合は、を出力します:~(
  18. 最後の行の後の改行はオプションです。
  19. [新規]コードが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までのソリューションの表を追加し、空白の説明を追加しました。


3
「フォーマットが不可能な場合、泣いている絵文字を出力する」-不必要な毛羽立ち、出力を許可する方がIMOが優れています。
ジョナサンアラン

1
@JonathanAllan、さらに良いのは、フォーマットが常に可能であることを保証することです。検証を入力してください!
シャギー

1
@ジョナサン・アラン、どんな出力も広すぎて、抜け穴に対して脆弱かもしれません。偽の値を使用することを考えましたが、異なる言語間で出力が一致しなくなります。空の文字列の使用も検討しましたが、実行中のテストケースの視覚性が低下します。「エラー」のような他のメッセージについても考えましたが、世界中のBrainfuck開発者をサポートするためにさらに短くすることにしました。
ダニエル・ツツバリン

1
@Shaggy、これは単なる入力検証ではありません。解決策がないことを見つけることは、パズルの重要な部分です。つまり、検索を停止するタイミングを見つける必要があります。
ダニエル・ツツバリン

2
@DaniilTutubalinここでは、特定の入力のみが提供されることを保証することが非常に一般的です。このような「無効な」入力での出力を許可することも一般的なアプローチであり、チャレンジのコアとは関係のない定型コードを回避します。そのような場合に出力として不変のものが本当に必要な場合は、入力自体をお勧めします。ただし、今すぐ変更することはお勧めしませんが、これも非常に良いチャレンジです!
ジョナサンアラン

回答:


5

C(gcc)、354バイト

h,i,j,k,l,m;g,v,w,d;f(char*s){for(i=l=0;s[i];l+=!isspace(s[i++]));d=g=l;for(i=0;i++<l;)if(h=i*i-l)for(j=0;j<i-++j;h>0&h%k<1&k<=m&m<i&m+~k&&m-k<g|m==k+g&(d-2*v)*(d-2*w)>h?w=(i-m)/2,v=j,g=m-k,d=i:j)k=i-2*j,m=h/k;else g=0,v=w=d=i;if(g-l)for(i=j=1;*s;j+=!i++,k=0,i%=d+1)for(putchar(i?v>=j|j>d-v|w>=i|i>d-w?k=1,*s:32:10);k;k*=isspace(*++s));else puts(":~(");}

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


タブは「空白」だと思いますが、正確に何が重要かを明確にするよう求めました。
ジョナサンアラン

投稿を更新しました。あなたは交換することができるisspace(x)x<33
ダニエル・ツツバリン


4

JavaScript(ES6)、 284 ... 274  270バイト

@Shaggyのおかげで4バイト節約

文字列の配列を返します。

s=>(s=s.replace(/\s/g,''),n=s.length,o=[':~('],W=d=g=(x,w=0,h=p=0)=>4*~-x>n?o:h>w?++w>x-2?g(-~x):g(x,w):g(x,w,h+1,o=n-x*x+w*h|(w^x|h^x)&!!(w|h)|w-h>d|w-h==d&w>W?o:[...Array(x)].map((_,Y,a)=>a.map((_,X)=>2*X>=x-w&2*X<x+w&2*Y>=x-h&2*Y<x+h?' ':s[p++]).join``,d=w-h,W=w)))``

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


よくやった!このテストを試してみてください:This must be 5x5 with 1x1 gap.(24文字)
Daniil Tutubalin

1
@DaniilTutubalinだから最初の投稿を削除しました(そして、そのようなテストケースを提案しました)が、これは現在正しくサポートされています。
アルノー

[\s\n]ただできない\s
シャギー

@Shaggyは++w>x-2実際にあるw++>=x-2w++>=xのために失敗します42\s

4

スタックス、80 バイト

ö╦Çc▀╕╡ëé╓]µiÖ9♪`W|╣▐↑╖D┘↕♫╗╔äƒ■úφ■U`ÿ⌠%é┴☼vAú)☺@ı◄¬¶¢(îÉ┼6⌠D~♀└lfæA.I@º╤∟òîü╦(

実行してデバッグする

どのように機能しますか?

  • 長方形の切り欠きを持つすべての正方形を検討します。
  • 適切なサイズではないプログラム形状を除外します。
  • 一致するパリティを持たないプログラム形状を除外します。
  • 正方形に対してカットアウトが大きすぎるプログラム形状を除外します。
  • 何も見つからない場合は、出力に失敗して終了します。
  • カットアウトの「長方形」を最小化する形状を見つけてから、カットアウトサイズごとに見つけます。
  • プログラム形状の各文字を、プログラム入力の対応する文字に置き換えます。

開梱し、未開封にし、次のようにコメントしました。

                input e.g. "big socks"
L$j$            remove whitespace from input e.g. "bigsocks"
cr{~F           copy push each remaining character to input stack in reverse order
%c              get length L of flattened input and copy e.g. 8
^r3:$           create triples [a,b,c] in range 0..n e.g. [[0,0,0], [0,0,1], ... [8,8,8]]
{E*NsJ+n=f      filter triples: require a*a-b*c=L e.g. [[3,1,1], [4,1,8], ...]
{ET>f           filter triples: a>b and a>c e.g. [[3,1,1]]
{{2%m:u_0#+f    filter triples: a%2=b%2=c%2 or b*c=0 e.g. [[3,1,1]]
":~("s|c        if there are no triples, output ":~(" and terminate
{D:s_D:*\oh     sort by [abs(b-c),b*c]; keep the first e.g. [3,1,1]
X               store the chosen triple in the X register
E               explode onto stack e.g. 3, 1, 1
z)]*            using last two values, make a rectangle of zeroes e.g. 3, [[0]]
~               this will be the cutout, push it to the input stack
c'X*]*          make a square of "X" e.g. ["XXX", "XXX", "XXX"]
xEd-h           given the dimensions in x register, calculate the centered cutout coordinates
xEsd-h          e.g. ["XXX", "XXX", "XXX"], 1, 1
,||             embed the cutout grid at the specified coordinates e.g. ["XXX", "X X", "XXX"]
m'X{,]}R        for each line, regex replace "X" with a character from the input stack

これを実行する


パックされていないバージョンも提供してください。
ダニエル・ツツバリン

1
@DaniilTutubalin説明を追加しました。
再帰的

ありがとうございました!よくやった!
ダニエル・ツツバリン

2

、120バイト

≔E⮌⪫⪪S ωιθ≔⁰ηF⊕Lθ¿⁼Lθ×ιι«≔ιη≔ιζ≔ιε»F⊘ιF⊕κF∧⁼Lθ⁻×ιι×⁻ι⊗⊕κ⁻ι⊗⊕λ∨¬η›⁻ζε⁻κλ«≔ιη≔⊕κζ≔⊕λε»¿η«UOη#JεζF›η⊗ζUO⁻η⊗ε⁻η⊗ζψUMKA⊟θ»:~(

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

≔E⮌⪫⪪S ωιθ

入力からスペースを取り除き、それを逆にして文字に分割します。これにより、後で文字を簡単にループできるようになります。

≔⁰η

結果が見つからないことを示す(まだ)ゼロのサイズから始めます。

F⊕Lθ

文字列の長さまでのすべての辺の長さを確認してください。(除算を入れると、もちろんコードが高速になります。)

¿⁼Lθ×ιι«≔ιη≔ιζ≔ιε»

結果が完全な正方形であることが判明した場合は、正方形のサイズを保存し、境界サイズとして設定します。

F⊘ιF⊕κ

可能な境界線の高さと幅をループします(境界線の幅は境界線の高さより大きくないため、ギャップの高さはギャップの幅より大きくなりません。)

F∧⁼Lθ⁻×ιι×⁻ι⊗⊕κ⁻ι⊗⊕λ∨¬η›⁻ζε⁻κλ«≔ιη≔⊕κζ≔⊕λε»

境界線のサイズが目的の長さで、まだ解決策がない場合、またはこの解決策ほど正方形ではない場合は、この正方形と境界線のサイズで解決策を更新します。

¿η«

解決策があれば...

UOη#

指定された正方形サイズの任意の文字の長方形を描画します。

JεζF›η⊗ζUO⁻η⊗ε⁻η⊗ζψ

境界が隙間を残すほど小さい場合は、隙間を消去します。(描画コマンドは、負の値に対して上向きおよび左向きに描画しますが、ゼロ値はまったく好みません。)

UMKA⊟θ

すべての(残りの)文字を入力からの文字に置き換えます。

»:~(

それ以外の場合は出力します:~(



1

Python 2、287 281 279バイト

c=list("".join(input().split()))
l=len(c)
p=[]
for q in range(l*l):x=q%l;y=q/l;s=(l+x*y)**.5;p+=[(abs(x-y)/2,int(s),-x)]*(s%1==0)*(x<s-1>y>=s%2==x%2==y%2or x<1)
if p:d,s,x=min(p);b=(s+x)/2;Y=0;exec"c[b:b]=' '*-x*(b+d<=Y<s-b-d);print''.join(c[:s]);c=c[s:];Y+=1;"*s
else:print':~('

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

ソリューションの選択と印刷の両方に同じ値を使用することにより、Pythonの辞書式リスト比較を使用します。10 4 2程度のバイトを削ることができると確信しています。

説明

c=list("".join(input().split()))
l=len(c)
p=[]

空白で分割してから結合することにより空白を削除し""、後で入力をリストに変換します。またl、実際のコードの長さpと有効な可能性のリストに初期化します。

for q in range(l*l):x=q%l;y=q/l;s=(l+x*y)**.5;

から0*0までのギャップサイズのすべての可能性をループしますl*llコード文字とx*yスペースを使用して、正方形の辺の長さをとして計算しますs

p+=[(abs(x-y)/2,int(s),-x)]*(s%1==0)*(x<s-1>y>=s%2==x%2==y%2or x<1)

次の条件が一致するかどうかを確認します。

  • s % 1 == 0、つまり完全な正方形が形成されます
  • x < s-1 > y、つまりxy最大s-2で正方形内に収まる
  • s % 2 == x % 2 == y % 2、つまり、両方xyエッジのパリティに一致し、中央に配置できます
  • しかし、if x < 1、つまりx == 0、完全な正方形の要件以外はすべて無視します

条件が一致した場合、次の項目をタプルに追加してp、最適な項目を見つけます。

  • abs(x-y)/2; 最初の最小限の違いを見つけるxと、y最も正方形のギャップを取得します。これは常に均等なので、2で除算します。
  • int(s); 次に、最小の辺の長さを見つけます。以来、sギャップ領域として整数と増加しますx*y、これは、ギャップ領域によってソート。
  • -x; 次に、水平方向のギャップを優先する最大幅を見つけます。これは、開発された方法のためにエリアの後に来ますが、エリアは同じでx*yありy*x、動作します。
if p:d,s,x=min(p);b=(s+x)/2;Y=0

有効なレイアウトが見つかった場合は、上記のように最適なレイアウトを見つけます。水平方向の境界bを計算し、行番号Yを0に初期化します。

exec"c[b:b]=' '*-x*(b+d<=Y<s-b-d);print''.join(c[:s]);c=c[s:];Y+=1;"*s

行番号Yがギャップ内にある場合(タプルからの垂直方向の境界線はb+dd)、の水平方向の境界線の後にギャップ幅のスペースを追加しcます。(の変更cが、リストにする必要がある理由です。)次に、正方形の行を印刷して、から削除しcます。s行番号を増やしながら繰り返します。

else:print':~('

レイアウトが見つからなかった場合、失敗します。


よくやった!残念ながら、複数行入力ではうまく機能しません。また、長方形のギャップをサポートしていないようです(長さ22のテストを参照)。
ダニエル・ツツバリン

1
@DaniilTutubalin入力をPython文字列として指定する必要があります。複数行は文字通り"some\ntext"区切り文字になります。(input()入力行をPythonコードとして評価します。)これが受け入れられない場合は、お知らせください。長さ22も有効です。
PurkkaKoodari

申し訳ありません。おそらく、入力に何か問題がありました。
ダニエル・ツツバリン

1

Pyth99 98バイト

#JscQ)=QshKh|oaFtNSf!|%hT1&eT|t{%R2TgeStThT+L@+lJ*Fd2^UJ2
":~("Am/-Qd2tKW=W}~hZrG-QGJj*eKdcJ]H<~>J

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

これは、私のPythonの答えと同じアルゴリズムを使用しますが、多くの詳細が大幅に変更され、Pythでは短くなりました。

Pythはここでその年齢を示します。これは、年齢が更新されておらず、印刷可能なASCII文字(コードではなくデータ用)のみを使用し、多くのスペースを無駄にしているためです。

Pythがスタックスとしてベース256パッキングの同じ種類を使用した場合興味深いことに、このプログラムは⌈98ログかもしれ256 95⌉= 81が隣スタックス(80バイト)とゼリー(85バイト)に、長いバイト。これは、ゴルフ言語が劇的に異なるパラダイムであっても、どれほど近いかをうまく示していると思います。

説明(コードよりもわずかに読めない)

#while True:メッセージを抑制し、エラーで終了するa ですべてをラップします。

JscQ) c入力(Q)を空白でホップし、sその部分をまとめて、結果をに保存しJます。

^UJ2(インデックスのリストを作成するU)をJ、そのとり2NDデカルト電源(^すべてのペアをもたらす)、[h,w]とを0<=h<len(J)0<=w<len(J)

+L@+lJ*Fdすべて(のためにL)そのようなペアd、(加算+平方根()@... 2(の)lのength Jプラス(+)の生成物(*Fペアの)dトリプレットを作成、ペアの左側に)[side length, gap height, gap width]

f!|%hT1&eT|t{%R2TgeStThTf三つ子のためILTER T場所

  • どちらも(!|):
    • 辺の長さ(hT)モジュロ1(%1)はゼロ以外
    • &)の両方:
      • ギャップの高さ(eT)はゼロ以外
      • |)のいずれか:
        • トリプレット(R)モジュロ2(%2)の各番号、重複({)および最初の一意(t)が削除され、空ではない
        • eSギャップの高さとギャップの幅(tT)の大きい方()はg、辺の長さ(hT)よりも大きいか等しい

Sトリプレットを辞書順にソートします(辺の長さ、次にギャップの高さで)。oaFtN次に、ギャップの高さとギャップの幅の絶対差()でoトリプレットをa求めtNます。

この時点で、有効なソリューションがない場合|、2番目の引数を評価し\n":~("、を出力して返します:~(h最適なソリューション(または":"ない場合)を取り、に保存されKます。次にh、その辺の長さ(または":"ない場合)sを整数にキャストし(または、ない場合は失敗して終了し)、に保存(=)しQます。

次に、各(m[gap height, gap width]tK-を辺の長さ(Q)から減算()し、結果を2で除算し/ます(… 2)。結果がされているAにssigned GH

最後に、Wヒルループに入ります。Z0から始まり、各反復で増分しますが、古い値(~hZZ++C ではthink )を使用します。

  • (あればW)古い値が(にある{rANGE G-に(辺の長さG() -QG)、割り当て(=)へのJcのホップJの位置に(]Hjギャップ幅を有する半体OIN eK回(*)スペース(d)。値が範囲内になかった場合、単に戻りますJます。この結果が空の場合、ループを停止します。
  • から>最初のQ文字を削除し()、結果をにJ割り当てます(~J。の古い値から、最初の文字Jを(<)取り出して出力Qします。

最後に、#ループが再び開始され、エラーが発生して終了します。これは、数字cQ)Q含む場合は無効だからです。


正直に言うと、私は印刷可能なコードがより好きです。バイナリコードのスペースは少なくなりますが、見た目はずっと少なく(16進ダンプとして表示することをお勧めします)、通常、同じ言語のソリューション間で比較が行われます。そのため、他のパックされたスタックスソリューションと比較して、パックされたスタックスソリューションはより短くなりますが、両方を展開した後でも短くなります。パッキングは、コルモゴロフ全体の複雑さに対してのみ意味があります。
ダニエル・ツツバリン

@DaniilTutubalin通常の比較方法に関係なく、別のgolflangを打つことはまだ良いことです;)
PurkkaKoodari

1

05AB1E95 89 バイト

… 
    мDg©Ý3ãʒćnsP-®Q}ʒć‹P}ʒÈËyß_~}Dg_i…:~(ëΣ¦DÆÄsP‚}н©¤_iнë¬Uć᤮Ås<иs;R`X*+šXnª£®θð×ýX}ô»

あちこちで数バイト、間違いなくゴルフができます。

プログラムの最初の3つのステップは@recursiveのStax answerに触発されているので、必ず彼に賛成してください!

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

ステップ1:すべての空白を削除します。

 
                   # Push string " \n\t"
    м              # And remove those from the (implicit) input-string

ステップ2:考えられるすべてのトリプレットを作成する [abc]、ここで a 結果の次元です a×a 正方形、および b×cギャップのサイズです。これを行うには、範囲内の整数を使用してすべての可能なトリプレットを作成します[0a]。そして、次のすべてがトリプレットにとって真実である場合、これらをフィルタリングします。

  • a2b×c=L、ここで L 文字列の長さ
  • a>b そして a>c
  • amod2=bmod2=cmod2 または mnab0

例えば: L=28トリプレットになります[[6,2,4],[6,4,2],[8,6,6]]

Dg                 # Get the length of this string (without popping by duplicating first)
  ©                # Store this length in variable `®` (without popping)
   Ý               # Create a list in the range [0,®]
    3ã             # Create all possible triplets by repeating the cartesian product 3 times
ʒ                  # Filter these triplets by:
 ć                 #  Extract head; pop and push remainder-list and head to the stack
  n                #  Square the head
   sP-             #  Take the product of the remainder, and subtract it from the squared head
      ®Q           #  And check if it's equal to the string length in variable `®`
                 # Filter the remaining triplets further by:
  ć‹P              #  Where the first integer is larger than the other two
      }          # And filter it a third time by:
  ÈË               #  Where all three are either odd or even
       ~           #  Or
    yß_            #  It does not contain any 0s

ステップ3:まだトリプレットが残っているかどうかを確認します。そうでない場合は、出力し":~("ます。使用する場合は、ソートして最初のもののみを残して、使用するものを決定します。タプルをソートしてこれを行いますabsbcb×c

たとえば、トリプレット[[6,2,4],[6,4,2],[8,6,6]]はにソートされ[[8,6,6],[6,2,4],[6,4,2]]、その後のみ[8,6,6]残ります。

Dg_i               # If this completely filtered list is now empty:
    …:~(           #  Push string ":~("
ë                  # Else:
 Σ                 #  Sort the triplets by:
  ¦                #   Remove the first character
   DÆÄ             #   Get the absolute difference between the remaining two integers
   sP             #   And pair it with the product of the remaining two integers
                 #  After we're done sorting: only leave the first triplet

ステップ4:文字列を分割してスペースを挿入する方法のリストを作成します。これは次のように行われます。

与えられた [abc]、次を使用してリストを作成します。

  • 最初のアイテムとして: ab2×a+ac2
  • 真ん中として b1 アイテム: ac
  • 最後の項目として: a2

例:トリプレット[7,3,5]はリストになります[15,2,2,35]

©                  #  Store this triplet in variable `®` (without popping)
 ¤_i               #  If the last value is 0 (which means the string is a square without gap):
    н              #   Simply keep the first value of the triplet
   ë               #  Else:
    ¬U             #   Store the first value in variable `X` (without popping)
      ć            #   Extract the first value; pop and push remainder-list and head to the stack
       α           #   Get the absolute difference of this head with the other two values
        ¤          #   Push the last value (without popping the pair itself)
         ®Ås     #   And repeat it the middle element or `®` minus 1 amount of times
       s           #   Swap to get the difference pair again
        ;          #   Halve both values
         R`        #   Push them reversed to the stack
           X*      #   Multiple the first value by `X`
             +     #   And then add it to the second value
              š    #   Prepend this in front of the repeated list
               Xnª #   And also append the square of `X`

ステップ5:最後に、このリストに基づいて文字列を分割し、結合して戻します c スペースの量、サイズの部分に分割 c、それらを改行で結合します。例えば:

"Alongtesttoseeifitworksasintended."リストに従って文字列を分割[15,2,2,35]すると、次のようになり["Alongtesttoseei","fi","tw","orksasintended."]ます。次に、これに参加しますc=5スペースの量"Alongtesttoseei fi tw orksasintended."。そして、サイズの部分に分割しますa=7これに["Alongte","sttosee","i f","i t","w o","rksasin","tended."]。その後、改行で結合されて出力されます。

    £              #   Then split the string into parts based on this list
     ®θð×          #   Push a string consisting of the last value of `®` amount of spaces
         ý         #   Join the list of substrings by this
          X        #   Push variable `X`
                 #  After the if-else: split the string into parts of that size
     »             #  And then join these by newlines
                   # (after which the top of the stack is output implicitly as result)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.