字母三角形再次触击


24

任务

您的任务是打印以下确切文本:

A
BCD
EFGHI
JKLMNOP
QRSTUVWXY
ZABCDEFGHIJ
KLMNOPQRSTUVW
XYZABCDEFGHIJKL
MNOPQRSTUVWXYZABC
DEFGHIJKLMNOPQRSTUV
WXYZABCDEFGHIJKLMNOPQ
RSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLM
NOPQRSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLMNOPQ
RSTUVWXYZABCDEFGHIJKLMNOPQRSTUV
WXYZABCDEFGHIJKLMNOPQRSTUVWXYZABC
DEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL
MNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW
XYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ
KLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY
ZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP
QRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI
JKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD
EFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZA
BCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

眼镜

  • 您可以全部小写而不是全部大写。
  • 允许在三角形的末尾尾随换行符。
  • 每行后可以有空格。
  • 您必须打印到STDOUT而不是输出字符串数组。

计分

这是。字节数最少的程序获胜。


1
“再次罢工”是什么意思?您是否像这样提出了另一个挑战?
haykam


1
看来我们真的需要(另一个)字母挑战吗?
Rohan Jhunjhunwala

2
这是一个很好的挑战,但我认为我们已经超越了这些字母挑战的饱和度,没有什么私人的。
Rohan Jhunjhunwala

实际上是在寻找一个字母挑战,即某个位置的字母无法通过简单的表达式从涉及该mod函数的坐标中计算出来。如果我有时间,可以自己做。

Answers:


39

Vim,29个字节

:h<_↵↵↵y$ZZ26P0qqa↵♥βjllq25@q

其中代表Return键,Escape键和βBackspace键。

在此处输入图片说明


3
在这些问题上,你怎么总是打败我来回答问题?无论如何,Aargh +1,我不能拒绝vim!:)
DJMcMayhem

7
我仍然认为您应该使用而不是。并且代替β。这就是这些Unicode字符的用途。utf8icons.com/subsets/control-pictures
mbomb007 '16

9

Python 2,65个字节

i=1
a=bytearray(range(65,91))*26
while a:print a[:i];a=a[i:];i+=2

1
我已经改变了头的Python 2,因为该代码将无法在Python 3下工作
漏尼姑

7

果冻,10 字节

26RḤ’RØAṁY

在线尝试!

怎么运行的

26RḤ’RØAṁY  Main link. No Arguments.

26          Set the return value to 26.
  R         Range; yield [1, 2, ..., 25, 26].
   Ḥ        Unhalve; yield [2, 4, ..., 50, 52].
    ’       Decrement; yield [1, 3, ..., 49, 51].
     R      Range; yield [[1], [1, 2, 3], ..., [1, ..., 49], [1, ..., 51]].
      ØA    Yield the uppercase alphabet.
        ṁ   Mold the alphabet as the array of ranges. This repeats the uppercase
            letters over an over again, until all integers in the range arrays
            have been replaced with letters.
         Y  Join, separating by linefeeds.

当时“双”被称为“减半”吗?而且,太好了!![等待对100k rep
表示祝贺

这只是一个助记符。H一半,并且是其倒数(unhalve)。
丹尼斯

我只是想到了/2*2,所以它是“ Halve”或“ Double”。这就是为什么我感到困惑。
暴民埃里克

同样是10个字节:27Ḷ²IRØAṁY
Leaky Nun

同样是10个字节:51Rm2RØAṁY
HyperNeutrino

7

VBA Excel(80字节,1742字节)


Excel,1742字节

ugoren创造性答案的启发,我设法找到一个Excel公式来创建OP中所示的模式。

=MID(REPT("ABCDEFGHIJKLMNOPQRSTUVWXYZ",26),(ROW()-1)^2+1,2*ROW()-1)

将此公式粘贴到单元格A1中,然后将其整个拖动到范围A1:A26中。

公式的长度为67个字节,但是您必须将其复制26次,因此等于67 * 26 = 1742个字节。这是输出:

在此处输入图片说明


Excel VBA,80字节

现在,由于VBA已内置在大多数Microsoft Office应用程序(包括Excel)中,因此我们可以将Excel与VBA集成在一起以自动执行该过程并节省许多字节。在立即窗口中编写并运行以下代码(使用组合键CTRL+ G在Visual Basic编辑器中显示它):

[A1:A26]="=MID(REPT(""ABCDEFGHIJKLMNOPQRSTUVWXYZ"",26),(ROW()-1)^2+1,2*ROW()-1)"

该程序通过将上面的Excel公式打印到范围A1:A26来工作。不幸的是,Excel和VBA都没有内置字母。


在我看来,列名称看起来像是内置的字母。使用前26个列名称。
mbomb007 '16

1
@ mbomb007那又如何呢?我认为使用它们而不是字符串会更困难。
暴民埃里克

@EriktheGolfer那么?我的观点是,有一个内置的字母。
mbomb007'9

1
@ mbomb007您说“使用前26个列名称”,我认为这是“使用前26个列名称而不是您当前使用的名称”,这就是我回答的原因。
暴民埃里克

@EriktheGolfer这是一个建议。知道有多少个字节。
mbomb007 '16

5

Haskell,67个字节

_#53=[]
s#i=take i s:drop i s#(i+2)
mapM putStrLn$cycle['A'..'Z']#1

i在行的长度上进行简单的递归。在每个步骤中,下一个i字符取自字母的无限重复。


4

Mathematica,90个字节

StringRiffle[Flatten[Alphabet[]&~Array~26]~Internal`PartitionRagged~Range[1,51,2],"
",""]&

匿名函数。不接受任何输入,并返回一个字符串作为输出。欢迎打高尔夫球。一个示例的Internal`PartitionRagged作用:

In[1]:= Internal`PartitionRagged[{2, 3, 5, 7, 11, 13}, {2, 3, 1}]               

Out[1]= {{2, 3}, {5, 7, 11}, {13}}

Mathematica有内置的字母三角形吗?
缓冲区已读

4

C,79字节

main(i,j){for(i=0,j=1;i<676;i++){putchar(i%26+65);if(j*j==i+1){puts("");j++;}}}

我在C中的第一个答案\ o /

打高尔夫球的建议非常受欢迎。


62:i;main(j){while(i<676)printf("\n%c"+(j*j^i++||!j++),i%26+65);}
xsot

@xsot谢谢,但是我担心不允许使用换行符。
Leaky Nun

1
但是没有领先的换行符吗?
xsot

60:i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}
xsot

@immibis我想我应该贴出来。
xsot

4

Brachylog,37个字节

26~l<:1aLc~j[@A:I],L~@nw
=:2%1,.#@l?,

在线尝试!

说明

  • 主要谓词:

    26~l         Let there be a list of 26 elements
    <            This list is an ascending list of integers
    :1aL         Apply predicate 1 to that list ; the resulting list of strings is L
    c            Concatenate the list of strings into one big string
    ~j[@A:I],    That big string is the result of juxataposing the alphabet I times to itself
    L~@n         Create a string which when splitted on line breaks results in L
    w            Write that string to STDOUT
    
  • 谓词1:用于生成奇数长度的可变字符串。

    =            Assign a value to the Input
    :2%1,        That value must be odd
    .#@l?,       Output is a string of length Input
    

最后,您要进行ascii艺术挑战
Leaky Nun

@LeakyNun会将其归类为比ASCII art imo更多的字符串操作
Fatalize

我应该将其添加到标签中吗?
Leaky Nun

很好地利用了事实,即最后一行是唯一结尾的行,Z因为它26是无平方的。
Leaky Nun


3

JavaScript(ES6),77 82 88

EcmaScript 6只需使用换行符的模板字符串文字保存1个字节即可。

for(i=r=l=o='';l+52;r++||(r=l-=2,o+=`
`))o+=(i++%26+10).toString(36);alert(o)

少打高尔夫球

for(i = r = l = o = '';
    l + 52;
    r++ || (r = l -= 2, o += `\n`))
  o += (i++ % 26 + 10).toString(36);
alert(o);

测试

for(i=r=l=o='';l+52;r++||(r=l-=2,o+=`
`))o+=(i++%26+10).toString(36);alert(o)


\ o / ES6答案,我可以在浏览器中运行
Downgoat

我偷了你的.toString(36)逻辑...现在你必须超过80个字节!
applejacks01

啊,我承认,我想不出任何办法在我的图书馆中击败它。感谢您的挑战!
applejacks01

3

Perl,42 41 39字节

perl -E '@b=(A..Z)x26;say splice@b,0,$#a+=2for@b'

只是代码:

@b=(A..Z)x26;say splice@b,0,$#a+=2for@b

一个明显的较短版本不幸地引发了内部perl问题(在迭代中使用释放值):

say splice@b,0,$#a+=2for@b=(A..Z)x26

2

JavaScript,129个字节

z=1,i=0,g=a=>{b=0,c="";while(a+a-1>b){c+='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``[i>26?i=0:i++];b++}console.log(c)};while(z<26)g(z++)

1
使用传播运算符可以节省3个字节[...'ABCDEFGHIJKLMNOPQRSTUVWXYZ']而不是'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``
此处插入用户名,2016年



2

MATLAB,112 109 95 79 77字节

这也可以在Octave中使用,您可以在此处在线尝试。

a=['' 65:90 65:90]';j=0;for i=1:2:52;b=circshift(a,j);j=j-i;disp(b(1:i)');end

因此,在进行了一些重大更改之后,我又节省了14 32个字节。这一段变得越来越像我从MATLAB所期望的长度。我已经在下面保留了旧版本,因为它有很大的不同。

a=['' 65:90 65:90]';        %Create 2 copies of the upper case alphabet
j=0;                        %Initialise cumulative sum
for i=1:2:52;               %For each line length
    b=circshift(a,j);       %Rotate the alphabet string by the cumulative offset
    j=j-i;                  %Update cumulative negative sum of offsets.
    disp(
         b(1:i)'            %Extract first 'line length' characters from rotated alphabet.
               );           %Display next line (disp adds newline automatically)
end

原始版本:

a=['' repmat(65:90,1,26)];c=cumsum(1:2:51);disp(cell2mat(arrayfun(@(s,f)[a(s:f) 10],[1,c(1:25)+1],c,'Un',0)))

哇,结果比我想象的要长。我看看是否能将其删除几个字节。

一个非高尔夫版本来解释:

a=['' repmat(65:90,1,26)]; %Create 26 copies of the upper case alphabet
c=cumsum(1:2:51);          %Calculate the end index of each row in the above array, by cumulatively summing the length of each line
disp(
     cell2mat(
              arrayfun(@(s,f)
                             [a(s:f) 10], %Extract the part of the alphabet and insert a new line.
                                         [1,c(1:25)+1],c, %start index is the previous end of line plus 1. End index is as calculated by cumsum.
                       'Un',0 %The returned values are not all the same length
                       )   %Do this for each line
              )            %Convert back to a matrix now new lines inserted
     )                     %And display it

致谢

  • 保存了3个字节-感谢@LuisMendo

2

XPath 3.0(和XQuery 3.0),84字节

codepoints-to-string((0 to 25)!(subsequence(((1 to 26)!(65 to 90)),.*.+1,2*.+1),10))

说明:

(1 to 26)!(65 to 90) 是26次字母

(0 to 25)!(subsequence(XX, start, len),10) 接受其中的26个子序列,每个子序列后跟换行符

subsequence(X, .*.+1, 2*.+1) 接受具有起始位置和长度的连续子序列:(1,1),(2,3),(5,5),(10,9)等

codepoints-to-string() 将Unicode代码点转换为字符


太棒了 我以为我知道XQuery是什么。原来我不知道。
约旦

我怀疑,很多职位在这里告诉你很多关于他们所使用的语言。
迈克尔·凯

2

Ruby,46个字节

26.times{|i|puts ([*?A..?Z]*26)[i*i,i*2+1]*""}

在ideone上查看:http://ideone.com/3hGLB0


2

05AB1E(替代)15个字节

A2×52µ¼D¾£,¾¼FÀ

在线尝试!

说明:

A2×              # push a string containing a-za-z
   52µ           # Loop the rest of the program until counter = 52
      ¼          # increment counter (it's 0 initially)
       D         # Duplicate the alpha string on the stack
        ¾£       # Replace alpha with alpha[0..counter]
          ,      # Pop the substring and print it
           ¾¼FÀ  # rotate the alpha string left counter++ times.

2

R,120个 115 111字节

v=c();for(i in 1:26){v=c(v,c(rep(LETTERS,26)[(sum((b=seq(1,51,2))[1:i-1])+1):sum(b[1:i])],"\n"))};cat(v,sep="")

松散

a=rep(LETTERS,26)
b=seq(1,51,2)
v=vector()

for(i in 1:26)
    {
    v=c(v,c(a[(sum(b[1:i-1])+1):sum(b[1:i])],"\n"))
    }

cat(v,sep="")

基本上,b1和之间的奇数的向量51,从而给出每行的长度。显然,该sum函数向量的数字相加,并给出起始索引和结束索引。

-5个字节,感谢@plannapus!
-4个字节感谢@plannapus!


1
arf,对不起,我之前没有看到,但是由于只使用了a一次,实际上并不需要定义它,这意味着您可以再剃掉几个字节:b=seq(1,51,2);v=c();for(i in 1:26){v=c(v,c(rep(LETTERS,26)[(sum(b[1:i-1])+1):sum(b[1:i])],"\n"))};cat(v,sep="")有效。
plannapus

@plannapus愚蠢的我!再次感谢 !我还将b=seq零件集成到主体中,因此可读性更
弗雷德里克

2

R,81 73 65 63字节

一种简单的for循环方法。重复输入字母26次,并循环遍历使用计算的滑动索引范围(i^2-2*i+2):i^2

for(i in 1:26)cat(rep(LETTERS,26)[(i^2-2*i+2):i^2],"\n",sep="")

2

外壳,10个字节

Cİ1ṠṁK…"AZ

在线尝试!

说明

Cİ1ṠṁK…"AZ
      …"AZ    Get the alphabet
   ṠṁK        Replace each letter with the whole alphabet
C             Cut the resulting string into lines with lengths
 İ1            equal to the list of odd numbers

1

批处理,123字节

@set s=
@for /l %%i in (1,2,51)do @call set s=%%s%%ABCDEFGHIJKLMNOPQRSTUVWXYZ&call echo %%s:~0,%%i%%&call set s=%%s:~%%i%%

1

05AB1E18 17字节

26FA26×N>n£NnF¦},

说明

26F                 # for N in range(0, 26) do
   A26×             # the alphabet repeated 26 times
       N>n£         # take (N+1)^2 letters
           NnF¦}    # throw away the first N^2 letters
                ,   # print with newline

在线尝试!


1

雷克斯 74 72字节

i=1;m=1;do 26;say substr(copies(xrange('A','Z'),26),i,m);i=i+m;m=m+2;end

取消高尔夫:

i=1
m=1
do 26
  say substr(copies(xrange('A','Z'),26),i,m)
  i=i+m
  m=m+2
end

1

TSQL,129个字节

脚本开头的USE MASTER可以确保查询在master数据库中运行,这对于许多用户是默认的(不计算字节数)。

打高尔夫球:

USE MASTER

SELECT SUBSTRING(REPLICATE('ABCDEFGHIJKLMNOPQRSTUVWXYZ',26),number*number+1,number*2+1)FROM spt_values WHERE number<26and'P'=type

取消高尔夫:

USE MASTER

SELECT SUBSTRING(REPLICATE('ABCDEFGHIJKLMNOPQRSTUVWXYZ',26),number*number+1,number*2+1)
FROM spt_values
WHERE number<26and'P'=type

小提琴

小提琴使用XML路径的旧版本


1

PowerShell,68个字节

$a=-join(65..90|%{[char]$_})*26;26..1|%{$a=$a.Insert($_*$_,"`n")};$a

第一个分号之前的部分会产生一个包含26个大写字母副本的字符串。下一节将在每个平方数的索引处插入换行符(向后工作,因此我不必考虑移位)。最后,$a最后只是将字符串变量推到PowerShell的等效项上STDOUT



1

C,60字节

i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}

puts只需要一个论点。(通常在codegolf中允许一些未定义的行为,但这在常规通道之外有点太远了)
MM

@MM未定义的行为一直被利用。规则是,只要在某些编译器中工作,提交就有效。否则,我们将必须明确排除一长串例外。该代码在gcc中有效,因此是有效提交。
xsot

1

C ++,111字节

void a(){int c=65,i,j;for(i=0;i<26;i++){for(j=0;j<=2*i;j++){std::cout<<(char)c;c++;if(c==91)c=65;}std::cout<<'\n';}}

首先尝试其中之一。使用int“ c”记录在任何给定时间需要打印哪个字母。一旦“ c”超过90(“ Z”),它将重置为65(“ A”)。使用for循环打印金字塔。


好答案!您可以if(c<92)c=65删除一个字节,也可以int a()代替void a(),但是如果返回没有结果,我并不肯定。除此之外,我认为您需要将#include <iostream>字节数包括在内。
DJMcMayhem

我相信您的意思是if(c>90)c=65,但是感谢您的建议,这是个好主意。另外,我想我也要包括在内,谢谢。
2016年

1

PHP,76 69字节

for(;$i<26&&$a.=join(range(A,Z));)echo substr($a,$i**2,1+2*$i++)."
";
  • 创建26个字母(绰绰有余)并在$ a中对其进行联系
  • 我<26的循环
  • 显示$ a子字符串,开始i ^ 2,结束2 * i + 1
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.