字母楼梯


30

挑战

您的任务是创建一个程序或函数,该程序或函数在没有输入的情况下输出以下内容:

a
bb
ccc
dddd
eeeee
ffffff
ggggggg
hhhhhhhh
iiiiiiiii
jjjjjjjjjj
kkkkkkkkkkk
llllllllllll
mmmmmmmmmmmmm
nnnnnnnnnnnnnn
ooooooooooooooo
pppppppppppppppp
qqqqqqqqqqqqqqqqq
rrrrrrrrrrrrrrrrrr
sssssssssssssssssss
tttttttttttttttttttt
uuuuuuuuuuuuuuuuuuuuu
vvvvvvvvvvvvvvvvvvvvvv
wwwwwwwwwwwwwwwwwwwwwww
xxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzzzzz

计分

这是,因此每种语言中最短的答案将获胜。


4
输出为行列表?
totallyhuman

5
我们可以改用大写字母吗?
Uriel's

9
我错过了字母挑战!(但不要让Leaky Nun知道)
Luis Mendo

9
我非常努力地检查它是否是骗子,而且显然不是
Blue

4
@totallyhuman由您决定。
SpookyGengar

Answers:


14

05AB1E,2个字节

在线尝试!

请注意,这是作为行的列表输出的,这是OP明确允许的。链接使用带有漂亮字体的版本(由换行符联接)。

怎么运行的

  • A 产生小写字母。
  • ƶ 提升字母(将每个元素乘以其索引)。
  • » 通过换行符加入。


9

APL(Dyalog)12 8 5字节SBCS

@ngn节省了3个字节

@Adám节省了4个字节

⍴⍨⌸⎕A

OP已澄清大写字母有效,并且可以作为字符串数组输出。

在线尝试!

怎么样?

给我们字母中的每个字母⎕A及其索引,⍴⍨并以字母作为左参数并将索引es作为右参数传递到函数中。

⍴⍨resha ES其右参数受其左侧之一提供的长度。左右切换(因此它的符号看起来像阅读此说明的人的脸)。


819⌶↑⎕A⍴¨⍨⍳26
亚当

@Adám谢谢!我尝试了/和\的所有变体,完全忽略了形状⍨–
Uriel

您也可以删除它
亚当

@Adám,但看起来更丑⍨–
Uriel

打开拳击!
亚当

8

Haskell,27个字节

[c<$['a'..c]|c<-['a'..'z']]

在线尝试!返回行列表。(感谢@totallyhuman指出现在允许这样做)

说明:

             c<-['a'..'z']  -- for each character c from 'a' to 'z'
[           |c<-['a'..'z']] -- build the list of
[   ['a'..c]|c<-['a'..'z']] -- the lists from 'a' to c, e.g. "abcd" for c='d'
[c<$['a'..c]|c<-['a'..'z']] -- with each element replaced by c itself, e.g. "dddd"

*弓*对于菜鸟的解释?是否会<$重复第一个参数n次,其中n是第二个参数的长度?
totallyhuman

@totallyhuman你去了。 如果您还有其他问题,请随时向《单子和男人》问。
Laikoni '17

Prelude中有一些非常有趣的运算符...感谢您的解释!
totallyhuman

7

brainfuck,74个字节

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+<<[->>[->+<<.>]>[-<+>]<+<+<<.>]

在线尝试!

说明

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+
TAPE:
  000
  010   C_NEWLINE
  026   V_ITERCOUNT
  097   V_ALPHA
 >001<  V_PRINTCOUNT
  000   T_PRINTCOUNT

V_ITERCOUNT TIMES:      <<[-   

  V_PRINTCOUNT TIMES:     >>[-
    INC T_PRINTCOUNT        >+
    OUTPUT V_ALPHA          <<.
                          >]

  RESTORE V_PRINTCOUNT    >[-<+>]
  INC V_PRINTCOUNT        <+
  INC V_ALPHA             <+
  OUTPUT C_NEWLINE        <<.
                        >]

在线尝试!


7

Befunge-98(FBBI),27个字节

1+:0\::'`j'@+\k:$$>:#,_$a,

替换字符(ASCII 26)在哪里

在线尝试!

使用大写字母,并带有换行符。

说明

该代码通过在每个循环中存储一个计数器(初始为0)来工作:

  • 1+ -递增1
  • :0\:: -推送内容,使堆栈看起来像这样: bottom [N, 0, N, N, N] top
  • '`j'@ -检查计数器是否大于26
    • j'@-如果是,我们跳过'并使用退出@
    • j'@-如果不是,我们执行',将的ASCII值压@入堆栈

现在堆栈看起来像这样: bottom [N, 0, N, N, 64] top

  • +\-添加,然后切换顶部2:bottom [N, 0, (N+64), N] top 第一次输入,这是ASCII 65,或者A
  • k:-从最开始的(N+1)时间开始复制第二个-现在堆栈中有(N+2)(N+64)(加上N0之前的值)
  • $$-扔掉前2的值-现在只有N(N+64)
  • >:#,_-打印每个最高值,直到达到0-这表示获取的N副本(N+64)
  • $-扔掉0-现在堆栈只是N
  • a, -打印回车

然后重复


我喜欢将@两者用于结束程序和添加到计数器的方式。


@JamesHolderness是的。感谢您抓住这一点!
MildlyMilquetoast

7

红宝石32岁 30字节

-2个字节,感谢@EricDuminil。

27.times{|n|puts (n+96).chr*n}

在线尝试!


1
优秀。根据OP的评论,允许尾随/前导换行符。那样的话27.times{|n|puts (n+96).chr*n}30字节是正确的
Eric Duminil

6

JavaScript(ES6),54个字节

f=(n=9)=>++n<36?n.toString(36).repeat(n-9)+`
`+f(n):''

O.innerText = f()
<pre id=O></pre>


6

Excel VBA,38个字节

使用立即窗口。:)

[A1:A26]="=REPT(CHAR(96+ROW()),ROW())"

啊。我的错。我以为是Excel,因为我使用“即时窗口”使用Excel函数。
消除

您可以通过删除终端删除一个字节"
Taylor Scott


5

Ruby,38个字节

返回字符串数组

->{(a=*?a..?z).map{|x|x*-~a.index(x)}}

-5个字节,由于完全人性化

* -11字节,归功于约旦的出色打高尔夫球。


根据我的计数,这只有48个字节。
乔丹

1
您根本不需要"\n"puts为您完成了此操作(尽管供以后参考,$/但要短2个字节),但是puts如果您将此设置为仅返回行数组的lambda,则可以完全摆脱。您还可以更改a=[*?a..?z];puts a.mapputs (a=*?a..?z).mapx*(a.index(x)+1)x*-~a.index(x)。总共38字节
乔丹

38字节的版本在TiO上运行良好(请参阅前面的评论中的链接)。请注意,(a=*?a..?z)它位于代码块内部,而不是lambda的参数部分。
乔丹


4

MATL,9个字节

2Y2"@X@Y"

在线尝试!

说明

2Y2     % Push string 'abc...z'
"       % For char in that string each
  @     %   Push current char
  X@    %   Push iteration index (1-based)
  Y"    %   Run-length decoding: repeat char that many times
        % Implicit end. Implicit display

你知道为什么&不能用来复制和转置2Y2吗?
Stewie Griffin

@StewieGriffin &实际上并没有复制和转置,尽管有时会产生相同的结果。它所做的是修改下一个功能的输入/输出数量。例如,如果您使用&+,则该+函数现在将使用一个输入而不是两个输入,并输出其自身转置后的输入之和。但是,这仅仅是因为这是如何+ 用1个输入(同工作=>和一些其他)
路易斯Mendo


4

果冻 5  4 字节

偷偷摸摸的Python实现滥用

感谢Adám -1字节(允许输出行列表;因为现在已经编写了函数而不是程序)

Øa×J

一个尼拉度式链接,返回一个字符串列表,即行
(要在整个程序中将换行符打印出来,只需添加Y)。

在线尝试!(页脚将链接作为nilad(¢)调用,并获得结果(ŒṘ)的Python表示,以确保清晰,因为默认的完整程序行为会像这样将结果粉碎在一起abbccc...

怎么样?

Øa×J - main link: no arguments
Øa   - yield the alphabet = ['a','b','c',...,'z']
   J - range of length    = [1,2,3,...,26]
  ×  - multiplication     = ["a","bb","ccc",...,"zzzzzzzzzzzzzzzzzzzzzzzzzz"]
     - (Python multiplication lengthens chars to strings - not usually a Jelly thing)

1
Øa×J 应该足够了
亚当

嗯,也许-我们可以“输出”行列表,但是我们必须“创建程序”-当作为程序运行时,四个字节的输出被粉碎,无法表明其列表性质。
乔纳森·艾伦

程序或功能
–Adám17年

4

MATL,11个字节

2Y2t!g*!YRc

在线尝试!

使用带1的广播乘法来获得所需字母的大方形26x26矩阵。接下来,取下三角部分,并进行隐式打印。

同样是11个字节:

2Y2!t~!+YRc  % Using broadcast addition with zeroes
2Y2!l26X"YR  % Using 'repmat'

@StewieGriffin我实际上是在就相同解决方案的巧合对您的Octave答案发表评论。
桑契斯,2017年

4

Javascript,87个字节,72个字节(非常感谢@steenbergh)

我的第一个答案也是:

for(i=1,j=97;j<123;){console.log(String.fromCharCode(j++).repeat(i++))};

欢迎!看起来您可以通过删除ind=1开头,后面的分号i<123和最后一个分号之间的空格来缩短它。另外,请通过说明语言-字节数(以#开头)使标题更清晰。
steenbergh

您可以通过j完全删除来保存六个字节:for(i=1;i<27;){console.log(String.fromCharCode(i+96).repeat(i++))}
steenbergh

@steenbergh再次感谢您,您将如何帮助我。
NTCG

4

贾普特9) 7字节

输出行数组

;C¬Ëp°E

试试吧


说明

¬将小写字母(;C)拆分()为一个字符数组,在该数组(Ë)上映射,并p以当前索引(E)递增(°)的次数重复()当前元素。


除了我使用过的设备以外,我拥有的完全是什么®p°Y
ETHproductions'Nov

3

,9字节

FczPcX++i

在线尝试!

用伪代码,这是

For-each c in z
    Print (c string-multiply ++i)

其中z预设为小写字母,i预设为0。


基于地图的解决方案占用一个额外的字节,因为它们需要该-n标志在多行上显示:

{aX++i}Mz
B X_+1MEz

3

加速!,66字节

Count i while 26-i {
Count j while i+1-j {
Write 97+i
}
Write 10
}

在线尝试!

有评论

# Loop i from 0 to 25
Count i while 26-i {
    # Loop j from 0 to i (inclusive)
    Count j while i+1-j {
        # Print a letter
        Write 97+i
    }
    # Print a newline
    Write 10
}


3

R,38个字节

一个相对无趣的答案。i从1到26进行迭代,打印i字母i时间的第一个字母(使用隐式换行符)。

for(i in 1:26)print(rep(letters[i],i))

在线尝试!

一个更有趣的方法可能是使用类似于以下内容的方法:

cat(letters[(1:351*2)^.5+.5])

这使我们所有字母的数量正确,但没有换行符。也许比我聪明的人可以找到一种方法,用它来回答高尔夫球手问题。


2
我也不确定如何使用您的第二种方法,但是我知道这rep(letters, 1:26)要短得多……
Giuseppe

@朱塞佩·哈!就像我说的那样,绝对需要“比我聪明的人”。
rturnbull



3

PHP,47 46字节

for($c=a;$i<26;)echo"
",str_pad($c,++$i,$c++);

要么

for($c=a;$i<26;)echo str_pad("
",++$i+1,$c++);

运行-nr在线尝试


3

J18 17字节

a.{~(#"0+&96)i.27

说明:

              i.27      - list of integers 0 - 26
     (   +&96)          - adds 96 to the above list (starting offset of 'a')
      #"0               - copies the right argument left argument times  
  {~                    - select items from a list (arguments reversed)
a.                      - the whole alphabet


#"0 +&96 is a hook, which means that at first +96 is applied to the list i.27,
resulting in a list 96, 97, 98... 122, then #"0 is applied to this result. 
So it is evaluated as ((i.27)#"0(96+i.27)){a:

在线尝试!



3

八度25 24字节

['',tril((x=65:90)'+~x)]

在线尝试!

感谢Giuseppe节省了一个字节,他告诉我OP允许使用大写字母。

说明:

x用大写字母的ASCII值创建一个向量,并将其转置。x在行向量中添加负数(因此为26个零),以使用(的ASCII值)创建网格:

AAAA
BBBB
CCCC

取下三角矩阵并通过与空字符串连接转换为字符。


3

C(gcc)48个字节 50个字节

可重新运行的版本,如下面评论中的cleblanc和Steadybox所示。

s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}

在线尝试!


1
好答案。我认为您的函数将在下次调用时失败,并且根据此链接,该函数应可重复使用;codegolf.meta.stackexchange.com/questions/4939/…–
cleblanc

这是50字节的固定版本:s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}仍然比我的回答差几个字节:)
Steadybox


3

Japt,17 16 11字节

-5字节感谢Oliver

在ISO-8859-1中

;26ÆCgX pXÄ

不是最高分,但我仍然是新手。任何建议都非常欢迎。

输出行列表,允许的OP。链接包含3个字节以用于换行符。

在线尝试!

;                      - Use string variables
 26                    - Literal 26
   Æ                   - For range 0..26
    C                  - Alphabet
     gX                -         . character at index X
        pXÄ            - Duplicate X+1 times
                       - End function (implicit)

1
真好!1oBÊÄ可以替换为26õ。您可以通过执行类似的操作来节省更多的字节;26ÆCgX pXÄ
Oliver

@Oliver我怎么没看到26比字母长度短?谢谢。另外,我很糟糕,我没有发现有这样of论点……
RedClover
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.