Tulis baris di detensi

63

pengantar

Berita buruk teman-teman - Anda ditahan. Guru bahasa Inggris Anda tidak memahami situs ini dan ingin Anda "berhenti mengerjakan matematika di perangkat digital Anda, ini kelas bahasa Inggris!"

Dia memvonis Anda untuk menulis pepatah favoritnya di papan tulis 25 kali, yang akan memberikan total 100 baris di papan tulis.

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.

Beruntung bagi Anda, Anda adalah pembaca yang rajin (belum lagi pegolf ahli kode)! Anda telah membaca tentang trik yang mungkin membuat Anda mudah.

foxtrot

(Foxtrot oleh Bill Amend)

Sayangnya untuk Jason, itu tidak berhasil. Tapi Anda punya ide yang lebih baik! Karena guru bahasa Inggris Anda mengira Anda sedang mengerjakan matematika, jika Anda mengabaikan semua angka dari program Anda, itu mungkin berhasil! Anda juga ingin menjaga program Anda sesingkat mungkin karena Anda seorang siswa yang malas dan tidak ingin banyak menulis di papan tulis.

Tulis program yang mematuhi aturan berikut:

  • Program Anda harus mencetak 4 baris di atas 25 kali. Garis-garis harus ditampilkan dalam urutan itu, berulang. Total tepat 100 baris output (baris baru di akhir atau baris baru di awal tidak apa-apa).
  • Anda tidak dapat menggunakan karakter 0123456789. Guru Anda menjadi bingung oleh matematika dan akan memanggil Anda keluar!
  • Anda dapat menggunakan impor dan perpustakaan eksternal tanpa menghitung impor. Guru bahasa Inggris Anda tidak tahu tentang pemrograman. Jason bisa menyelamatkan banyak pekerjaan dengan tidak menulis #include <stdio.h>dan Anda tidak ingin melakukan kesalahan yang sama!
  • Skor program Anda dengan bytehitungan. Menang skor terendah!
hmatt1
sumber
2
Jika teksnya berbunyi "1900-an", menulis hasilnya akan sedikit lebih rumit.
Ingo Bürk
30
ke comix: dia tidak mencetak \ n's, dan loop dari 1 cukup canggung (seperti terhadap sifat C) ...
VX
11
@VX Bill Amend adalah Pascal yang lama mati-keras, dan setiap kali dia menulis C itu menjadi sangat jelas.
lembut
5
Ini terdengar seperti salah satu guru bahasa Inggris saya yang lama.
Kaz Wolfe
2
Larangan + akan masuk akal di sini, tapi mungkin itu terlalu sulit.
Pharap

Jawaban:

9

CJam, 109 107 106 104 103 byte

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+*

Di atas adalah dump xxd reversibel.

Pengujian

Anda dapat membuat dan menjalankan kode di atas dengan menjalankan ini di juru bahasa online :

"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+*"]:+~

Untuk melihat kode yang dihasilkan (tanpa menjalankannya), hapus final ~.

Untuk menghitung jumlah byte (satu karakter adalah satu byte pada ISO-8859-1), ganti final ~dengan a ,.

Versi yang dapat dicetak (122 byte)

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

Setelah mendorong string (S), berikut ini dijalankan:

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

Golf moar

Setelah mendorong string yang tidak diinginkan (U), berikut ini dijalankan:

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]]      ";

Ini mendorong string versi yang dapat dicetak. Sisa kode berfungsi seperti sebelumnya.

Dennis
sumber
Dengan menggunakan kode, saya mendapatkan kode yang dihasilkan ini yang 144 byte. Apakah saya melakukan sesuatu yang salah?
Pengoptimal
Pengkodean UTF-8 akan menghasilkan jumlah byte yang lebih tinggi, ya. Dengan ISO-8859-1, jumlah byte adalah 109. Anda dapat mengganti ~dengan ,untuk memverifikasi.
Dennis
2
Saya mendapatkan hasil yang tepat yang dilakukan Pengoptimal, tetapi menambahkan ]:+~membuatnya berfungsi. Mengapa Anda tidak menambahkannya saja ke kode Anda?
Luminous
1
@ user23013: Juru bahasa Java menghargai $ LANG untuk I / O. Secara internal, CJam hanya memiliki 16-bit chars.
Dennis
3
Anda sebenarnya tidak perlu unicode-ize solusi Anda karena tanpa kompresi itu sendiri hanya 124 byte, mengalahkan semua yang lain.
Pengoptimal
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"))

Uji di konsol FireFox / FireBug.

edc65
sumber
19
Ini jenius!
Pengoptimal
1
Yup, mengganti setiap karakter dengan string yang lebih besar. Membuat 25 salinan string yang lebih besar.
Pengoptimal
1
@Optimizer Itu adalah jenius :)
FryAmTheEggman
3
@Malvolio Sebenarnya bagian yang diulang adalah 30 karakter. Dan saya bisa menunjukkan serangkaian upaya, menambahkan dan memotong kata-kata dan mengganti pengganti sebelum menemukan solusi sederhana ini.
edc65
1
@ IsmaelMiguel Saya pikir maksud Anda browser ES6. Masalah: pada saat tantangan ini diposting, string template tidak diterapkan di browser apa pun: Firefox adalah yang pertama - rel 34, Desember pertama 2014 - lalu Chrome, Maret 2015. Tetapi bahkan tanpa string template, scoure Anda akan menjadi 153, lebih baik daripada milikku . Anda harus mempostingnya sebagai jawaban.
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)

Saya tidak banyak python, tapi ini sepertinya cukup pendek untuk saya.

Sunting: Jadi saya salah, itu tidak pendek sama sekali! Terima kasih atas bantuan dalam komentar: D

Geobit
sumber
1
Anda bisa kehilangan baris baru dan membuat indentasi pada for loop untuk menyimpan beberapa byte.
Holloway
1
@ Geobits, saya membuat itu 157
Holloway
1
@ Geobits Anda menjalankan mesin windows? Pengkodean baris di windows sering \ r \ n bukan hanya \ n. Mungkin itu sebabnya kami menunjukkan 157 byte untuk kami, tetapi 160 byte untuk Anda.
Rob Watts
2
Ini hanya 160 . Anda mungkin melewatkan tiga \di \nkarena melarikan diri ...
Optimizer
1
Anda dapat memindahkan nilai untuk bke print: %memiliki prioritas lebih tinggi daripada *.
FryAmTheEggman
29

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

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

Coba di sini

Saya dapat mempersingkat ini menjadi 110 byte dengan mengonversinya menjadi unicode, tetapi karena itu tidak mengalahkan solusi unicode lainnya, saya lebih suka tidak mengatakannya :)

Pengoptimal
sumber
23
Hei, apa yang :Ddilakukan emoticon di sana ?! Apakah Anda mengirim SMS kepada teman Anda selama penahanan? Pergi ke kantor kepala sekolah!
Gagang Pintu
2
@Doorknob: D: P
Pengoptimal
Mungkin Anda bisa membuat Talias untuk .\nThe , lalu menghapus baris tambahan yang dihasilkan dari awal string output (cjam-fu saya tidak cukup baik untuk mengetahui apakah Anda dapat dengan mudah melakukan itu)
@professorfish yang akhirnya menghabiskan lebih banyak byte daripada menghemat. mothereff.in/… *% 28Y% 2F% 28% 40 \
Pengoptimal
Nitpicking: Menggunakan 128 byte atas halaman kode yang kompatibel dengan ASCII tidak ada hubungannya dengan Unicode.
Dennis
23

PHP, 0 byte



Anda dapat menggunakan impor dan perpustakaan eksternal tanpa menghitung impor.

Untuk menjalankan kode ini, Anda harus mengimpor perpustakaan yang dipanggil data://text/plain,<?php...classroom.\n";dengan ini:

<?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.
";'; ?>

Dan Anda harus allow_url_includemengaktifkan di php.ini.

Tidak ada lagi angka atau ekstensi, terima kasih untuk Dennis.

jimmy23013
sumber
9
Insting pertama saya adalah meneriakkan sesuatu tentang celah, tetapi karena jawaban ini sebenarnya mandiri, saya pikir ini adalah cara cerdas menggunakan PHP untuk mengeksploitasi celah yang telah dibuat dengan sengaja untuk jawaban Python. Karena Anda sudah curang, Anda bisa saja menggunakan require_once "data://text/plain,The eighteen-hundreds...";, yang tidak memerlukan sh , tidak menggunakan angka dan masih 0 byte.
Dennis
10
Saya akan meningkatkan ini untuk kreativitas tetapi saya tidak akan menerima ini.
hmatt1
14

Rubi, 185 180 176 byte

EDIT: Interpolasi string, terima kasih @ britishtea

Ini golf pertama saya, dan saya bukan Rubist (tapi saya sangat suka Ruby). Bagaimanapun, ini dia (disingkat, saran Doorknob).

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}
jmm
sumber
1
Anda dapat menurunkan ini lebih jauh dengan mengganti beberapa kata / grup kata yang berulang dengan interpolasi String.
britishtea
3
+1 untuk memperhatikan ada (hampir) 25 kata dalam string
Digital Trauma
2
s.split.size.nextmenghemat 5 karakter (Anda tidak perlu menentukan ruang untuk dibagi).
Gagang Pintu
Saya tidak tahu Ruby, tetapi tidak (s.split.size+1).timesakan lebih pendek 1 byte?
seequ
1
@Sieg tidak diizinkan menggunakan angka!
rjdown
13

Jawa 249 231 230 222

Jawaban pertamaku! Mengapa tidak mulai menggunakan bahasa yang saya kenal dengan baik.

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 ")));}}

Tidak disatukan

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 ")));
    }
}
Bercahaya
sumber
9
Selamat datang! Anda dapat menyingkirkan publicuntuk kelas Anda dan menyingkat argsmenjadi satu karakter. Anda juga dapat melakukan a++<':'alih - alih menambahnya secara terpisah. Karena OP tidak menghitung impor, Anda dapat menyimpan sedikit lebih banyak dengan import static java.lang.System.*;, maka Anda tidak perlu menulis System.nanti (di mana ia diperhitungkan). Melakukannya, saya mendapatkannya sekitar 230. Anda mungkin ingin melihat halaman tips Java jika Anda belum.
Geobits
@Optimizer Terima kasih! Saya hanya tidak melihat coretan di atas.
Luminous
@Luminous NP :)
Optimizer
@ Geobits Terima kasih! Rupanya, Anda juga dapat menempel kode langsung ke loop itu sendiri. Tidak menambah atau menghapus apa pun, tapi saya pikir itu terlihat lebih seperti golf.
Luminous
4
Penyalahgunaan loop cukup umum. Jika Anda memiliki beberapa pernyataan di dalam tubuh, Anda bisa meletakkan satu di luar dan sisanya di dalam untuk menyimpan satu karakter (karena Anda memerlukan titik koma di luar). Banyak golf akhirnya menjadi satu lingkaran besar seperti itu. Juga, "terlihat lebih golf" adalah alasan yang benar-benar valid untuk melakukan apa pun bahkan jika itu tidak menyelamatkan: 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);}

Pada awalnya, saya mencoba versi simplistic (189 byte), yang lebih baik daripada solusi C lainnya ...

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");}

yang kemudian saya optimalkan sedikit ...

VX
sumber
1
Huh, bagus sekali. Saya tidak menyadari variabel statis dengan literal string yang ditugaskan kepada mereka secara implisit memiliki tipe char *.
FireFly
@FireFly GCC mengkompilasi dengan baik pada akemungkinan karena defaultnya int, yang dapat menerima charnilai. Tidak suka bkecuali saya menyebutnya sedikit char[]. VX, kompiler apa yang Anda gunakan?
Level River St
badalah intjuga, tapi itu memegang pointer ke string literal. Benar-benar ok di GCC (ada di mesin saya 4.8.2).
VX
1
for(a='a';++a<'z';)
seequ
9

JavaScript, ES6, 174 172 154 byte

Menggunakan replacetrik @ edc65 . Terima kasih!

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

Hanya berfungsi di Firefox terbaru (34 ke atas) karena penggunaan string template.

Pengoptimal
sumber
@Nijikokun Anda tahu itu akan menyebabkan 30 pengulangan alih-alih 25, kan?
Pengoptimal
Saya menduga bahwa ff 34 adalah beta atau sesuatu karena saya yang terbaru (baru saja diperiksa) dan 33 dan tidak bekerja di sana
Sammaye
8

BrainFuck ( 1,597 karakter )

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

Ini masih bisa bermain golf lebih lanjut, jika ada yang tertarik.

Anda dapat menguji ini dan mengonfirmasi bahwa itu memberikan hasil yang benar sambil memenuhi semua aturan.

Kevin Brown
sumber
5
Apa ini? Saya bilang untuk menulis kalimat, bukan coretan acak! Bahkan tidak ada kata apa pun di sini!
Naik
5
Ummm .. Saya pikir tujuannya adalah menggunakan karakter paling sedikit . Anda yakin memenangkan "anti-gawang" :-)
Carl Witthoft
7

Perl - 145

Saya senang melihat begitu banyak jawaban! Inilah solusi Perl.

$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
hmatt1
sumber
7

Karena dia sangat membenci matematika, mengapa tidak Mathematica (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}]
Ryan Polley
sumber
6

Javascript ES6, 198 193 byte

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

Guru Anda tidak menginginkan angka, tetapi karena mereka adalah guru bahasa Inggris, mereka tidak tahu apa Math.floor(Math.exp(Math.PI)+Math.E)artinya.

Lebih mudah dibaca:

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

Harus dijalankan di firefox terbaru

scrblnrd3
sumber
1
Tidak ada baris baru di akhir, sehingga baris pertama dan terakhir ditambahkan dengan memberikan 75 baris
edc65
Saya akan memberi +1 untuk menekuk aturan dengan referensi XKCD tentang e ^ pi, tetapi dengan + e sebagai lawan dari -p ... Bravo!
WallyWest
-4 byte:with(Math)alert("long string here".repeat(exp(PI)+E|[]))
nderscore
Oh well, lupakan Matematika:(q='aaaaa'.length)*q
edc65
Lupakan juga tentang @ edc65 komentar! Gunakan ini "\x18".charCodeAt():! (hardcode panah ke atas dan Anda akan menghemat satu ton!)
Ismael Miguel
6

Javascript - 178 Bytes 176 Bytes

Golf pertamaku, kupikir aku akan mencobanya dengan operator yang sedikit memutar, tidak berjalan dengan baik seperti yang diharapkan, tapi oh well!

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"))

Karena saya sudah dalam tahanan, dan jelas memiliki masalah berperilaku sendiri ... Javascript - 71 Bytes

Yang ini mungkin akan membuat saya dalam kesulitan yang lebih dalam, tetapi, jika saya sudah menempatkan diri saya dalam penahanan, DAN saya berencana menipu penahanan saya, tampaknya saya tidak memiliki penilaian yang baik tentang bagaimana saya harus berperilaku di kelas. Mungkin jika saya dapat menarik salah satu dari guru saya, saya dapat menarik salah satu dari semua pegolf lain di luar sana.

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

Cepat! Pengguna Chrome / IE 11 / Firebug, buka konsol Anda KANAN SEKARANG dan cobalah.

(Tolong jangan terlalu menyakitiku, saya pikir itu lucu)

Sidney
sumber
1
72 itu menyenangkan. 176 berkali-kali salah: Array (25) .join () memberikan 24 pengulangan, dan baris baru di akhir kalimat hilang. Semuanya 24 * 3 = 72 baris, bukan 100 (anak malas!)
edc65
AGUNG, ok diperbaiki. Sekarang 178 dan 71.
Sidney
1
Anda dapat menghemat 2 byte menambahkan t dan spasi tambahan di "een-ratusan ... untuk".
Luminous
Apa yang dilakukan kode kedua?
justhalf
1
@justhalf, dibutuhkan JQuery, pustaka JavaScript umum yang tampaknya digunakan jaringan SO. $ Sebenarnya adalah fungsi yang, di antara banyak hal lainnya, mengambil banyak pekerjaan dari pemilihan elemen DOM. Dengan menggunakan $ ('<selector>'), yang dalam hal ini semua elemen dengan tag 'code', saya mendapatkan objek yang berisi semua elemen. Dengan menggunakan [+! B] Saya mendapatkan nilai integer false, yaitu nol, jadi saya pilih indeks ke-0, yang kebetulan merupakan blok kode pertama OP, yang sebenarnya merupakan perkataan favorit guru.
Sidney
5

C # - 229 216 Bytes

usingFTW gratis !

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, jumlah byte yang sama (lebih banyak usingpenyalahgunaan, meskipun)

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");}}
William Barbosa
sumber
4
~~ (╯ ° □ °) ╯︵ ┻━┻
William Barbosa
Anda dapat menambahkan "untuk" kea
FryAmTheEggman
@FryAmTheEggman string tersebut sepanjang 25 karakter, ia menggunakannya untuk mendapatkan nomor 25 secara terpisah. Namun, ia dapat menukar metode ini dengan hanya mengurangi karakter satu sama lain ( ':'-'!'== 25), yang lebih pendek daripada a.Length, dan akan memungkinkan untuk dimasukkan seperti yang Anda sarankan. (Secara alternatif, lakukan seperti jawaban lain yang tampaknya, dan hanya berputar di antara !dan :, lucu bagaimana kita semua memilih karakter yang sama)
VisualMelon
@VisualMelon Whoops, Anda sepenuhnya benar.
FryAmTheEggman
1
Saya pikir saya bisa karena penggunaan tidak dihitung, sudahkah OP mengklarifikasi hal ini?
William Barbosa
5

Befunge-93, 268 260 256 (ukuran kisi: 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."$_,#!:

Ini adalah pertama kalinya saya bermain golf, jadi saya pikir saya akan mencoba bahasa yang belum pernah dilakukan untuk masalah ini, karena saya tidak akan menambahkan apa pun sebaliknya. Karena ini kompatibel dengan Befunge-93 (cocok di dalam kisi 80x25 dan hanya menggunakan instruksi Befunge-93), itu juga dapat digunakan di Befunge-98. Untuk jaga-jaga, saya juga menghindari penunjuk melewati karakter non-instruksi selain spasi. Saya tidak dapat mengingat apakah spesifikasi benar-benar mendefinisikan karakter-karakter tersebut sebagai no-ops, dan saya tidak akan memiliki setan hidung dalam kode MY.

Anda tidak bisa benar-benar kode Befunge ungolf. Hal utama yang perlu diperhatikan di sini adalah bahwa Befunge mendorong karakter ke stack sebagai nilai ASCII mereka, membuatnya relatif mudah untuk merujuk ke angka tanpa secara harfiah merujuk kepada mereka. Di "K"sebelah kiri atas adalah 75, mengacu pada jumlah pengulangan kali jumlah klausa "the" per pengulangan; Saya menggunakan modulus dan beberapa kelicikan lain pada (salinan) nomor ini untuk menentukan jalur mana yang harus diambil melalui pencetakan pada setiap go-around. ::-adalah ungkapan yang bagus untuk nol, berguna untuk string yang mengakhiri nol; Saya menggunakannya dua kali di sini.

Kadang-kadang pointer harus melewati tempat di mana saya mendefinisikan string, maka pilihan karakter tertentu yang digunakan untuk mendapatkan angka tertentu di beberapa titik.

Hal yang menyenangkan tentang banyak juru bahasa Befunge adalah Anda dapat menonton penunjuk panah di sekitar kotak, serta melihat nilai apa yang ada di tumpukan. Dengan begitu Anda dapat melangkah dan melihat bagaimana program ini bekerja sendiri, kurang lebih! Saya sarankan menggunakan http://befungius.aurlien.net/ jika Anda tidak memiliki juru bahasa Befunge sendiri.

Ini mungkin dapat dikupas sedikit (atau banyak) lebih banyak. Tolong beri saya umpan balik! Jika saya perlu memberikan penjelasan yang lebih baik, seseorang beri tahu saya; Saya baru dalam hal ini.

Edit - mencukur beberapa byte dengan menyingkirkan redirect yang tidak perlu ke baris terakhir ketika program berakhir (hanya menempatkan di @mana ^dulu).

Suntingan lain - mencukur beberapa byte lagi di berbagai tempat, sebagian besar dengan tipu daya. (Juga menambahkan ukuran kisi, yang tampaknya menjadi tren dengan jawaban Befunge.)

Kasran
sumber
Hai Kasran, selamat datang di pertukaran stack codegolf! Jawaban ini tampak hebat. Penjelasan Anda bagus dan Anda ditautkan dengan juru bahasa Befunge yang sangat membantu untuk bahasa-bahasa aneh yang tidak semua orang punya kompilernya (orang biasanya melakukan hal-hal seperti "jalankan ini di sini").
hmatt1
Befunge adalah bahasa yang sangat sulit, dan Anda harus menyimpan ukuran kode itu sendiri dalam pikiran Anda ketika menulis. Kode Anda terlihat bagus dan berfungsi. Tapi apakah itu mengurangi ukuran jika Anda menyimpan di re a time suatu tempat?
Ismael Miguel
Saya tidak menggunakan instruksi atau perilaku spesifik Funge-98 yang saya ketahui, tetapi karena saya menulis jawaban ini saya mengetahui bahwa perilaku tertentu dari juru bahasa Befungius tidak standar - yaitu menggunakan #pada satu ujung baris untuk melewati karakter di ujung yang lain (dalam CCBI , misalnya, #hanya melompati ruang tak terbatas di antara itu dan karakter di ujung yang lain), yang merusak program ini. Saya belum repot-repot kembali dan memperbaiki kiriman ini dengan pemikiran ini.
Kasran
Ada beberapa 1digit di sana, yang tidak diizinkan
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 

Perhatikan ruang trailing.

Menggunakan trik yang hampir sama dengan @Geobits dan teman-teman komentatornya dalam jawaban Python untuk membuat string. Sekarang juga gunakan beberapa jawaban ini .

Ini menggunakan variabel bawaan G, yang berisi abcdefghijklmnopqrstuvwxyzdan mendapatkan satu kurang dari panjangnya untuk menghasilkan 25 keluaran.

FryAmTheEggman
sumber
1
Ini tampaknya menjadi 136 byte daripada 135
Pengoptimal
1
@Optimizer Maaf, saya harus membaca catatan saya sendiri: Saya lupa ruang trailing ketika saya menempelkannya di sana sendiri: S
FryAmTheEggman
4

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

Mikey
sumber
1
Penggunaan cerdik dari karakter 1,8! Anda mungkin bisa menggunakan String#*untuk mengulangi garis 25 kali, bukan Integer#times.
britishtea
@ britishtea - bekerja menyenangkan :)
Mikey
1
Anda dapat mengurangi beberapa byte lagi dengan tidak menetapkan baris terlebih dahulu. Ruang antara put dan string literal adalah opsional ( puts"hi"legal).
britishtea
Menetapkan e di dalam interpolasi adalah sentuhan yang bagus.
Wayne Conrad
3

Python, 165 byte

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

Itu bekerja dengan sangat baik bahwa panjang h adalah 25, itu tidak disengaja. =)

DJMcMayhem
sumber
3

Python 2 - 143

Jawaban konyol:

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

Perhatikan bahwa jumlah lengkapnya adalah 162. Saya tidak memasukkan semua from this import i.

Menggunakan penggantian yang mirip dengan strategi pyth saya, tapi saya tidak bisa menahan posting ini setelah menemukan kegembiraan mengimpor dari ini :)

FryAmTheEggman
sumber
+1 Untuk penggunaan from this import i! Bagaimana kamu tahu tentang itu?
Beta Decay
1
@ BetaDecay Saya sebenarnya bosan dan memutuskan untuk membaca zen dari python, jadi saya pergi ke penerjemah dan menulis import this. Kemudian saya berpikir: "Apa lagi yang ada dalam thismodul?" Jadi saya menelepon dir(this). Lihatlah, bersama dengan kamus, string yang kacau, dan "!"variabel, ada konstanta numerik ... sama dengan 25.
FryAmTheEggman
3

PHP (175 157156 byte; 152 dengan unix EOF):

Bukan solusi yang paling golf, tetapi pasti melakukan pekerjaan dan lebih kecil daripada beberapa upaya.

Ini kodenya:

$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.
";

Versi lama:

$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.
";

Ini berfungsi karena php siklus chars, dan kami hanya memeriksa apakah tidak zdan berhenti.

(Satu keingintahuan adalah bahwa ketika php mencapai z, kemudian pergi ke aa.)

Ismael Miguel
sumber
3
Konvensi umum di sini adalah untuk menghitung baris baru hanya satu byte, kecuali mungkin bahasa Anda sangat keras kepala sehingga hanya menerima CRLF, yang tidak berlaku untuk PHP.
nyuszika7h
3

Python 2 - 155

Catatan: karena karakter kontrol tidak muncul di SE, saya telah menggantinya dengan\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')

Versi Base 64:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=
Peluruhan Beta
sumber
Mengenai impor, saya pikir Anda bisa menghemat sedikit dengan from string import *atau bagaimanapun disebut dengan Python
FireFly
1
Anda dapat memindahkan "remaja" ke b.
FryAmTheEggman
2
Anda dapat menghapus []tanda kurung di baris pertama, yang secara implisit membuat tupel dan membongkarnya.
Gagang Pintu
Anda juga dapat memindahkanord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman
1
@Dennis Sunting OP terbaru memungkinkan baris baru terkemuka.
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]

Impor wajib:

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

Jika Anda ingin menjalankannya di bawah Node.js, instal paket LiveScript( tidak livescript ) dan prelude-lsdari npm, ganti alertdengan console.logdan jalankan lsc prog.ls, di mana prog.lsberisi program.

nyuszika7h
sumber
13
Lihat aturan: "Anda tidak dapat menggunakan karakter 0123456789"
Paul R
2
Tangkapan bagus, diperbaiki.
nyuszika7h
2

T-SQL: 206

Manfaatkan gabungan silang pada lima baris untuk menghasilkan 25 baris memilih frasa. Jeda baris penting untuk output.

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
MickyT
sumber
2

Bash, 151 byte

Cukup banyak jawaban langsung dari jawaban Anda sendiri

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."
}
Trauma Digital
sumber
2

C, 196 karakter

Ini bukan tugas yang mudah untuk kebaikan C. Memperhitungkan pola "% steen-ratusan ..." menyelamatkan saya dari dua karakter.

Spasi untuk kejelasan, termasuk tidak dihitung.

#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");
}
FireFly
sumber
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."}

Penjelasan

  • Gunakan String#uptountuk mencetak garis 25 kali. Kisarannya "K".."c"adalah 25 karakter.
  • Gunakan interpolasi String dasar untuk mempersingkat garis.
britishtea
sumber
2
#{a="The "}sebenarnya dikenakan biaya lebih banyak karakter! #{a}sama panjangnya denganThe
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."))))

Tidak Disatukan:

(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."))))
Matthew Butterick
sumber
2

C, 215 203 199 byte

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");}

Tidak disatukan

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");
}

Saya menggunakan sedikit pergeseran untuk beralih tanpa nomor.

a<<='\xC'+'\xD' set ke 0b1 [25 nol]

a>>=!!a menggeser bit yang tepat untuk setiap kali kita mengulangi loop

Sunting: a sama dengan argc, jadi nilainya sudah 1 ketika program dijalankan tanpa argumen. Berubah a>>='\xB'-'\xA'ke a>>=!!'\xA'yang lebih pendek 4 byte. Juga teks ditampilkan hanya 24 kali. Memperbaikinya. Kurung ekstra dihapus di while.

Sunting 2: diubah !!'\xA'menjadi !!a. Tampaknya bekerja dan menyimpan 4 byte

Ethiraric
sumber
1
Anda dapat menggunakan putsuntuk menyimpan lebih banyak byte.
Spikatrix
2

Kata-kata kasar, 191 byte

Bukan solusi terpendek, tapi tetap keren. Saya menulis sebuah subrutin untuk menulis tiga baris pertama, dan mendesainnya begitu menyebutnya dengan argumen kosong mengembalikan string sepanjang 25 karakter. Saya kemudian memberikan panjangnya ke repeater.

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

Tidak Disatukan:

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

Cobalah online

Berkin
sumber