Alfabe parti şapkası çizin


22

Görevin bu tam metni yazdırmaktır:

            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

Davanın önemi yok.

Unutmayın, bu , yani en küçük bayt sayısına sahip olan kod kazanır.


2
Neden indirimler?
Oliver Ni,

19
Bazı insanların sadece alfabe-tarzı bilim-sanat KC zorluklarından bıktığından şüpheleniyorum.
xnor

Büyük harf yapabilir miyiz?
Downgoat

7
Cidden, başka bir alfabe mücadelesi?
Outgolfer Erik

2
Bu alfabe zorluklarından zevk alıyorum. Bu kolayca bir Noel ağacı olarak yeniden markalı olabilir.
Pete Arden

Yanıtlar:


6

Çedar, 50 45 42 37 bayt

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

Basit, ancak çedarın çeşitli sözdizimlerini kullanan (hem nümerik hem de alfabetik)

Çevrimiçi deneyin!

açıklama

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

65için Char kodudur Ave 90içinA


1
Zöyle 90değil A.
Mego

5

05AB1E , 15 13 bayt

A.svy12N;ï-ú,

Çevrimiçi deneyin! ( úhenüz TIO'da olmadığı gibi yukarıdan biraz farklı )

açıklama

  1. Alfabeyi itin
  2. Alfabenin eklerini hesaplar
  3. Prepend 12-index / 2 boşluk
  4. baskı

4

Python 2,70 bayt

Çaprazlanmış gelen Emigna sitesindeki cevap, -2 değiştirilmesi için bayt -i-1ile~i

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

Haritayı kullanmak daha kısa bir alfabe oluşturabileceğinden oldukça eminim, belki daha küçük değerlere sahip küçük harf hariç
Destructible Lemon

Aslında artık emin değilim. Zaten bunun için işe yaramayacağını düşünüyorum :( soz
Yok Edici Limon

4

R, 67 66 59 bayt

EDIT: @rturnbull sayesinde birkaç byte kurtarıldı

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

İşleve iletilen herhangi bir sayının repotomatik olarak en yakın tam sayıya (örn. rep("*",1.99) => "*") Yuvarlanması gerçeğinin kullanılması 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
Bu benim matris girişimimden daha kısa çıkıyor. Değiştir 14...-1ile 13?
JDL

@JDL Ah evet elbette. Başka bir yaklaşıma teşebbüsün kalıntısı
Billywob 26:00

2
Aracılığıyla Eğer döngü halinde 25:0yerine 1:26, değiştirebileceğiniz 13-i/2için i/2, ve basitleştirmek (27-i):26için i:25+16 bayt tasarruf.
rturnbull

3

Pyth, 15 bayt

j_m+*/d2\ >GdUG

Sonucu STDOUT'a basan bir program.

Çevrimiçi deneyin

Nasıl çalışır

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

Deneyin ;yerine\
isaacg

3

Python 2, 52 bayt

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

sBaştaki boşlukların sayısını yazdırmak ve güncellemek için dizgiyi toplar n/2. 'De whilesona eren bir döngü 0, bir execdöngüyü (53 bayt) yenen nadir bir sayısal döngüdür :

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

Ayrıca 53 baytlık bir alternatif:

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

3

JavaScript (ES6), 85 75 69 68 bayt

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

@ L4m2 sayesinde -1 bayt .


2
Bu bir işlev veya programdan ziyade pasaj değil mi?
Neil

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

@ l4m2 Parlak!
darrylyeo

1
36 tabanını kullanarak iyi fikir! +1
Titus

2

Brain-Flak , 244 bayt

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

Çevrimiçi deneyin!


Bu, olduğu gibi okunabilir olmalıdır. İhtiyacınız olursa, tam bir açıklamam var:

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 hakkında konuşuyorsun değil mi?
Outgolfer Erik,

2

Jöle , 15 13 bayt

@Miles sayesinde -2 bayt (var olduğundan şüphelendiğim ama oluşmadığı bir niladik zincir oluşturdu)

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

TryItOnline!

Nasıl?

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

Ben alfabesi ile başlayan bir giriş parametresiz zincirini oluşturmak için bir yol bulmuş ØaJ’H⁶ẋżṫJ$ṚY2 bayt kaydeder
mil

Açıklamanın doğru olduğunu düşünüyor musunuz?
Jonathan Allan

1
Evet sadece alfabe olmanın bir tek argüman alan bir monadic zincirin olarak düşünmek
mil

2

C, 72 68 bayt

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 bayt

sondaki boşluğa dikkat edin

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

Çevrimiçi deneyin!

Nasıl çalışı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

İnsan tarafından okunabilir açıklama (?):

Alfabeyi içermek için var dizesini kullanır. Her yinelemede, son satıra ulaştıktan sonra, dizini etrafına dolana kadar durur ve durur. Alternatif girintiler için char var. Her yineleme char değişkenini kontrol eder ve çevirir. eğer öyleyse * sağa kayar, bu yüzden ilk karakter hizalar, aksi halde değil, son karakter hizalar.


1

Perl, 44 bayt

Bu @ xnor'ın cevabının limanı .

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

İhtiyaç -E(veya -M5.010) çalıştırmak için:

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


1

Java 7,128 127 bayt

1 byte kaydedildi.

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

Bir fonksiyonda 122 geçişi olmadan

132 bayt

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
Sen kaldırabilirsiniz =AT d+=c+s+"\n". Ayrıca, kodlanmamış kodunuzu girintilerle biraz biçimlendirmek isteyebilirsiniz. Diğer cevaplarınızdan bazılarında da bunu farkettim. :)
Kevin Cruijssen

1
ayy! Yine bu hatayı yaptım, ayıp bana. ...... tamam @KevinCruijssen bu işteyim.
Sayı

s=v+sÖzyinelemede ile yerini alamaz s+=vmısın?
Roman Gräf

Hayır, çünkü harf deseni geriye doğru.
Sayı

1

Ruby, 64 bayt

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

Bir kaç yorum: Sen sonra parantez koymak gerekmez join çağrılması eachyerine mapbiz Arayabilirsiniz dönen şeye umurumda değil, çünkü gereksiz lastbir dizi
Lee W

Bunun yerine (0..26).map, deneyin 27.times; yerine ('a'..'z').to_a, [*?a..?z]; ve yerine .join, *"".
Jordan

1

Japt , 16 bayt

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

Çevrimiçi deneyin!

Açıklama:

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

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

Çıktı:

            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 Tuş vuruşları

:h<_␍jjYZZPqqPxYPr Yq12@q

Key Enter tuşu nerede bazen de notludur <cr>.

açıklama

: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

Yine de ViM'de yeniyim - Kasım'da başladım. İlklendirmeyi makrodaki Pile birleştirmenin bir yolu olup olmadığını merak ediyorum .

Golf edilmiş bir ViM dizisini test etmenin "doğru" yolu nedir? İle test ettim \vi -u /dev/null. Ancak bir sanal makinede:h<_␍ çalışmıyor. Ayrıca ViM'imin neden ilk boşluk olmayan karakter haha'ya taşınacağından da emin değilim.

PS OS X'i kullanmaya başlamadan önce Hexagony'de harika aletlerle golf oynamıştım ... Şimdi OS XI'de şarap içmiyor ve bu nedenle açıklama ve hata ayıklama için harika araçları çalıştırmıyordum. Bu yüzden ViM ile yolculuğuma başladım!


1

C # (.NET Core) , 112 bayt

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

Çevrimiçi deneyin!

()=>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 bayt

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

Çevrimiçi deneyin!

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

gösteri

Sürecin ortasında, yanlışlıkla şapkanın italik versiyonunu aldım:

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

gösteri


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

gösteri

Sürecin ortasında, yanlışlıkla şapkanın italik versiyonunu aldım:

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

gösteri



@ ASCII-sadece teşekkürler!
sergiol,

1

Ortak Lisp, SBCL, 83 82 bayt

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

açıklama

(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 sadece ASCII tarafından öneriyi kullanmak <enter>yerine~%



1

T-SQL, 107 bayt

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

SQL fuction işlevini kullanarak doğru satırdaki doğru harften sıkarak her satır için dizeyi değiştirir STUFF(). biçimlendirilmiş:

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

@/2Mektubu yerleştirecek konumu belirlemek için tamsayı bölme (kalan yok) kullanır. @%2Bu MODULOişlev, işlevdir ve 0 (harfi ekler) ve 1 (boşluk üzerine yazılır) arasında değişir.

Baş harfleri tercih ederseniz, CHAR(@+63)bunun yerine kullanın (bayt sayımızı değiştirmez).




0

Haskell (Lambdabot), 73 bayt

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

Aynı uzunluk:

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

Kullandığım init.tailsveya tail.initshemen hemen her meydan okuma önünde olası bir ters ile; Keşke Prelude'a zaten eklesinlerdi.


0

Python 2, 66 64 bayt

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

0

Groovy, 53 bayt

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

Çıktı:

            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 bayt

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

Bu, QBIC 'FOR döngülerinde şaşırtıcı derecede iyi çalışıyor. Açıklama (önceki sürüm - aynı prensip geçerlidir):

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

Çıktı:

            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 ile eşleşmiyor.
Magic Octopus Urn

@ carusocomputing şimdi yapar.
steenbergh

0

Raket 137 bayt

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

Ungolfed:

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

Test yapmak:

(f)

Çıktı:

            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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.