Napisz wiersze w areszcie

63

Wprowadzenie

Złe wieści - masz szlaban. Twój nauczyciel języka angielskiego nie rozumie tej witryny i chce, abyś „przestał robić matematykę cyfrowym psom, to jest lekcja angielskiego!”

Skazała cię 25 razy na napisanie swojego ulubionego powiedzenia na tablicy, co da w sumie 100 wierszy na tablicy.

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.

Na szczęście jesteś zapalonym czytelnikiem (nie wspominając o ekspertach w dziedzinie kodowania)! Przeczytałeś o sztuczce, która może być dla ciebie łatwa.

fokstrot

(Foxtrot autor: Bill Amend)

Niestety dla Jasona nie wyszło. Ale masz lepszy pomysł! Ponieważ twój nauczyciel języka angielskiego myśli, że robisz matematykę, jeśli porzucisz wszystkie liczby w swoim programie, może to po prostu zadziałać! Chcesz także, aby Twój program był jak najkrótszy, ponieważ jesteś leniwym studentem i nie chcesz dużo pisać na tablicy.

Napisz program zgodny z następującymi zasadami:

  • Twój program musi wydrukować 4 powyższe wiersze 25 razy. Wiersze muszą być wyprowadzane w tej kolejności, powtarzając się. Łącznie dokładnie 100 wierszy wyniku (końcowy znak nowej linii na samym końcu lub wiodący nowy wiersz na samym początku jest w porządku).
  • Nie możesz używać znaków 0123456789. Twój nauczyciel wpada w zakłopotanie matematyką i zawoła cię!
  • Możesz użyć dowolnego importu i bibliotek zewnętrznych bez liczenia importów. Twój nauczyciel języka angielskiego nie wie o programowaniu. Jason mógł zaoszczędzić dużo pracy, nie pisząc, #include <stdio.h>a ty nie chcesz popełniać tych samych błędów!
  • Oceń swój program według byteliczby. Najniższy wynik wygrywa!
hmatt1
źródło
2
Gdyby tekst brzmiał „1900”, zapisywanie wyników byłoby nieco trudniejsze.
Ingo Bürk
30
do komiksu: nie drukuje \ n, a pętla od 1 jest dość niezręczna (jak w przypadku natury C) ...
VX
11
@VX Bill Amend jest od dawna zagorzałym Pascalem, a kiedy pisze C, staje się to dość oczywiste.
puszysty
5
To brzmi bardzo podobnie do jednego z moich starych nauczycieli angielskiego.
Kaz Wolfe
2
Banowanie + miałoby tutaj sens, ale może byłoby to zbyt trudne.
Pharap

Odpowiedzi:

9

CJam, 109 107 106 104 103 bajtów

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

Powyżej jest odwracalny zrzut xxd.

Testowanie

Możesz wygenerować i wykonać powyższy kod, uruchamiając go w tłumaczu 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+*"]:+~

Aby zobaczyć wygenerowany kod (bez jego wykonania), usuń końcowy ~.

Aby policzyć liczbę bajtów (jeden znak to jeden bajt w ISO-8859-1), zamień ostatni na ~a ,.

Wersja do wydruku (122 bajty)

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

Po wypchnięciu ciągu (S) następuje wykonanie następującego:

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

Moar golf

Po wypchnięciu niedrukowalnego ciągu (U) wykonuje się następujące czynności:

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

Spycha to ciąg wersji do wydruku. Reszta kodu działa jak poprzednio.

Dennis
źródło
Korzystając z kodu, otrzymuję ten wygenerowany kod, który ma 144 bajty. Czy robię coś źle ?
Optymalizator
Tak, kodowanie UTF-8 spowoduje zwiększenie liczby bajtów. Z ISO-8859-1, liczba bajtów wynosi 109. Można wymienić ~w ,celu sprawdzenia.
Dennis
2
Mam dokładny wynik, jaki zrobił Optymalizator, ale dodanie ]:+~sprawiło, że działało. Dlaczego po prostu nie dodasz tego do swojego kodu?
Luminous
1
@ user23013: Interpretator Java szanuje $ LANG dla I / O. Wewnętrznie CJam ma tylko 16-bitowe znaki.
Dennis
3
W rzeczywistości nie musisz unicode-ize rozwiązania, ponieważ bez samej kompresji ma on tylko 124 bajty, pokonując wszystkie inne.
Optymalizator
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"))

Testuj w konsoli FireFox / FireBug.

edc65
źródło
19
To jest genialne!
Optymalizator
1
Tak, zastępując każdy znak większym ciągiem. Wykonanie 25 kopii większego łańcucha.
Optymalizator
1
@Optimizer That is genius :)
FryAmTheEggman
3
@Malvolio W rzeczywistości powtarzana sekcja ma 30 znaków. I mogłem pokazać ogromną sekwencję prób dodawania i wycinania słów oraz zastępowania zamienników przed znalezieniem tego prostego rozwiązania.
edc65
1
@ IsmaelMiguel Myślę, że masz na myśli dowolną przeglądarkę ES6. Problem: w chwili opublikowania tego wyzwania ciągi szablonów nie zostały zaimplementowane w żadnej przeglądarce: Firefox był pierwszy - rel 34, grudzień 2014 - potem Chrome, marzec 2015. Ale nawet bez ciągów szablonów twój scoure byłby 153, lepszy niż mój . Powinieneś opublikować to jako odpowiedź.
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)

Nie pytam dużo, ale wydaje mi się to dość krótkie.

Edycja: Więc się myliłem, wcale nie było krótko! Dzięki za pomoc w komentarzach: D

Geobity
źródło
1
Możesz utracić nowy wiersz i wcięcie w pętli for, aby zaoszczędzić kilka bajtów.
Holloway,
1
@Geobits, robię to 157
Holloway
1
@Geobits działasz na komputerze z systemem Windows? Kodowanie linii w oknach jest często \ r \ n zamiast tylko \ n. Być może dlatego pokazuje nam 157 bajtów, ale 160 dla Ciebie.
Rob Watts
2
To tylko 160 . Prawdopodobnie pomijasz trójkę \z \npowodu ucieczki ...
Optimizer
1
Możesz przenieść wartość bna print: %ma wyższy priorytet niż *.
FryAmTheEggman
29

CJam, 151 140 135 132 130 128 bajtów (tweetowanie)

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

Wypróbuj tutaj

Jestem w stanie skrócić to do 110 bajtów, konwertując to na Unicode, ale ponieważ nie jest to lepsze niż inne rozwiązanie Unicode, wolałbym tego nie mówić :)

Optymalizator
źródło
23
Hej, co :Dtam robi ten emotikon ?! Czy piszesz do znajomych podczas zatrzymania? Idź do biura dyrektora!
Klamka
2
@Doorknob: D: P
Optimizer
Być może mógłbyś utworzyć Talias do .\nThe , a następnie usunąć dodatkową linię, która to tworzy od początku ciągu wyjściowego (mój cjam-fu nie jest wystarczająco dobry, aby dowiedzieć się, czy możesz to łatwo zrobić)
@professorfish, który ostatecznie zużywa więcej bajtów niż oszczędza. mothereff.in/… *% 28Y% 2F% 28% 40 \
Optymalizator
Nitpicking: Używanie górnych 128 bajtów strony kodowej kompatybilnej z ASCII nie ma nic wspólnego z Unicode.
Dennis
23

PHP, 0 bajtów



Możesz użyć dowolnego importu i bibliotek zewnętrznych bez liczenia importów.

Aby uruchomić ten kod, musisz zaimportować bibliotekę o następującej nazwie data://text/plain,<?php...classroom.\n";:

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

I musisz mieć allow_url_includewłączone w swoim php.ini.

Koniec z liczbami i rozszerzeniami dzięki Dennisowi.

jimmy23013
źródło
9
Moim pierwszym instynktem było wykrzyczeć coś o lukach, ale ponieważ ta odpowiedź jest w rzeczywistości samowystarczalna, myślę, że jest to sprytny sposób wykorzystania PHP do wykorzystania luki, która została utworzona celowo dla odpowiedzi w Pythonie. Ponieważ już oszukujesz, możesz po prostu użyć require_once "data://text/plain,The eighteen-hundreds...";, który nie wymaga sh , nie używa liczb i nadal ma 0 bajtów.
Dennis
10
Będę głosować za kreatywnością, ale nie zaakceptuję tego.
hmatt1
14

Rubin, 185 180 176 bajtów

EDYCJA: Interpolacja ciągów, dzięki @britishtea

To mój pierwszy golf w historii i nie jestem wielkim Rubistą (ale z pewnością kocham Ruby). W każdym razie to jest to (skrócone, sugestia 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
źródło
1
Możesz pograć w golfa dalej, zastępując niektóre powtarzające się słowa / grupy słów interpolacją ciągów.
britishtea
3
+1 za zauważenie, że w ciągu jest (prawie) 25 słów
Digital Trauma
2
s.split.size.nextzapisuje 5 znaków (nie musisz określać miejsca do podziału).
Klamka
Nie znam Ruby, ale czy nie (s.split.size+1).timesbyłby o 1 bajt krótszy?
patrz
1
@Sieg nie może używać liczb!
rjdown
13

Java 249 231 230 222

Moja pierwsza odpowiedź! Może zaczniesz używać języka, który znam tak dobrze.

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

Bez golfa

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 ")));
    }
}
Świetlny
źródło
9
Witamy! Możesz się go pozbyć publici skrócić argsdo jednej postaci. Możesz to zrobić a++<':'zamiast zwiększać go osobno. Ponieważ OP nie liczy importów, możesz zaoszczędzić nieco więcej import static java.lang.System.*;, więc nie musisz pisać System.później (tam, gdzie się liczy). W ten sposób udało mi się uzyskać około 230. Jeśli jeszcze tego nie zrobiłeś, możesz zajrzeć na stronę porad Java .
Geobits
@Optimizer Thanks! Po prostu nie widziałem powyższego skreślenia.
Luminous
@Luminous NP :)
Optimizer
@Geobits Dziękujemy! Wygląda na to, że możesz również wkleić kod bezpośrednio w samej pętli. Nic nie dodałem ani nie usunąłem, ale myślę, że w ten sposób wygląda to bardziej golfowo.
Luminous
4
Nadużywanie pętli jest dość powszechne. Jeśli masz wiele instrukcji w ciele, możesz umieścić jedną na zewnątrz, a resztę w środku, aby zapisać pojedynczy znak (ponieważ i tak potrzebujesz średnika na zewnątrz). W ten sposób wiele golfów stanowi jedną wielką pętlę. Również „wygląda na bardziej golfowego” to całkowicie uzasadniony powód, aby cokolwiek robić, nawet jeśli nie oszczędza: 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);}

Najpierw wypróbowałem uproszczoną wersję (189 bajtów), która była lepsza niż inne rozwiązanie C ...

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

które później trochę zoptymalizowałem ...

VX
źródło
1
Huh, to fajne. Nie zdawałem sobie sprawy, że zmienne statyczne z literałami ciągów przypisanymi do nich domyślnie mają typ char *.
FireFly,
@FireFly GCC kompiluje się dobrze na aprzypuszczalnie dlatego, że domyślnie intprzyjmuje charwartość , która może zaakceptować wartość. Nie podoba bmi się, chyba że tak to nazywam char[]. VX, jakiego kompilatora używasz?
Level River St
bjest intrównież, ale utrzymuje wskaźnik do literału łańcucha. W GCC jest całkowicie w porządku (mam na moim komputerze 4.8.2).
VX
1
for(a='a';++a<'z';)
patrz
9

JavaScript, ES6, 174 172 154 bajtów

Korzystanie ze replacesztuczki @ edc65 . Dzięki!

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

Działa tylko w najnowszym Firefoksie (34 i nowszym) ze względu na użycie ciągów szablonów.

Optymalizator
źródło
@Nijikokun Wiesz, że spowoduje to 30 powtórzeń zamiast 25, prawda?
Optymalizator
Zgaduję, że ff 34 jest w wersji beta lub coś, odkąd jestem na najnowszym (właśnie sprawdziłem) i jest 33 i tam nie działa
Sammaye
8

BrainFuck ( 1597 znaków )

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

Jeśli ktoś jest zainteresowany, nadal można grać w golfa.

Możesz to przetestować i potwierdzić, że daje prawidłowy wynik, spełniając wszystkie reguły.

Kevin Brown
źródło
5
Co to jest? Mówiłem ci, żebyś pisał zdania, a nie przypadkowe kłótnie! Nie ma tu nawet żadnych słów!
Riking
5
Ummm .. Myślę, że celem jest użycie jak najmniejszej liczby postaci. Na pewno wygrałeś „przeciw bramce” :-)
Carl Witthoft
7

Perl - 145

Cieszę się, że widzę tak wiele odpowiedzi! Oto rozwiązanie Perla.

$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
źródło
7

Skoro tak bardzo nienawidzi matematyki, dlaczego nie 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
źródło
6

JavaScript ES6, 198 193 bajtów

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

Twój nauczyciel nie chce żadnych liczb, ale ponieważ jest nauczycielem angielskiego, nie ma pojęcia, co Math.floor(Math.exp(Math.PI)+Math.E)to znaczy.

Bardziej czytelnie:

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

Musi być uruchomiony w najnowszym firefoxie

scrblnrd3
źródło
1
Brakuje nowego wiersza na końcu, więc pierwszy i ostatni wiersz są dołączane, dając 75 wierszy
edc65
Przyznam +1 za naginanie reguł z referencją e ^ pi XKCD, ale z + e w przeciwieństwie do -pi ... Brawo!
WallyWest
-4 bajty:with(Math)alert("long string here".repeat(exp(PI)+E|[]))
nderscore
No cóż, zapomnij o matematyce:(q='aaaaa'.length)*q
edc65
Zapomnij też o komentarzu @ edc65! Użyj tego "\x18".charCodeAt():! (zaszyfruj strzałkę w górę, a zaoszczędzisz tonę!)
Ismael Miguel
6

JavaScript - 178 bajtów 176 bajtów

Mój pierwszy golf, pomyślałem, że dam mu szansę z lekko kręcącymi się operatorami, nie wyszedł tak dobrze, jak się spodziewałem, ale no cóż!

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

Ponieważ jestem już w areszcie i oczywiście mam problemy z zachowaniem się ... JavaScript - 71 bajtów

Ten prawdopodobnie wpędzi mnie w jeszcze większe kłopoty, ale jeśli już znalazłem się w areszcie, A ORAZ planuję oszukać moje aresztowanie, najwyraźniej brakuje mi dobrego osądu, jak powinienem się zachowywać w klasie. Może jeśli uda mi się pociągnąć jednego na nauczyciela, mogę pociągnąć jednego na wszystkich innych golfistach.

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

Szybki! Użytkownicy Chrome / IE 11 / Firebug, otwórz swoje konsole RAZ TERAZ i spróbuj.

(Proszę, nie rań mnie zbytnio, myślałem, że to było śmieszne)

Sidney
źródło
1
72 jest fajny. 176 jest wielokrotnie błędne: Array (25) .join () daje 24 powtórzenia i brakuje nowego wiersza na końcu zdania. W sumie 24 * 3 = 72 rzędy zamiast 100 (leniwy chłopiec!)
edc65
AUGH, ok naprawione. Teraz 178 i 71.
Sidney
1
Możesz zapisać 2 bajty, dodając t i końcowe spację w „een-setki ... dla”.
Luminous
Co robi drugi kod?
justhalf
1
@ justhalf, Wykorzystuje JQuery, wspólną bibliotekę JavaScript, która najwyraźniej wykorzystuje sieć SO. $ Jest właściwie funkcją, która między wieloma innymi rzeczami zajmuje dużo pracy przy wyborze elementu DOM. Używając $ („<selector>”), czyli w tym przypadku wszystkich elementów ze znacznikiem „code”, otrzymuję obiekt zawierający wszystkie elementy. Używając [+! B] otrzymuję wartość całkowitą false, która wynosi zero, więc wybieram indeks 0, który jest pierwszym blokiem kodu OP, co w rzeczywistości jest ulubionym powiedzeniem nauczycieli.
Sidney
5

C # - 229 216 bajtów

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

Alternatywnie, ta sama liczba bajtów ( usingchoć więcej nadużyć)

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
źródło
4
~~ (╯ ° □ °) ╯︵ ┻━┻
William Barbosa
Możesz dodać „for” doa
FryAmTheEggman
@FryAmTheEggman ciąg ma 25 znaków, używa go do dyskretnego uzyskania liczby 25. Może jednak zamienić tę metodę na po prostu odejmowanie od siebie znaków ( ':'-'!'== 25), co jest krótsze niż a.Lengthi pozwoli na uwzględnienie, jak sugerujesz. (Alternatywnie, rób, jak wydają się inne odpowiedzi, i po prostu zapętlaj między, !i :zabawne, jak wszyscy wybraliśmy te same znaki)
VisualMelon
@VisualMelon Ups, masz całkowitą rację.
FryAmTheEggman
1
Myślałem, że mogę, skoro nawet nie liczy się usings, czy OP to wyjaśniło?
William Barbosa
5

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

To jest mój pierwszy raz w golfa, więc pomyślałem, że spróbuję języka, który nie został jeszcze zrobiony dla tego problemu, ponieważ nie dodałbym nic innego. Ponieważ jest kompatybilny z Befunge-93 (mieści się w siatce 80x25 i używa tylko instrukcji Befunge-93), powinien również działać w Befunge-98. Na wszelki wypadek uniknąłem też, aby wskaźnik przesuwał się nad znakami innymi niż spacja. Nie mogłem sobie przypomnieć, czy specyfikacja faktycznie zdefiniowała te znaki jako brak operacji, i nie będę mieć nosowych demonów w MOIM kodzie.

Naprawdę nie możesz ungolfować kodu Befunge. Kluczową rzeczą do odnotowania tutaj jest to, że Befunge wypycha znaki na stos jako ich wartości ASCII, co czyni relatywnie łatwym odwoływanie się do liczb bez dosłownego odwoływania się do nich. The"K"W lewym górnym rogu jest 75, odnosząc się do liczby powtórzeń razy liczba „the” klauzul na powtórzenie; Używam modułu i innej sztuczności na (kopiach) tego numeru, aby określić, którą ścieżkę przejść przez druk na każdym odejściu. ::-jest ładnym idiomem dla zera, przydatnym dla ciągów kończących zero; Używam go tutaj dwa razy.

Czasami wskaźnik musi przejść przez miejsce, w którym definiuję ciąg, stąd określone wybory znaków używane do uzyskania określonych liczb w niektórych punktach.

Zaletą wielu interpreterów Befunge jest to, że możesz obserwować strzałkę wskaźnika wokół siatki, a także zobaczyć, jakie wartości są na stosie. W ten sposób możesz przejść mniej więcej samemu i zobaczyć, jak program działa! Polecam użycie http://befungius.aurlien.net/, jeśli nie masz własnego preferowanego tłumacza Befunge.

Można to prawdopodobnie nieco zmniejszyć (lub dużo) więcej. Proszę o informację zwrotną! Jeśli muszę podać lepsze wyjaśnienie, daj mi znać; Jestem w tym nowy.

Edycja - wygoliłem kilka bajtów, pozbywając się niepotrzebnego przekierowania do ostatniego wiersza po zakończeniu programu (po prostu wpisując miejsce, w @którym ^kiedyś był).

Kolejna edycja - wygoliłem więcej bajtów w różnych miejscach, głównie z oszustwem. (Dodano również rozmiar siatki, co wydaje się być trendem z odpowiedziami Befunge.)

Kasran
źródło
Cześć Kasran, witaj na wymianie stosów codegolf! Te odpowiedzi wyglądają świetnie. Twoje wyjaśnienie jest dobre i zostałeś powiązany z tłumaczem Befunge, który jest naprawdę pomocny w przypadku dziwnych języków, dla których nie każdy ma kompilator (ludzie często robią takie rzeczy, jak „uruchom to tutaj”).
hmatt1
Befunge jest naprawdę trudnym językiem i podczas pisania musisz pamiętać o rozmiarze samego kodu. Twój kod wygląda świetnie i działa. Ale czy zmniejszyłoby to rozmiar, gdybyś re a time gdzieś zapisał?
Ismael Miguel
Nie używam żadnych instrukcji ani zachowań specyficznych dla Funge-98, które znam, ale odkąd napisałem tę odpowiedź, nauczyłem się, że pewne zachowania interpretera Befungiusa nie są standardowe - mianowicie używanie #jednego końca linii do pominięcia postać na drugim końcu (w na przykład CCBI , po #prostu pomija nieskończoną przestrzeń między nią a postacią na drugim końcu), co psuje ten program. Mając to na uwadze, nie zadałem sobie trudu, aby wrócić i naprawić to zgłoszenie.
Kasran
Jest tam kilka 1cyfr, które są niedozwolone
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 

Zwróć uwagę na spację końcową.

Używa prawie tej samej sztuczki, co @Geobits i jego przyjaciele komentujący w odpowiedzi na Pythona, aby skonstruować ciąg. Teraz używa również niektórych z tej odpowiedzi .

Wykorzystuje to wbudowaną zmienną G, która zawiera abcdefghijklmnopqrstuvwxyzi dostaje jeden mniej niż jego długość, aby wygenerować 25 wyników.

FryAmTheEggman
źródło
1
Wydaje się, że to raczej 136 bajtów niż 135
Optimizer
1
@Optimizer Przepraszam, powinienem przeczytać własne notatki: zapomniałem spacji końcowej, kiedy ją tam
wkleiłem
4

Rubin - 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
źródło
1
Sprytne użycie literałów znakowych 1.8! Być może będziesz mógł użyć String#*do powtórzenia linii 25 razy zamiast Integer#times.
britishtea
@britishtea - pracował przysmak :)
Mikey
1
Możesz zgolić jeszcze kilka bajtów, nie przypisując najpierw linii. Odstęp między putami a literałem łańcucha jest opcjonalny ( puts"hi"jest legalny).
britishtea
Przypisanie e wewnątrz interpolacji to miły akcent.
Wayne Conrad
3

Python, 165 bajtów

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

Okazało się naprawdę ładnie, że długość h wynosi 25, co nie było zamierzone. =)

DJMcMayhem
źródło
3

Python 2 - 143

Głupia odpowiedź:

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

Zauważ, że pełna liczba to 162. Pominąłem wszystkie from this import i.

Używa podobnych zamienników do mojej strategii pyth, ale nie mogłem się powstrzymać od opublikowania tego po odkryciu przezabawności importowania z tego :)

FryAmTheEggman
źródło
+1 Do wykorzystania from this import i! Skąd o tym wiesz?
Beta Decay
1
@BetaDecay właściwie się nudziłem i postanowiłem przeczytać zen pytona, więc poszedłem do tłumacza i napisałem import this. Potem pomyślałem: „Co jeszcze może być w thismodule?” Więc zadzwoniłem dir(this). Lo i oto, wraz ze słownikiem, zniekształconym łańcuchem i "!"zmienną, była stała liczbowa ... równa 25.
FryAmTheEggman
3

PHP (175 157156 bajtów; 152 z uniksowym EOF):

Nie jest to najbardziej golfowe rozwiązanie, ale z pewnością spełnia swoje zadanie i jest mniejsze niż niektóre próby.

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

Stara wersja:

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

Działa to, ponieważ php cyklizuje znaki, a my po prostu sprawdzamy, czy tak nie jest zi zatrzymujemy się.

(Jedną z ciekawostek jest to, że kiedy php sięga z, to idzie do aa.)

Ismael Miguel
źródło
3
Ogólna konwencja tutaj polega na liczeniu znaków nowego wiersza jako jednego bajtu, chyba że twój język jest tak uparty, że akceptuje tylko CRLF, co nie ma miejsca w przypadku PHP.
nyuszika7h
3

Python 2 - 155

Uwaga: ponieważ znaki kontrolne nie są wyświetlane w SE, zastąpiłem je\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')

Wersja podstawowa 64:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=
Rozpad beta
źródło
Jeśli chodzi o import, myślę, że możesz zaoszczędzić trochę przy pomocy from string import *lub jakkolwiek jest on wywoływany w Pythonie
FireFly
1
Możesz przenieść „nastolatka” do b.
FryAmTheEggman
2
Możesz usunąć []nawiasy kwadratowe w pierwszym wierszu, który domyślnie tworzy krotkę, a następnie ją rozpakowuje.
Klamka
Możesz także przenieśćord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman
1
@Dennis Najnowsza edycja OP umożliwia prowadzenie nowych linii.
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]

Wymagany import:

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

Jeśli chcesz uruchomić go pod node.js, zainstaluj LiveScript( nie livescript ) oraz prelude-lspakiety z KMP, wymienić alertz console.logi biegać lsc prog.ls, gdzie prog.lszawiera program.

nyuszika7h
źródło
13
Zobacz zasady: „Nie możesz używać znaków 0123456789
Paul R
2
Niezły chwyt, naprawiony.
nyuszika7h
2

T-SQL: 206

Wykorzystuje połączenie krzyżowe w pięciu rzędach, aby wygenerować 25 wierszy, wybierając frazę. Podziały linii są ważne dla wyniku.

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
źródło
2

Bash, 151 bajtów

Prawie prosty port twojej odpowiedzi

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."
}
Cyfrowa trauma
źródło
2

C, 196 znaków

To nie jest łatwe zadanie dla dobrego starego 'C. Wyodrębnienie wzoru „% steen-setki ...” oszczędza mi cały dwie postacie.

Białe znaki dla przejrzystości, nie uwzględniają.

#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");
}
Robaczek świętojański
źródło
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."}

Wyjaśnienie

  • Służy String#uptodo drukowania linii 25 razy. Zakres"K".."c" wynosi 25 znaków.
  • Użyj podstawowej interpolacji ciągów, aby skrócić linie.
Britishtea
źródło
2
#{a="The "}kosztuje cię więcej postaci! #{a}ma taką samą długość jakThe
Mikey
2

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

Nie golfowany:

(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
źródło
2

C, 215 203 199 bajtów

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

Bez golfa

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

Użyłem przesunięcia bitowego do iteracji bez żadnej liczby.

a<<='\xC'+'\xD' ustawia na 0b1 [25 zer]

a>>=!!a przesuwa się o jeden bit za każdym razem, gdy powtarzamy pętlę

Edycja: a równa się argc, więc jego wartość wynosi już 1, gdy program jest uruchamiany bez argumentów. Zmieniono a>>='\xB'-'\xA'na a>>=!!'\xA'4 bajty krótsze. Również tekst był wyświetlany tylko 24 razy. Naprawione. Usunięto dodatkowe nawiasy klamrowe w while.

Edycja 2: zmieniono !!'\xA'na !!a. Wydaje się działać i oszczędza 4 bajty

Ethiraric
źródło
1
Możesz użyć, putsaby zapisać więcej bajtów.
Spikatrix
2

Rant, 191 bajtów

Nie najkrótsze rozwiązanie, ale wciąż fajne. Napisałem podprogram do napisania pierwszych trzech wierszy i zaprojektowałem go tak, że wywołanie go pustym argumentem zwróciło łańcuch o długości 25 znaków. Następnie przekazuję jego długość do repeatera.

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

Nie golfowany:

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

Wypróbuj online

Berkin
źródło