很长的Terza Rima


38

描述

输出一个很长的Terza Rima的韵律方案。

输入值

没有。

输出量

ABA
BCB
CDC
DED
EFE
FGF
GHG
HIH
IJI
JKJ
KLK
LML
MNM
NON
OPO
PQP
QRQ
RSR
STS
TUT
UVU
VWV
WXW
XYX
YZY

规则

您可以在使用空格或换行符分隔节之间进行选择,因此:

ABA BCB...

要么

ABA
BCB
...

每行允许一个尾随空白,一个尾随换行。

输出可以是大写或小写。

这是,因此每种语言的最短代码(以字节为单位)获胜。


4
行列表可以吗?
totallyhuman

6
根据en.wikipedia.org/wiki/Terza_rima的说法,您的结局是错误的。它应以Z或ZZ结尾。
克里斯(Chris)2007年

除了押韵方案外,还能有其他输出吗?这可能为我节省了几个字节。
NK1406 '17

@ NK1406不,对不起。
LiefdeWen

1
@totallyhuman字符串数组很好。
LiefdeWen

Answers:


24

JavaScript(ES6),51 50 49字节

@ l4m2节省了1个字节

f=(n=45358)=>n%63?f(n-1333)+n.toString(36)+' ':''

在线尝试!

怎么样?

我们从n = 45358开始(yzy在base-36中)。在每次迭代中,我们从n中减去1333(在base-36中为111)。n MOD 63 = 0时,我们立即停止,因为12033(base-36中的9a9)是满足此条件的第一个值,而63是具有此类性质的最小模。

Decimal | Base-36 | MOD 63
--------+---------+-------
  45358 |   yzy   |   61
  44025 |   xyx   |   51
  42692 |   wxw   |   41
  41359 |   vwv   |   31
  40026 |   uvu   |   21
  38693 |   tut   |   11
  37360 |   sts   |    1
  36027 |   rsr   |   54
  34694 |   qrq   |   44
  33361 |   pqp   |   34
  32028 |   opo   |   24
  30695 |   non   |   14
  29362 |   mnm   |    4
  28029 |   lml   |   57
  26696 |   klk   |   47
  25363 |   jkj   |   37
  24030 |   iji   |   27
  22697 |   hih   |   17
  21364 |   ghg   |    7
  20031 |   fgf   |   60
  18698 |   efe   |   50
  17365 |   ded   |   40
  16032 |   cdc   |   30
  14699 |   bcb   |   20
  13366 |   aba   |   10
  12033 |   9a9   |    0

您是如何决定base36的?您确定它是最佳的吗?
LiefdeWen

2
@LiefdeWen这是包含所有字母的最低基数,因此是最佳选择。
Erik the Outgolfer

@ user202729是什么意思?他不是OP,所以他是您提到的那些人之一?
Erik the Outgolfer

17
作为一个(无用的)副节点,1333 = 666 * 2 + 1,这是我在PPCG上的第666个答案。
Arnauld

3
@Arnauld请确保在下一个答案中的某处使用值1335。
IanF1


10

果冻,7个字节

ØAṡ2ŒBY

在线尝试!

-1字节感谢丹尼斯

ØAṡ2ŒBY  Main Link
ØA       Alphabet
  ṡ2     Slice into overlapping slices of length 2
    ŒB   Palindromize (bounce) each
      Y  Join by newlines

9

Brainfuck51 48字节

@ovs节省了3个字节。

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

在线尝试!

说明

INITIALIZE TAPE:

0000:           (none)
0001: C_NEWLINE (10)
0002: V_COUNT   (25)
0003: V_ALPHA   (64)
++++++++[>+>+++>++++++++<<<-]>++>+

V_COUNT TIMES:              [-
    INCREMENT V_ALPHA         >+
    PRINT V_ALPHA             .
    PRINT V_ALPHA PLUS ONE    +.
    PRINT V_ALPHA             -.
    PRINT C_NEWLINE           <<.
END LOOP                    >]

@ ConorO'Brien-我刚刚注意到我的答案与您的答案非常相似。如果您认为它太接近了,请随时发表评论,我将其删除。
ElPedro

1
@ElPedro不,你很好,这个挑战没有太多的创新空间:)
Conor O'Brien

9

05AB1E,5个字节

Aü«€û

在线尝试!

-1字节归功于Emigna
-1字节归功于规则更改;感谢kalsowerus指出这一点

呵呵,目前胜过Pyth。\ o /

说明

Aü«€û»  Full Program
A       Lowercase Alphabet
 ü«     Pairwise with merge-list
   €û   For each, palindromize

您可以做Aü«€û»
Emigna '17

@Emigna O很酷,谢谢!:D
HyperNeutrino

很好,那也是我不看就得到的。
魔术八达通Ur

根据评论,字符串列表可以作为输出,您可以删除联接。
kalsowerus

9

Brainfuck51 49字节

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

在线尝试!

试图解释...

+++++                     #Put 5 in cell 0 because that is the highest common denominator of 10, 65 and 25
[                         #Start loop
>+++++                    #Counter in cell 1 is 25 (How many lines we must print)
>+++++++++++++            #Counter in cell 2 is 65 (ASCII A)  
>++                       #Counter in cell 3 is 10 (Newline)
<<<-]                     #Decrement the outer counter until the cells have the right values (muliples of 5).
>                         #Move to the counter that says how many lines we must print.
[>.                       #Print the character in cell 2
+.                        #Add one to the character in cell 2 and print it
-.                        #Subtract one from the character in cell 2 and print it
+                         #Add one to the character in cell 2 for the next loop
>.                        #Print a new line
<<-]                      #Decrement cell 1 and run again until cell 1 is 0

-2感谢@ovs

我第一次尝试一下,所以所有提示都深表感谢。如果我对它比较有经验,那么我可以确定可以再剃掉一些字节,但是我昨天才进入。





6

木炭,11字节

E²⁵✂αι⁺²ι‖O

在线尝试!链接是详细版本的代码。说明:

 ²⁵         Literal 25
E           Map over implicit range
    α       Predefined uppercase letters
   ✂ ι⁺²ι   Slice 2 characters
            Implicitly print result on separate lines
         ‖O Reflect with overlap

6

脑高射炮,90个字节

((((()()()){}){}){}()){(({})<((({}((((()()()()){}){}){}){})())[()])((()()()()()){})>[()])}

在线尝试!

它比另一个容易回答的问题短的一个原因是,因为它使用大写而不是小写字符,这些字符具有较小的ASCII值,因此更易于推送。

说明:

#Push 25
((((()()()){}){}){}())

#While true
{

    #Keep track of the number on top of the stack...
    # We'll call it 'a'
    (({})

        #Push A +...
        <((({}

        # 64 (push)
        ((((()()()()){}){}){}){})
        # + 1 (push)
        ())
        # - 1 (push)
        [()])

        # Push 10
        ((()()()()()){})>

    # Now that's all pushed, we push a - 1 to decrement the loop counter
    [()])

# Endwhile
}

我写的是第一个版本,没有投票,而高尔夫球的版本是+5。???
Christopher

5

R,51 47字节

L=LETTERS;cat(sprintf("%s%s%1$s",L[-26],L[-1]))

输出:

> L=LETTERS;cat(sprintf("%s%s%1$s",L[-26],L[-1]))
ABA BCB CDC DED EFE FGF GHG HIH IJI JKJ KLK LML MNM NON OPO PQP QRQ RSR STS TUT UVU VWV WXW XYX YZY

没有花哨的天真方式sprintf49个字节
Giuseppe

@Giuseppe那是因为我没有sprintf正确使用:)
plannapus

好的,但是我发现了40个BYTER :)
Giuseppe

@Giuseppe ouch :)
plannapus

1
另一个[40字节] [ tio.run/##K/r/…基于转换的ASCII码,以防万一
NofP

5

爪哇8132 85 62 60字节

  • 47字节归功于Neil
  • 26字节归功于Oliver
  • 3个字节,更好的格式化,多亏了Kevin
  • 由Oliver解决的错误

打高尔夫球

a->{for(char i=64;++i<90;)System.out.println(""+i+++i--+i);}

不打高尔夫球

public class TerzaRima {
    interface A{
        void a(String a);
    }
    static A a = a -> {
        for (char i = 64; ++i < 90; ) System.out.println("" + i++ + i-- + i);
    };
    public static void main(String[] args){
        a.a(null);
    }
}

1
打印一个char数组可能要短得多。
尼尔

1
你可以做i一个char呢?
尼尔

2
a->{for(char c=64;++c<90;)System.out.println(""+c++ +c--+c);}(62字节)
OlivierGrégoire17年

2
当前,这是一个代码段,而不是函数或程序,因此您必须添加v->{...}@OlivierGrégoire所述的内容。(以防万一您不知道Java 8 lambda的工作原理,我之前曾做过一次解释。)此外,您可以像Olivier一样去掉循环的括号,作为额外的高尔夫,您可以将打印内容更改为System.out.print(" "+i+++i--+i);(空格代替换行,则不需要在处的空格c+++c--+c在这里尝试。
凯文·克鲁伊森

1
感谢@KevinCruijssen提供的技巧以及Java lambdas文档。这是实施一些简单lambda的非常容易遵循的指南。我已经相应地更新了!
DevelopingDeveloper




4

头脑操,41字节

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

在线尝试!


+1我遵循了大多数,但它以-[开头。这是否意味着在开始循环之前将单元格0设置为-1?如果您有时间,有什么机会可以解释一下新手吗?顺便说一句,感谢我的努力-2。
ElPedro

@ElPedro这取决于Brainfuck解释器,tio.run的解释器在每个单元格中存储无符号的8位数字,因此第一个单元格在循环之前获得255。
ovs

@ElPedro初始化段实际上是由BF-Crunch生成的。
ovs

4

Brainfuck45 37字节

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

在线尝试!

以大写字母打印,并以空格分隔,并在结尾加上空格。

怎么运行的:

+[[<+>>++<-]>] Intialises the tape with the format n^2
               1 2 4 8 16 32 64 128 0 0'
<<---          Navigates to the desired section and tweaks the counter
               1 2 4 8 16 32 64 125<
[-----<+.+.-.<.>>] Prints the Terza Rima, using:
                 125 as the loop counter (decremented by 5 each loop)
                 64 as the current alphabetic character (incremented and printed each loop)
                 32 as the space character

1
这实际上真的很好!做得好!
扬尘




3

Brain-Flak,180字节

(()()())(({}){})(({}){})(({}){})(({}){})(({}){}())<>(()()()()())(({}){})(({}){})(()()()()(){}){({}[()])<>(({}))(({}()))(({}[()]))({}()<(()()()()()()()()()())>)<>}<>{}{}{({}<>)<>}<>

在线尝试!

感谢DJ的帮助


3

Haskell,28个字节

[[x,succ x,x]|x<-['A'..'Y']]

在线尝试!

succ 这是一个不幸的命名选择...

说明

[[x,succ x,x]|x<-['A'..'Y']]

[            |x<-          ]  -- for x in...
                 ['A'..'Y']   -- the alphabet sans Z
 [x,succ x,x]                 -- construct a string of x, the successor of x and x

4
我觉得返回一个字符串列表而不是根据需要用空格或换行符分隔它们完全不公平。
user28667

@ user28667通常允许在挑战中使用(如果尚未允许的话,可能应该在Default IO帖子上)。OP尚未对此挑战做出具体回应。但是,这没有理由不赞成。
totallyhuman

@totallyhuman目前,挑战明确指定应使用空格或换行符分隔输出,因此此答案当前无效。因此,严格按照网站规则,应该将其删除,或者只需在前面加上unlines或来加以固定unwords
Laikoni '17

@Laikoni我似乎忍住了你。挑战并未明确拒绝将行列表作为输出。(此外,这将使相当数量的答案无效。)无论哪种方式,答案现在都不会无效。
totallyhuman

3

R,40个字节

cat(intToUtf8(rbind(x<-65:89,x+1,x,10)))

在线尝试!

R中的另一种替代方案是PlannapusGiuseppe的答案。根据他们的要求发布。此解决方案使用ASCII码到UTF8编码。

PS如果允许使用TAB,则可以用制表符(ASCII代码9)替换换行符(ASCII代码10),并且解决方案可以缩小到39个字节:

cat(intToUtf8(rbind(x<-65:89,x+1,x,9)))


我认为使用9是非常好的,因为它是空格,这是OP所允许的。
朱塞佩


3

PowerShell39 37字节

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

在线尝试!

从循环6589。每次迭代,我们都使用预递增和递减构造一个当前数字(当前,一个和另一个)的整数数组。然后将其重新铸造为char-array,并-join一起编辑为单个字符串。每个字符串都留在管道上,并且Write-Output在程序完成时隐式提供了每个元素之间免费的换行符。


或者,相同的字节数

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

在线尝试!


1
($_,($_+1),$_)是另一个等长元组
Veskah



2

Pepe,59 56字节

-3个字节,由于u_ndefined

REeEeEEeEerEeEeeeeeERrEEEEErEEEeeREEreeerEEEEEeeEreeERee

在线尝试!

说明:

# Prepare stacks

  # prepare stack R [Z]
  REeEeEEeEe  # push Z

  # prepare stack r [A,B,A]
  rEeEeeeeeE  # push A
  RrEEEEE     # copy and increment A (getting B)
  rEEEee      # duplicate A to end

# Start loop
REE           # create label Z

  reee        # output stack r contents
  rEEEEEeeE   # increment all

  reeE        # end line

Ree           # loop while r[p] != Z

1
更换rEeEeeeeEeRrEEEEE节省掉3个字节
u_ndefined

@u_ndefined谢谢!在将标志添加到Pepe之前,我编写了此代码。更新了答案。
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.