Напишіть рядки під вартою


63

Вступ

Погані новини, хлопці - вас затримали. Ваш вчитель англійської мови не розуміє цей сайт і хоче, щоб ви "перестали займатися математикою на цифрових дохімейських клавіатурах, це клас англійської мови!"

Вона засудила вас 25 разів написати її улюблену приказку на дошці, яка дасть усього 100 рядків на дошці.

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.

Пощастило, ти завзятий читач (не кажучи вже про експерта-гольфіста)! Ви прочитали про трюк, який, можливо, може вам легко відмовитись.

фокстрот

(Фокстрот Білл Аменд)

На жаль для Джейсона, це не вийшло. Але у вас є краща ідея! Оскільки ваш вчитель англійської мови вважає, що ви займаєтесь математикою, якщо ви залишите всі номери в програмі, це може спрацювати! Ви також хочете, щоб ваша програма була якомога коротшою, тому що ви ледачий студент і не хочете багато писати на дошці.

Напишіть програму, яка відповідає таким правилам:

  • Ваша програма повинна надрукувати 4 вище рядки 25 разів. Рядки повинні виводитися в тому порядку, повторюючись. Всього рівно 100 ліній виводу (нормальний новий рядок на самому кінці або провідний новий рядок на самому початку нормально).
  • Ви не можете використовувати символи 0123456789. Ваш вчитель плутається з математикою і зателефонує вам!
  • Ви можете використовувати будь-який імпорт та зовнішні бібліотеки, не рахуючи імпорту. Ваш вчитель англійської мови не знає про програмування. Джейсон міг би врятувати багато роботи, не пишучи, #include <stdio.h>і ви не хочете робити його ті ж помилки!
  • Оцініть свою програму за byteкількістю. Найнижчий рахунок виграє!

2
Якби текст читав "1900-ті", написання результату було б дещо складніше.
Інго Бюрк

30
до коміксу: він не друкує \ n's, а цикл з 1 досить незручний (як, наприклад, проти природи C) ...
VX

11
@VX Білл Аменд - давній Паскаль, який важко переживає, і кожного разу, коли він пише С, це стає досить очевидним.
пухнастий

5
Це дуже схоже на одного з моїх старих вчителів англійської мови.
Каз Вулф

2
Заборона + мала б тут сенс, але, можливо, це було б надто складно.
Фарап

Відповіді:


9

CJam, 109 107 106 104 103 байт

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

Сказане вище - оборотний дамп xxd.

Тестування

Ви можете згенерувати та виконати вищезазначений код, запустивши його в онлайн-перекладачі :

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

Щоб побачити згенерований код (не виконуючи його), видаліть остаточний ~.

Для підрахунку кількості байтів (один символ - один байт в ISO-8859-1), замініть фінал ~на "a" ,.

Версія для друку (122 байти)

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

Після натискання на рядок (S) виконується наступне:

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

Моар-гольф

Після натискання недрукуваного рядка (U) виконується наступне:

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

Це висуває рядок версії для друку. Решта коду працює, як і раніше.


Використовуючи код, я отримую цей згенерований код, який становить 144 байти. Я щось роблю не так?
Оптимізатор

Кодування UTF-8 призведе до збільшення кількості байтів, так. З ISO-8859-1, кількість байт 109. Ви можете замінити ~з , ,щоб перевірити.
Денніс

2
Я отримав точний результат, який зробив оптимізатор, але додав, що це ]:+~зробило його. Чому ви просто не додасте це до свого коду?
Світлий

1
@ user23013: Інтерпретатор Java поважає $ LANG за введення / виведення. Внутрішньо CJam просто має 16-бітні символи.
Денніс

3
Ви фактично не повинні unicode-ize своє рішення, так як без самого стиснення це всього 124 байти, побивши всіх інших.
Оптимізатор

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.


19
Це геній!
Оптимізатор

1
Так, замінюючи кожен символ більшим рядком. Зробіть 25 копій більшого рядка.
Оптимізатор

1
@Optimizer Те є геній :)
FryAmTheEggman

3
@Malvolio Насправді повторний розділ становить 30 символів. І я міг показати величезну послідовність спроб, додаючи та скорочуючи слова та замінюючи заміни, перш ніж знайти це просте рішення.
edc65

1
@IsmaelMiguel Я думаю, ви маєте на увазі будь-який браузер ES6. Проблема: під час опублікування цього виклику рядки шаблонів не реалізовувались у жодному браузері: Firefox був першим - відносно 34, першого грудня 2014 року - потім Chrome, березень 2015 року. Але навіть без рядків шаблону ваш скаур був би 153, краще, ніж мій . Ви повинні опублікувати це як відповідь.
edc65

34

Пітон: 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)

Я не дуже пітон, але це здається мені досить коротким.

Редагувати: Тож я помилявся, зовсім не короткий! Дякую за допомогу в коментарях: D


1
Ви можете втратити новий рядок і відступ на циклі for, щоб зберегти пару байтів.
Холлоуей

1
@Geobits, я роблю, що 157
Holloway

1
@Geobits ти працюєш на машині Windows? Кодування рядків у Windows часто \ r \ n замість просто \ n. Ось чому він показує 157 байт для нас, але 160 для вас.
Роб Уоттс

2
Це лише 160 . Ви, ймовірно , пропустивши три \в \nрезультаті витоку ...
оптимізатор

1
Ви можете перемістити значення для bв print: %має перевагу вище, ніж *.
FryAmTheEggman

29

CJam, 151 140 135 132 130 128 байт (твіт)

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

Спробуйте тут

Я можу скоротити це до 110 байтів, перетворивши це на unicode, але оскільки це не переможе інше рішення unicode, я б краще не ставив його :)


23
Гей, що :Dтам робить цей смайлик ?! Ви надсилаєте повідомлення друзям під час затримання? Іди до кабінету директора!
Дверна ручка

2
@Doorknob: D: P
Оптимізатор

Можливо, ви могли б створити Tпсевдонім для цього .\nThe , а потім видаліть додатковий рядок, який це створює з початку вихідного рядка (мій cjam-fu недостатньо гарний, щоб зрозуміти, чи можна це легко зробити)

@professorfish, який закінчує споживання більше байтів, ніж економить. mothereff.in/… *% 28Y% 2F% 28% 40 \
Оптимізатор

Nitpicking: Використання верхніх 128 байт кодової сторінки, сумісної з ASCII, не має нічого спільного з Unicode.
Денніс

23

PHP, 0 байт



Ви можете використовувати будь-який імпорт та зовнішні бібліотеки, не рахуючи імпорту.

Щоб запустити цей код, вам потрібно імпортувати бібліотеку, яка викликається 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.
";'; ?>

І ви, мабуть, allow_url_includeувімкнули його php.ini.

Немає більше цифр чи розширень, завдяки Деннісу.


9
Першим моїм інстинктом було кричати щось про лазівки, але оскільки ця відповідь насправді є самодостатньою, я думаю, що це розумний спосіб використання PHP для використання лазівки, створеної навмисно для відповідей Python. Оскільки ви вже обманюєте, ви можете просто використовувати require_once "data://text/plain,The eighteen-hundreds...";, що не вимагає sh , не використовує числа та все ще 0 байт.
Денніс

10
Я буду підтримувати це за творчість, але не прийму.
hmatt1

14

Рубі, 185 180 176 байт

EDIT: Рядок інтерполяції, спасибі @britishtea

Це мій перший гольф коли-небудь, і я не дуже рубіст (але, звичайно, люблю Рубі). У всякому разі, це все (скорочено, пропозиція Дорноба).

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
Ви можете додатково пограти, замінивши деякі слова / групи слів інтерполяцією String.
britishtea

3
+1, зауваживши, що в рядку є (майже) 25 слів
Digital Trauma

2
s.split.size.nextекономить 5 символів (не потрібно вказувати пробіл для поділу).
Дверна ручка

Я не знаю Рубі, але не був (s.split.size+1).timesби на 1 байт коротшим?
seequ

1
@Sieg заборонено використовувати номери!
rjdown

13

Java 249 231 230 222

Моя перша відповідь! Чому б не почати використовувати мову, яку я так добре знаю.

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

Безумовно

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
Ласкаво просимо! Ви можете позбутися від publicсвого класу і скоротити його argsдо одного персонажа. Ви також можете зробити це, a++<':'а не збільшувати його окремо. Оскільки ОП не враховує імпорт, ви можете заощадити трохи більше import static java.lang.System.*;, тоді вам не потрібно писати System.пізніше (де він рахується). Здійснюючи це, я зрозумів, що це приблизно 230. Ви можете заглянути на сторінку порад Java, якщо ви ще цього не зробили.
Геобіць

@Optimizer Дякую! Я просто не бачив закреслення вище.
Світлий

@Luminous NP :)
Оптимізатор

@Geobits Дякую! Мабуть, ви також можете вставити код прямо в саму петлю. Нічого не додав і не видалив, але я думаю, що це виглядає більш гольф таким чином.
Світлий

4
Зловживання петлею досить поширене. Якщо у вас було декілька висловлювань у тілі, ви можете поставити одне на зовнішній стороні, а інше всередині, щоб зберегти один символ (оскільки все одно вам потрібна крапка з комою). Багато гольфів в кінцевому підсумку є одним з великих циклів таким чином. Крім того, "виглядає більш гольфовим" - цілком поважна причина робити що-небудь, навіть якщо це не економить: 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);}

Спочатку я спробував спрощену версію (189 байт), яка була кращою за інші рішення 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");}

яку я згодом трохи оптимізував ...


1
Так, це чудово. Я не усвідомлював статичні змінні зі строковими літералами, присвоєними їм неявно, мають тип char *.
FireFly

@FireFly GCC складає певний розмір, aімовірно, тому що він за замовчуванням int, який може прийняти charзначення. Це не подобається, bякщо я не називаю це char[]все-таки. VX, який компілятор ви використовуєте?
Рівень річки Св.

bце intтеж , але він тримає покажчик на рядок буквальною. У GCC це цілком нормально (у мене на машині 4.8.2).
VX

1
for(a='a';++a<'z';)
seequ

9

JavaScript, ES6, 174 172 154 байт

Використання @ edc65's replace . Дякую!

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

Працює лише в останніх Firefox (34 і вище) завдяки використанню рядків шаблону.


@Nijikokun Ви знаєте, що викличе 30 повторень замість 25, правда?
Оптимізатор

Я здогадуюсь, що ff 34 - бета-версія або що-небудь з моменту останнього перегляду (щойно перевірено), і це 33, і він там не працює
Sammaye

8

BrainFuck ( 1597 символів )

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

Це ще можна пограти в гольф, якщо хтось зацікавиться.

Ви можете перевірити це і підтвердити, що він дає правильний результат, дотримуючись усіх правил.


5
Що це? Я ж казав вам писати речення, а не випадкові вигуки! Тут навіть немає жодного слова!
Рікінг

5
Уммм .. Я думаю, що мета - використовувати найменше символів. Ви впевнені, що виграли "анти-гол" :-)
Карл Віттофт

7

Perl - 145

Я радий бачити стільки відповідей! Ось рішення 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

7

Оскільки вона так ненавидить математику, чому б не 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}]

6

Javascript ES6, 198 193 байт

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

Ваш вчитель не хоче ніяких цифр, але оскільки вони є вчителем англійської мови, вони не мають поняття, що Math.floor(Math.exp(Math.PI)+Math.E)означає.

Більш зрозуміло:

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

Потрібно запустити в останній Firefox


1
Пропущений новий рядок в кінці, тому перший і останній рядки додаються, даючи 75 рядків
edc65

Я призначу +1 за згинання правил із посиланням XKCD на e ^ pi, але з + e на відміну від -pi ... Браво!
WallyWest

-4 байти:with(Math)alert("long string here".repeat(exp(PI)+E|[]))
nderscore

Ну добре, забудь про Math:(q='aaaaa'.length)*q
edc65

Забудьте і про коментар @ edc65! Використовуйте це "\x18".charCodeAt():! (жорсткий код стрілки вгору, і ви заощадите тонну!)
Ісмаель Мігель

6

Javascript - 178 байт 176 байт

Мій перший гольф, подумав, що я б його пострілив із операторами біт-тремтіння, не вийшов так добре, як сподівався, але добре!

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

Оскільки я вже затриманий і явно маю проблеми поводити себе ... Javascript - 71 байт

Цей, мабуть, загрожує мені більш глибоким неприємностям, але, якщо я вже приземлився під вартою, і я планую обдурити своє затримання, мабуть, мені не вистачає хороших оцінок щодо того, як я повинен вести себе в класі. Можливо, якщо я можу надіти одного на свого вчителя, я можу перетягнути його на всіх інших гольфістів там.

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

Швидкий! Користувачі Chrome / IE 11 / Firebug, відкрийте свої консолі ПРАВИ зараз і спробуйте.

(Будь ласка, не шкоди мені занадто сильно, я думав, що це смішно)


1
72 - це весело. 176 багато разів помиляється: Array (25) .join () дає 24 повторення, а новий рядок у кінці речення відсутній. Загалом 24 * 3 = 72 ряди замість 100 (лінивий хлопчик!)
edc65

ПОСЛІДНО, добре виправлено. Зараз 178 та 71.
Сідні

1
Ви можете зберегти 2 байти, додавши t і пробіл у "een-сотні ... for".
Світлий

Що робить другий код?
justhalf

1
@justhalf, Для цього використовується JQuery, загальна бібліотека JavaScript, яка, очевидно, використовує мережу SO. $ Насправді є функцією, яка, крім багатьох інших речей, займає багато роботи з вибору елементів DOM. Використовуючи $ ('<selector>'), який є в даному випадку всі елементи з тегом 'code', я отримую об'єкт, що містить усі елементи. Використовуючи [+! B], я отримую ціле значення false, яке дорівнює нулю, тому я вибираю 0-й індекс, який, як виявляється, є першим кодовим блоком OP, що насправді є улюбленим висловом викладачів.
Сідні

5

C # - 229 216 байт

Безкоштовно 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");}}

Альтернативно, те саме число байтів ( usingхоча більше зловживань)

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

Ви можете додати "за" доa
FryAmTheEggman

@FryAmTheEggman рядок має 25 символів, він використовує її для отримання числа 25 дискретно. Однак він може замінити цей метод простим відніманням знаків один від одного ( ':'-'!'== 25), що коротше a.Length, і дозволить включити, як ви запропонуєте. (Крім того, зробіть так, як здаються інші відповіді, і просто переведіть між собою !і :, смішно, як ми всі вибрали однакові символи)
VisualMelon

@VisualMelon Whoops, ви абсолютно праві.
FryAmTheEggman

1
Я думав, що міг би, оскільки дозування навіть не рахуються, чи пояснила це ОП?
Вільям Барбоса

5

Befunge-93, 268 260 256 (розмір сітки: 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."$_,#!:

Це мій перший гольф, тому я подумав, що я спробую мову, яка ще не була зроблена для цієї проблеми, оскільки я нічого іншого не додаю. Оскільки він сумісний з Befunge-93 (вміщається всередині сітки 80x25 і використовує лише інструкції Befunge-93), він також повинен працювати і в Befunge-98. На всякий випадок я також уникав переходу вказівника на будь-які символи, що не належать інструкціям, крім пробілу. Я не міг згадати, чи специфікація насправді визначала цих символів як відсутність, і у мене не буде носових демонів у моєму коді.

Ви не можете дійсно ungolf код Befunge. Головне, що тут слід зазначити, - це те, що Befunge висуває символи до стека як їх ASCII значення, що робить відносно простим посилання на числа, не буквально посилаючись на них. У "K"верхньому лівому куті - 75, посилаючись на кількість повторень, кратне кількості пунктів "the" за повтор; Я використовую модуль та деякі інші майстерності на (копіях) цього номера, щоб визначити, який шлях пройти через друк на кожному обході. ::-приємна ідіома для нуля, корисна для нульових кінцевих рядків; Я тут його два рази використовую.

Іноді вказівник повинен пройти через місце, де я визначаю рядок, отже, конкретний вибір символів, який використовується для отримання певних цифр у деяких точках.

Приємна річ у багатьох інтерпретаторів Befunge - це те, що ви можете спостерігати за тим, як вказівник дротить навколо сітки, а також бачити, які значення є у стеку. Таким чином, ви можете перейти і побачити, як програма працює сама, більш-менш! Я б рекомендував використовувати http://befungius.aurlien.net/, якщо у вас немає власного уподобаного перекладача Befunge.

Це, ймовірно, може бути сформовано трохи (або багато) більше. Будь ласка, дайте мені відгуки! Якщо мені потрібно надати кращі пояснення, хтось дасть мені знати; Я новачок у цьому.

Редагувати - поголив кілька байтів, позбавившись від зайвого переадресації до останнього рядка, коли програма припиняється (просто поставивши місце, @де ^раніше було).

Ще одна редакція - відголив ще кілька байтів у різних місцях, переважно з хитрістю. (Також додано розмір сітки, як здається, це тенденція з відповідями Befunge.)


Привіт Касран, ласкаво просимо до обміну стека кодегольфа! Ці відповіді виглядають чудово. Ваше пояснення добре, і ви пов’язані з інтерпретатором Befunge, який дуже корисний для дивних мов, не у кожного є компілятор (люди зазвичай роблять такі речі, як "запустити це тут").
hmatt1

Befunge - це дійсно важка мова, і вам потрібно зберігати розмір самого коду в своїй свідомості під час написання. Ваш код виглядає чудово і працює. Але чи зменшить би розмір, якщо re a time десь заощадити ?
Ісмаїл Мігель

Я не використовую будь-яких конкретних для Funge-98 інструкцій чи поведінки, про які я знаю, але, коли я написав цю відповідь, я дізнався, що певна поведінка інтерпретатора Бефунгіуса не є стандартною, а саме - використовувати #в одному кінці рядка для пропуску. персонаж на іншому кінці (наприклад, у CCBI , #просто пропускає нескінченний простір між ним та символом на іншому кінці), який порушує цю програму. Я не намагався повернутися і виправити це уявлення з цього приводу.
Касран

Там є кілька 1цифр, які заборонені
Джо Кінг,

4

Піт 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 

Зверніть увагу на пробіл.

Використовує майже таку ж хитрість, як @Geobits та його друзі-коментатори у відповіді Python для побудови рядка. Зараз також використовується частина цієї відповіді .

При цьому використовується вбудована змінна G, яка містить abcdefghijklmnopqrstuvwxyzі отримує на одну меншу довжину для отримання 25 виходів.


1
Здається, це 136 байт, а не 135
Оптимізатор

1
@Optimizer Вибачте, я повинен прочитати власні примітки: я забув простір, коли я сам вставив його там: S
FryAmTheEggman

4

Рубі - 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! Можливо, ви зможете використовувати String#*для повторення рядків 25 разів замість Integer#times.
britishtea

@britishtea - відпрацював частування :)
Мікі

1
Ви можете поголити ще кілька байтів, попередньо не призначивши рядки. Простір між "put" та "літеральним рядком" є необов'язковим ( puts"hi"є законним).
britishtea

Призначення е всередині інтерполяції - приємний штрих.
Уейн Конрад

3

Пітон, 165 байт

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

Дійсно вийшло, що довжина h - 25, це не було навмисно. =)


3

Пітон 2 - 143

Дурна відповідь:

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

Зауважте, що повна кількість - 162. Я все залишила from this import i .

Використовує подібні заміни моїй піт-стратегії, але я не міг протистояти публікації цього повідомлення, виявивши веселість імпорту з цього :)


+1 Для використання from this import i! Звідки ви дізналися про це?
Бета-розпад

1
@BetaDecay Мені насправді стало нудно і вирішив прочитати дзен пітона, тому я пішов до свого перекладача і написав import this. Тоді я подумав: "Що ще могло бути в thisмодулі?" Тому я зателефонував dir(this). Ось, поряд зі словником, накресленим рядком та "!"змінною, була числова константа ... дорівнює 25.
FryAmTheEggman

3

PHP (175 157156 байт; 152 з unix EOF):

Це не найголовніше рішення для гольфу, але, безумовно, виконує цю роботу і менше, ніж деякі спроби.

Ось код:

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

Стара версія:

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

Це працює, тому що php циклізує символи, і ми просто перевіряємо, чи не так, zі зупиняємося.

(Одна цікавість полягає в тому, що коли php доходить z, то він переходить до aa.)


3
Загальна умова тут - вважати нові рядки лише одним байтом, якщо, можливо, ваша мова не є такою впертою, що вона приймає лише CRLF, що не стосується PHP.
nyuszika7h

3

Пітон 2 - 155

Примітка: оскільки контрольні символи не відображаються в SE, я замінив його на\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')

Версія бази 64:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=

Щодо імпорту, я думаю, ви можете трохи заощадити from string import *або, однак, це називається в Python
FireFly

1
Ви можете перемістити "підлітка" в b.
FryAmTheEggman

2
Ви можете зняти []дужки в першому рядку, який неявно створює кортеж, а потім розпаковує його.
Дверна ручка

Ви також можете переміститиord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman

1
@Dennis Остання редакція ОП дозволяє вести нові рядки.
Бета-розпад

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]

Необхідний імпорт:

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

Якщо ви хочете запустити його під Node.js, встановіть LiveScript( не livescript ) таprelude-ls пакети з НПХ, замініть alertз console.logі працювати lsc prog.ls, де prog.lsзнаходиться програма.


13
Див правила: "Не можна використовувати символи 0123456789"
Пол Р

2
Хороший улов, виправлений.
nyuszika7h

2

T-SQL: 206

Використовує перехресне з'єднання в п'ять рядків, щоб генерувати 25 рядків, вибираючи фразу. Розриви рядків важливі для виводу.

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

C, 196 символів

Це непросте завдання для хорошого ol 'C. Розроблення шаблону "Стіни-сотні ..." рятує мене цілих два символи.

Пробіл для наочності, включати не враховується.

#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

Рубі, 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."}

Пояснення

  • Використовуйте String#uptoдля друку рядків 25 разів. Діапазон "K".."c"- 25 символів.
  • Використовуйте базову рядкову інтерполяцію для скорочення ліній.

2
#{a="The "}насправді коштує вам більше символів! #{a}така ж довжина, якThe
Майкі

2

Ракетка 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."))))

Безголівки:

(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 байт

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

Безумовно

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

Я використовував біт перехід до ітерації без будь-якого числа.

a<<='\xC'+'\xD' задає a 0b1 [25 нулів]

a>>=!!a зміщується вправо на один біт щоразу, коли ми повторюємо цикл

Редагувати: a дорівнює argc, тому його значення вже дорівнює 1, коли програма запускається без аргументів. Змінений a>>='\xB'-'\xA'в a>>=!!'\xA'якому становить 4 байти коротше. Також текст відображався лише 24 рази. Виправлено це. Видалено додаткові дужки в while.

Редагувати 2: змінено !!'\xA'на !!a. Здається, працює і зберігає 4 байти


1
Ви можете використовувати putsдля збереження більше байтів.
Spikatrix

2

Рант, 191 байт

Не найкоротше рішення, але все ж круто. Я написав підпрограму для написання перших трьох рядків і створив її так, щоб викликати її порожнім аргументом, повернув рядок довжиною 25 символів. Потім передаю його довжину ретранслятору.

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

Безголівки:

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

Спробуйте в Інтернеті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.