Gözaltında satır yaz


63

Giriş

Kötü haber millet - tutuklusunuz. İngilizce öğretmeniniz bu siteyi anlamıyor ve "dijital dohickey'leriniz üzerinde matematik yapmayı bırakmanızı istiyor , bu İngilizce dersi!"

Tahtaya en sevdiği sözlerini 25 kez tahtaya yazması için cezalandırdı, bu da tahtaya toplam 100 satır verecek.

The eighteen-hundreds were a time for rum.
The nineteen-hundreds were a time for fun.
The two-thousands are a time to run
a civilized classroom.

Şanslısın, hevesli bir okuyucusun (bir uzman kod-golfçüsünden bahsetmiyorum bile)! Seni kolaylaştıracak bir numara hakkında bir okumun var.

fokstrot

(Bill Amend'den Foxtrot)

Ne yazık ki Jason için işe yaramadı. Ama daha iyi bir fikrin var! İngilizce öğretmeniniz matematik yaptığınızı düşündüğünden, tüm sayıları programınızın dışında bırakırsanız işe yarayabilir! Ayrıca, programınızı olabildiğince kısa tutmak istersiniz çünkü tembel bir öğrencisiniz ve tahtaya çok fazla yazmak istemiyorsunuz.

Aşağıdaki kurallara uygun bir program yazın:

  • Programınız yukarıdaki 4 çizgiyi 25 kez basmalıdır. Satırlar tekrarlanarak bu sırada verilmelidir. Tam olarak tam 100 satırlık çıktı (en sondaki takip eden bir yeni hat veya en baştaki baştaki bir yeni hat tamam).
  • Karakterleri kullanamazsınız 0123456789. Öğretmenin matematikle karışır ve seni çağırır!
  • İthalatları saymadan herhangi bir ithalatı ve dış kütüphaneyi kullanabilirsiniz. İngilizce öğretmenin programlama hakkında bir şey bilmiyor. Jason yazarak pek çok iş kurtarabilirdi #include <stdio.h>ve aynı hataları yapmak istemezdiniz!
  • Programınızı bytesayıma göre puanlayın. En düşük puan kazanır!

2
Metin "1900'leri" okuyacak olsaydı, çıktıyı yazmak biraz daha zor olurdu.
Ingo Bürk

30
comix'e: baskı yapmıyor \ n, ve 1'den gelen döngü oldukça garip (C doğasına karşı olduğu gibi) ...
VX

11
@VX Bill Amend, uzun zamandır Pascal’ın ölümü zor ve her ne zaman açıkça ortaya çıkıyorsa C yazıyorsa.
kabarık

5
Bu eski İngilizce öğretmenlerimden birine çok benziyor.
Kaz Wolfe

2
Banning + burada mantıklı olurdu, ama belki bu çok zor olurdu.
Pharap

Yanıtlar:


9

CJam, 109 107 106 104 103 bayt

0000000: 22 0c 20 4f 18 41 e4 d8 a5 f3 95 cf 5e 2b cb 1c  ". O.A......^+..
0000010: 44 64 2f bf 28 23 e2 47 4e 4e 77 73 fc 43 09 a2  Dd/.(#.GNNws.C..
0000020: 09 0b fb 18 29 e8 e8 49 5d fc 00 da b8 70 b6 3e  ....)..I]....p.>
0000030: 0c 24 d7 5a 5b 28 1c 45 2e 90 63 86 04 5c 3e 95  .$.Z[(.E..c..\>.
0000040: 4b ae 66 22 48 48 2a 62 46 47 2b 62 22 54 0a 20  K.f"HH*bFG+b"T. 
0000050: 2d 2e 22 27 7b 2c 57 25 7c 66 3d 7b 28 2f 29 2a  -."'{,W%|f={(/)*
0000060: 7d 5a 2a 43 44 2b 2a                             }Z*CD+*

Yukarıdakiler tersinir bir xxd dökümüdür.

Test yapmak

Bunu çevrimiçi yorumlayıcıda çalıştırarak yukarıdaki kodu oluşturabilir ve uygulayabilirsiniz :

"bxyyeighxrum.yninexfun.ytwo-thousands abto run
a civilized classroom.y
The xteen-hundreds webfor bre a time ""T
 -."'{,W%|f#31bHH*b:c`'\2*/'\*"HH*bFG+b""T
 -."`"'{,W%|f={(/)*}Z*CD+*"]:+~

Oluşturulan kodu görmek için (çalıştırmadan), finali kaldırın ~.

Bayt sayısını saymak için (ISO-8859-1'deki bir karakter bir bayttır), finali a ~ile değiştirin ,.

Yazdırılabilir sürüm (122 bayt)

"bxyyeighxrum.yninexfun.ytwo-thousands abto run
a civilized classroom.y
The xteen-hundreds webfor bre a time "{(/)*}Z*CD+*

Dize (S) bastıktan sonra, aşağıdakiler yürütülür:

{    }Z*        " Repeat 3 times:     ";
 (              "     Q := S.shift()  ";
  /             "     T := S.split(Q) ";
   )            "     R := T.pop()    ";
    *           "     S := T.join(R)  ";
        CD+*    " S *= 12 + 13        ";

Moar golf

Yazdırılamaz dizgiyi (U) bastıktan sonra, aşağıdakiler yürütülür:

HH*b                        " U := U.base(17 * 17) ";
    FG+b                    " U := U.base(15 + 16) ";
        "T\n -."            " P := 'T\n -.'        ";
                '{,W%|      " P |= 'zyx...\0'      ";
                      f=    " U[i] -> P[U[i]]      ";

Bu, yazdırılabilir sürümün dizesini iter. Kodun geri kalanı eskisi gibi çalışır.


Kodu kullanarak , 144 byte olan bu oluşturulan kodu alıyorum . Yanlış bir şey mi yapıyorum ?
Doktor,

UTF-8 kodlaması daha yüksek bayt sayısıyla sonuçlanır, evet. ISO-8859-1 ile, bayt sayısı 109'dur . Doğrulamak için ~ile değiştirebilirsiniz ,.
Dennis,

2
Optimizer’ın yaptığı kesin sonucu aldım, ancak eklenmesi ]:+~işe yaradı . Neden bunu koduna eklemiyorsun?
Işıltılı

1
@ user23013: Java yorumlayıcısı , G / Ç için $ LANG'a saygı duyar . Dahili olarak, CJam sadece 16 bit karaktere sahip.
Dennis,

3
Gerçekte çözümünüzü unicodeize etmek zorunda değilsiniz, çünkü sıkıştırma olmadan kendisi sadece 124 byte, diğerleri yeniliyor.
Doktor,

77

JavaScript (ES6) 164

B='teen-hundreds were a time',alert(B.replace(/./g,
"The eigh"+B+" for rum.\nThe nine"+B+" for fun.\nThe two-thousands are a time to run\na civilized classroom.\n"))

FireFox / FireBug konsolunda test edin .


19
Bu bir dahi!
Doktor,

1
Evet, her karakteri daha büyük bir dizeyle değiştirmek. Daha büyük dizenin 25 kopyasını alın.
Doktor,

1
@Optimizer Bu bir dahi :)
FryAmTheEggman

3
@Malvolio Aslında tekrarlanan bölüm 30 karakterdir. Ve bu basit çözümü bulmadan önce büyük bir deneme dizisi, kelimeler ekleyip kesip yer değiştirmeyi gösterebilirim.
edc65

1
@ IsmaelMiguel Herhangi bir ES6 tarayıcısı demek istediğinizi düşünüyorum. Sorun: bu zorluk kaydedildiğinde, herhangi bir tarayıcıda şablon dizeleri uygulanmadı: Firefox ilk - ilk 34, ilk 2014 - Aralık 2014 - daha sonra Chrome, mart 2015 - Ama şablon dizeleri olmasa bile izniniz 153, benimkinden daha iyi olurdu . Cevap olarak göndermelisin.
edc65

34

Python: 188 173 160 153

a="teen-hundreds were a time"
print"The eigh%s for rum.\nThe nine%s for fun.\nThe two-thousands are a time to run\na civilized classroom.\n"%(a,a)*len(a)

Pitonum pek yok ama bu bana çok kısa geliyor.

Düzenleme: Yani yanılmışım, hiç de kısa değildi! Yorumlarınızdaki yardımınız için teşekkürler: D


1
Yeni satırı kaybedebilir ve birkaç bayttan tasarruf etmek için for döngüsüne girebilirsiniz.
Holloway

1
@Geobits, 157 yaptım
Holloway

1
@ Geobit'ler bir windows makinesinde mi çalışıyorsunuz? Pencerelerdeki satır kodlamaları sadece \ n yerine sık sık \ r \ n'dir. Bu yüzden bizim için 157 byte gösterebilir, fakat 160 sizin için.
Rob Watts

2
Bu sadece 160 . Muhtemelen üç atladığı \içinde \n... kaçan nedeniyle
Doktoru

1
Değerini şunun biçine taşıyabilirsiniz print: %öncekinden daha yüksek önceliğe sahiptir *.
FryAmTheEggman

29

CJam, 151 140 135 132 130 128 bayt (Tweetable)

"TeighYrum.TnineYfun.Ttwo-thousands are a time to run
a civilized classroom.""YT"["teen-hundreds were a time for ""
The "]erAF+*

Burada dene

Bunu unicode'a dönüştürerek bunu 110 byte'a kadar kısaltabiliyorum, ancak bu diğer unicode çözümünü geçmediği için onu koymak istemem :)


23
Hey, o :Difadenin orada ne işi var? Gözaltındayken arkadaşlarına mesaj mı atıyorsun? Müdürün ofisine git!
Doorknob

2
@Doorknob: D: P
Doktoru

Belki Ttakma ad oluşturabilir .\nThe , sonra bunun çıkış dizesinin başlangıcından elde ettiği fazladan satırı kaldırabilirsiniz (cjam-fu'm bunu kolayca yapıp yapamayacağınızı bulmak için yeterince iyi değildir)

@professorfish, kaydettiğinden daha fazla byte tüketir. mothereff.in/… *% 28Y% 2F% 28% 40 \
Optimizer

Nitpicking: ASCII uyumlu bir kod sayfasının 128 baytının Unicode ile ilgisi yoktur.
Dennis,

23

PHP, 0 bayt



İthalatları saymadan herhangi bir ithalatı ve harici kütüphaneyi kullanabilirsiniz.

Bu kodu çalıştırmak için data://text/plain,<?php...classroom.\n";bununla adlandırılmış bir kütüphaneyi içe aktarmalısınız :

<?php require_once 'data://text/plain,<?php
  for($i=ord("z");$i>ord("a");$i--)
    echo "The eighteen-hundreds were a time for rum.
The nineteen-hundreds were a time for fun.
The two-thousands are a time to run
a civilized classroom.
";'; ?>

Ve sende allow_url_includeetkin olmalı php.ini.

Dennis sayesinde artık numara veya uzantı yok.


9
İlk içgüdüm boşluklar hakkında bir şeyler bağırmaktı, ama bu cevap aslında kendi kendine yettiğinden beri, bunun Python cevapları için kasıtlı olarak oluşturulan bir boşluktan istifade etmek için PHP kullanmanın akıllıca bir yolu olduğunu düşünüyorum. Zaten hile yaptığınız için, sadece shrequire_once "data://text/plain,The eighteen-hundreds..."; gerektirmeyen , sayı kullanmayan ve hala 0 bayt olan kullanabilirsiniz.
Dennis,

10
Bunu yaratıcılık için oylayacağım ama bunu kabul etmeyeceğim.
hmatt1

14

Yakut, 185 180 176 bayt

EDIT: String enterpolasyonu, teşekkürler @ britishtea

Bu benim ilk golf oyunum ve ben bir Rubist'ten fazla değilim (ama kesinlikle Ruby'yi seviyorum). Neyse, bu o (kısaltılmış, Doorknob'un önerisi).

t=' were a time for '
s="The eighteen-hundreds#{t}rum.
The nineteen-hundreds#{t}fun.
The two-thousands are a time to run
a civilized classroom."
s.split.size.next.times{puts s}

1
Bunu yinelenen sözcüklerin / kelime gruplarının bazılarını String enterpolasyonu ile değiştirerek daha da golf oynayabilirsiniz.
britishtea

3
Fark için +1 (neredeyse) dizesinde 25 kelime var
Digital Trauma

2
s.split.size.next5 karakter kaydeder (bölünecek alanı belirtmeniz gerekmez).
Doorknob

Ruby'yi tanımıyorum ama (s.split.size+1).times1 byte daha kısa olmaz mıydı?
seequ

1
@Sieg sayı kullanamaz!
rjdown

13

Java 249 231 230 222

İlk cevabım! Neden bu kadar iyi bildiğim dili kullanmaya başlamıyorum.

class c{public static void main(String[]g){for(int a='!';a++<':';out.println("The eighxrum.\nThe ninexfun.\nThe two-thousands are a time to run\na civilized classroom.".replaceAll("x","teen-hundreds were a time for ")));}}

Ungolfed

import static java.lang.System.*;
class c
{
    public static void main(String[]g)
    {
        for(int a='!';a++<':';out.println("The eighxrum.\nThe ninexfun.\nThe two-thousands are a time to run\na civilized classroom.".replaceAll("x","teen-hundreds were a time for ")));
    }
}

9
Hoşgeldiniz! publicSınıfınızdan kurtulup argstek bir karaktere kadar kısaltabilirsiniz . Ayrıca a++<':', ayrı olarak artırmak yerine de yapabilirsiniz . OP, ithalatı saymadığından import static java.lang.System.*;, biraz daha fazla tasarruf edebilirsiniz , sonra yazmanız gerekmez System.(önemli olduğu yerlerde). Bunu yaparken, 230 civarında bir noktaya indirdim . Henüz yapmadıysanız , Java ipuçları sayfasına bakmak isteyebilirsiniz .
Geobits

@Optimizer Teşekkürler! Sadece yukarıdaki grevde görmedim.
Aydınlık

@Luminous NP :)
Optimizer

@Geobits Teşekkürler! Görünüşe göre, kodu doğrudan döngünün içine de yapıştırabilirsiniz. Hiçbir şey ekleme veya kaldırmadı, ancak sanırım bu şekilde daha çok golf oynuyor.
Aydınlık

4
Döngü kötüye kullanımı oldukça yaygındır. Vücudunuzda birden fazla ifadeniz varsa , tek bir karakter kaydetmek için birisini dışına ve geri kalanını içine koyabilirsiniz (çünkü yine de dışında bir noktalı virgül kullanmanız gerekir). Birçok golf bu şekilde büyük bir döngü haline gelir. Ayrıca, "daha golf gibi görünüyor", tasarruf etmese bile, bir şeyi yapmanın tamamen geçerli bir nedenidir: P
Geobits

11

C 171

a='a';b="teen-hundreds were a time for ";main(){for(;a++<'z';)printf("The eigh%srum.\nThe nine%sfun.\nThe two-thousands are a time to run\na civilized classroom.\n",b,b);}

İlk başta, diğer C çözümünden daha iyi olan basit sürümü (189 bytes) denedim ...

main(a){for(a='a';a<'z';++a)printf("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}

daha sonra biraz optimize ettik ...


1
Huh, bu çok hoş. Statik değişkenlerin kendilerine atanan string değişmezleriyle dolaylı olarak typeları olduğunu anlamadım char *.
FireFly

@FireFly GCC avarsayılan olarak iyi bir şekilde derlenir çünkü varsayılan olarak intbir chardeğeri kabul edebilir . Bir şey demeden bsürece hoşuma gitmiyor char[]. VX, hangi derleyiciyi kullanıyorsun?
Level River St

bolduğunu intçok ama edebi dize gösterici tutar. Tamamen GCC'de tamamdır (benim makinemde 4.8.2 var).
VX

1
for(a='a';++a<'z';)
bkz:

9

JavaScript, ES6, 174 172 154 bayt

@ Edc65'in replacenumarası. Teşekkürler!

alert((d="teen-hundreds were a time").replace(/./g,`The eigh${d} for rum.
The nine${d} for fun.
two-thousands are a time to run
a civilized classroom.
`))

Şablon dizgilerinin kullanımı nedeniyle yalnızca en son Firefox'ta (34 ve üstü) çalışır.


@Nijikokun Bunun 25 yerine 30 tekrarlamaya neden olacağını biliyorsun, değil mi?
Doktoru

Son 34 yaşımdan beri ff 34'ün beta veya başka bir şey olduğunu tahmin ediyorum (sadece kontrol edildi) ve 33
yaşında

8

BrainFuck ( 1.597 karakter )

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

Birisi ilgileniyorsa, bu hala daha fazla golf olabilir.

Bunu test edebilir ve tüm kuralları yerine getirirken doğru çıktı verdiğini onaylayabilirsiniz.


5
Bu nedir? Sana cümleleri yazmanı söyledim, rastgele dalgalanmalar değil! Burada hiç kelime bile yok!
Riking

5
Ummm .. Amaç bence en az karakter kullanmak . Kesinlikle "anti-goal" :-)
kazandınız

7

Perl - 145

Çok fazla cevap gördüğüme sevindim! İşte bir Perl çözümü.

$s="teen-hundreds were a time for";print"The eigh$s rum.
The nine$s fun.
The two-thousands are a time to run
a civilized classroom.
"for b..z

7

Matematikten çok nefret ettiği için, neden Mathematica değil (177)

   a = "teen-hundreds were a time for "; Do["The eigh" <> a <> "rum.
   The nine" <> a <> "fun.
   The two-thousands are a time to run a civilized classroom." // Print, {StringLength@a}]

6

Javascript ES6, 198 193 bayt

m=Math;alert("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n".repeat(~~(m.exp(m.PI)+m.E)))

Öğretmeniniz numara istemiyor, ancak İngilizce öğretmeni oldukları için ne Math.floor(Math.exp(Math.PI)+Math.E)anlama geldiklerini bilmiyorlar .

Daha okunaklı:

alert("The eighteen-hundreds were a time for rum.\n\
 The nineteen-hundreds were a time for fun.\n\
 The two-thousands are a time to run\na civilized\n classroom.".repeat(Math.floor(Math.exp(Math.PI)+Math.E)))

En son firefox'ta çalıştırılmalıdır


1
Sonunda yeni bir satır eksik olduğundan, ilk ve son satırlara 75 satır eklenir
edc65

Kuralları XKCD'nin e ^ pi referansıyla bükdüğü için +1, ama -pi ... yerine + e ile ödüllendireceğim. Bravo!
WallyWest

-4 bayt:with(Math)alert("long string here".repeat(exp(PI)+E|[]))
nderscore 24:14

Oh, peki, (q='aaaaa'.length)*q
Math'ı

@ Edc65 hakkında da yorum yap! Bunu kullan "\x18".charCodeAt():! (oku yukarı ok tuşla ve bir ton tasarruf edeceksin!)
Ismael Miguel

6

Javascript - 178 Bayt 176 Bayt

İlk golfüm, biraz titreyen operatörler ile bir şans vereceğimi düşündü, umduğum kadar iyi sonuçlanmadı, ama oh iyi!

c="teen-hundreds were a time for "
b=!!c
alert(Array((b+b+b<<b+b)+b<<b).join("The eigh"+c+"rum.\nThe nine"+c+"fun.\nThe two-thousands are a time to run\na civilized classroom.\n"))

Zaten gözaltında olduğum ve açıkça kendim gibi davranmakta zorlandığımdan beri ... Javascript - 71 Bytes

Bu muhtemelen beni daha derin bir belaya sokacak, ancak, eğer zaten kendimi gözaltına aldıysam, ve gözaltımı aldatmayı planlıyorum, görünüşe göre sınıfta nasıl davranmam gerektiğine dair iyi bir yargılamam. Belki bir tanesini öğretmenime çekebilirsem, diğer golfçülere bir tane çekebilirim.

b=+true;alert( Array((b+b+b<<b+b)+b<<b).join($('code')[+!b].innerHTML))

Hızlı! Chrome / IE 11 / Firebug kullanıcıları, ŞİMDİ konsollarınızı açın ve deneyin.

(Lütfen beni çok fazla incitme, komik olduğunu düşündüm)


1
72 eğlencelidir. 176 birçok kez yanlıştır: Array (25) .join () 24 tekrar verir ve cümlenin sonunda yeni bir satır eksik. Hepsi 24 * 3 = 100 yerine (72 tembel çocuk!) 72 satır
edc65

AUGH, tamam düzeltildi. Şimdi 178 ve 71.
Sidney

1
"Een-yüzlerce ... for" da t ve sondaki bir boşluk ekleyerek 2 bayt tasarruf edebilirsiniz.
Aydınlık

İkinci kod ne yapıyor?
justhalf

1
@justhalf, Görünüşe göre SO ağının kullandığı ortak bir JavaScript kütüphanesi olan JQuery'yi kullanır. $ Aslında, pek çok şeyin yanı sıra, DOM öğesinin seçiminde çalışmaların çoğunu alan bir işlevdir. Bu durumda $ ('<selector>') kullanarak, 'code' etiketine sahip tüm öğeler, tüm öğeleri içeren bir nesne alıyorum. [+! B] kullanarak, false'nin tamsayı değerini aldım, bu sıfırdır, bu yüzden OP'nin ilk kod bloğu olan 0 indeksini seçerim, öğretmenlerin en sevdiği şeydir.
Sidney

5

C # - 229 216 Bayt

Ücretsiz usingFTW!

using c=System.Console;
class S{static void Main(){var a="teen-hundreds were a time";for(int b=a.Length,i=b-b;i++<b;)c.Write("The eigh"+a+" for rum.\nThe nine"+a+" for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}}

Alternatif, aynı bayt sayısı (yine de daha fazla usingsuistimal)

using i=System.Int32;
using c=System.Console;
class S{static void Main(){var a="teen-hundreds were a time";for(int b=new i();b++<a.Length;)c.Write("The eigh"+a+" for rum.\nThe nine"+a+" for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}}

4
~~ (╯ ° □ °) ╯︵ ┻━┻
William Barbosa

Eklemek için "için"a
FryAmTheEggman

@FryAmTheEggman string 25 karakter uzunluğundadır, 25 sayısını gizli olarak almak için kullanıyor. Bununla birlikte, bu yöntemi, karakterleri birbirinden ( ':'-'!'== 25) çıkarmaktan daha basit olan a.Lengthve önerdiğiniz şekilde eklenmesine izin verecek şekilde değiştirerek çıkarabilir . (Alternatif olarak, diğer cevapların göründüğü gibi yapın, ve sadece , hepimizin aynı karakterleri seçtiğimiz komik arasında) !ve döngü yapın :)
VisualMelon

@VisualMelon Whoops, tamamen haklısın.
FryAmTheEggman

1
Kullanımlar sayılmadığından beri yapabileceğimi düşündüm, OP bunu netleştirdi mi?
William Barbosa

5

Befunge-93, 268 260 256 (ızgara boyutu: 72x6 = 432)

#v"K">:!#@_v>$"enin">,,,,::-" rof emit a erew sderdnuh neet">:#,_$::!!-#
, ,,,"The "<|\!\%-"\^"::%-" #":-!!:
   -"#-"-::$_ "hgie"^v1"two-thousands are a time to run"
$_$  "nuf"v"rum"
v1-"##",,,<      >:#,_"moorssalc dezilivic a"1
_# < ^,,\-"AK."$_,#!:

Bu benim ilk golf oynamam, bu yüzden bu problem için henüz yapılmamış bir dili deneyeceğimi düşündüm, çünkü başka bir şey eklemeyecektim. Befunge-93 uyumlu olduğundan (80x25 ızgaraya sığar ve yalnızca Befunge-93 talimatlarını kullanır), Befunge-98'de de çalışması gerekir. Sadece bu durumda, işaretçinin boşluk dışındaki komut olmayan karakterlerin üzerinden geçmesini de önledim. Spesifikasyonun bu karakterleri no-ops olarak tanımlayıp tanımlamadığını hatırlayamadım ve MY kodunda nazal şeytanlar olmayacak .

Gerçekten Befunge kodunu çözemezsin. Burada dikkat edilmesi gereken en önemli şey, Befunge'nin karakterleri yığına ASCII değerleri olarak ittiği ve sayılara kelimenin tam anlamıyla atıfta bulunmadan gönderme yapması nispeten basit. "K"Sol üst tekrarlar sayısına atıfta bulunarak, 75, tekrar başına "" maddelerin sayısı; Her dolaşıma baskı yapmak için hangi yolun kullanılacağını belirlemek amacıyla bu sayının üzerinde modül ve bazı diğer donanımları kullanıyorum. ::-sıfır-sonlu dizeler için yararlı sıfır için güzel bir deyimdir; Burada iki kez kullanıyorum.

Bazen işaretçinin bir string tanımladığım bir yerden geçmesi gerekir, bu yüzden bazı noktalarda belirli sayıları elde etmek için kullanılan belirli karakter seçimleri.

Çok sayıda Befunge tercümanı hakkında güzel olan şey, göstergenin etrafındaki dart işaretini izleyebilmeniz ve aynı zamanda yığında hangi değerlerin olduğunu görebilmenizdir. Bu şekilde adım adım ilerleyebilir ve programın nasıl çalıştığını görebilirsiniz. Kendi tercih ettiğiniz Befunge tercümanınız yoksa, http://befungius.aurlien.net/ adresini kullanmanızı tavsiye ederim .

Bu muhtemelen biraz (veya daha fazla) daha fazla ayrıştırılabilir. Lütfen bana geri bildirim verin! Daha iyi bir açıklama yapmam gerekirse, biri bana bildirir; Ben bunun için yeniyim.

Düzenleme - Program sonlandığında gereksiz yere yönlendirmenin son sırasına getirilerek birkaç bayttan sıyrılıp ( eskiden @olduğu yeri koyarak ^).

Başka bir düzenleme - daha çok hile ile, çeşitli yerlerde biraz daha bayt, tıraş. (Befunge cevaplarıyla trend gibi gözüktüğü gibi ızgara boyutunu da ekledi.)


Hey Kasran codegolf borsasına hoş geldiniz! Bu cevaplar harika görünüyor. Açıklamanız iyi ve sizler için herkesin bir derleyicisinin olmadığı tuhaf diller için gerçekten yararlı olan bir Befunge tercümanı ile bağlantı kuruyorsunuz (insanlar "bunu burada çalıştır" gibi şeyler yaparlar).
hmatt1

Befunge gerçekten zor bir dildir ve yazı yazarken kodun boyutunu aklınızda tutmanız gerekir. Kodunuz harika görünüyor ve çalışıyor. Ama bir re a time yere kaydedersen boyutunu küçültür mü?
Ismael Miguel,

Bildiğim herhangi bir Funge-98'e özgü talimat veya davranış kullanmıyorum, ancak bu cevabı yazdığımdan beri Befungius tercümanının bazı davranışlarının standart olmadığını, yani #atlamak için satırın bir ucunu kullanarak öğrendim. diğer uçtaki karakter ( örneğin, CCBI'de , #sadece , bu uçbirimdeki karakter ile aradaki sonsuz boşluğu atlar). Geri dönüp bu bildiriyi aklımdan geçirerek düzeltmedim.
Kasran

İçinde 1izin verilmeyen birkaç basamak var
Jo King,

4

Pyth 135 136 140

*ltG%"The eigh%srum%snine%sfun%stwo-thousands are a time to run\na civilized classroom.\n"*hhZ("teen-hundreds were a time for "".\nThe 

Sondaki boşluğa dikkat edin.

Dizeyi oluşturmak için @Geobits ve Python'daki yorumcu arkadaşlarıyla aynı numarayı kullanır . Şimdi bu cevabın bir kısmını da kullanıyor .

Bu yerleşik değişkeni kullanır Giçeren, abcdefghijklmnopqrstuvwxyzve 25 çıktı üretmek için uzunluğundan daha az bir alır.


1
Bu 135 yerine 136 bayt gibi görünüyor
Optimizer

1
@Optimizer Üzgünüm, kendi notlarımı okumam gerekiyor: Oraya kendim yapıştırdığımda kalan boşluğu unuttum: S
FryAmTheEggman

4

Yakut - 152 141

puts"The eight#{e="een-hundreds were a time for "}rum.
The ninet#{e}fun.
The two-thousands are a time to run
a civilized classroom.
"*(?X-??)

http://repl.it/2Om/6


1
1.8 karakter karakterleri akıllıca kullanımı! Kullanılacak mümkün olabilir String#*çizgileri 25 kere yerine tekrarlamak Integer#times.
britishtea

@ britishtea - bir muamele çalıştı :)
Mikey

1
Önce satırları atayarak birkaç byte'ı tıraş edebilirsiniz. Koyar ve bir dize değişmezi arasındaki boşluk isteğe bağlıdır ( puts"hi"yasaldır).
britishtea

İnterpolasyonun içine e atamak hoş bir dokunuş.
Wayne Conrad

3

Python, 165 bayt

h="hundreds were a time for "
t="The "
for i in h:print t+"eighteen-"+h+"rum.\n"+t+"nineteen-"+h+"fun.\n"+t+"two-thousands are a time to run\na civilized classroom."

Gerçekten güzelce çalıştı, h'nin uzunluğu 25, kasıtlı değildi. =)


3

Python 2 - 143

Aptal bir cevap:

from this import i
a="teen-hundreds were a time for ",".\nThe "
print"The eigh%srum%snine%sfun%stwo-thousands are a time to run\na civilized classroom.\n"%(a+a)*i

Tam sayımın 162 olduğunu not edin from this import i.

Pyth stratejimdeki benzer yenilemeleri kullanıyor, ancak bundan içe aktarmanın komikliğini keşfettikten sonra bunu göndereme dayanamıyorum :)


+1 Kullanmak için from this import i! Bunu nasıl bildin?
Beta Decay

1
@ BetaDecay Gerçekten sıkıldım ve pitonun zenini okumaya karar verdim, bu yüzden tercümanıma gittim ve yazdım import this. Sonra düşündüm ki: "Modülde başka neler olabilir this?" Ben de aradım dir(this). Lo ve sözlükten bir yukarı bozuk dize ve birlikte seyretmek "!"değişken, 25. eşit bir sayısal sabit vardı ...
FryAmTheEggman

3

PHP (175 157156 bayt; Unix EOF ile birlikte 152):

En çok oy alan çözüm değil, elbette işi yapıyor ve bazı denemelerden daha küçük.

İşte kod:

$a=a;$f='re a time';$r="teen-hundreds we$f for";while($a++<z)echo"The eigh$r rum.
The nine$r fun.
The two-thousands a$f to run
a civilized classroom.
";

Eski versiyon:

$a=a;while($a++!=z)echo"The eighteen-hundreds were a time for rum.
The nineteen-hundreds were a time for fun.
The two-thousands are a time to run
a civilized classroom.
";

Bu işe yarıyor, çünkü php karakterleri değiştiriyor ve biz olup olmadığını kontrol ediyoruz ve duruyoruz z.

(Bir merak, php ulaştığında z, o zaman gider olmasıdır aa.)


3
Buradaki genel kural, yeni satırları yalnızca bir bayt olarak saymaktır, belki de diliniz çok inatçı olmadığı sürece, yalnızca PHP için geçerli olmayan CRLF'yi kabul eder.
nyuszika7h

3

Python 2 - 155

Not: Kontrol karakterleri SE’de görünmediğinden, onu değiştirdim\x19.

a,b='\nThe ','teen-hundreds were a time for '
print(a+'eigh'+b+'rum.'+a+'nine'+b+'fun.'+a+'two-thousands are a time to run\na civilized classroom.')*ord('\x19')

Baz 64 sürümü:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=

İthalatla ilgili from string import *olarak, Python
FireFly

1
"Teen" i b.
FryAmTheEggman

2
[]Parantezleri ilk satırda çıkarabilirsiniz , bu da örtük olarak bir tuple oluşturur ve ardından ambalajından çıkarır.
Doorknob

Ayrıcaord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman

1
@Dennis OP'nin en son düzenlemesi önde gelen yeni hatlara izin verir.
Beta Decay

3

LiveScript - 181

p=(a,b)->"The #{a}teen-hundreds were a time for #b.\n"
each console.log,map (->(p \eigh \rum)+(p \nine \fun)+'The two-thousands are a time to run\na civilized classroom.'),[\A to\Y]

Gerekli ithalat:

{each, map} = require 'prelude-ls'

Eğer node.js altında çalıştırmak istiyorsanız, yüklemek LiveScript( değil livescript ) ve prelude-ls, NPM paketleri yerine alertile console.logve çalıştırmak lsc prog.ls, nerede prog.lsprogram içermektedir.


13
Kurallara bakınız: "Karakterleri kullanamazsınız 0123456789"
Paul R,

2
Güzel yakalama, düzeltildi.
nyuszika7h

2

T-SQL: 206

İfadeyi seçerek 25 satır üretmek için beş satırdaki bir çapraz birleşimi kullanır. Satır sonları çıktı için önemlidir.

with c as(SELECT\ N FROM(VALUES(\),($),($),($),($))A(B))SELECT REPLACE('The eigh$rum.
The nine$fun.
The two-thousands are a time to run
a civilized classroom.','$','teen-hundreds were a time for ')FROM c a,c b

2

Bash, 151 bayt

Hemen hemen kendi cevabınızın düz bir limanı

t="teen-hundreds were a time for"
for i in {a..y};{
echo "The eigh$t rum.
The nine$t fun.
The two-thousands are a time to run
a civilized classroom."
}

2

C, 196 karakter

Bu iyi bir 'C için kolay bir iş değildir. "% Steen-100s ..." modelini düzeltmek beni iki karakterden kurtarıyor .

Açıklık için boşluk, sayılmaz.

#include <stdio.h>
main(){
  for (char*p="The %steen-hundreds were a time for %s.\n",
           *s="The two-thousands are a time to run\na civilized classroom.",
           *q=p;
       *q++ - 'a';
       puts(s))
   printf(p,"eigh","rum"), printf(p,"nine","fun");
}

2

Ruby, 145

?K.upto(?c){puts"The eigh#{x="teen-hundreds we#{t="re a time "}for "}rum.
The nine#{x}fun.
The two-thousands a#{t}to run
a civilized classroom."}

açıklama

  • String#uptoÇizgileri 25 kez yazdırmak için kullanın . Aralık "K".."c", 25 karakterdir.
  • Satırları kısaltmak için temel String enterpolasyonu kullanın.

2
#{a="The "}aslında sana daha fazla karaktere mal oluyor! #{a}uzunluğu aynıdırThe
Mikey

2

Raket 173

(let([x"teen-hundreds were a time for "])(for([z(+ #xa #xf)])(displayln(~a"The eigh"x"rum.\nThe nine"x"fun.\nThe two-thousands are a time to run\na civilized classroom."))))

Ungolfed:

(let ([x "teen-hundreds were a time for "])
  (for([z(+ #xa #xf)])
    (displayln (~a "The eigh"x"rum.\nThe nine"x"fun.\nThe two-thousands are a
     time to run\na civilized classroom."))))

2

C, 215 203 199 bayt

main(a){a<<='\xC'+'\xD';while(a>>=!!a)printf("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");}

Ungolfed

main(a)
{
  a<<='\xC'+'\xD';
  while(a>>=!!a)
    printf("The eighteen-hundreds were a time for rum.\nThe nineteen-hundreds were a time for fun.\nThe two-thousands are a time to run\na civilized classroom.\n");
}

Herhangi bir sayı olmadan yinelemek için bit kaydırma kullandım.

a<<='\xC'+'\xD' a'yı 0b1'e ayarlar [25 sıfır]

a>>=!!a Döngüyü yinelediğimiz her seferde bir bit sağa kayar

Düzenleme: a eşittir argc, yani program argüman olmadan çalıştırıldığında değeri zaten 1'dir. değişmişa>>='\xB'-'\xA' için a>>=!!'\xA'4 bayt kısa olan. Ayrıca metin sadece 24 kez görüntülendi. Onu düzeltti. Ekstra parantez içinde kaldırıldı while.

Düzenleme 2: değişmiş !!'\xA'için !!a. İş gibi görünüyor ve 4 bayt kurtarıyor


1
Daha putsfazla bayt kaydetmek için kullanabilirsiniz .
Spikatrix

2

Rant, 191 bayt

En kısa çözüm değil, ama yine de havalı. İlk üç satırı yazmak için bir alt yordam yazdım ve bunu boş bir argümanla çağırmak için tasarladım ve 25 karakter uzunluğunda bir dize döndürdüm. Daha sonra uzunluğunu tekrarlayıcıya iletiyorum.

[pin:][$[_:a]:The [arg:a][sync:;ordered]{thousands a|teen-hundreds we}re a time ][r:[len:[$_:]]]{[step:][$_:eigh]for rum.\N[$_:nine]for fun.\N[step:][$_:two-]to run\Na civilized classroom.\N}

Ungolfed:

[pin:]
[$[_:a]:The [arg:a][sync:;ordered]{thousands a|teen-hundreds we}re a time ]
[r:[len:[$_:]]]
{
    [step:]
    [$_:eigh]for rum.\N
    [$_:nine]for fun.\N
    [step:]
    [$_:two-]to run\N
    a civilized classroom.\N
}

Çevrimiçi deneyin

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.