アルファベットパーティーハットを描く


22

あなたの仕事はこの正確なテキストを印刷することです:

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

大文字小文字は関係ありません。

これはであるため、バイト数が最小のコードが優先されます。


2
なぜダウン投票なのですか?
オリバーNi

19
一部の人々は、すべてのアルファベットパターンのアスキーアートKCの課題にうんざりしているのではないかと思います。
xnor

大文字でもできますか?
ダウンゴート

7
真剣に、別のアルファベットの挑戦?
エリックアウトゴルファー

2
私はこれらのアルファベットチャレンジを楽しんでいます。これは、クリスマスツリーとして簡単にブランド変更できます。
ピートアーデン

回答:


6

チェダー、50 45 42 37バイト

25|>0=>i->print" "*(i/2|0)+(65+i)@"90

簡単ですが、チェダーの簡潔な範囲構文を使用します(数値とアルファベットの両方)

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

説明

25 |> 0 =>    // Map range [0, 26) (i.e. [25, 0] reversed) over....
   i -> 
     print    // Prints in it's own line...
     " " * (i/2 |0) +     // Number of spaces is floor(n/2).
                          // `|0` for flooring is hack from JS
     (65 + i) @" 90       // Char code range is this

65以下のための文字コードであるA90のためには、A


1
Zでは90ないA
-Mego


4

Python 2、70バイト

移植Emignaの答え、-2交換のバイト-i-1~i

for i in range(26):print' '*(12-i/2)+"abcdefghijklmnopqrstuvwxyz"[~i:]

私はかなり確か多分高い値を持つ小文字を除いて、短いアルファベットをもたらすことができるマップを使用しています
破壊可能なレモンを

実はもうわかりません。とにかくこれにはうまくいかないと思う:( soz
破壊可能なレモン

4

R、67 66 59バイト

編集:@rturnbullのおかげで数バイト節約

for(i in 25:0)cat(rep(" ",i/2),letters[i:25+1],"\n",sep="")

rep関数に渡された数値が自動的に最も近い整数(たとえばrep("*",1.99) => "*")に切り捨てられるという事実を利用して、実際に渡されるシーケンスはfloor(13-1:26/2)次のようになります。

12 12 11 11 10 10  9  9  8  8  7  7  6  6  5  5  4  4  3  3  2  2  1  1  0  0

1
これは、私のマトリックスの試みよりも短くなります。交換する14...-113
JDL

@JDLああ、もちろん。別のアプローチを試みる残骸
Billywob

2
25:0代わりにループする場合1:26、に変更13-i/2i/2、に簡略化(27-i):26してi:25+16バイト節約できます。
-rturnbull

3

Pyth、15バイト

j_m+*/d2\ >GdUG

結果をSTDOUTに出力するプログラム。

オンラインで試す

使い方

j_m+*/d2\ >GdUG  Program
             UG  Yield [1, 2, 3, 4, ..., 26]
  m              Map over the range with variable d:
          >Gd      Yield alphabet with first d-1 letters discarded
   +               Prepend
     /d2             d//2
    *   \            spaces
 _               Reverse
j                Join on newlines
                 Implicitly print

;代わりに試してください\
-isaacg

3

Python 2、52バイト

n=26;s=''
while n:n-=1;s=chr(97+n)+s;print n/2*' '+s

文字列sを累積して印刷し、先頭のスペースの数を更新しますn/2。でwhile終わる0ループは、execループ(53バイト)を打つよりもまれな数値ループです。

n=26;s=''
exec"n-=1;s=chr(97+n)+s;print n/2*' '+s;"*n

また、53バイトの代替:

s=''
exec"s=chr(122-len(s))+s;print s.center(26);"*26

3

JavaScript(ES6)、85 75 69 68バイト

for(s=a='',x=36;--x>9;)s+=` `.repeat(x/2-5)+(a=x.toString(36)+a)+`
`

@ l4m2のおかげで-1バイト


2
これは関数やプログラムではなくスニペットではありませんか?
ニール

1
for(s=a='',x=36;--x>9;)s+=` `.repeat(x/2-5)+(a=x.toString(36)+a)+'#'1B短縮
-l4m2

@ l4m2素晴らしい!
-darrylyeo

1
ベース36を使用した素晴らしいアイデア!+1
タイタス

2

Brain-Flak、244バイト

((((((()()()()())){}{}){}){}()){})((((()()()){}){}()){}){(({}[()]<>)<({}<(<>({})<>)>){({}[()]<(({})[()])>)}({}({})<>[({})]<>(((()()()){}){}){}())((<>)<>{<({}[()])><>([{}]())<>}<>[{}]<>{}){({}[()]<((((()()()()){}){}){})>)}((()()()()()){})><>)}<>

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


これはそのままで十分に読めるはずです。あなたがそれを必要とするならば、私は完全な説明をします:

push 122 (z): ((((((()()()()())){}{}){}){}()){})
push 26:      ((((()()()){}){}()){})
loop 26 times (i = 25..0): {
 (
  i--, push to b stack:({}[()]<>)
  <
   put 122 from a stack under i: ({}<(<>({})<>)>)
   i times push letter-1: {({}[()]<(({})[()])>)}
   replace top 0 with 26-i: ({}({})<>[({})]<>(((()()()){}){}){}())
   devide by two: ((<>)<>{<({}[()])><>([{}]())<>}<>[{}]<>{})
   add spaces: {({}[()]<((((()()()()){}){}){})>)}
   push 10 (\n): ((()()()()()){})
  >
  flip stack back: <>
 push i--: ) 
}
flip to results stack: <>

4
This should be readable enough as is.あなたはBrain-Flakについて話していますよね?
エリックアウトゴルファー

2

ゼリー15 13 バイト

-@ milesのおかげで-2バイト

ØaJ’H⁶ẋżṫJ$ṚY

TryItOnline!

どうやって?

ØaJ’H⁶ẋżṫJ$ṚY - Main link
Øa            - alphabet yield -> ['a', 'b', 'c', ..., 'y', 'z']
  J           -    range(length)      -> [1, 2, 3, ..., 25, 26]
   ’          -    decrement          -> [0, 1, 2, ..., 24, 25]
    H         -    halve              -> [0,.5  1, ..., 12, 12.5]
     ⁶        -    literal [' ']
      ẋ       -    repeat list        -> [[], [], [' '], ..., 12x' ', 12x' ']
          $   - last two links as a monad
         J    -     range(length)     -> [1, 2, 3, ..., 25, 26]
        ṫ     -     tail (vectorises) -> [['a'-'z'], ['b'-'z'], ..., ['y','z'], ['z']]
       ż      - zip
              -> [[[],['a'-'z']], [[],['b'-'z']], ..., [12x' ',['y','z']], [12x' ',['z]]]
           Ṛ  - reverse whole array
            Y - join with line feeds (implicit print)

ØaJ’H⁶ẋżṫJ$ṚY2バイトを節約するアルファベットで始まるニラディックチェーンを形成する方法を見つけました
マイル

説明は正しいと思いますか?
ジョナサンアラン

1
ええ、それは単一の引数がアルファベットであるモナド連鎖と考えるだけです
マイル

2

C、72 68バイト

m(i){for(char*k=&k[i=26];i;printf("%*c%s\n",--i/2+1,0,k))*--k=64+i;}


1

タートルード 70 68バイト

末尾のスペースに注意してください

#abcdefghijklmnopqrstuvwxyz#' -{ -{ +.r_}' l[ l-]d,(*@!' r)(!@*)_}' 

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

使い方:

#abcdefghijklmnopqrstuvwxyz#              Set string var to this value
                            ' -           write space on first grid cell, string pointer-=1
                               {                                    } While cell is space
                                 -                 decrement string pointer
                                  {     }    While cell is space
                                    +.       increment string pointer, write pointed char
                                      r      move right
                                       _     write non-space if pointed char is last char

                                         '[space]   write space on cell
                                           l        move left
                                            [ l-]   move left, pointer-- until cell's space
                                                 d, move down, write character var \
                                                                           (initially *)

                                                   (*     ) if cell is *
                                                     @!     set char var=!
                                                       ' r  write space over *, move right

                                                           (!    ) if cell is !
                                                             @*    set char var=*
                                                               '[space] write space over !

                                                                 _ (explanation below)
                                               write (*|!) if pointed char is last char

                                                                   '[space]    Write space

人間が読める説明(?):

文字列varを使用してアルファベットを含めます。反復ごとに、最後の行に到達した後、ラップアラウンドし、停止するまで、インデックスを1つ減らします。交互のインデントには、char varを使用します。反復ごとにchar varをチェックし、それを反転します。*の場合、右にシフトするため、最初の文字が整列し、そうでない場合は、最後の文字が整列します。


1

Perl、44バイト

これは@xnorの回答の移植版です。

$n=26;say$"x($n/2),$@=chr(97+$n).$@while$n--

実行する必要がある-E(または-M5.010):

perl -E '$n=26;say$"x($n/2),$@=chr(97+$n).$@while$n--';


1

Java 7、128 127バイト

1バイト保存しました。ケビンに感謝します。

String c(int n,String s,char v,String d){String c="";for(int j=0;j++<(n-1)/2;c+=" ");return n>0?c(--n,s=v+s,--v,d+c+s+"\n"):d;}

食べない

  class A {

public static void main(String[] args) {
System.out.print(c(26, "", (char)122, ""));
}
static String c(int n, String s, char v, String d){

    String c = "";

    for (int j = 0; j++ < (n - 1)/2; c += " ");

    return n > 0 ? c(--n, s = v + s, --v, d + c + s + "\n" ) : d;
}
}

関数に122を渡すことなく

132バイト

String c(String s,int n,String d){String c="";int v=96,j=0;for(;j++<(n-1)/2;c+=" ");return n>0?c(s=(char)(v+n--)+s,n,d+c+s+"\n"):d;}

食べない

  class A{

public static void main(String[] args) {
System.out.print(c("",26,""));

}
static String c(String s, int n, String d) {
    String c = "";
    int v = 96,j=0;
    for (; j++ < (n - 1)/2; c += " ");
    return n > 0 ? c(s = ( char) (v + n--) + s, n, (d + c + s + "\n")) : d;
     }
  }

1
あなたは削除することができます=ではd+=c+s+"\n"。また、インデントを使用して、コード化されていないコードを少しフォーマットすることもできます。あなたの他の答えのいくつかでも同様に気づきました。:)
ケビンクルーイッセン

1
おっとっと!私は再びこの過ちを犯した、恥ずかしい。......わかりました@KevinCruijssen
ナンバーノット

s=v+s再帰でを置き換えることはできませんs+=vか?
ローマングラフ

いいえ。文字パターンが後方にあるためです。
ナンバーノット

1

ルビー、64バイト

(0..26).each{|x|puts' '*(12-x/2)+('a'..'z').to_a[~x..-1].join()}

いくつかのコメント:あなたは後に括弧を配置する必要はありませんjoin 呼び出すeach代わりにmap、我々はあなたが呼び出すことができます戻っているのかを気にしないので、不要なlast範囲に
リー・W

代わりに(0..26).map、試してください27.times。の代わりに('a'..'z').to_a[*?a..?z]; の代わりに.join*""
ヨルダン

1

Japt、16バイト

;C¬£SpY/2 +CsYÃw ·

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

説明:

;C¬£SpY/2 +CsYÃw ·
;C                  // Alphabet shortcut
  ¬                 // Split into an array of chars
   £          Ã     // Map each item X and index Y by:
    SpY/2           //  " " repeated floor(Y/2) times
          +CsY      //  + alphabet.slice(Y)
               w    // Reverse the array of lines
                 ·  // Join with newlines

1

REXX、52バイト

do i=1 to 26
  say centre(right(xrange(a,z),i),26)
  end

出力:

            Z             
            YZ            
           XYZ            
           WXYZ           
          VWXYZ           
          UVWXYZ          
         TUVWXYZ          
         STUVWXYZ         
        RSTUVWXYZ         
        QRSTUVWXYZ        
       PQRSTUVWXYZ        
       OPQRSTUVWXYZ       
      NOPQRSTUVWXYZ       
      MNOPQRSTUVWXYZ      
     LMNOPQRSTUVWXYZ      
     KLMNOPQRSTUVWXYZ     
    JKLMNOPQRSTUVWXYZ     
    IJKLMNOPQRSTUVWXYZ    
   HIJKLMNOPQRSTUVWXYZ    
   GHIJKLMNOPQRSTUVWXYZ   
  FGHIJKLMNOPQRSTUVWXYZ   
  EFGHIJKLMNOPQRSTUVWXYZ  
 DEFGHIJKLMNOPQRSTUVWXYZ  
 CDEFGHIJKLMNOPQRSTUVWXYZ 
BCDEFGHIJKLMNOPQRSTUVWXYZ 
ABCDEFGHIJKLMNOPQRSTUVWXYZ

1

Vim、25キーストローク

:h<_␍jjYZZPqqPxYPr Yq12@q

ここで、␍はEnterキーであり、として表記されることもあり<cr>ます。

説明

:h<_␍jjYZZ                 " get a-z
          P                " initialize by pasting
           qq              " start record macro @q
             Px            " paste and remove the 1st char
               YPr␣        " yank and paste and replace 1st char with space
                   Y       " yank the whole line again
                    q      " end recording
                     12@q  " call macro 12 @q times

しかし、私はViMが初めてで、11月に始めました。初期化Pとマクロ内の初期化をマージする方法があるかどうか疑問に思います。

ゴルフされたViMシーケンスをテストする「正しい」方法は何ですか?でテストしました\vi -u /dev/null。ただし、VMでも:h<_␍機能しません。また、私のViMが最初の非スペースキャラクターに移行する理由もよくわかりません(笑)。

PS OS Xを使用する前に、素晴らしいツールを使ってHexagonyでゴルフをしました...今、OS XIではワインを飲まないため、説明やデバッグのために素晴らしいツールを実行していません。それで、ViMで私の旅を始めました!



1

Tcl、92バイト

set a {}
time {set a [format %c [expr 123-[incr i]]]$a;puts [format %[expr 13+$i/2]s $a]} 26

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

tcl、94

set a {}
set i 123
time {set a [format %c [incr i -1]]$a;puts [format %[expr 74-$i/2]s $a]} 26

デモ

プロセスの途中で、偶然イタリック体の帽子を手に入れました。

tcl、94

set a {}
set i 123
time {set a [format %c [incr i -1]]$a;puts [format %[expr $i/2-24]s $a]} 26

デモ


tcl、101

set a {}
set i 123
while \$i>97 {set a [format %c [incr i -1]]$a;puts [format %[expr ($i-48)/2]s $a]}

デモ

プロセスの途中で、偶然イタリック体の帽子を手に入れました。

tcl、99

set a {}
set i 123
while \$i>97 {set a [format %c [incr i -1]]$a;puts [format %[expr $i/2-24]s $a]}

デモ



@ASCIIのみありがとう!
sergiol

1

Common Lisp、SBCL、83 82バイト

(dotimes(i 27)(format t"~26:@<~a~>
"(subseq"ABCDEFGHIJKLMNOPQRSTUVWXYZ"(- 26 i))))

説明

(dotimes(i 27) ; loop from i=0 to i=26
(format t"~26:@<~a~>
"(subseq"ABCDEFGHIJKLMNOPQRSTUVWXYZ"(- 26 i))))
;print out part of alphabet starting from character number 26-i (counting from zero)
;using justification (~26:@<~a~>) to center with weight 26 characters

-1の<enter>代わりに使用するASCIIのみによる推測を使用する~%



1

T-SQL、107バイト

DECLARE @t VARCHAR(99)=SPACE(13),@ INT=27a:SET @t=STUFF(@t,@/2,@%2,CHAR(@+95))PRINT @t
SET @-=1IF @>1GOTO a

SQL機能を使用して正しい位置に正しい文字を詰め込むことにより、各行の文字列を変更しますSTUFF()。フォーマット済み:

DECLARE @t VARCHAR(99)=SPACE(13), @ INT=27
a:
    SET @t=STUFF(@t,@/2,@%2,CHAR(@+95))
    PRINT @t
    SET @-=1
IF @>1 GOTO a

@/2整数除算(余りなし)を使用して、文字を挿入する位置を決定します。@%2それはMODULO関数は、と(スペースを上書き)0(文字を挿入)と1の間で反転します。

頭文字を好む場合は、CHAR(@+63)代わりに使用します(バイトカウントは変更しません)。




0

Haskell(Lambdabot)、73バイト

unlines[([1..div(26-length x)2]>>" ")++x|x<-reverse.init$tails['a'..'z']]

同じ長さ:

do x<-reverse.init$tails['a'..'z'];([1..div(26-length x)2]>>" ")++x++"\n"

私はinit.tailstail.initsほとんどすべてのチャレンジで、またはその逆を可能にします。すでにプレリュードに追加してほしい。


0

Python 2、66 64バイト

i=91;exec'i-=1;print`map(chr,range(i,91))`[2::5].center(26);'*26

0

Groovy、53バイト

('z'..'a').each{println((it..'z').join().center(26))}

出力:

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

0

QBIC、57バイト

[25,0,-1|Y=Z[1,a/2|Y=Y+@ |]X=Z[a,25|X=X+$CHR$(65+|c)]?Y+X

これは、QBICのFORループで驚くほどうまく機能します。説明(以前のバージョン-同じ原則が適用されます):

[26,1,-1|          Loops from 26 to 1, decrementing 'a'
                   'a' is used to determine the number of spaces per line and the last letter we want to print
Y=Z                Z is always an empty string in this program, 
                   Y will hold the spaces we need to center this line
[1,a/2|Y=Y+@ |]    Add a space to Y equal to half the value of 'a', giving us a center alignment
X=Z                X holds the characters we need on this line, reset it
[a,26|             FOR c = a to 26 --> loop over the last part of the alphabet
X=X+$CHR$(64+|c)]  Convert c+64 to ASCII and append
?Y+X               Print the spaces and the letters

<outer FOR loop is closed by QBIC>

出力:

            Z
            YZ
           XYZ
           WXYZ
          VWXYZ
          UVWXYZ
         TUVWXYZ
         STUVWXYZ
        RSTUVWXYZ
        QRSTUVWXYZ
       PQRSTUVWXYZ
       OPQRSTUVWXYZ
      NOPQRSTUVWXYZ
      MNOPQRSTUVWXYZ
     LMNOPQRSTUVWXYZ
     KLMNOPQRSTUVWXYZ
    JKLMNOPQRSTUVWXYZ
    IJKLMNOPQRSTUVWXYZ
   HIJKLMNOPQRSTUVWXYZ
   GHIJKLMNOPQRSTUVWXYZ
  FGHIJKLMNOPQRSTUVWXYZ
  EFGHIJKLMNOPQRSTUVWXYZ
 DEFGHIJKLMNOPQRSTUVWXYZ
 CDEFGHIJKLMNOPQRSTUVWXYZ
BCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ

OPと一致しません。
魔法のタコUr

@carusocomputingは今それを行います。
-steenbergh

0

ラケット137バイト

(for((n(range 122 96 -1)))(for((i(floor(/(- n 97)2))))(display #\space))
(for((i(range n 123)))(display(integer->char i)))(displayln ""))

ゴルフをしていない:

(define (f)
  (for ((n (range 122 96 -1)))
       (for ((i (floor(/(- n 97)2))))
         (display #\space))
       (for ((i (range n 123)))
         (display (integer->char i)))
    (displayln "")))

テスト:

(f)

出力:

            z
            yz
           xyz
           wxyz
          vwxyz
          uvwxyz
         tuvwxyz
         stuvwxyz
        rstuvwxyz
        qrstuvwxyz
       pqrstuvwxyz
       opqrstuvwxyz
      nopqrstuvwxyz
      mnopqrstuvwxyz
     lmnopqrstuvwxyz
     klmnopqrstuvwxyz
    jklmnopqrstuvwxyz
    ijklmnopqrstuvwxyz
   hijklmnopqrstuvwxyz
   ghijklmnopqrstuvwxyz
  fghijklmnopqrstuvwxyz
  efghijklmnopqrstuvwxyz
 defghijklmnopqrstuvwxyz
 cdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.