做一个字母探照灯!


66

受此挑战的解决方案中的错误启发,您面临的挑战是产生以下确切的文本:

                         ZYXWVUTSRQPONMLKJIHGFEDCBA
                        YXWVUTSRQPONMLKJIHGFEDCBA
                       XWVUTSRQPONMLKJIHGFEDCBA
                      WVUTSRQPONMLKJIHGFEDCBA
                     VUTSRQPONMLKJIHGFEDCBA
                    UTSRQPONMLKJIHGFEDCBA
                   TSRQPONMLKJIHGFEDCBA
                  SRQPONMLKJIHGFEDCBA
                 RQPONMLKJIHGFEDCBA
                QPONMLKJIHGFEDCBA
               PONMLKJIHGFEDCBA
              ONMLKJIHGFEDCBA
             NMLKJIHGFEDCBA
            MLKJIHGFEDCBA
           LKJIHGFEDCBA
          KJIHGFEDCBA
         JIHGFEDCBA
        IHGFEDCBA
       HGFEDCBA
      GFEDCBA
     FEDCBA
    EDCBA
   DCBA
  CBA
 BA
A
  • 第一行将有25个空格,然后字母从第26个字母(ZYXWVUTSRQPONMLKJIHGFEDCBA)开始向后,然后是换行符。
  • 第二行将有24个空格,然后是从第25个字母(YXWVUTSRQPONMLKJIHGFEDCBA)开始向后的字母,然后是一个换行符。
  • ...
  • 最后(第26行)将没有空格,然后从第一个字母(A)开始向后字母表,然后再换行。

附加规则:

  • 您的程序可以使用任何允许的输出方法。
  • 允许一个尾随换行符和/或一个前导换行符。
  • 包含字母的行之间必须有一个换行符,不能再有换行符。
  • 字母必须全部大写。

,最短的提交将获胜。祝好运!

排行榜:


3
在我看来,这就像蝙蝠信号所发出的光芒
scottinet


每行前面都可以有多余的空间吗?
HyperNeutrino

3
每行最后一个字母后可以有尾随空格吗?
英里

1
@miles是的,很好。
MD XF

Answers:


19

05AB1E,7个字节

码:

₂žp.s1Λ

使用05AB1E编码。在线尝试!

说明

 žp.s      # Get the suffixes of ZYX...CBA
      Λ    # Using the canvas mode, print the
₂          # first 26 elements of the array
     1     # into the upper-right direction

2
@MDXF IMO,这真是一个愚蠢的规则
DJMcMayhem

3
嗯...我想我会删除规则。状态完成的
MD XF

2
当我发现时间时,可能会提出PR记录该功能。似乎是一种从编写良好,易于阅读的代码中学习python的好方法
scottinet

6
为什么黄金žp时存在AuBADUM tissss
Magic Octopus Urn

5
使用05AB1E,创建一个文件,记录其所有功能,并获得短代码:P
Christian

22

R67 55字节

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

在线尝试!


4
R在字符串挑战方面胜过Python吗?真好 信件(Letters)的+1
罪恶性

1
@CriminallyVulgar这是一个非常奇怪的挑战;Haskell击败了PHP和R,两者都击败了Python ...至少Perl比您想象的要领先于所有它们。
CR Drost

如果更改sep为-2个字节s。如果没有冲突,函数将自动完成命名参数
Punintended'Mar 30'18

1
@Punintended不会因为...参数而起作用;之前...(通常)的参数部分匹配,之后的参数则不匹配。我相信有一些例外,但cat不是例外
朱塞佩

@Giuseppe我看不到...
MilkyWay90


15

V13,11字节

¬ZAòY>HGpxl

在线尝试!

十六进制转储:

00000000: ac5a 41f2 593e 4847 7078 6c              .ZA.Y>HGpxl

用我的手机写的:P。

¬ZA         " Insert the alphabet backwards
   ò        " Recursively:
    Y       "   Yank this current line
     >H     "   Add one space to every line
       G    "   Move to the last line in the buffer
        p   "   Paste the line we yanked
         x  "   Delete one character
          l "   Move one character to the right, which will throw an error on 
            "   the last time through, breaking the loop

1
我也在手机上做这些,+ 1
Stan Strum

12

PowerShell,42个字节

25..0|%{' '*$_+-join[char[]]((65+$_)..65)}

在线尝试!

说明:

25..0|%{                                 } # Loop from 25 to 0
                             (65+$_)..65   # Construct a range of the specific ASCII codes
                    [char[]](           )  # Cast that as a character array
               -join                       # that has been joined together into a string
        ' '*$_+                            # Prepended with the correct amount of spaces


10

///105 97字节

/:/\\\\*//#/:Z:Y:X:W:V:U:T:S:R:Q:P:O:N:M:L:K:J:I:H:G:F:E:D:C:B:A//\\*/\/\/_____#
\/ //_/     //*#

在线尝试!

说明

///只知道一个命令,/<pattern>/<substitution>/<text>替换所有出现<pattern><text><substitution>。另外\可以用于转义字符。

为简化起见,缩短了代码:

/:/\\\\*//#/:E:D:C:B:A//\\*/\/\/__#
\/ //_/  //*#

所述第一命令/:/\\\\*/替换:\\*在随后的代码。这给出:

/#/\\*E\\*D\\*C\\*B\\*A//\\*/\/\/__#
\/ //_/  //*#

然后/#/\\*E\\*D\\*C\\*B\\*A/替换#\*E\*D\*C\*B\*A

/\\*/\/\/__\*E\*D\*C\*B\*A
\/ //_/  //*\*E\*D\*C\*B\*A

然后/\\*/\/\/__\*E\*D\*C\*B\*A<newline>\/ /替换\*//__*E*D*C*B*A<newline>/

/_/  //*//__*E*D*C*B*A
/ E//__*E*D*C*B*A
/ D//__*E*D*C*B*A
/ C//__*E*D*C*B*A
/ B//__*E*D*C*B*A
/ A

注意:我不得不用它\*来替换。由于*这也是替换的一部分,因此如果我只替换,它将生成一个无限循环*

然后命令用空格/_/ /替换_,并/*//删除所有*

EDCBA
/ E//    EDCBA
/ D//    EDCBA
/ C//    EDCBA
/ B//    EDCBA
/ A

/#//一条命令将#不替换任何内容。由于#代码中没有内容,因此它什么也不做。此处只是//从代码开头删除两个前导。这离开

EDCBA
/ E//    EDCBA
/ D//    EDCBA
/ C//    EDCBA
/ B//    EDCBA
/ 

然后/ E//删除命令<space>E,因此将保留代码

    EDCBA
   DCBA
/ D//   DCBA
/ C//   DCBA
/ B//   DCBA
/ 

类似/ D//删除<space>D

    EDCBA
   DCBA
  CBA
/ C//  CBA
/ B//  CBA
/ 

/ C//

    EDCBA
   DCBA
  CBA
 BA
/ B// BA
/ 

/ B//

    EDCBA
   DCBA
  CBA
 BA
A
/ 

最后一条命令是不完整的,因此它什么也不做:

    EDCBA
   DCBA
  CBA
 BA
A

与C#和Brainfuck答案的长度相同:D
Conor O'Brien

9

Haskell,53 52字节

f(a:b)=(b>>" ")++a:b++'\n':f b
f x=x
f['Z','Y'..'A']

在线尝试!

这个怎么运作

f['Z','Y'..'A']        -- call f with the full backwards alphabet

f(a:b)=                -- let `a` be the first char and `b` the rest. Return
   (b>>" ") ++         -- replace each char in b with a space, followed by
   a:b ++              -- the input string, followed by
   '\n' :              -- a newline, followed by
   f b                 -- a recursive call of `f` with `b`
f x=x                  -- stop on an empty input string

为什么不起作用f['Z'..'A']
科纳·奥布莱恩

1
@ ConorO'Brien:[a..b]以开头,a并收集所有后继者(+1用于整数,用于字符的下一个ascii-char等),直至b。如果a > b这是一个空列表。但是,您也可以指定第二个值(可以更小),根据该第二个值计算增量/减量。 [1,3..8]-> [1,3,5,7][15,10..0]-> [15,10,5,0]['Z','Y'..'A']反向的大写字母。
nimi

啊,我明白了。谢谢!
科纳·奥布莱恩


7

JavaScript(ES6),83 77 76字节

f=(n=0,p='')=>n<26?f(++n,p+' ')+p+`ZYXWVUTSRQPONMLKJIHGFEDCBA
`.slice(~n):''

o.innerText = f()
<pre id=o>


我本来想建议您改进一下,但后来我意识到我们的方法大不相同。希望你不要介意。

@ThePirateBay没问题!
Arnauld

7

果冻,12字节

ØAµ⁶ṁḊ;ṚµƤṚY

在线尝试!

ØAµ⁶ṁḊ;ṚµƤṚY  Main Link
ØA            "ABC...XYZ"
         Ƥ    For each prefix,
  µ⁶ṁḊ;Ṛµ     Monadic Link
   ⁶          ' '
    ṁ         (with automatic repetition) molded to the shape of
     Ḋ        All but the first letter of the input (repeat - 1)
      ;       With the input          appended to it
       Ṛ                     reversed
           Y  Join on newlines

-3字节归功于英里



@LeakyNun哦,太酷了,谢谢!
HyperNeutrino

是的,前缀快速的另一种用法。由于模子将在此处隐式地使用长度来整形,因此为12个字节
英里

@LeakyNun实际上,不幸的是,这将使其无效,因为不能有多余的空间(需要2个字节来修复)
HyperNeutrino

7

brainfuck,105个字节

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

在线尝试!

缩小格式:

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

可读版本:

[
  pre-initialize the tape with the values 10 90 32 >26<
  C_NEWLINE: 10
  V_ALPHA: 90
  C_SPACE: 32
  V_COUNTER: 26

AS:

  10 = 8 *  1 + 2
  90 = 8 * 11 + 2
  32 = 8 *  4 + 0
  26 = 8 *  3 + 2
]

8 ++++++++ [
  *  1 >+
  * 11 >+++++++++++
  *  4 >++++
  *  3 >+++
<<<<-]
PLUS 2 >++
PLUS 2 >++
PLUS 0 >
PLUS 2 >++

UNTIL V_COUNTER == 0 [
  COPY V_COUNTER to RIGHT and RIGHT_RIGHT
  [->+>+<<]
  TAPE: 10 V_ALPHA 32 >0< V_COUNTER_R V_COUNTER_RR
  V_COUNTER_R SUB 1 TIMES: >-[-
     PRINT C_SPACE <<.
  >>]
  TAPE: 10 V_ALPHA 32 0 >0< V_COUNTER_RR
  V_COUNTER_RR TIMES: >[-
    PRINT V_ALPHA <<<<.
    DECREMENT V_ALPHA -
    INCREMENT V_COUNTER_R >>>+
  >]
  TAPE: 10 V_ALPHA 32 0 V_COUNTER_R(26) >0<
  V_COUNTER_R SUB 1 TIMES: <-[-
    INCREMENT V_COUNTER <+
    INCREMENT V_ALPHA <<+
  >>>]
  PRINT C_NEWLINE <<<<.
>>>]


6

诗意,601字节

one night i camped a bit
throughout all the forest now
the sweet sights
i saw giant things
i saw little small things
here i am
seated around all my trees i saw
i sleep
i sle-e-p
sleep in a cabin
i am sleep-y
i sleep a bit
i awaken in bed
i stand
i walk
i am ready
i saw a vision of a dragon
i am fooled
i know i am
should i f-ight
i f-light
i did f-light
i did a flight
go away,i do imply
i*m afraid
i run
i leave
i flee
i am timid
i*m just a person,not toughie-tough-guy
no,never
i*m waste
i am stupid
a quitter i was
i am stupid
i*m turning around
i do not appreciate camping
i cry
i am crying
no
no

Poetic是我于2018年为一个班级项目创建的一种esolang,它是一个Brainfuck派生词,其中单词的长度对应于Brainfuck命令(+,-,>和<命令每个都有一个1位数的参数)。

实际上,只有字长决定命令,这意味着从技术上讲,我可以创建一个完全由非单词组成的程序(即,字母X根据需要多次,并且单词之间有空格),但是我想做一个有趣的事情在不增加任何不必要的字节的情况下写出自由诗。

如果您想在线尝试(首先是课堂项目的一半),请查看我的在线解释器


为什么这种不竞争?
pppery

该语言是在挑战之后创建的。
JosiahRyanW


嗯,那么我想这给了我更多使用Poetic作为编程语言的动力!h
JosiahRyanW

5

05AB1E,10个字节

žpDvÐg<ú,¦

在线尝试!

说明:

žpDvÐg<ú,¦
žp           Push the uppercased alphabet, reversed
  D          Duplicate
   v         For each letter (we just want to loop 26 times, so we use the 
                already pushed alphabet for that purpose)
    Ð        Triplicate
     g<      Length of the string - 1
       ú     Add that number of spaces at the beginning of the string
        ,    Print with newline
         ¦   Remove the 1st element of the remaining copy of the string

5

Perl 6、37个字节

@Massa节省了9个字节。

say " "x$_,chrs $_+65...65 for 25...0

在线尝试!

说明: 25...0范围是25到0(符合预期)。我们遍历该范围,说(=用换行符打印)许多空格和具有ASCII码(chrs)从65 +该数字($_+65...65)的字符串。


1
25...0 是较短的方法:-)
马萨(Massa)

试试say " "x$_,chrs $_+65...65 for 25...0:-)
马萨

非常感谢!我从来不知道!子表单也更好(太糟糕了,我是从头顶制作出来的)。(这就是为什么我喜欢在代码高尔夫球上使用Perl 6的原因,我总是发现一些新东西。)
Ramillies




4

Cubix,43 46字节

$/\;u:\s/':(!$u;:'@^!@Wu;oSU;o+<u(;;oN;(!|

在线尝试!

集中化

      $ / \
      ; u :
      \ s /
'  : ( ! $ u ; : ' @ ^
! @ W u ; o S U ; o + <
u ( ; ; o N ; ( ! | . .
      . . .
      . . .
      . . .

观看它运行

设法剃了更多的毛,但比我想的要难一些。第一个引号后有一个替代字符给我26。

  • '<sub> 将26作为基数压入堆栈
  • :(! 重复的底数作为计数器,递减,检验真实性
  • u如果为true,则跳过$命令,然后向右掉头
    • So;u 按下32,输出为字符,弹出32,然后向右转右移至减量
  • $错误跳转下u一条命令
  • ;:'@^ 弹出,复制基数,将64压入堆栈,然后重定向到曲折的路线
  • $\s/:\/u;$这是顶面上步骤的顺序。它归结为将计数器与64交换。最后跳过了将其放在此处的重定向。
  • <+o;U 重定向以添加,输出字符,弹出,向左转
  • (!递减,检验真实性。如果为true,则从发生掉头的路径开始,然后返回重定向。
  • |(;No 错误,反射,冗余测试,冗余减量,弹出,下推10和输出字符
  • ;;(u!@W弹出到基数,递减,右移至真实测试,如果为假则暂停,否则在开始时更改泳道。冲洗并重复。

4

Python,83个字节

[print(' '*i+''.join([chr(64+i)for i in range(i+1,0,-1)]))for i in range(25,-1,-1)]

我对codegolf的第一个回答:)


1
迟来的PPCG欢迎您!好答案!
科纳·奥布莱恩



3

JavaScript,75 74字节

Rick Hitchcock节省了1个字节

f=(a=65,b='',c)=>a>90?'':f(a+1,b+' ',c=String.fromCharCode(a)+[c])+`
`+b+c

在线尝试!


通过初始化bb=''),然后b从方括号中取出来保存一个字节。
里克·希区柯克,

@RickHitchcock。谢谢。

3

Perl 5,49个字节

$_=$"x26 .join'',reverse A..Z,Z;say while s/ \S//

在线尝试!


好像您错过了第一个A,但似乎可以通过更改$"x25为来解决$"x26
Dom Hastings

当我添加额外的东西时Z,我忘记考虑了。
Xcali

3

派克(Pyke),8个字节

G_.<XFo}h-

在这里尝试!

           -  o = 0
G_         -    reversed(alphabet)
  .<       -   suffixes(^)
    XF     -  for i in ^:
      o    -      o++
       }   -     ^ * 2
        h  -    ^ + 1
         - -   i.lpad(" ", ^)
           - for i in reversed(^):
           -  print i

如果他们有内置功能prepend n spaces to string以及Pyke的功能,我可以看到正确的语言以6个字节为单位进行操作


3

PHP(63 58 55字节)

这可能是我最喜欢的PHP奇怪的角落,它是从Perl继承的角落:

for($c=A;$c!=AA;$q="$s$z 
$q",$s.=" ")$z=$c++.$z;echo$q;

如明确允许,这将输出尾随换行符。可以运行该命令php -r以保存将<?php其放入文件所需的开头。

说明:当包含字符串的变量'A'在PHP中递增时,它变为'B',然后'C'依此类推,直到'Z'变为'AA''A'在此madcap代数中,没有任何数字开头,并且减量运算符不会撤消它,因此我们将递增反转的字母保存为$z(默认情况下,将NULL其与字符串连接时,其行为类似于空字符串- $s$q)也会发生同样的情况。$s在变量$q中累积空格,并且整个字符串向后累积,这意味着我们必须在末尾回显它。

谢泰特斯(Titus)为我的大括号打了个高尔夫球,并告诉我不需要对诸如的内联评估标记进行罚款-r


1
如果您使用Linux换行符,则为57个字节。-r免费。缩短两个字节:for($c=A;$c!=AA;$q="$s$z\n$q",$s.=" ")$z=$c++.$z;echo$q;
Titus

@Titus谢谢,在回答中给了您荣誉。
CR Drost

纳米 不过请注意-R,并-F自由的。见codegolf.meta.stackexchange.com/questions/2424/...
提图斯

相信您可以使用节省一个字节$c<AA
Ismael Miguel

1
@IsmaelMiguel对不起,我太简洁了。我在写这篇文章时曾想过:“也许有一种方法可以在不增加字节的情况下进行随机排列,以便先发生A情况,然后我们可以检测到AA与B。但是我认为我不够聪明,看不到它。” 我并不是故意要轻描淡写的,将来我会尝试提防的。
CR Drost

3

只是好奇,压缩版多长时间?
caird coinheringaahing

@cairdcoinheringaahing TL; DR太长了。SOGL压缩会吸收重复的内容(特别是不针对重复的内容)。很难说,因为压缩不是自动进行的(自动化会使它701 choose x尝试对任何整数x 进行尝试),但是粗略的尝试是450字节:P
dzaima


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.