Намалюйте шапку партії алфавіту


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
Чому голоси?
Олівер Ні,

19
Я підозрюю, що деякі люди просто втомилися від усіх проблем, пов’язаних з алфавітом ascii-art 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- це char код для Aі 90дляA


1
Zє 90, ні A.
Мего


4

Python 2, 70 байт

Походить із відповіді Еміньї , -2 байти для заміни -i-1на~i

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

Я досить впевнений, що за допомогою карти можна отримати коротший алфавіт, за винятком малих літер, які мають більші значення
Знищуваний лимон

Насправді я вже не впевнений. Я думаю, що це не спрацювало б для цього :( soz
лимон

4

R, 67 66 59 байт

EDIT: Збережено пару байтів завдяки @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...-1на 13?
JDL

@JDL Так, звичайно. Залишок спроби іншого підходу
Біллівоб

2
Якщо перебрати 25:0замість 1:26, ви можете змінити , 13-i/2щоб i/2і спростити , (27-i):26щоб i:25+1, рятуючи 6 байт.
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)+`
`

-1 байт завдяки @ l4m2 .


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

Мозок-Флак , 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.Ви говорите про Брейн-Флак , правда?
Ерік Аутгольфер

2

Желе , 15 13 байт

-2 байти завдяки @miles (утворився ніладієвий ланцюг, я підозрював, що існує, але не сформувався)

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

СпробуйтеItOnline!

Як?

Ø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$ṚYякий економить 2 байти
миль

Як ви вважаєте, пояснення правильне?
Джонатан Аллан

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

Turtlèd , 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, щоб містити алфавіт. При кожній ітерації він зменшує індекс на одиницю, поки не завернеться та зупиниться, після того як дістанеться до останнього рядка. Для змінних відступів використовується 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". Крім того, ви можете трохи відформатувати код, який не використовується для заготівлі, з відступами. Я помітив, що і з вашими іншими відповідями. :)
Kevin Cruijssen

1
ой! я знову зробив цю помилку, сором мені. ...... добре @KevinCruijssen я на цьому.
Numberknot

Ви не можете замінити s=v+sрекурсію на s+=v?
Роман Греф

Ні. Тому що букви букв зворотно.
Numberknot

1

Рубін, 64 байти

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

Кілька коментарів: Вам не потрібно ставити дужки після join виклику, eachа mapне зайве, оскільки нас не хвилює те, що ми повертаємось. Ви можете зателефонувати lastв діапазон
Lee 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 - я почав у листопаді. Цікаво, чи є спосіб злиття ініціалізації Pз макросом.

Який "правильний" спосіб тестувати послідовність використання ViM в гольф? Я тестував с\vi -u /dev/null . Однак у ВМ навіть :h<_␍не працює. Також не дуже впевнений, чому мій ViM перейде до першого непросторового персонажа ха-ха.

PS Перед тим, як перейти на використання OS X, я займався гольфом у Гексагонії за допомогою чудових інструментів ... Тепер на 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 лише дякую!
серхіол

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, використовуючи заміщення ASCII-лише для використання <enter>замість~%



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.tailsабо tail.initsз можливим реверсом спереду в майже кожному виклику; Я б хотів, щоб вони вже додали його до Прелюдії.



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

Не відповідає ОП.
Magic Octopus Urn

@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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.