Написать строки в заключении

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счету. Самый низкий балл побеждает!
hmatt1
источник
2
Если бы текст читал «1900-е годы», написание вывода было бы немного сложнее.
Инго Бюрк
30
на комикс: он не печатает \ n, и цикл из 1 довольно неловкий (как против природы C) ...
VX
11
@VX Билл Аменд - давний приверженец Паскаля, и всякий раз, когда он пишет C, это становится довольно очевидным.
пушистый
5
Это очень похоже на одного из моих старых учителей английского языка.
Каз Вулф
2
Запрет + имел бы смысл здесь, но, возможно, это было бы слишком сложно.
Pharap

Ответы:

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.

edc65
источник
19
Это гений!
Оптимизатор
1
Да, заменяя каждый символ на большую строку. Делая 25 копий большей строки.
Оптимизатор
1
@Optimizer То есть гений :)
FryAmTheEggman
3
@Malvolio На самом деле повторяющийся раздел составляет 30 символов. И я мог бы показать огромную последовательность попыток, добавляя и сокращая слова и заменяя замены, прежде чем найти это простое решение.
edc65
1
@IsmaelMiguel Я думаю, вы имеете в виду любой браузер ES6. Проблема: в то время, когда этот вызов был опубликован, строки шаблонов не были реализованы ни в одном браузере: Firefox был первым - rel 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

Geobits
источник
1
Вы можете потерять символ новой строки и отступ в цикле for, чтобы сэкономить пару байтов.
Holloway,
1
@Geobits, я делаю это 157
Holloway
1
@ Geobits вы работаете на машине с Windows? Кодировки строк в окнах часто \ r \ n, а не просто \ n. Возможно, поэтому он показывает 157 байт для нас, но 160 для вас.
Роб Уоттс
2
Это только 160 . Вы, вероятно , пропустив три \в \nрезультате утечки ...
Оптимизатор
1
Вы можете переместить значение bв print: %имеет более высокий приоритет, чем *.
FryAmTheEggman
29

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

"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 не достаточно хорош, чтобы выяснить, можете ли вы легко это сделать)
@professfishfish, который в конечном итоге потребляет больше байтов, чем сохраняет. mothereff.in/… *% 28Y% 2F% 28% 40 \
Оптимизатор
Проницательность: использование старших 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.

Нет больше номеров или расширений, благодаря Деннису.

jimmy23013
источник
9
Моим первым инстинктом было что-то кричать о лазеек, но поскольку этот ответ на самом деле самодостаточен, я думаю, что это умный способ использования PHP для использования лазейки, специально созданной для ответов Python. Поскольку вы уже обманываете, вы можете просто использовать require_once "data://text/plain,The eighteen-hundreds...";, который не требует sh , не использует цифры и по-прежнему равен 0 байтов.
Деннис
10
Я одобряю это для творчества, но я не приму это.
hmatt1
14

Рубин, 185 180 176 байт

РЕДАКТИРОВАТЬ: интерполяция строк, спасибо @britishtea

Это мой первый в мире гольф, и я не очень люблю Rubist (но я, безусловно, люблю Ruby). Во всяком случае, это оно (сокращенно, предложение 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
источник
1
Вы можете изменить это дальше, заменив некоторые повторяющиеся слова / группы слов интерполяцией строк.
Британцы
3
+1 за то, что заметил (почти) 25 слов в строке
Digital Trauma
2
s.split.size.nextсохраняет 5 символов (вам не нужно указывать место для разделения).
Ручка двери
Я не знаю Руби, но не был (s.split.size+1).timesбы на 1 байт короче?
Seequ
1
@ Зиг запрещается использовать номера!
rjdown
13

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

Ungolfed

import static java.lang.System.*;
class c
{
    public static void main(String[]g)
    {
        for(int a='!';a++<':';out.println("The eighxrum.\nThe ninexfun.\nThe two-thousands are a time to run\na civilized classroom.".replaceAll("x","teen-hundreds were a time for ")));
    }
}
светящийся
источник
9
Добро пожаловать! Вы можете избавиться от publicсвоего класса и сократить argsдо одного персонажа. Вы также можете сделать это a++<':'вместо того, чтобы увеличивать его отдельно. Так как OP не учитывает импорт, вы можете сэкономить немного больше import static java.lang.System.*;, тогда вам не нужно писать System.позже (там, где это важно). Сделав это, я получил около 230. Возможно, вы захотите взглянуть на страницу советов по Java, если вы еще этого не сделали.
Geobits
@Optimizer Спасибо! Я просто не видел зачеркнутый выше.
Светящийся
@Luminous NP :)
Оптимизатор
@ Geobits Спасибо! По-видимому, вы также можете вставить код прямо в сам цикл. Ничего не добавлял и не удалял, но я думаю, что в таком случае это выглядит как игра в гольф.
Светящийся
4
Злоупотребление петлями довольно распространено. Если у вас есть несколько операторов в теле, вы можете поместить один снаружи, а остальные внутри, чтобы сохранить один символ (поскольку в любом случае вам нужна точка с запятой). Многие гольфы заканчивают тем, что стали одной большой петлей. Кроме того, «выглядит более наигранным» - это абсолютно веская причина, чтобы делать что угодно, даже если это не спасает: P
Geobits
11

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

который я позже немного оптимизировал ...

VX
источник
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 байта

Используя replaceтрюк @ edc65 . Спасибо!

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
Что это? Я сказал вам писать предложения, а не случайные загогулины! Здесь даже нет слов!
Riking
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
hmatt1
источник
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

scrblnrd3
источник
1
В конце
пропущен символ
Я награждаю +1 за изменение правил с помощью ссылки XKCD на e ^ pi, но с + e в отличие от -pi ... Браво!
WallyWest
-4 байта:with(Math)alert("long string here".repeat(exp(PI)+E|[]))
nderscore
Ну что (q='aaaaa'.length)*q
ж
Забудьте о комментариях @ 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-сотни ... для".
Светящийся
Что делает второй код?
Половина
1
@justhalf, он использует JQuery, общую библиотеку JavaScript, которую, очевидно, использует сеть SO. $ На самом деле является функцией, которая, помимо многих других вещей, берет на себя большую часть работы по выбору элементов DOM. Используя $ ('<selector>'), который в данном случае является всеми элементами с тегом code, я получаю объект, содержащий все элементы. Используя [+! B], я получаю целочисленное значение false, которое равно нулю, поэтому я выбираю 0-й индекс, который оказывается первым блоком кода ОП, что на самом деле является любимым высказыванием учителя.
Сидни
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
~~ (╯ ° □ °) ╯︵ ┻━┻
Уильям Барбоза
Вы можете добавить «для» кa
FryAmTheEggman
@FryAmTheEggman строка длиной 25 символов, он использует ее, чтобы получить число 25 дискретно. Однако он может поменять этот метод на простое вычитание символов друг от друга ( ':'-'!'== 25), которое короче a.Length, и позволит включить его, как вы предлагаете. (Альтернативно, делайте так, как кажется другим ответам, и просто переходите между !и :, забавно, как мы все выбрали одни и те же символы)
VisualMelon
@VisualMelon Ой, вы совершенно правы.
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. На всякий случай, я также избежал, чтобы указатель передавался через любые символы без инструкций, кроме пробела. Я не мог вспомнить, определяла ли спецификация эти символы как no-ops, и у меня не будет носовых демонов в МОЕМ коде.

Вы не можете действительно раскрутить код Befunge. Здесь следует отметить, что Befunge помещает символы в стек как их значения ASCII, что позволяет относительно просто ссылаться на числа без буквальной ссылки на них. Значение "K"в верхнем левом углу равно 75, что означает количество повторений, умноженное на количество предложений «за» на повторение; Я использую модуль и некоторые другие хитрости (копии) этого числа, чтобы определить, какой путь пройти через печать на каждом уходе. ::-хорошая идиома для нуля, полезная для строк с нулем в конце; Я использую это дважды здесь.

Иногда указатель должен проходить через место, где я определяю строку, следовательно, определенный выбор символов используется для получения определенных чисел в некоторых точках.

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

Это, вероятно, можно уменьшить (или намного) больше. Пожалуйста, дайте мне отзыв! Если мне нужно дать лучшее объяснение, кто-нибудь, дайте мне знать; Я новичок в этом.

Редактировать - сбрить несколько байтов, избавившись от ненужного перенаправления на последнюю строку, когда программа завершается (просто помещая @туда, где ^раньше было).

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

Kasran
источник
Привет, Касран, добро пожаловать на обмен стеками Codegolf! Эти ответы выглядят великолепно. Ваше объяснение хорошее, и вы связались с интерпретатором Befunge, который действительно полезен для странных языков, для которых не у всех есть компилятор (люди обычно делают такие вещи, как «запустите это здесь»).
hmatt1
Befunge - действительно сложный язык, и вы должны помнить размер самого кода при написании. Ваш код выглядит отлично и работает. Но уменьшит ли это размер, если вы сохраните re a time где-нибудь?
Исмаэль Мигель
Я не использую какие-либо специфичные для Funge-98 инструкции или поведения, о которых я знаю, но с тех пор, как я написал этот ответ, я узнал, что некоторые поведения интерпретатора Befungius не являются стандартными, а именно - использование #на одном конце строки для пропуска символ на другом конце ( например, в CCBI# просто пропускает бесконечное пространство между ним и символом на другом конце), что нарушает эту программу. Я не удосужился вернуться и исправить это представление с учетом этого.
Касран
Там есть несколько 1цифр, которые не разрешены
Джо Кинг,
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 

Обратите внимание на завершающий пробел.

Использует почти тот же трюк, что и @Geobits и его друзья-комментаторы в ответе Python для построения строки. Теперь также использует некоторые из этого ответа .

При этом используется встроенная переменная G, которая содержит abcdefghijklmnopqrstuvwxyzи получает на единицу меньше своей длины для получения 25 выходных данных.

FryAmTheEggman
источник
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

Mikey
источник
1
Умное использование литералов персонажей 1.8! Вы можете использовать String#*для повторения строк 25 раз вместо Integer#times.
Британцы
@britishtea - работал угощение :)
Майки
1
Вы можете сбрить еще несколько байтов, не назначая сначала строки. Пробел между путями и строковым литералом необязателен ( puts"hi"допустим).
британцы
Назначение e внутри интерполяции - приятное прикосновение.
Уэйн Конрад
3

Python, 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, что не было преднамеренным. знак равно

DJMcMayhem
источник
3

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

Использует аналогичные замены для моей стратегии Pyth, но я не удержался от публикации этого после обнаружения веселости импорта из этого :)

FryAmTheEggman
источник
+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

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

Версия Base 64:

YSxiPScKVGhlICcsJ3RlZW4taHVuZHJlZHMgd2VyZSBhIHRpbWUgZm9yICcKcHJpbnQoYSsnZWln
aCcrYisncnVtLicrYSsnbmluZScrYisnZnVuLicrYSsndHdvLXRob3VzYW5kcyBhcmUgYSB0aW1l
IHRvIHJ1bgphIGNpdmlsaXplZCBjbGFzc3Jvb20uJykqb3JkKCcZJyk=
Бета распад
источник
Что касается импорта, я думаю, что вы могли бы немного сэкономить с from string import *или как бы он ни вызывался в Python
FireFly
1
Вы можете переместить «подросток» в б.
FryAmTheEggman
2
Вы можете удалить []скобки в первой строке, которая неявно создает кортеж, а затем распаковывает его.
Ручка двери
Вы также можете переместитьord('d')//len('aaaa') to before the string so you don't have to bracket it.
FryAmTheEggman
1
@Dennis Последнее редактирование OP позволяет вести новые строки.
бета-распад
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пакеты из npm, замените alertна console.logи запустите lsc prog.ls, где prog.lsнаходится программа.

nyuszika7h
источник
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
MickyT
источник
2

С, 196 символов

Это не легкая задача для доброго старика. Использование шаблона «% steen-сотни ...» спасает мне целых два символа.

Пробелы для наглядности включают не в счет.

#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 символов.
  • Используйте базовую интерполяцию строк, чтобы сократить строки.
britishtea
источник
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."))))

Ungolfed:

(let ([x "teen-hundreds were a time for "])
  (for([z(+ #xa #xf)])
    (displayln (~a "The eigh"x"rum.\nThe nine"x"fun.\nThe two-thousands are a
     time to run\na civilized classroom."))))
Мэтью Баттерлик
источник
2

C 215 203 199 байтов

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

Ungolfed

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

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

a<<='\xC'+'\xD' устанавливает значение 0b1 [25 нулей]

a>>=!!a сдвиг вправо на один бит каждый раз, когда мы повторяем цикл

Edit: a равно argc, поэтому его значение уже равно 1, когда программа запускается без аргументов. Изменено a>>='\xB'-'\xA'на a>>=!!'\xA'4 байта короче. Также текст отображался только 24 раза. Починил это. Убраны лишние скобки в while.

Изменить 2: изменено !!'\xA'на !!a. Кажется, работает и сохраняет 4 байта

Ethiraric
источник
1
Вы можете использовать, putsчтобы сохранить больше байтов.
Spikatrix
2

Rant, 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}

Ungolfed:

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

Попробуйте онлайн

Berkin
источник