spamsink: (Default)
Последние несколько дней я в свободное от сна, еды и работы время занимаюсь расшифровкой старинной битописи.
Хорошо, что коллеги по хобби хранят не только позднейшие списки аналогичных битописей, но и современные той битописи свитки.
spamsink: (Default)
Одна диагностика ошибки, выдаваемая компилятором ФОРТРАН-ГДР, выглядит так:
ERROR 097 IN 00003 SUBSCRIPT OF ARRAY >J< DOES NOT BE LOOP VARIABLE


Does not be, понимаешь ли. Кроет пресловутые how much watch и such much, как бык овец.

Более полная и аутентичная выдача, посторонним вход не рекомендован )
spamsink: (Default)
Много лет назад я задавался вопросом (или тут), бывает ли такое в жизни, чтобы целочисленное деление отрицательного числа на отрицательное давало положительный остаток.

Опять только для программистов-археологов )
Я тут поразмыслил с анализом размерностей и решил, что ситуация, когда знак остатка совпадает со знаком частного, физического смысла не имеет. Смотрите:

Если тебе надо пройти 5 метров на юг трехметровыми шагами, а ты стоишь лицом к северу, то логично будет, если остаток пути надо делать
- или всегда в ту же сторону света, в какую делал шаги; неважно лицом вперед или пятился (сделал один шаг на юг, и еще надо 2 метра на юг, знак остатка равен знаку делимого),
- или всегда вперед (сделал два шага пятясь, и еще метр вперед, знак остатка равен знаку делителя),
- или, так уж и быть, всегда на север (остаток всегда неотрицательный).

А вот логика, что если ты ходил вперед, то остаток должен быть к северу, а если пятился, то к югу (знак остатка равен знаку частного), мне была бы непонятна.
spamsink: (Default)
Когда деревья были большими, а память в компьютерах - маленькой, дети развлекались написанием программ на языке BASIC. Язык был простой и незамысловатый, но с появлением пиксельной графики на микрокомпьютерах и, соответственно, операторов отрисовки точек, отрезков и дуг окружностей или эллипсов, какая-то добрая душа добавила в язык и оператор закраски замкнутой области (PAINT или FILL).

Ну а что ж, надо же как-то удобно рисовать закрашенные кружочки и многоугольнички?

Одни разработчики были умные. Они решили сделать так: перед рисованием контура фигуры программист должен сказать "приготовься закрашивать то, что я сейчас буду рисовать", а после окончания рисования контура - "давай закрашивай". Фигура при этом должна быть "выпуклая по горизонтали", т.е. пересечение любой горизонтальной прямой и контура должно быть не более чем две точки или отрезка (а если кто не читает инструкции, тот ССЗБ). Процедура закраски должна всего лишь запоминать, какие были самая левая и самая правая точки контура в каждой строке экрана, и по заключительной команде закрасить всё между ними.
Алгоритм простой, памяти много не требует, но рисовать таким образом, например, кремлевскую стену довольно утомительно.

Другие разработчики были хитрые. Они решили сделать так: операция закраски будет пытаться красить любые фигуры, пользуясь стеком или очередью для запоминания, в какие закоулки нужно не забыть зайти, а если фигура окажется слишком сложная, и алгоритму потребуется больше временной памяти, чем есть, то программа или вылетит по ошибке нехватки памяти (если основное качество разработчика было laziness), или фигура не докрасится до конца (если основное качество разработчика было impatience) или машина зависнет/рестартует (если основное качество разработчика было hubris).
Алгоритм простой, быстрый, но перекрашивать таким образом, например, случайно сгенерированный лабиринт довольно рискованно.

Третьи разработчики были добрые. Они решили сделать так: операция закраски будет пытаться красить любые фигуры, пользуясь фиксированным количеством памяти, а если фигура окажется слишком сложная, то нефиг было программисту выпендриваться — подождёт.
Алгоритм совершенно бешеный, и описание на естественном языке, и псевдокод; и на многосвязных фигурах медленный, как моя жизнь. Курсор бегает по лабиринту кругами, как крыса, а толку через час по чайной ложке (скажем, для закраски квадрата 50х50 с 13% случайно расставленных точек может потребоваться больше 100 тысяч шагов).
В псевдокоде особенно восхищает вот это:
cur, mark, and mark2 each hold either pixel coordinates or a null value
         NOTE: when mark is set to null, do not erase its previous coordinate value.
               Keep those coordinates available to be recalled if necessary.

(Поняли теперь, как nullable references должны быть устроены?)

Самое смешное, что алгоритм всё же действительно работает.
spamsink: (Default)
Компилятор с языка POP-2, уже у нас тут упоминавшийся, оказывается, мальчиковый.

Демонстрируем на простом примере
Так себе функциональное программирование )
spamsink: (Default)
Знаменитая программа-виртуальный собеседник ELIZA была, как водится, в свое время адаптирована к русскому языку. Вот как это выглядело:

  ПEPEД BAMИ - ПPOГPAMMA "ЛИЗA", ПPEДHAЗHAЧEHHAЯ ДЛЯ
  MOДEЛИPOBAHИЯ ПPOЦECCA ЧEЛOBEЧECKOГO MЫШЛEHИЯ.
  ПPOГPAMMA ПPEДCTABЛЯET COБOЙ BAPИAHT CИCTEMЫ  ELIZA
  AДAПTИPOBAHHЫЙ COTPУДHИKAMИ ЛBTA OИЯИ ДЛЯ ЭBM БЭCM-6.
  ПOCЛE ПOЯBЛEHИЯ HA ЭKPAHE CИMBOЛA "?" HAБИPAЙTE
  CTPOKУ.  ПPИЗHAK KOHЦA CTPOKИ - CИMBOЛ "LINE FEED".
  ПPEДOCTEPEЖEHИE : ПPOГPAMMA CAMOOБУЧAЮЩAЯCЯ, ПOЭTOMУ
  OЧEHЬ ПPOCИM BAC ИЗБEГATЬ HEПPИЛИЧHЫX BЫPAЖEHИЙ.
  ЧTOБЫ ЗAKOHЧИTЬ CEAHC - HAБEPИTE CЛOBO   KOHEЦ.

вот как это работало )
spamsink: (Default)
Андрей Борисович Ходулёв, к сожалению, рано ушедший от нас (1953-1999), был замечательным человеком: и переводчиком культовой (ЕВПОЧЯ) компьютерной литературы, и разносторонним программистом, и чемпионом по решению головоломок...

В частности, он был автором реализации языка POP-2 на БЭСМ-6, об оживлении которого я не так давно писал.

Вчера выяснилось, что в Новой Зеландии of all places есть человек, которому интересно было бы это дело позапускать, потому что он сам пишет компилятор с POP-2, и нужен какой-нибудь эталон. Ну собрал я ему дистрибутивчик, послал; а что делать, не оставлять же человека в беспомощном состоянии.
spamsink: (lenin)
Без комментариев.

       П А Р А М Е Т Р Ы   А Н К Е Т Ы

01. ФАМИЛИЯ                    14. СЕМЬЯ + ДЕТИ
02. ИМЯ                        15. АДРЕС
03. ОТЧЕСТВО                   16. ТЕЛЕФОН
04. ПОЛ                        17. ЗАЧИСЛЕНИЯ ДАТА
05. РОЖДЕНИЯ ДАТА              18. ПОВЫШЕНИЯ ДАТА + ТИП
06. НАЦИОНАЛЬНОСТЬ             19. ПОДРАЗДЕЛЕНИЕ
07. КПСС ГОД                   20. ДОЛЖНОСТЬ
08. ВЛКСМ ГОД                  21. ЗАРПЛАТА
09. ПРОФСОЮЗ                   22. СОСТАВ ВОЕННЫЙ
10. ОБРАЗОВАНИЕ                23. ВОИНСКОЕ ЗВАНИЕ
11. СТЕПЕНЬ УЧЕНАЯ             24. СТРОЙ ВОЕННЫЙ
12. ЗВАНИЕ УЧЕНОЕ              25. БРОНЬ ВОЕННАЯ
13. СПЕЦИАЛЬНОСТЬ


Хотя нет, один комментарий будет. Один пунктик съехал слегка; непонятно, почему: искусственный интеллект еще не умел угадывать пол по ФИО (например, потому, что у носителей паспортов национальных республик форма отчества могла быть на национальном языке, -оглы там, -кызы, или вообще -оол, все не перечислишь; а по имени еще труднее).
spamsink: (lenin)
Под катом приведена вроде бы цельная программа на мёртвом языке POP-2, делающая вид, что играет в крестики-нолики 4х4х4. Пока не выяснено, имеется ли в нашем распоряжении работающий компилятор для этого конкретного диалекта языка. Желающим предлагается по наитию перевести эту программу на какой-нибудь более современный язык и выяснить, насколько сильно она играет.
355 строк, 9 Кб )
Публикуется, если верить гуглопоиску по текстовым сообщениям, впервые.
spamsink: (lenin)
Язык, конечно, не человеческий, поэтому в основном под катом.
В качестве примера:
    FUNCTION DEBFN X;
      IF DEBUG THEN BUGIO(X, ">",HD); DEBSP+1->DEBSP; .X;
        DEBSP-1->DEBSP; BUGIO(X, "<",LAMBDA; HD(.TL) END)
      EXIT;.X
    END;

Я понятия не имею, на что это, вообще, похоже.
и тому подобное )
spamsink: (lenin)
⠢⠂⠑⠒⠡⠠⠒⡤⢌⠌⠄⡤⠂⠌⠉⠁⢉⠤⢉⠑⠄⠔⠢⢈⢌⠠⠑⠕⢊⠢⡁⠁⠔⢉⠒⠂⠀⠀⠀⠀
⠑⠀⠢⠀⡐⠀⠀⠀⠂⠂⠂⠐⠀⠀⡐⠀⠀⠀⠂⠀⠂⠂⠄⠀⠂⠀⡀⠀⠁⠐⠀⠁⠀⠀⠀⠁⠀⠀⠀⠀
⠀⠁⠀⢡⠀⠰⠊⠬⠀⢠⠄⠄⠁⡬⠀⡄⠄⠮⠀⠌⠄⠈⠠⠠⠀⠰⠐⠌⠀⠂⠀⠀⠎⠅⠊⠀⠀⠀⠀⠀

Упрощенный вариант:
⠌⠂⢉⠂⠊⡉⠠⢉⠄⠡⠠⠊⠤⠑⠈⠑⠁⠌⠒⠈⠡⠠⠉⠄⠢⠊⠉⡑⠁⡡⢈⠈⠉⠄⠀⠀⠀⠀⠀⠀
⠀⠀⠂⡀⢀⠠⠀⠀⠂⠈⠀⠀⠒⣀⠀⡀⡀⠀⠒⠀⡐⠐⠀⠁⠠⡐⠐⠀⠄⠈⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀
⠡⠁⠀⠀⡀⠀⠈⠄⠀⡀⠈⣀⠀⠀⠠⢀⠀⢁⠀⠐⠀⠀⢄⠀⠂⠀⠄⢀⠀⠀⠀⠐⡈⠀⠀⠀⠀⠀⠀⠀

А ну-ка, криптоаналитики!
spamsink: (lenin)
На старых компьютерах не было различия между регистрами букв (сравните с самыми первыми пишущими машинками, а также с телеграфными аппаратами) - все буквы на печати выглядели как заглавные, но понимались в тексте преимущественно как строчные. Если надо было специально обозначить, что некоторая буква — заглавная, перед ней записывался символ надчеркивания (‾). Таким образом этот символ мог быть допустим, например, в именах переменных, но только если после него следует буква.
В противном случае компилятор выдавал сообщение об ошибке (по техническим причинам — даже если это нарушение было в тексте комментария). Выглядело оно так: ПОСЛЕ НАДЧЕРКИВАНИЯ <пропуск> НЕ БУКВА.

Заполните пропуск словом из семи букв. Следующие варианты неверны:пока их 7 )
Комментарии скринятся пару дней. Уже есть несколько угадавших.

Upd: Комменты открыты. Всем спасибо.
spamsink: (lenin)
Советское пасхальное яйцо: в конце генерации операционной системы программа генерации спрашивала "XOTИTE УЗHATЬ, ЧTO Я ДУMAЮ O BAC ?" и при положительном ответе выдавала одно из следующих сообщений:

  • BЫ XOPOШO ЗAПPOГPAMMИPOBAHЫ. BAC MOЖHO ИCПOЛЬЗOBATЬ BMECTO ЭBM.
  • BЫ HETEPПEЛИBЫ, HEOБУЗДAHHЫ И AГPECCИBHЫ. BЫ ПAДETE ЖEPTBOЙ COБCTBEHHЫX CTPACTEЙ.
  • BЫ TOPOПЫЖKA И XAЛTУPЩИK !
  • BЫ OЧEHЬ CПOCOБHЫ И ПPИЯTHЫ B OБЩEHИИ. BAC ЖДET ПOBЫШEHИE ПO CЛУЖБE.
  • BЫ CПOKOЙHЫ И CTAБИЛЬHЫ. BAШИ ЛУЧШИE BPEMEHA EЩE HE HACTУПИЛИ ИЛИ УЖE ПPOШЛИ.
  • XOPOШИЙ ЧEЛOBEK, HO HEAKKУPATHЫЙ.
  • BЫ, HECOMHEHHO, ГЛУБOKИЙ MЫCЛИTEЛЬ, BAM BПOPУ PAБOTATЬ CИCTEMHЫM AHAЛИCTOM.
  • BAM BCE BPEMЯ ЧTO-TO MEШAET, BЫ HE MOЖETE COCPEДOTOЧИTЬCЯ.
  • BЫ ПPOCTO CAБOTAЖHИK !
spamsink: (lenin)
Была одна программа, которая, помимо прочего, умела играть в калах. Она называлась "Джин" (хотя из выдаваемых сообщений и было понятно, что авторы знают, как пишется слово "джинн"); ей был придан соответствующий колорит, поэтому во время игры она могла выдавать следующие более или менее колоритные сообщения (остальные удалены ради краткости):
САЛАМ АЛЕЙКУМ,
САЛАМ,
  ЮН
  УВАЖАЕМ
  ПОЧТЕНН
ЫЙ
АЯ
  фамилия-ХАН
-ХАНУМ
, ЭФЕНДИ

(фамилия бралась по UID из базы ОС, пол и возраст - из базы программы, если были введены; пол также мог быть угадан по окончанию фамилии)
и так далее )
spamsink: (lenin)
Цитата из официальной инструкции 25-летней давности для пользователя ЭВМ советского производства с софтом советского производства. Публикуется в сокращении, приведенная к читабельному виду.

8.1.5. () KОHEЦ CEAHCA

/П/. Сообщение системы о завершении работы с диалоговой задачей. [...] Инициирование сообщения и завершение работы с диалоговой задачей для большей части многотерминальных и однотерминальных задач может быть произведено с помощью одного из нижеперечисленных мнемокодов: BЫЙ, BЫXОД, K (два раза), KОH, KHЦ, F, END, STОP. Примечание: если перед началом работы пользователь обнаружил на экране видеотона символ стандартного приглашения ("-") или символ нестандартного приглашения (любой другой символ, отличный от стандартного), что может явиться результатом продолжения работы диалоговой задачи, оставленной предыдущим абонентом, то перед выполнением нужной работы необходимо перебрать все буквенные сокращения, перечисленные выше. Одно из них должно оказаться директивой конца задачи. [Emphasis mine. - S.]


строго говоря )
spamsink: (lenin)
У розы из предыдущего поста, как было модно с 1980 года, должно было быть имя. Его можно было задавать явно, а если оно не было задано, генерировалось случайное. Например, такие (считайте игрек буквой У):
EKOTЬBAБ ЛЯBECЫXП EMOCИEBE EБЩATИPC TCЫKOГИЧ ЫKOCЛЯOH
OMYШAHИM HИPCTЫKO ЛИPИXПOP ИTTЫBAXC ECЯЗЫKOC ИИЯXПOTC
ПCTHЫИTЬ AHTEHOДO EБOПPИTA ИPEHЫKYД OTBACЫИC CTИTCПPO
HЫTCИЯЗO EИOЛГPOБ YЛЬOBCЫK CEMYЛЬKИ EБOTCOПЫ AДOЗATHИ
COOBOTИM HИЙCЯECT AKEИEИTE ИФOГPCTЬ ПOTTOPИФ BATEДEBA

Особо отмечу "омушаним" и "соовотим", "семульки" (превед Лему) и "ватедева" (звучит по-санскритски; так и оказалось, Dewaté-dewa = great god of gods, говорят нам гуглобуки). А Потториф (Pottorif) - реальная фамилия, говорит нам гугл.

Делалось это следующей процедурой опять Паскаль, но слегка отформатированный )
А теперь гвоздь программы: текст из 510 символов, на основе которого генерируются случайные "имена", таков: я добавил пробелы в очевидных местах для удобства чтения, в массиве Z их не было )
spamsink: (lenin)
Внезапно, в файле-образе диска, который у меня был на протяжении лет 20, нашлась программа на Паскале, датированная 23.05.85 в комментарии, рисующая на графическом дисплее разные картинки (хозяйке на заметку: дампы надо смотреть в виде потока символов во всех теоретически возможных кодировках, а не только в паре самых распространенных).
Ничего похожего на дисплей "Электроника МС 7401" винницкого производства у меня нет, поэтому птичий язык я выкинул, а команды Постскрипта вставил. Некоторые из выдаваемых картинок таким образом удалось воскресить.

Естественно, уже в то время не обошлось без котов.

Длина процедуры - 42 строки.

Также имеются случайным образом генерируемые "цветочки", символически называемые розами; видимо, за розоцветную пятилепестность. розы )
Есть и абстрактный узор (увы, только один). узор )
Название процедуры, генерирующей следующую картинку, (из 4 букв) предлагаю угадать. Не стесняйтесь, угадывайте, слово приличное, из 4 букв как по-русски, так и по-английски. как называется эта картинка? )
Приведу в качестве примера самую короткую из процедур, выдранную из исходного текста, с правками для выдачи Постскрипта:
осторожно, Паскаль )

Profile

spamsink: (Default)
spamsink

August 2017

S M T W T F S
  1 234 5
67 89101112
13 1415 16171819
20212223242526
2728293031  

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 17th, 2017 11:22 am
Powered by Dreamwidth Studios