三角形のアルファベットのスライス


15

to (またはto )nからの入力番号を指定1すると、左から右に読み、対応する文字を含むアルファベットを出力します。ねじれは、アルファベットの位置に対応して文字も垂直に繰り返される必要があることです。奇数(-indexedの場合)は水平線に沿ってバランスをとる必要があり、偶数は上または下を交互に繰り返す必要があります(どちらの方向に進むかを選択できます)。インデックスが0の場合、前の文の奇数/偶数を交換します。26025a=1, b=2, c=3, ...1

別の方法を言葉で表現-文字のアルファベット値があれば?ある#、そこでなければなりません#、それらのすべてで、出力にその手紙のコピー#番目の列。これらの文字は、が付いている水平線の上下で均等にバランスが取れている必要がありますa。文字のバランスを均等にできない場合は、その行の上と下に「余分な」文字を交互に付けます。

以下に、n = 1,2,3,4,5,6改行で区切られた最初の6つの出力(、1から1番目、下から順に選択)を示します。これにより、パターンを確認できます。パターンを説明するコメントはで始まり#ます。

a         # On a line by itself

ab
 b        # The "extra" letter is below the horizontal

  c
abc       # The 'c' splits evenly
 bc

   d      # Because the 'b' was below, the extra 'd' must be above
  cd
abcd
 bcd


   de
  cde
abcde     # The 'e' balances
 bcde
    e

   def
  cdef
abcdef
 bcdef
    ef
     f    # Since the 'd' was above, the extra 'f' must be below

(を数回スキップn=26

                       xyz
                      wxyz
                   tuvwxyz
                  stuvwxyz
               pqrstuvwxyz
              opqrstuvwxyz
           lmnopqrstuvwxyz
          klmnopqrstuvwxyz
       hijklmnopqrstuvwxyz
      ghijklmnopqrstuvwxyz
   defghijklmnopqrstuvwxyz
  cdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
 bcdefghijklmnopqrstuvwxyz
    efghijklmnopqrstuvwxyz
     fghijklmnopqrstuvwxyz
        ijklmnopqrstuvwxyz
         jklmnopqrstuvwxyz
            mnopqrstuvwxyz
             nopqrstuvwxyz
                qrstuvwxyz
                 rstuvwxyz
                    uvwxyz
                     vwxyz
                        yz
                         z

ルール

  • 大文字で出力するか小文字で出力するかを選択できますが、一貫性が必要です。
  • オプションの末尾の改行を除き、出力に余分な空白を含めることはできません。
  • 完全なプログラムまたは機能のいずれかが受け入れられます。
  • 入力番号は、適切な形式で取得できます
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

回答:



8

Python 2、 101 99バイト

r=range(input())
for x in sorted(r,key=lambda x:x*-(x&2)):print bytearray([97+i,32][i<x]for i in r)

xsotは、ソートキーx*-(x&2)として十分であることを実現することで2バイトを節約しました。結果のイメージの下半分は、sorted安定したソートを保証するため、影響を受けません。


-行を逆順に出力することはできませんか?
ニール

x*-(x&2)うまくいくと思う。
xsot



2

JavaScript(ES6)、127 126バイト

n=>[...Array(n).keys()].sort((a,b)=>a*~-(a&2)-b*~-(b&2)).map(i=>` `.repeat(i)+`abcdefghijklmnopqrstuvwxyz`.slice(i,n)).join`\n`

@Lynnのソートトリックを使用します。アルファベット全体を書き出すことは、計算するよりも2バイト安くなりました。編集:@ETHproductionsのおかげで1バイト保存されました。これは、\n実際にリテラルの改行文字を表していることに注意するのを忘れていたためです。(行が非常に長い場合、答えにリテラルの改行を入れるのは好きではありません。)


アルファベットの2バイトを保存します。btoa`...` ここで...はの結果に置き換えられatob`abcdefghijklmnopqrstuvwxyzz` ます。(また、\nリテラルの改行で置き換えることができます。)
ETHproductions

@ETHproductions UTFでなくISOエンコーディングを使用していると思いますか?
ニール

はい、そうです。JSではUTF-8ではなくISO-8859-1を使用できますか?
ETHproductions

@ETHproductionsおそらく、しかし、私はそれを動作させることができないようですので、私はそれを見せません。
ニール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.