非常に長いテルザリマ


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
...

1行につき1つの末尾の空白が許可され、1つの末尾の改行が許可されます。

出力は大文字でも小文字でもかまいません。

これはであるため、各言語のバイト単位の最短コードが優先されます。


4
行のリストは大丈夫ですか?
完全に人間

6
en.wikipedia.org/wiki/Terza_rimaによると、結末は間違っています。ZまたはZZで終わる必要があります。
クリス

韻のスキームを超えて追加の出力がありますか?これにより、数バイト節約できます。
NK1406

@ NK1406いいえ、ごめんなさい。
LiefdeWen

1
@totallyhuman文字列配列は問題ありません。
LiefdeWen

回答:


24

JavaScript(ES6)、51 50 49バイト

@ l4m2のおかげで1バイト節約

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

オンラインでお試しください!

どうやって?

n = 45358(base-36のyzy)から始めます。各反復で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すべての文字を含む最も低いベースなので、最適です。
エリックアウトゴルファー

@ user202729どういう意味ですか?彼はOPではないので、彼はあなたが言及する人々の一人ですか?
エリックアウトゴルファー

17
(非)興味深いサイドノードとして、1333 = 666 * 2 + 1であり、これはPPCGに対する私の666番目の回答です。
アーナルド

3
@Arnauldは、次の回答のどこかで値1335を使用するようにしてください。
IanF1

15

C(gcc)、41バイト

f(i){for(i='ABA';i%29;i+=65793)puts(&i);}

オンラインでお試しください!

user202729による修正と-9のおかげ。デニスに -1 、アーナウルドに -2 。



1
(i='ABA';i<'ZZZ';i+=65793)バイトを保存します。
デニス

別のバイト59e5'ZZZ'保存する代わりに使用します。
user202729

あなたは使用することができるi%29ために41バイト
アルノー


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-私の答えはあなたのものとかなり似ていることに気付いた。近すぎると思われる場合はお気軽にコメントしてください。削除します。
エルペドロ

1
@ElPedroいいえ、あなたは大丈夫です。このチャレンジにはイノベーションの余地はあまりありません:)
コナーオブライエン

9

05AB1E、5バイト

Aü«€û

オンラインでお試しください!

Emignaのおかげで
-1バイトルールの変更のおかげで-1バイト。それを指摘してくれたkalsowerusに感謝

Hehe、現在Pythに勝っています。\ o /

説明

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

できることAü«€û»
エミグナ

@Emigna Oクール、ありがとう!:D
HyperNeutrino

ニース、それは私も見ずに得たものです。
魔法のタコUr

コメントによると、文字列のリストは出力としては問題ありません。結合を削除できます。
カルソウェラス

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のおかげで

Brainfuckでの私の最初の試みなので、どんなヒントもありがたく受け取った。もっと経験があれば、もう少しバイトを削ることができると確信していますが、昨日はそれだけになりました。





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

Brain-Flak、90バイト

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

オンラインでお試しください!

これが他のブレインフラックの回答よりも短い理由の1つは、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を得るという賛成票をもらいません。???
クリストファー

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それは私がsprintf正しく使用しなかったためだろう:)
plannapus

わかりましたが、40バイトを見つけました:)
ジュゼッペ

@ジュゼッペ痛い:)
plannapus

1
別の[40 byter] [ tio.run/##K/r/...場合には、ASCIIコードの変換に基づい
NOFP

5

ジャワ8132 85 62 60バイト

  • ニールのおかげで47バイト
  • Oliverのおかげで26バイト
  • ケビンのおかげで3バイトとはるかに良いフォーマット
  • 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
文字配列の印刷は、おそらくはるかに短くなります。
ニール

1
あなたが作ることができ、あまりにも?ichar
ニール

2
a->{for(char c=64;++c<90;)System.out.println(""+c++ +c--+c);}(62バイト)
オリビエグレゴワール

2
現在、これは関数またはプログラムではなくスニペットなのでv->{...}、@OlivierGrégoireで前述したように追加する必要があります。(Java 8ラムダがどのように機能するかわからない場合は、前に一度説明しました。)また、Olivierのようにループのブラケットを削除し、追加のゴルフとしてSystem.out.print(" "+i+++i--+i);(代わりにスペースを変更できます)改行の場合、スペースは必要ありませんc+++c--+c)。ここで試してみてください。
ケビンCruijssen

1
ヒントとJavaラムダドキュメントについて@KevinCruijssenに感謝します。これは、いくつかの単純なラムダを実装するための非常に簡単なガイドでした。それに応じて更新しました!
開発者




4

brainfuck、41バイト

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

オンラインでお試しください!


+1私はその大部分をフォローしていますが、-[で始まります。つまり、ループを開始する前にセル0を-1に設定しているということですか?時間があれば、頭痛の初心者を説明するチャンスはありますか?ところで、私の努力の-2に感謝します。
エルペドロ

@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

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これは通常、チャレンジで許可されています(まだない場合は、おそらくデフォルトIOポストにあるはずです)。OPは、この課題に具体的に対応していない。しかし、これは、投票する理由にはなりません。
完全に人間の

@totallyhuman現時点では、チャレンジでは、出力を区切るためにスペースまたは改行を使用する必要があることが明示的に指定されているため、この回答は現在無効です。だから、厳密サイトによると、それは、削除、または単に付加することで固定されなければならないルールunlinesやをunwords
ライコニ

@ライコニ私はあなたに忍者を持っているようだ。チャレンジは、行のリストを出力として明示的に拒否しません。(さらに、それはかなりの量の回答を無効にします。)いずれにしても、答えは今で無効ではありません
完全に人間の

3

R、40バイト

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

オンラインでお試しください!

RのPlannapusGiuseppeの答えに対するもう1つの選択肢。リクエストに応じて投稿。このソリューションでは、ASCIIコードからUTF8コーディングを使用します。

PS TABが許可されている場合、改行(ASCIIコード10)を表(ASCIIコード9)に置き換えることができ、ソリューションは39バイトに縮小できます。

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


9OPで許可されている空白であるため、使用はまったく問題ないと思います。
ジュゼッペ


3

PowerShell39 37バイト

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

オンラインでお試しください!

から65にループし89ます。繰り返しごとに、事前インクリメントと事前デクリメントを使用して、現在の数字の(現在の、もう1つの、現在の)整数配列を構築しています。それはchar-array として再キャストさ-joinれ、1つの文字列にまとめられます。各文字列はパイプラインに残され、Write-Outputプログラムの完了時に暗黙的に各要素間の改行が無料で提供されます。


または、同じバイト数

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

オンラインでお試しください!


1
($_,($_+1),$_)代替の同じ長さのタプル
ベスカ



2

ペペ、59 56バイト

u_ndefinedのおかげで-3バイト

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
交換rEeEeeeeEeでは、RrEEEEE3つのバイトオフ節約
u_ndefined

@u_ndefinedありがとう!フラグがPepeに追加される前に、このコードを作成しました。答えを更新しました。
RedClover


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.