画一个字母派对帽


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

我们可以大写吗?
Downgoat

7
认真地,另一个字母挑战?
暴民埃里克(Erik the Outgolfer)

2
我喜欢这些字母挑战。可以很容易地将其重新命名为圣诞树。
皮特·阿登

Answers:


6

Cheddar,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代码A90用于A


1
Z90,不是A
Mego 2016年

5

05AB1E15 13字节

A.svy12N;ï-ú,

在线尝试!(与上面略有不同,因为ú尚未在TIO上发布)

说明

  1. 推字母
  2. 计算字母的后缀
  3. 前置12-index / 2个空格
  4. 打印

4

Python 2,70个字节

Emigna的答案移植,-2个字节用于替换-i-1~i

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

我相当确定使用map可以产生较短的字母,除非小写字母具有较高的值
Destructible Lemon

其实我不确定了。我认为无论如何这都行不通:( soz
Destructible Lemon

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):26i: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,18年

@ l4m2很棒!
darrylyeo '18年

1
使用基数36的好主意!+1
Titus

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,对吗?
暴民埃里克(Erik the Outgolfer)

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$Ṛ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èd70 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个字节。感谢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;}

不打高尔夫球

  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 '16

1
哎呀!我又犯了这个错误,可耻的是我。......好吧@KevinCruijssen我在上面。
Numberknot

您不能用替换s=v+s递归中的s+=v吗?
罗曼·格拉夫(RomanGräf)

否。因为字母图案在后方。
Numberknot

1

Ruby,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的新手,我从11月开始。想知道是否有一种方法可以将初始化P与宏中的初始化合并。

测试高尔夫ViM序列的“正确”方法是什么?我测试了\vi -u /dev/null。但是,在虚拟机中甚至:h<_␍无法正常工作。也不太确定为什么我的ViM会移到第一个非空格字符haha。

PS在我开始使用OS X之前,我使用了许多出色的工具参加了Hexagony的比赛……现在在OS XI上不做葡萄酒,因此没有运行用于解释和调试的好工具。因此,从ViM开始我的旅程!


1

C#(.NET Core),112字节

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

在线尝试!

()=>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字节

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

通用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使用整数除法(无余数)确定插入字母的位置。@%2MODULO函数,在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可能会倒车。我希望他们已经将其添加到Prelude中。


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不匹配。
魔术章鱼缸

@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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.