매우 긴 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
라인 목록이 괜찮습니까?
완전히 인간적인

6
en.wikipedia.org/wiki/Terza_rima 에 따르면 결말이 잘못되었습니다. Z 또는 ZZ로 끝나야합니다.
Chris

운율 체계를 넘어서 추가 출력이있을 수 있습니까? 이것은 몇 바이트를 절약 할 수 있습니다.
NK1406

@ NK1406 죄송합니다.
LiefdeWen

1
@totallyhuman 문자열 배열은 괜찮습니다.
LiefdeWen

답변:


24

자바 스크립트 (ES6), 51 50 49 바이트

@ l4m2 덕분에 1 바이트 절약

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

온라인으로 사용해보십시오!

어떻게?

우리는 n = 45358로 시작합니다 ( base-36에서는 yzy ). 각 반복마다 n 에서 1333 을 뺍니다 ( 기수 36의 111 ). 12033 ( 기본 36의 9a9 ) 이이 조건이 충족되는 첫 번째 값이고 63 이 이러한 특성을 가진 가장 작은 모듈로 이므로 n MOD 63 = 0이 되 자마자 중지 합니다.

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 모든 문자를 포함하는 가장 낮은 기준이므로 최적입니다.
Outgolfer Erik

무슨 뜻이야? 그는 OP가 아니므로 당신이 말하는 사람들 중 하나입니까?
Outgolfer Erik

17
(비) 흥미로운 사이드 노드 인 1333 = 666 * 2 + 1이며 이것이 PPCG에 대한 제 666 번째 답변입니다.
Arnauld

3
@Arnauld 다음 답변에서 1335 값을 사용하십시오.
IanF1



9

brainfuck , 51 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ü«€û

온라인으로 사용해보십시오!

Emigna 덕분에
-1 바이트 규칙 변경 덕분에 -1 바이트; 지적한 kalsowerus에게 감사합니다

Hehe는 현재 Pyth를 이깁니다. \영형/

설명

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

당신은 할 수Aü«€û»
Emigna

@Emigna O 멋지다, 고마워! : D
HyperNeutrino

좋아, 내가 보지 않고 내가 얻은 것입니다.
Magic Octopus Urn

주석에 따르면 문자열 목록은 출력으로 좋으며 조인을 제거 할 수 있습니다.
kalsowerus

9

brainfuck , 51 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

@ovs 덕분에 -2

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 바이트

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

온라인으로 사용해보십시오!

이것이 다른 두뇌 실수보다 짧은 한 가지 이유는 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

공상없는 순진 방법 sprintf이다 49 바이트
주세페

@Giuseppe 그것은 내가 sprintf올바르게 사용하지 않았기 때문일 것입니다 :)
plannapus

좋아, 그러나 나는 40 바이 터를 발견했다 :)
주세페

@Giuseppe ouch :)
plannapus

1
ASCII 코드 변환을 기반으로 한 또 다른 [40 바이 터] [ tio.run/##K/r/…
NofP

5

자바 8 , 132 85 62 60 바이트

  • Neil 덕분에 47 바이트
  • Oliver 덕분에 26 바이트
  • Kevin 덕분에 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
문자 배열을 인쇄하는 것이 훨씬 짧을 것입니다.
Neil

1
당신은 만들 수 도를? ichar
Neil

2
a->{for(char c=64;++c<90;)System.out.println(""+c++ +c--+c);}(62 bytes)
Olivier Grégoire

2
현재 이것은 함수 또는 프로그램 대신 스 니펫이므로 v->{...}@ OlivierGrégoire에서 언급 한 것처럼 추가해야합니다 . ( Java 8 람다의 작동 방식을 모르는 경우 이전에 한 번 설명했습니다. ) 또한 Olivier처럼 루프 브래킷을 제거하고 추가 골프로 인쇄를 System.out.print(" "+i+++i--+i);(공백 대신 공백으로 변경할 수 있음) )에 줄이 필요하지 않습니다 c+++c--+c. 여기에서 시도하십시오.
Kevin Cruijssen '12

1
팁과 Java 람다 문서에 대해 @KevinCruijssen에게 감사드립니다. 간단한 람다를 구현하는 가이드를 따라 가기가 매우 쉽습니다. 그에 따라 업데이트되었습니다!
DevelopingDeveloper




4

brainfuck , 41 바이트

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

온라인으로 사용해보십시오!


+1 대부분을 따르지만-로 시작합니다. 루프를 시작하기 전에 셀 0을 -1로 설정한다는 의미입니까? 당신은 시간이 있다면 머리에 초보자에 대한 설명의 기회가 있습니까? Btw, 내 노력에 -2 주셔서 감사합니다.
ElPedro

@ElPedro는 brainfuck 인터프리터에 의존하며 tio.run의 인터프리터는 각 셀에 부호없는 8 비트 숫자를 저장하므로 첫 번째 셀은 루프 전에 255를 얻습니다.
ovs

@ElPedro 초기화 세그먼트는 실제로 BF-Crunch에 의해 생성됩니다 .
ovs December

4

brainfuck , 45 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

하스켈 , 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.
Laikoni

@ Laikoni 나는 당신이 닌자를 가지고있는 것 같습니다. 도전 과제는 출력 목록으로 줄 목록을 명시 적으로 거부하지 않습니다. (또한, 이는 상당한 양의 답변을 무효화 할 것입니다.) 어느 쪽이든, 이제 답변은 유효 하지 않습니다.
완전히 인간적인

3

R , 40 바이트

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

온라인으로 사용해보십시오!

R에서 PlannapusGiuseppe의 답변에 대한 또 다른 대안 . 그들의 요청에 따라 게시. 이 솔루션은 ASCII 코드를 UTF8 코딩으로 사용합니다.

PS TAB이 허용되면 개행 (ASCII 코드 10)을 표 (ASCII 코드 9)로 대체 할 수 있으며 솔루션은 39 바이트로 줄어들 수 있습니다.

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


9OP가 허용하는 공백이므로 사용 이 완벽 하다고 생각 합니다.
Giuseppe


3

PowerShell , 39 37 바이트

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

온라인으로 사용해보십시오!

에서 65로 반복 합니다 89. 각 반복마다 사전 증분 및 사전 감소를 사용하여 현재 숫자의 정수 배열 (현재, 하나 이상 및 현재)을 구성합니다. 그런 다음 char-array 로 다시 캐스팅 -join하고 단일 문자열로 묶습니다. 각 문자열은 파이프 라인에 남아 Write-Output있으며 프로그램 완료시 암시 적 으로 각 요소 사이에 줄 바꿈을 무료로 제공합니다.


또는 동일한 바이트 수

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

온라인으로 사용해보십시오!


1
($_,($_+1),$_)다른 길이의 튜플입니다
Veskah



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

감사합니다! Pepe에 플래그를 추가하기 전에이 코드를 만들었습니다. 답변을 업데이트했습니다.
RedClover


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.