Вы Десмонд Хьюм. Последние 3 года вы и ваш партнер Кельвин работали на компьютере, для которого требуется вводить очень специфическую последовательность каждые 108 минут, чтобы спасти мир.
4 8 15 16 23 42
Ваш партнер умер 40 дней назад (из-за несчастного случая с головой Кельвина и большим камнем), и вам не с кем поговорить. Никто не вводит цифры для вас. Никто не нарушит однообразие. Сначала это было не так уж плохо, но вы больше не можете справиться с тишиной. И если вам придется слушать «Создайте свой собственный вид музыки» еще раз, вы будете кричать.
Вы решаете, что Вам нужно выбраться. Сбежать. Вы решаете, что построите плот и отплывете от острова. Но потом вы понимаете плохие новости: вы застряли здесь. Вы должны продолжать спасать мир.
Но потом ты понимаешь хорошие новости: ты программист! Вы можете автоматизировать спасение мира! Взволнованный, вы подбегаете к компьютеру и, используя свои верные навыки работы с Python, вы делаете быстрый сценарий, чтобы ввести цифры для вас.
import time
while True:
print "4 8 15 16 23 42"
time.sleep(60 * 107)
Быстрый, простой, надежный, короткий и легкий. Все, что должен быть хороший скрипт на Python. Но затем, когда вы пытаетесь проверить это, вы получаете ошибку.
Bad command or file name.
Да странно. Ну что ж, давайте попробуем c ++.
#include <iostream>
#include <unistd.h>
int main()
{
while (true)
{
std::cout << "4 8 15 16 23 42" << std::endl;
sleep(60 * 107);
}
}
Нет! C ++ тоже не найден. Вы пробуете каждый язык, который можете придумать. Javascript, Ruby, Perl, PHP, C #. Ничего. Этот компьютер был сделан до всех популярных языков дня.
Соревнование
Вы должны написать программу, которая будет:
1) Выведите именно это: «4 8 15 16 23 42» (без кавычек)
2) Подождите некоторое время между 104 и 108 минутами. (По данным The Lost Wiki )
3) Повторите навсегда. (Или до тех пор, пока вы не поймете, что это все сложное мошенничество и что вы застряли в странном подвешенном состоянии из-за ленивого письма и задавания вопросов, на которые у вас нет ответов. Спасибо Джей Джей Абрамс!)
Однако здесь есть одна загвоздка: вы ДОЛЖНЫ использовать язык, который компьютер на станции лебедя мог бы реально запустить. При условии, что
А) Компьютер был обновлен во время строительства,
Б) Обновлений программного обеспечения компьютеров не было, и
C) Нет доступного интернет-соединения (имеется в виду, что вы не можете загрузить Golfscript ...),
и сделать наше лучшее предположение о дате строительства станции Лебедь, (опять же, потерянная вики ).
Это означает, что вы должны использовать язык, который был впервые выпущен 31 декабря 1977 года или ранее.
Несколько уточнений правил:
Включение библиотек в порядке, но применяется то же правило (библиотеки должны быть до 1977 года).
Вам не нужно беспокоиться о совместимости ОС.
Если вы используете
system
или ваш эквивалент языка, вы должны доказать, что любые системные команды, которые вы используете, были бы доступны до 1978 года. Статья в Википедии, вероятно, лучший способ доказать это.Неважно, когда вы запускаете программу, до тех пор, пока она заканчивается чередованием печати и сна. (print-sleep-print-sleep ... и sleep-print-sleep-print ... оба приемлемы.)
Это Code-Golf, поэтому выигрывает самый короткий ответ в байтах.
источник
Ответы:
APL ,
28242524 байтаЭто сработало в STSC APL * PLUS и в IPSA SharpAPL в 1977 году, и хотя современные APL имеют массу новых функций, сегодня это все еще работает на всех основных APL:
Первая строка печатает накопленную сумму показанных чисел, которые являются необходимыми числами. Вторая линия д е л н я 6360 секунд (106 минут), а затем принимает сигнумов того , что (1, очевидно), и переходит к этой линии (т.е. предыдущий, номер-печать один).
Однако APL \ 360 (APL для IBM System / 360 ) 1966 года фактически бьет его на один байт (протестировано на бесплатном эмуляторе IBM / 370 ):
Спящий двутавровый луч (« IBM » - понимаете?) Занимает время ожидания с точностью до 1 ⁄ 300- й секунды, поэтому мы ждем 19 × 10 5-ти jiffies = 105 минут и 33 1 ⁄ 3 секунды.
источник
+\⎕A⍳'EEHBHT'
(если⎕IO=0
)⎕A
.+\4 4 7 1 7 19
тогда?MUMPS - 30 символов, около 1966 г. (стандарт ANSI впервые в 1977 г.)
Моя первая попытка кода гольф, здесь мы идем!
MUMPS по-прежнему является популярным языком для программного обеспечения EHR, созданного Массачусетской больницей общего профиля в Бостоне. Наиболее известной реализацией является Epic Systems в Вероне, Висконсин.
источник
TECO, 53 байта
TECO (Text [ранее Tape] Editor and Corrector) - текстовый редактор, созданный в 1962 году. Он также может использоваться для запуска автономных программ. Это современный редактор для PDP, VAXen и т. Д.
Согласно руководству TECO,
^H
команда указывает время суток. Обязательно проверьте свою операционную систему и источник питания, поскольку единица времени может варьироваться в зависимости от вашей машины:Следующая программа работает в системах, где время суток измеряется в секундах / 2:
Обратите внимание, что
^H
и$
должны быть введены, нажав, соответственно, CONTROL-H и ESCAPE.Числа в программе могут быть скорректированы для следующих машин:
источник
Bourne shell,
4745 байтисточник
sleep
были на самом деле доступны тогда - вы нашли это? en.wikipedia.org/wiki/…sleep
какwhile
условие. Сохраняет 2 байтаC,
5452 байтаисточник
main(){for(;;sleep(6360))puts("4 8 15 16 23 42");}
Фортран 66 (
10898 байт)Несомненно, что у рассматриваемого компьютера был компилятор FORTRAN, поскольку он доминировал в научных и инженерных областях в эпоху. Я родился через 18 лет после одноименного года, но во время моей математической программы в университете мы изучали фортран. Одна забавная лекция, которую мы узнали, как программировать на перфокартах. Здесь не так просто отформатировать его правильно, перед каждой командой должно быть 6 пробелов, и я мог найти только ссылку на Sleep-функцию для Fortran 77, но она должна была существовать уже в Fortran IV и 66.
PS: мы могли бы удалить один байт, используя метку 1 вместо метки 42.
PPS: Если рассматриваемый компьютер использует перфокарты для ввода программы, вам не повезло, и байты больше не имеют значения: D.
источник
60*107
с80**2
, тоже.MacLisp,
4746 байтВсе конструкции взяты из справочника 1974 года (PDF) . Не проверено, хотя у меня нет интерпретатора MacLisp.
источник
nil
можно записать()
Альтаир Базовый
Несомненно, Десмонд и Келвин имели бы Altair 8800 (или эмулятор) просто для удовольствия. Altair Basic (от какого-то парня по имени Билл Гейтс, из небольшого стартапа с двумя людьми под названием Micro-Soft) пискет в 1975 году.
Десмонду нужно будет немного подстроиться, чтобы внутренний
FOR
цикл длился одну минуту. Тогда все знали, что занятые петли были неправильными, но все использовали их!В качестве альтернативы, Десмонд мог установить плату 88-RTC (собранную из компонентов !: http://www.classiccmp.org/altair32/pdf/88-virtc.pdf ) и получить доступ через прерывания к часам реального времени, работающим линия электропередачи или внутренний кристалл.
Ему нужно было бы написать подпрограмму прерывания для обработки тактового входа, которая, в свою очередь, могла бы обновлять порт, скажем, каждые 59 секунд на секунду приводить к заземлению, а затем повышать уровень.
В Altair Basic была
WAIT
функция, поэтому код можно было бы упростить примерно до следующего (я не смог найти список портов, поэтому я просто выбрал 125 в надежде, что он не будет использоваться):Это был на самом деле забавный маленький вопрос, возвращаясь к некоторым действительно элементарным компьютерам. Терпение, которое должны были иметь те старожилы (включая меня)!
источник
Ассемблер PDP-11 для Unix System 6 -
736874 символаГоворя о 70-х, обязательно почитать Unix и оборудование, с которого все началось!
Вы можете легко запустить его здесь (но сначала вы должны заново открыть для себя радость от использования
ed
для вставки текста - в моем конкретном случае мне даже пришлось выяснить, как на самом деле редактировать текст в нем:)
).В сборе становится 108 байтов.
источник
msg
это расточительно, я могу пойтиm
(брить другие 4 байта).br
вместоjmp
, не так ли? Кроме того, для записи требуется дескриптор файла в r0 - у вас, очевидно, есть 1 (или 2) в нем для вашего первого цикла, но вы разбиваете его со временем сна.br
, благодаря этому и некоторым другим трюкам (в основном, сокращая пробелы и используя восьмеричные по возможности) мы получили 74 символа, даже добавив первыйmov
.LOGO, 61 байт (возможно) или 48 байт (возможно, нет)
К сожалению, мне не удалось найти онлайн-копию « Системы LOGO: предварительное руководство» (1967) BBN или каких-либо ссылок группы логотипов MIT (1960-е годы +). Логотип Apple от LCSI является слишком новым (~ 1980). Однако, основываясь на онлайн-книгах, в то время, вероятно, работали некоторые варианты следующего. Обратите внимание, что WAIT 60 ждет 1 секунду, а не 60.
Мы можем сделать немного лучше с оптимизацией хвостового вызова, хотя это, вероятно, не было доступно в то время.
источник
CBM BASIC 1.0,
5238 символов, токенизированы до4531 байтаCBM BASIC 1.0 был представлен с Commodore PET в октябре 1977 года. Команды обычно показывались в верхнем регистре и в графических символах CBM, но я перечислил их здесь в нижнем регистре + верхнем регистре для простоты (и моего, и вашего! :-) ). Также обратите внимание, что ^ на самом деле будет отображаться как ↑. Detokenized, после перечисления этого с
LIST
этим приведет к:PET 6502 работал на частоте 1 МГц, поэтому для его завершения потребуется около 105 минут.
Редактировать : понял, что вложенные циклы не были действительно необходимыми, и я неправильно рассчитал свои токены. Все еще недостаточно для победы (и слишком поздно для загрузки), но, по крайней мере, лучше.
источник
Паскаль -
10795 байтБезголовая версия:
источник
Далее 50 байт
Хотя FORTH-79 является самой ранней стандартизированной версией, язык разрабатывался с 1968 года и мог использоваться в IBM 1130. Он использовался и в других системах до 1977 года. Я могу сделать немного больше исследований, чтобы убедиться, что все эти слова были доступны, но я вполне уверен, что это достаточно основательно, чтобы существовать к тому времени. Все это было доступно на FORTH-79, наверняка.
Цикл навсегда, ожидание 6420000 миллисекунд между строковой печатью. Новая строка не печатается.
источник
Smalltalk, 95 (или 68, если разрешена лазейка)
Был с 1972 года
Нет опыта с этим, видел его в Википедии: P
Посмотрел в Интернете, как зациклить и задержать, синтаксис должен быть правильным, но не смог найти способ его запустить.
Возможная лазейка
Он должен печатать последовательность каждые 108 минут, но это не означает, что это должно быть 108 минут.
Это может сделать код короче
Код напечатает последовательность без интервала, поэтому он гарантированно будет напечатан через 108 минут.
источник
Wait some time between 104 and 108 minutes
, поэтому я не думаю, что лазейка возможна.SAS,
827569Не типичный язык игры в гольф, но я думаю, что он подходит для этой задачи, если предположить, что
file stdout
он действовал в SAS 1977 года.Улучшения:
data _null_;
->data;
сохраняет 7 символов (и теперь создает пустой набор данных, а также печатает на стандартный вывод).источник
Shell Томпсона, 1971 (1973 для команды сна)
43 байта
Поскольку оболочка Bourne, хотя и существовала в 1977 году, отсутствовала в выпущенной версии Unix до v7 в 1979. Первоначальная оболочка Unix не имела каких-либо причудливых команд управления циклом. (Если вы хотите завершить цикл, вы можете использовать
if
команду, чтобы пропустить переход.)источник
exec $0
для небольшой экономииgoto
?C, 50 байтов
Короче, чем другое решение C, и, следовательно, не дубликат. Я на самом деле написал это прежде, чем заметил (почти) идентичный комментарий Digital Trauma о другом C-решении.
источник
КОБОЛ, 240 байт
Да, ведущие пробелы являются значительными. Скомпилируйте и запустите как
cobc -x save.cob; ./save
. (-x
Опция создает исполняемый файл, а не разделяемую библиотеку, и, следовательно, я не думаю, что он должен учитываться.)Если мы хотим быть скучными, мы можем добавить
--free
опцию компиляции для кода в произвольном формате, тогда 158 + 6 = 164 байта, но это вряд ли сработает еще в 77 году.источник
АЛГОЛ 60/68 / W,
744750 байтЗапустите эту полную программу с
a68g save.a68
помощьюalgol68g
.У ALGOL нет встроенного способа спать, но мы можем работать по существу
/bin/sleep
:Старый ответ:
источник
system
все в порядке, а не в порядке? С тобой все в порядке,system("ping ...")
но задача говорит, что я не могу использоватьsystem
из C, например, команды bash. Алгол занимается печатью, но у меня нет другого пути, кроме какping(8)
илиsleep(1)
спать.system("sleep")
будет ли работать с ОС с того времени. Я буду редактировать пост.