Gambar topi pesta alfabet


22

Tugas Anda adalah mencetak teks ini:

            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

Kasus tidak masalah.

Ingat, ini adalah , jadi kode dengan jumlah byte terkecil menang.


2
Mengapa downvotes?
Oliver Ni

19
Saya menduga beberapa orang hanya bosan dengan semua tantangan alfabet ascii-pola KC.
xnor

Bisakah kita melakukannya dalam huruf besar?
Downgoat

7
Serius, tantangan alfabet lain ?
Erik the Outgolfer

2
Saya menikmati tantangan alfabet ini. Yang ini bisa dengan mudah dicap ulang sebagai pohon Natal.
Pete Arden

Jawaban:


6

Cheddar, 50 45 42 37 byte

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

Mudah, tetapi menggunakan sintaks rentang cheddar yang ringkas (baik numerik maupun alfabet)

Cobalah online!

Penjelasan

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

65adalah kode char untuk Adan 90untukA


1
Zadalah 90, tidak A.
Mego

5

05AB1E , 15 13 byte

A.svy12N;ï-ú,

Cobalah online! (sedikit berbeda dari di atas karena úbelum pada TIO)

Penjelasan

  1. Tekan alfabet
  2. Hitung akhiran alfabet
  3. Sediakan 12 indeks / 2 spasi
  4. Mencetak

4

Python 2, 70 byte

Porting dari jawaban Emigna , -2 byte untuk diganti -i-1dengan~i

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

Saya cukup yakin menggunakan peta dapat menghasilkan alfabet yang lebih pendek, kecuali mungkin huruf kecil memiliki nilai yang lebih tinggi
Destructible Lemon

Sebenarnya saya tidak yakin lagi. Saya pikir itu tidak akan berhasil untuk ini :( soz
Destructible Lemon

4

R, 67 66 59 byte

EDIT: Menyimpan beberapa byte berkat @rturnbull

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

Mengeksploitasi fakta bahwa angka apa pun yang diteruskan ke repfungsi secara otomatis dibulatkan ke bilangan bulat terdekat (misalnya rep("*",1.99) => "*") yang berarti bahwa urutan aktual yang dilewati adalah 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
Ini lebih pendek dari upaya matriks saya. Ganti 14...-1dengan 13?
JDL

@ JDL Ah ya tentu saja. Sisa dari mencoba pendekatan lain
Billywob

2
Jika Anda loop melalui 25:0bukan 1:26, Anda dapat mengubah 13-i/2ke i/2, dan menyederhanakan (27-i):26untuk i:25+1, tabungan 6 byte.
rturnbull

3

Pyth, 15 byte

j_m+*/d2\ >GdUG

Program yang mencetak hasilnya ke STDOUT.

Cobalah online

Bagaimana itu bekerja

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

Coba ;alih-alih\
isaacg

3

Python 2, 52 byte

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

Akumulasi string suntuk mencetak dan memperbarui jumlah spasi utama n/2. Sebuah whileloop yang berakhir pada 0adalah loop numerik yang jarang daripada mengalahkan execloop (53 byte):

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

Juga alternatif 53-byte:

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

3

JavaScript (ES6), 85 75 69 68 byte

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

-1 byte terima kasih kepada @ l4m2 .


2
Bukankah ini potongan daripada fungsi atau program?
Neil

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

@ l4m2 Cemerlang!
darrylyeo

1
Ide bagus menggunakan base 36! +1
Titus

2

Brain-Flak , 244 byte

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

Cobalah online!


Ini harus cukup mudah dibaca. Jika Anda membutuhkannya, saya punya penjelasan lengkap:

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.Anda berbicara tentang Brain-Flak , kan?
Erik the Outgolfer

2

Jeli , 15 13 byte

-2 byte terima kasih kepada @miles (membentuk rantai niladic yang saya duga ada tetapi tidak terbentuk)

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

TryItOnline!

Bagaimana?

Ø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)

Saya menemukan cara untuk membentuk rantai niladik dimulai dengan alfabet ØaJ’H⁶ẋżṫJ$ṚYyang menghemat 2 byte
mil

Apakah Anda pikir penjelasannya benar?
Jonathan Allan

1
Ya, anggap saja sebagai rantai monadik dengan satu argumen sebagai alfabet
mil

2

C, 72 68 byte

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


1

Turtlèd , 70 68 byte

perhatikan ruang trailing

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

Cobalah online!

Bagaimana itu bekerja:

#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

Penjelasan yang dapat dibaca manusia (?):

Ia menggunakan string var untuk memuat alfabet. Setiap iterasi, ia mengurangi indeks dengan satu, sampai membungkus, dan berhenti, setelah sampai ke baris terakhir. Untuk indentasi bolak-balik, ia menggunakan char var. Setiap iterasi memeriksa char var dan membaliknya. jika itu * itu bergeser ke kanan, maka karakter pertama sejajar, jika tidak, maka karakter terakhir menyelaraskan.


1

Perl, 44 byte

Ini adalah port jawaban @ xnor .

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

Perlu -E(atau -M5.010) untuk dijalankan:

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


1

Java 7,128 127 byte

Disimpan 1 byte. Terima kasih kevin.

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;}

ungolfed

  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;
}
}

Tanpa operan 122 dalam suatu fungsi

132 byte

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;}

ungolfed

  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
Anda dapat menghapus =di d+=c+s+"\n". Selain itu, Anda mungkin ingin memformat kode yang tidak dipisahkan sedikit dengan lekukan. Saya perhatikan itu dengan beberapa jawaban Anda yang lain juga. :)
Kevin Cruijssen

1
Ups! saya melakukan kesalahan ini lagi, Malu pada saya. ...... ok @KevinCruijssen saya ada di sana.
Numberknot

Tidak bisakah Anda mengganti s=v+sdengan rekursi s+=v?
Roman Gräf

Tidak. Karena pola hurufnya terbalik.
Numberknot

1

Ruby, 64 byte

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

Beberapa komentar: Anda tidak perlu meletakkan tanda kurung setelah join Memanggil eachalih-alih maptidak perlu, karena kami tidak peduli dengan apa yang kami kembalikan. Anda dapat menelepon lastpada suatu jangkauan
Lee W

Alih-alih (0..26).map, coba 27.times; bukan ('a'..'z').to_a, [*?a..?z]; dan bukannya .join, *"".
Jordan

1

Japt , 16 byte

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

Cobalah online!

Penjelasan:

;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 byte

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

Keluaran:

            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 penekanan tombol

:h<_␍jjYZZPqqPxYPr Yq12@q

Di mana ␍ adalah tombol Enter, terkadang juga dinotasikan sebagai <cr> .

Penjelasan

: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

Saya baru mengenal ViM - saya mulai pada bulan November. Ingin tahu apakah ada cara untuk menggabungkan inisialisasi Pdengan yang ada di makro.

Apa cara "benar" untuk menguji urutan ViM golf? Saya diuji dengan\vi -u /dev/null . Namun dalam VM bahkan :h<_␍tidak berfungsi. Juga tidak terlalu yakin mengapa ViM saya akan pindah ke karakter non spasi pertama haha.

PS Sebelum saya pindah untuk menggunakan OS X, saya bermain golf di Hexagony dengan alat yang hebat ... Sekarang di OS XI tidak membuat anggur dan dengan demikian tidak menjalankan alat yang bagus untuk penjelasan dan debugging. Jadi, mulailah perjalanan saya dengan ViM!


1

C # (.NET Core) , 112 byte

()=>string.Join("\n",new int[26].Select((_,i)=>"".PadLeft(12-i/2)+"abcdefghijklmnopqrstuvwxyz".Substring(25-i)))

Cobalah online!

()=>string.Join("\n", // OP doesnt want to output a sequence of string...
    new int[26].Select((_,i)=> // yield range from 0 to 25
        "".PadLeft(12-i/2)+ // add spaces to center
            "abcdefghijklmnopqrstuvwxyz".Substring(25-i)))  // remove letters

1

Tcl , 92 byte

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

Cobalah online!

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

demo

Di tengah proses, saya tidak sengaja mendapatkan versi miring dari topi:

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

demo


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]}

demo

Di tengah proses, saya tidak sengaja mendapatkan versi miring dari topi:

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]}

demo



@ ASCII-satunya terima kasih!
sergiol

1

Common Lisp, SBCL, 83 82 bytes

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

Penjelasan

(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 menggunakan sugestion oleh ASCII-satunya untuk menggunakan <enter>bukan~%



1

T-SQL, 107 byte

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

Memodifikasi string untuk setiap baris dengan menjejalkan huruf yang benar pada posisi yang benar menggunakan fungsi SQL STUFF(). Diformat:

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

@/2menggunakan pembagian integer (tanpa sisa) untuk menentukan posisi untuk memasukkan surat. @%2adalah MODULOfungsinya, dan membalik antara 0 (masukkan huruf) dan 1 (menimpa spasi).

Jika Anda lebih suka huruf awal, gunakan CHAR(@+63)saja (tidak mengubah jumlah byte kami).




0

Haskell (Lambdabot), 73 byte

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

sama panjang:

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

Saya menggunakan init.tailsatau tail.initsdengan kemungkinan membalik di depan di hampir setiap tantangan; Saya berharap mereka akan menambahkannya ke Prelude.


0

Python 2, 66 64 byte

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

0

Groovy, 53 byte

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

Keluaran:

            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 byte

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

Yang ini bekerja sangat baik dengan loop FOR QBIC. Penjelasan (dari versi sebelumnya - prinsip yang sama berlaku):

[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>

Keluaran:

            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

Tidak cocok dengan OP.
Magic Gurita Guci

@carus melakukan komputasi sekarang.
steenbergh

0

Racket 137 byte

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

Tidak Disatukan:

(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 "")))

Pengujian:

(f)

Keluaran:

            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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.