Çok uzun bir Terza Rima


38

Açıklama

Çok uzun bir Terza Rima için kafiye şemasını çıkartın.

Giriş

Yok.

Çıktı

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

kurallar

Stanzaları boşluk veya yeni satırlarla ayırmak arasında seçim yapabilirsiniz.

ABA BCB...

VEYA

ABA
BCB
...

Her satıra tek bir boşluk beyaz boşluk bırakılmalı ve bir takip yeni satırına izin verilir.

Çıktı büyük veya küçük harf olabilir.

Bu , yani her dil için bayt cinsinden en kısa kod kazanır.


4
Satır listesi tamam mı?
Aralık'ta

6
En.wikipedia.org/wiki/Terza_rima'ya göre sonunuz yanlış. Z veya ZZ ile bitmelidir.
Chris

Kafiye düzeninin ötesinde ek çıktı olabilir mi? Bu beni birkaç bayt kurtarabilir.
NK1406

@ NK1406 Hayır, üzgünüm.
LiefdeWen

1
@totallyhuman Dize dizisi iyi.
LiefdeWen

Yanıtlar:


24

JavaScript (ES6), 51 50 49 bayt

@ L4m2 sayesinde 1 bayt kaydedildi

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

Çevrimiçi deneyin!

Nasıl?

N = 45358 ile başlıyoruz ( baz-36'da yzy ). Bu çıkarma 1333 den n (her tekrarda 111 baz-36). Bu en kısa sürede durdurmak n MOD 63 = 0 için, 12033 ( 9a9 baz-36), bu koşul yerine olan ilk değer ve 63 gibi bir özellik ile küçük modülo olup.

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'ya nasıl karar verdiniz? ve optimal olduğundan emin misin?
LiefdeWen

2
@LiefdeWen Tüm harfleri içeren en düşük taban, bu yüzden en uygunudur.
Outgolfer Erik

@ user202729 Ne demek istiyorsun? O OP değil, demek istediğin insanlardan biri mi?
Outgolfer Erik

17
(Un) ilginç bir yan düğüm olarak, 1333 = 666 * 2 + 1 ve bu benim PPCG'deki 666. cevabım.
Arnauld,

3
@Bir sonraki cevabınızda bir yerde 1335 değerini kullandığınızdan emin olun.
IanF1


10

Jöle , 7 bayt

ØAṡ2ŒBY

Çevrimiçi deneyin!

Dennis sayesinde -1 bayt

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

9

brainfuck , 51 48 bayt

@Ovs sayesinde 3 bayt kurtarıldı.

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

Çevrimiçi deneyin!

açıklama

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 - Cevabımın size oldukça yakın olduğunu fark ettim. Eğer çok yakın olduğunu düşünüyorsanız lütfen yorum yapmaktan çekinmeyin ve onu kaldıracağım.
ElPedro

1
@ElPedro Hayır, iyisin, bu zorlukta yenilik için fazla yer yok :)
Conor O'Brien

9

05AB1E , 5 bayt

Aü«€û

Çevrimiçi deneyin!


Kural değişikliği sayesinde Emigna -1 bayt sayesinde -1 bayt; bunu işaret ettiği için kalsowerus'a teşekkürler

Hehe, şu anda Pyth'i yeniyor. \Ö/

açıklama

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

YapabilirsinAü«€û»
Emigna

@Emigna O havalı, teşekkürler! : D
HyperNeutrino

Güzel, bakmadan aldığım da buydu.
Magic Octopus Urn

Yorumlara göre, bir dizge listesi çıktısı olarak iyidir, birleştirmeyi kaldırabilirsiniz.
kalsowerus

9

brainfuck , 51 49 bayt

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

Çevrimiçi deneyin!

Bir açıklama girişimi ...

+++++                     #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 sayesinde -2

Beynimdeki ilk girişimim, böylece herhangi bir ipucu minnetle alındı. Daha deneyimli olsaydım, birkaç bayt daha fazla tıraş edebileceğime eminim ama sadece dün içine girdim.





6

Kömür , 11 bayt

E²⁵✂αι⁺²ι‖O

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

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

6

Beyin Flak , 90 bayt

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

Çevrimiçi deneyin!

Bunun bir diğer beyin-plak cevabından daha kısa olmasının bir nedeni, daha küçük ASCII değerlerine sahip ve bu nedenle itmesi daha kolay olan küçük harfler yerine büyük harf kullanmasıdır.

Açıklama:

#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
}

İlk versiyonunu yazıyorum ve size bir golf versiyonu yazıp +5 almadığınız için hiçbir öneri almadım. ???
Christopher,

5

R, 51 47 bayt

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

Çıktı:

> 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

Fantezi olmadan naif bir yol sprintfolduğunu 49 byte
Giuseppe

@Giuseppe, sprintfdoğru kullanmadığım için olur :)
plannapus

Tamam, ama ben bir 40 bayt buldum :)
Giuseppe 16

@Giuseppe ouch :)
plannapus

1
[başka [Byter 40] tio.run/##K/r/... durumda, ASCII kodları dönüştürme göre
NofP

5

Java 8 , 132 85 62 60 Bayt

  • Neil sayesinde 47 byte
  • Oliver sayesinde 26 bayt
  • Kevin sayesinde 3 bayt ve daha iyi biçimlendirme
  • Oliver tarafından düzeltilen hata

golfed

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

Ungolfed

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
Bir karakter dizisi yazdırmak muhtemelen çok daha kısa olacaktır.
Neil

1
Eğer yapabilir ibir charçok?
Neil

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

2
Şu anda bu, bir işlev veya program yerine bir snippet'tir, bu nedenle v->{...}yukarıda @ OlivierGrégoire tarafından belirtildiği gibi eklemeniz gerekir. ( Java 8 lambda'ların nasıl çalıştığını bilmiyorsanız, daha önce bir açıklama yaptım. ) Ayrıca, Olivier'in yaptığı gibi döngünün köşeli parantezlerini kaldırabilir ve ek golf olarak baskıyı System.out.print(" "+i+++i--+i);(boşluk yerine) değiştirebilirsiniz. yeni bir çizginin ve boşluğa ihtiyacınız yok c+++c--+c). Burada dene.
Kevin Cruijssen,

1
Java lambdas belgesinin yanı sıra ipuçları için @KevinCruijssen teşekkürler. Bazı basit lambdaları uygulamak için takip edilmesi gereken bir rehberdi. Buna göre güncellendi!
Geliştirme Geliştiricisi




4

brainfuck , 41 bayt

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

Çevrimiçi deneyin!


+1 Birçoğunu takip ediyorum ancak şu şekilde başlar - [Bu, döngüye başlamadan önce hücreyi 0 - -1 olarak ayarladığınız anlamına mı geliyor? Beyinsiz bir acemi için vaktiniz varsa açıklama şansınız var mı? BTW, çabalarım için -2 için teşekkürler.
ElPedro

@ElPedro bu, beyin sapı tercümanına bağlıdır, tio.run'daki tercüman her hücrede imzasız 8 bitlik sayıları saklar, böylece ilk hücre döngüden önce 255 alır.
ovs

@ElPedro başlatma segmenti aslında BF-Crunch tarafından üretilir .
ovs

4

brainfuck , 45 37 bayt

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

Çevrimiçi deneyin!

İzleyen boşluk içeren boşluklarla ayrılmış büyük harflerle yazdırılır.

Nasıl çalışır:

+[[<+>>++<-]>] 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
Bu gerçekten çok hoş! Aferin!
Toz




3

Brain-Flak , 180 bayt

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

Çevrimiçi deneyin!

Bu çalışmayı aldığınız için DJ'e teşekkürler


3

Haskell , 28 bayt

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

Çevrimiçi deneyin!

succ talihsiz bir isim seçimi

açıklama

[[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
Gerektiği gibi boşluk veya newline ile ayırmak yerine, bir dize listesi döndürmenin tamamen adil olduğunu sanmıyorum.
user28667

@ user28667 Genellikle zorluklarla karşılaşılır (zaten değilse, muhtemelen Varsayılan IO postasında olmalıdır). OP, bu mücadeleye özel olarak henüz cevap vermedi. Ancak bu, oy kullanmanın bir nedeni değil.
tamamen insanlık

@totallyhuman Şu anda zorluk açıkça, çıktının ayrılması için boşlukların veya yeni satırların kullanılması gerektiğini belirtir, bu nedenle bu cevap şu anda geçersiz. Bu yüzden kesinlikle site kurallarına göre silinmeli ya da a unlinesveya unwords.
Laikoni

@Likonik sana ninja etti gibi görünüyor. Buradaki zorluk açıkça bir satır listesini çıktı olarak reddetmiyor. (Artı, bu oldukça fazla sayıda cevabı geçersiz kılar.) Her iki durumda da, cevap şu anda geçersiz değil .
tamamen insancıl

3

R , 40 bayt

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

Çevrimiçi deneyin!

Plannapus ve Giuseppe'nin cevaplarına R'de bir alternatif daha . İsteğini takiben gönderildi. Bu çözüm ASCII kodunu UTF8 kodlamasına kullanır.

PS, TAB'lara izin verildiyse, yeni satırın (ASCII kod 10) bir tabloyla (ASCII kod 9) değiştirilmesi ve çözüm 39 bayta küçültülebilir:

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


9OP'nin izin verdiği boşluk olduğu için kullanımın gayet iyi olduğunu düşünüyorum .
Giuseppe


3

PowerShell , 39 37 bayt

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

Çevrimiçi deneyin!

Dan Döngüler 65için 89. Her yinelemede, ön-artırma ve ön-azaltma kullanarak mevcut basamağın bir tamsayı dizisini (şu an, bir tane daha ve şimdiki) oluşturuyoruz. Bu daha sonra bir chardizi olarak yeniden atılır ve -joinbirlikte tek bir dizge haline getirilir. Her dize boru hattında bırakılır ve Write-Outputprogramın tamamlanmasında örtülü bir durum bize her öğe arasında ücretsiz olarak yeni bir satır verir.


Alternatif olarak, aynı bayt sayısı

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

Çevrimiçi deneyin!


1
($_,($_+1),$_)alternatif uzunlukta bir
demetdir



2

Pepe, 59 56 bayt

U_ndefined sayesinde -3 bayt

REeEeEEeEerEeEeeeeeERrEEEEErEEEeeREEreeerEEEEEeeEreeERee

Çevrimiçi deneyin!

Açıklama:

# 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
Değiştirme rEeEeeeeEeile RrEEEEE3 bayt kapalı kaydeder
u_ndefined

@u_ndefined Teşekkürler! Pepe'ye bayraklar eklenmeden önce bu kodu yaptım. Cevap güncellendi.
RedClover

1

Retina , 24 bayt


ABA
;{:G`
T`_p`p`[^Y]..

Çevrimiçi deneyin!


21 bayt ancak takip eden yeni hatlardan muzdarip ...
Neil

@Neil Evet, ihtiyacın bile yok `.... Bu takip eden yeni hatlardan kurtulmak gerçekten can sıkıcı bir durum. Retina 1.0'da döngüler halinde yazdırmayı biraz daha esnek ve kullanışlı hale getirmeyi umuyorum.
Martin Ender

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.