字母三角形


48

您将打印此确切文本:

A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A

眼镜

  • 在输出末尾允许多余的尾随换行符。
  • 每行的末尾都允许使用多余的尾随空格(U + 0020),包括多余的尾随换行符。
  • 您可以使用所有小写字母,而不是全部大写字母,但是您不能打印部分小写字母和部分大写字母。
  • 您可以将文本作为函数输出返回,而不是在完整程序中打印。

计分

由于这是一个三角形,并且三角形具有3个边,而3是一个小数,因此代码的字节数应该较小。


22
最近有这么多字母
downrep_nation

1
我的联觉变得疯狂,@ downrep_nation
DoctorHeckle

5
“由于三角形有3个边,而3个是小数,所以就字节数而言,您的代码应该很小。” 似乎是合法的
Rohan Jhunjhunwala

1
仅由1组成的数字平方似乎相关:1 * 1 =
1〜

1
“由于一个三角形具有3个边,并且...” Illuminati确认。
HyperNeutrino '16

Answers:


38

Vim,37个字节

:h<_↵↵↵YZZPP$xqqxYpGP√2G$A♥-€k$q24@qJ

enter image description here

传说

↵ = Return
√ = Ctrl+V
♥ = Ctrl+R
€ = Escape

2
那真是个很棒的GIF。
AdmBorkBork,

13
我永远不会对Vim的答案感到惊讶。
DanTheMan'8

想要解释一下这对于那些不熟练使用Vim的人如何工作吗?
R. Kap

6
@ R.Kap我建议您下载Vim并自己尝试解决方案-您可以观看解决方案逐笔展开的情况!本质上,我从帮助文件(:h<_↵↵↵YZZP)中窃取了字母,然后记录了一个宏(qq…q),该宏反复从顶行砍掉一个字母,制作两个副本以垂直增大三角形,然后将切掉的字母附加到所有行使其水平生长。我再重复该宏24次以绘制整个三角形。
林恩

31

标志,232个207 196 190字节

有人说三角形吗?

拿出指南针和量角器,让我们以图形方式进行操作。几何图形使用等边三角形对齐结果。我以前有一个等腰三角形,但是它包含太多的小数位。此更改还压缩了输出,减少了我必须要做的屏幕准备和字体更改量。

我使用Calormen在线解释器充实了这一内容。如果您没有足够的屏幕空间,它会被包装,但是您也可以摆弄一些数字来解决这个问题。我在浏览器上使用了“ F11”全屏模式。

ht
pu
to r:n:b:l repeat:n[rt:b label char 90-:n lt:b fd:l] end
to t:s
fd 12 rt 120 bk 6
repeat 2[r:s 90 12]
repeat 2[rt 120 r:s 90-heading 24]
end
rt 90 label "Z lt 210
repeat 25[t repcount]

r过程绘制了一行n字符。该字符是根据被告知要使用的段数自动确定的。该b参数告诉它暂时旋转多少,以使字母指向正确的方向。该l参数确定字母之间的线性距离。

t过程将移至下一个位置,并r四次调用该函数以创建一个三角形,并在适当时旋转。我在垂直方向两次调用它,因为与经过特殊处理的一次调用相比,它占用的字节更少。该过程的结束将乌龟定位到下一个三角形的上方(上一步)。

Z是一种特殊情况,因此我们直接将其打印并旋转,就好像刚完成一个三角形一样。最后t被称为25次。

注释中的图片成品结果


3
盒子外面。做得很好。
CousinCocaine

19

Haskell,58个字节

f x=init x++reverse x
t=unlines$f[f['A'..c]|c<-['A'..'Z']]

定义一个t将输出作为字符串返回的函数。

f x=               define a helper function
init x             take the argument minus its last element
++                 and concatenate it with
reverse x          the argument reversed, producing ex. [a,b,c,b,a] from [a,b,c]

t=                                    define the main function
           [         |c<-['A'..'Z']]  for every char c from 'A' to 'Z'...
             ['A'..c]                 generate the range from 'A' to c
            f                         call the helper function to "reflect" it
          f                           call the helper function on the entire list
  unlines$                            join on newlines

12

果冻16 13 字节

Ṗ;Ṛ
ØAḣJÇ€Çj⁷

感谢@LeakyNun打高尔夫球3个字节!

在线尝试!

这个怎么运作

Ṗ;Ṛ        Helper link. Argument: A (array)

Ṗ          Pop; yield A without its last element.
  Ṛ        Reversed; yield A with inverted order.
 ;         Concatenate the results to both sides.


ØAḣJÇ€Çj⁷  Main link. No arguments.

ØA         Alphabet; set link argument and return value to "A...Z".
   J       Indices; yield [1, ..., 26].
  ḣ        Head; take the first, the first two, etc. elements of the alphabet.
           This yields ["A", AB", ..., "A...Z"].
    ǀ     Apply the helper link to each string.
      Ç    Apply the helper link to the array itself.
       j⁷  Join, separating by linefeeds.


@LeakyNun谢谢。
丹尼斯,

4
我很好奇这在世界上是如何工作的……
苏格拉底·菲尼克斯

也许如果使用链接复制器,您可以节省一个字节
Leaky Nun

3
@MathieuRodic Jelly使用自定义代码页,将其理解的所有256个字符编码为一个字节。标头中的字节链接指向它。
丹尼斯

10

Python,74个字节

def f(x=66,s='A'):
 t=s+s[-2::-1];print t
 if x<91:f(x+1,s+chr(x));print t

一个Python 2函数,可打印且不带参数。关键思想是通过递归生成三角形的来回图案。首先考虑这个更简单的功能,该功能将字母“ A”打印到“ Z”,再打印回“ A”:

def f(x=65):
 t=chr(x);print t
 if x<90:f(x+1);print t 

该功能首先打印“ A”(字符代码65),然后递归打印“ B”(66),依此类推打印到“ Z”(90)。从那里开始,它停止递归。在递归向下递归堆栈的方式上,它将打印t在同一层上打印的任何字符,从“ Y”回到“ A”。

主要代码执行相同的操作,只是s到目前为止,它已累积到字母字符串中并打印上下字符串s+s[-2::-1]

感谢xsot 2个字节。

在Python 3中,通过将所有内容放在一行上,相同的事情是短了一个字节(73字节)。

def f(x=66,s='A'):t=s+s[-2::-1];print(t);x>90or[f(x+1,s+chr(x)),print(t)]

如果偏移变量,则可以节省2个字节,即f(x=66,s='A')。这使您可以s在函数调用中而不是在函数主体中进行更新。
xsot

我认为您的Python 3版本(如其Python 2相对版本)需要90而不是89的值,以使最长的行一直传到Z并返回。
2016年

@Tebbe谢谢,修复了它们。
xnor

8

brainfuck,1733 121 119字节

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

可读性更高的版本:

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

解释可能会到来。


尝试使用循环而不是手动构建每个字符。
Leaky Nun

@LeakyNun我不知道该怎么做。有什么建议么?
DanTheMan

4
很好,所以您只睡了四个小时。
Leaky Nun

1
恭喜,您的程序比输出的小!
GuitarPicker

1
如何打出1612字节?
FantaC

8

05AB1E20 13 12 6个字节

感谢Adnan,节省了2个字节。
借助Magic Octopus Urn和一些新的语言功能,节省了6个字节。

Aη€ûû»

在线尝试!

说明

Aη       # push prefixes of alphabet
  €û     # palendromize each prefix
    û    # palendromize the whole list
     »   # join on newlines

非常好!您可以更改Œ26£.p,这是前缀命令。另外,您可以更改D,=,打印时不会弹出。
阿德南

哇,聪明的把戏gF,
阿德南

@Adnan:谢谢!我知道在某处有一个前缀命令:)我很少检查扩展的命令。
Emigna'8

2
该分叉命令Â非常好,而且非常整洁。
英里

1
@carusocomputing:不幸的û是,它比挑战要新,并且会使该答案失去竞争力。
Emigna '16

6

J,26 23 22字节

f(f=:,1}.|.)\u:65+i.26

说明

,1}.|.  Monad f: Input: A
    |.  Reverse the items in A
 1}.    Drop the first item in the reversed A
,       Join A and the previous

f(f=:,1}.|.)\u:65+i.26
                  i.26  Create the range [0, 1, ..., 25]
               65+      Add 65 to each
             u:         Convert to characters to get 'A..Z'
  f=:,1}.|.             Define a verb f
 (         )\           Call f monadically on each prefix of 'A..Z'
f                       Call f again on that result

f=:,1}.|.试试看
Leaky Nun

@LeakyNun谢谢,我不知道为什么我认为他们与众不同。
英里




5

C,272个 247 234 230 144 137字节:

由于昔加洛尔提供了出色的高尔夫技巧和技巧,我以前的方法节省了许多字节(272 -> 230)!

通过切换到更好的方法,节省了近100个字节(230 -> 144)。

main(q,i,e,x){for(q=0;q<51;q++){i=q>25 ? 25-(q-25):q;for(e=65;e<66+i;e++)printf("%c",e);for(x=64+i;x>64;x--)printf("%c",x);printf("\n");}}

我的第一个回答是C。我是最近才开始自学的,所以让我们看看它的进展。

行动吧!(爱迪生)


1
啊,我也想添加一个C答案...不管怎样,那我就帮你;)首先,这是代码高尔夫,您不需要编写完美的代码。编译器警告是完全可以的。这就是为什么您可以删除main()的返回类型,甚至可以删除的原因#include <stdio.h>。GCC(以及Ideone等网站)也可以。接下来,您可以将变量定义“外包”到函数的参数列表中。让我们for(int i=65;...变得for(i=65...和更改main()main(i)。对其他所有int变量也执行相同的操作(GCC将缺少的类型默认为int)。
sigalor'8

@sigalor感谢您的提示!:)一个问题:为什么我需要更改main()main(i)
R. Kap

@sigalor实际上,现在我遇到了很多编译错误。
卡普

如果没有i在for循环的初始化中声明变量,则需要在其他地方声明它。而且,因为(至少在C语言中)函数的参数可以像普通变量一样使用,所以应该没有问题。顺便说一句,您正在使用哪个编译器?
sigalor'8

@sigalor当前C在Ideone。我遇到几个<variable> undeclared错误。
R. Kap

5

JavaScript(ES6),81个字节

[...'ZYXWVUTSRQPONMLKJIHGFEDCBA'].reduce((p,c)=>c+`
`+p.replace(/^|$/gm,c)+`
`+c)

5

Mathematica 59字节

Column@FromCharacterCode[#@#@26+64]&[#-Abs@Range[1-#,#-1]&]

我认为//Column从头开始删除,并为您的代码添加前缀Column@
Yytsi'8

2
您似乎已经计数并且为单个字节。我怀疑是否有一个包含它们的单字节代码页,而且Mathematica是否也提供了开箱即用的代码页。在UTF-8中,它们的大小为3个字节,因此它们并没有真正保存超过plain的内容[[...]]。我也不确定它的合法性Column,因为它只能像Mathematica笔记本中的行列表一样显示。从脚本文件运行此代码不会显示任何内容。但是,Print/@字节数相同,并且在两种情况下均有效。
马丁·恩德

如果要链接到地址较长的页面,可以执行以下操作:[what you see](actual link)。例如 [Example Link](https://www.example.com),例如示例链接
Stan Strum


4

R,63 61 59字节

for(i in c(1:26,25:1))cat(LETTERS[c(1:i,i:1-1)],"
",sep="")

有用的LETTTERS[0]是不返回任何字符。

编辑:由于@leakynun失去了一个

编辑:多两个感谢@plannapus


1
您可以使用文字换行符代替\n
Leaky Nun

3

TSQL,159个字节

DECLARE @ varchar(52)='ABCDEFGHIJKLMNOPQRSTUVWXY',@o varchar(max)SELECT @+='Z'+REVERSE(@)+'
',@o=@
WHILE''<@
SELECT @=STUFF(@,LEN(@)/2,2,''),@o=@+@o+@
PRINT @o

小提琴


1
我试图这样做,但最终有250多个字节,所以从未发布过。实际上,您的解决方案比我的更好。再次:)
Anuj Tripathi

3

Javascript(使用外部库可枚举),135个字节

_.Range(1,51).WriteLine(x=>(g=_.Range(65,x>25?52-x:x)).Write("",y=>(w=String.fromCharCode)(y))+(g.Reverse().Skip(1).Write("",y=>w(y))))

链接到库:https : //github.com/mvegh1/Enumerable

代码说明:创建一个从1开始的整数范围,计数为51。对于每个整数,请根据复数pred编写一行。用全局变量和缓存做一些JS向导...瞧瞧。对于WriteLine中的每个int,我们将创建int的左手范围,并将其存储到全局“ g”中,并使用""定界符将其与String Joining(写入)并将每个int映射到String并映射到int char代码。然后,我们通过反转该顺序(并跳过第一个元素,因为它将与原始顺序的最后一个元素相匹配...)来连接右侧,并使用相同的逻辑进行编写。编辑:更新了库中写入的内部。一个空序列将写入一个空字符串,而不是null。这也使答案减少了15个字节

在此处输入图片说明


1
您是否不需要包含导入库所需的字节?
MatthewRock '16

1
Idk,Ive使用图书馆发布了20多个答案,您将是第一个对我这么说的人。我认为没有人真的会在乎,因为我的答案永远不会赢
applejacks01 '16

1
@ applejacks01非常确定如果不导入它,则必须在顶部说“ JS + Enumerable”。类似于“ Bash + Coreutils”
mbomb007 '16

2
计数导入是很平常的事。Python + SymPy答案仍然位于import sympyfrom sympy import*顶部。该击+ X答案是不同的,因为你只需要安装X,而不是莫名其妙地启用它。
丹尼斯

1
@PatrickRoberts只要在挑战发布之前就存在该库,就可以。Python的答案利用sympynumpyscipy等所有的时间。
丹尼斯

3

Powershell,61 52字节

感谢TimmyD节省了9个字节!

65..90+89..65|%{-join[char[]]((65..$_-ne$_)+$_..65)}

循环浏览ASCII值,以使大写字母向前,然后向后。对于每个数字,这将创建一个由前X个数字组成的数组,删除X-1st个数字,然后添加与前X个数字相反的数字,然后将其全部转换为char并加入字符串。


嘿,很好,谢谢!我之前插上65..90..65一时的想法,但没有成功。猜猜我忘了我可以将范围加在一起。
本欧文

3

切达(Cheddar)102 96 79 69 67字节

感谢Downgoat提供了17个字节,另外还有10个字节的灵感。

"A"+(2@"27+@"(25|>1)).bytes.map(i->65@"(64+i)+@"((64+i)|>65)).vfuse

字符串可以串联而不是数组的事实意味着我必须将两个范围转换为字符串,然后再将其转换回数组。

同样,vfuse产生领先的newliens 的事实意味着我需要手动生成第一行,然后再与其余行连接。

@" 因为一个dyad(两个参数的函数)可以直接转换为字符串,但不适用于反向范围(如果第一个参数大于第二个参数)。

范围是一半。错误修复后,它变得具有包容性。

用法

cheddar> "A"+(2@"27+@"(25|>1)).bytes.map(i->(65@"(64+i)+@"((64+i)|>65))).vfuse
"A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A"

Cheddar,55个字节(非竞争)

在具有所有修复程序的最新版本中,答案是:

(|>25+24|>0).map(i->65@"(65+i)+(i?(64+i)@"65:"")).vfuse

但它是在挑战之后制成的。


@"(1|>26)可能是1@"26
Downgoat '16

String.letters可以是(65@"91)
Downgoat '16

String.letters.slice(0,i)可能是65@"(66+i)
Downgoat

啊哈,我看你一直在光栅的BYTECOUNT。
steenbergh


3

VBA,94个字节

Function T:For j=-25To 25:k=25-Abs(j):For i=-k To k:T=T &Chr(65+k-Abs(i)):Next:T=T &vbLf:Next

用?T在立即窗口中调用

只是为了解释发生了什么:我两次使用Abs函数,以反映字母遍历和行长。由于在两种情况下都具有单个极值,因此非常适合该任务,这对应于pre-Abs变量的零交叉。

作为VBA立即窗口中的一组简单命令,而不是程序或函数,以下命令将需要72个字节:

For j=-25To 25:k=25-Abs(j):For i=-k To k:?Chr(65+k-Abs(i));:Next:?:Next

(感谢@GuitarPicker)


1
在我的一份冰岛国旗提交中,我使用了类似的逻辑。您不能通过在立即窗口中完全运行它并跳过函数声明来进一步了解它,还是违反了一些我不熟悉的规则?
GuitarPicker

@GuitarPicker; 不知道在立即窗口中运行是否算作一个完整的程序,但如果这样,则有效地减少了8个字节;而不是以(Function T:。结束):?T(尽管它只会工作一次,因为那之后您需要将T重置为“”-但是谁需要多个三角形中的一个?)
乔芬(Joffan

2
你,如果你甚至都不需要牛逼?你一起去;
GuitarPicker

我能够使用该方法将其剃光到71。提示:您也不需要vbCrLf。
GuitarPicker

1
是的,我也一样 请注意,需要退货。
乔芬'16

3

Python,73 71字节

感谢@xnor的递归

f=lambda x=66,s='A',t='':x/92*t or t+f(x+1,s+chr(x),s+s[-2::-1]+"\n")+t

说明

  • 参数
    • x 是字母表中下一个字母的ascii值
    • s 是字母的累加器
    • t是三角形中的一条线(即s+ s backwards
  • 返回值t如果字母完成(即我们位于中间)
  • 其他t+f(...)+t具有:
    • x 增加的
    • s 附有下一个字母
    • t重置为s+ s backwards+\n

更新资料

  • -2 [16-08-05]移除导致\n(1)和缩短的条件(-3)所有由于@xnor

1
t到下一个循环的方法真聪明。不过,还有一条领先的换行符。x=66,s='A''摆脱它。基本情况可以缩短为x/92*t or
xnor

3

HTML + CSS,884个字符

(763个字符的HTML + 121个字符的CSS)

只是扩大漏嫩评论MonkeyZeus s'的答案。(尽管我可能会误读评论...)

p{margin:0}p:before{content:"ABCDEFGH"}p:after{content:"HGFEDCBA"}a:before{content:"IJKLMNOP"}a:after{content:"PONMLKJI"}
<pre>A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
<p>I</p><p>IJI</p><p>IJKJI</p><p>IJKLKJI</p><p>IJKLMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNOPONMLKJI</p><p><a>Q</p><p><a>QRQ</p><p><a>QRSRQ</p><p><a>QRSTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXYZYXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTSRQ</p><p><a>QRSRQ</p><p><a>QRQ</p><p><a>Q</a></p><p>IJKLMNOPONMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMLKJI</p><p>IJKLKJI</p><p>IJKJI</p><p>IJI</p><p>I</p>ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A


3

Brachylog37 29字节

感谢Fatalize在整个过程中的协助。

4个字节归功于Fatalize,另外还有4个字节的灵感。

@A:1&e:"a"yr:1&cw@Nw\
:Lc.r.!

在线尝试!

谓词0(主谓词)

@A:1&e:"a"yr:1&cw@Nw\
@A:1&                  Apply predicate 1 to @A, which is
                       basically "abcdefghijklmnopqrstuvwxyz"
     e                 Choose one element from the result (choice point)
      :"a"yr               generate substring from element to "a"
            :1&            apply predicate 1
               c           concatenate
                w          write to STDOUT
                 @Nw       write "\n" to STDOUT
                    \  Backtrack to last choice point to choose
                       another element until there is no more
                       choice left, then halt.

谓词1(辅助谓词)

这基本上从给定的字符串构建回文。

:Lc.r.!
:Lc.     output is [input:L]
   .r.   output reversed is still output
      !  stop searching after the first output

您可以用替换,A谓词1 h,节省一个字节。
致命

您也可以通过更换节省两个字节:1:2yt.:2&.和添加!的谓词2月底(切点的选择)
Fatalize


3

R,127125字节

k=cat;L=LETTERS;for(i in 1:26)k(c(L[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))

对这个解决方案不完全满意,尤其是两个for循环,但是不能提供更好的东西!
LETTERS包含大写字母。

松散

for(i in 1:26){
  cat(c(LETTERS[1:i],LETTERS[(i-1):0],"\n"))
               }

for(i in 1:26){
  cat(c(LETTERS[0:(26-i)],LETTERS[ifelse((25-i)>=0,25-i,0):0],"\n"))
               }

ifelse是取消唱歌的一种较短方法,其if... else...工作方式如下:ifelse(condition,action if TRUE, action if FALSE)

另一种125字节的解决方案:

for(i in 1:26)(k=cat)(c((L=LETTERS)[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))


3

Java 131字节

不使用字符串(131字节)

public static void main(String[] args) {
    for(int i = 0 ,k=1; i>-1; i+=k){
        for(int c= 65, d = 1; c>64;){
            d = d>-1 & c < 65+i?1:-1;
            System.out.print((char)c+((c+=d)<65?"\n":""));
        }
        k = k>-1 & i < 25?1:-1;
    }
}

代号

for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));

带字符串(173字节)

String a="abcdefghijklmnopqrstuvwxyz";
for(int i = 1 ,k=1; i>0; i+=k==1?1:-1){
    System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i));
    k = k>-1 & i < 26?1:-1;
}

代号

String a="abcdefghijklmnopqrstuvwxyz";for(int i=1,k=1;i>0;k=k>-1&i<26?1:-1,System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i)),i+=k==1?1:-1);

感谢manatworkKevin Cruijssen


2
欢迎来到PPCG。请阅读“我应该如何回答打高尔夫球的代码?有任何提示吗?”在代码高尔夫标签的信息页中。预期对此类挑战的答案将为减少代码大小做出努力。在此中,您可以在Java高尔夫技巧<all language>高尔夫技巧中找到帮助。
manatwork '16

1
在那里,您使用4个三元运算符,所有条件都包含在括号中。您可以删除这些字符以保存8个字符。
manatwork '16

1
d和k不能低于-1,对不对?然后,你可以替换d!=-1使用d>-1,同样对于k。(顺便说一句,您忘了修复高尔夫球版了。)
manatwork '16

将语句从循环体移到增量语句节以节省3个字节
。– Syamesh K

1
嗨,我知道已经有一段时间了,但是您可以打两件事:i+=k==1?1:-1可以i+=kSystem.out.print((char)c+(c+d<65?"\n":"")),c+=d==1?1:-1);可以System.out.print((char)c+((c+=d)<65?"\n":"")));。因此,总计为(131字节):for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));
凯文·克鲁伊森


2

Sesos,27个字节

0000000: a85ab9 ac5daa f8b1c7 785f9b b961f7 665c1b 73ccfc  .Z..]....x_..a.f\.s..
0000015: c01ecb 987303                                     ....s.

在线尝试!选中调试以查看生成的SBIN代码。

Sesos组装

上面的二进制文件是通过组合以下SASM代码生成的。

add 65, rwd 1, add 10, rwd 2, add 25
jmp
    fwd 3
    jmp
        put, fwd 1
    jnz
    rwd 1
    jmp
        fwd 1, add 1, fwd 1, add 1, rwd 2, sub 1
    jnz
    fwd 2
    jmp
        rwd 2, add 1, fwd 2, sub 1
    jnz
    rwd 1, add 1, rwd 2
    jmp
        put, rwd 1
    jnz
    rwd 1, sub 1
jnz
fwd 3
jmp
    jmp
        put, fwd 1
    jnz
    rwd 1, get, rwd 1
    jmp
        put, rwd 1
    jnz
    fwd 2
; jnz (implicit)

2

/// 208字节

/'/\/\///+/BA
AB'-/DC+CD'&/FE-EF')/HG&GH'=/JI)IJ'|/LK=KL'7/NM|MN'1/PO7OP'q/RQ1QR'p/TSqST'6/VUpUV'[/XW6WX/A
A+C+C-E-E&G&G)I)I=K=K|M|M7O7O1Q1QqSqSpUpU6W6W[Y[YZY[Y[W6W6UpUpSqSqQ1Q1O7O7M|M|K=K=I)I)G&G&E-E-C+C+A
A

当然没有赢,但是在这里,早于马丁·恩德...

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.