Выберите своего любимого известного ученого-компьютерщика или пионера информатики, который родился в 1942 году или ранее (1943 год ознаменовал начало создания «первого» компьютера ). У них должна быть страница Википедии или другой сайт, на котором указан год их рождения и рассказывается, как их достижения связаны с информатикой. Вы можете выбрать то же самое, что и кто-то другой, но рекомендуется выбирать кого-то нового
Возьмите имя, которым они обычно известны. Скорее всего, это будут их имя и фамилия, но они могут включать сокращения или отчества, если это более распространено. Например, для Тони Хоара оба Tony Hoare
и C. A. R. Hoare
были бы приемлемы.
Все символы в имени должны быть напечатаны ASCII . Если имя содержит символы, которые не могут быть напечатаны в ASCII, хорошо, если вы выберете что-то приблизительное. например, Kurt Godel
вместо Kurt Gödel
.
Возьмите набор уникальных символов в имени (например C. ARHoare
) и сдвиньте их по шкале ASCII для печати к году рождения вашего ученого, перемещаясь по кругу из ~
космоса. (В основном добавьте год рождения по модулю 95.) Это даст вам (скорее всего) новый набор печатных символов ASCII.
Например, CAR Hoare родился в 1934 году, поэтому смещение каждого символа C. ARHoare
на 1934 (34 mod 95) дает ePBctj2$5(
.
Этот фрагмент стека сделает все изменения за вас:
function go() {var name = document.getElementById("name").value;var year = parseInt(document.getElementById("year").value);var unique = {};for (var i = 0; i < name.length; i++) { unique[name.charAt(i)] = true; } var result = ''; for (var char in unique) { result += String.fromCharCode((char.charCodeAt(0) - 32 + year) % 95 + 32); } document.getElementById("result").value = result; }
Name: <input type="text" id="name" value="C. A. R. Hoare"><br>
Birth Year: <input type="text" id="year" value="1934"><br>
<button type="button" onclick="go()">Ok</button><br>
Result: <input type="text" id="result" readonly>
Вызов
Используя этот набор и только этот набор (без вкладок, без новых строк) смещенных печатаемых символов ASCII, напишите программу, которая печатает Hello, [name]!
на стандартный вывод или ближайшую альтернативу, где [name]
то же самое точное имя, которое вы выбрали выше и смещенное, чтобы получить символы вашей программы. Вы можете использовать несколько символов из набора или не использовать их вообще. Например, теоретическая программа PetBee($25
печатает Hello, C. A. R. Hoare!
.
счет
Ваша оценка - это размер кода в байтах, умноженный на количество уникальных символов в выбранном вами имени. Самые низкие болячки побеждают.
источник
Rear Admiral Grace Murray Hopper, United States Navy, (Retired), Doctor of Philosophy
, Рожденный 1906. Это было бы хорошо?Rear Admiral Grace Murray Hopper
хотя. Помните, что размер вашего кода умножается на количество уникальных символов в имени, поэтому более длинное имя не обязательно лучше.Ответы:
Бессонница,
1039998 * 8 = 784Джордж Буль , 1815
Все 5 программ ниже имеют одинаковую длину (98) и одинаковый выход.
Печать
Hello, George Boole!
Бессонница, 103 * 6 = 618 (вероятно, оптимальная и уникальная)
Если
G Boole
( Джордж Буль , 1815) приемлемо ...Печать
Hello, G Boole!
Бессонница,
9492898583 * 10 = 830Курт Годел, 1906 г.
Печать
Hello, Kurt Godel!
Я написал программу для поиска решения. Моя вторая версия программы должна быть ближе к оптимальной, чем моя первая версия.
В соответствии с мелочами @Martin Büttner (
100928885 символов, тот же набор символов):Печать
Hello, Kurt Goedel!
переводчик
источник
Gödel
использованием только латинского алфавитаGoedel
. ;)CJam,
230117115114113110107106 байт * 13 = 1378Проверьте это здесь.
Я выбрал
Edsger Dijkstra
, 1930 года рождения, что дает мнеc#2&$1>b()* 3
(которого я действительно выбрал, потому что он был первым, кого я нашел, чье имя дало полезные символы для CJam; с тех пор я проверил дюжину имен, и ни одно не выглядело как многообещающее).Код в основном только строит коды ASCII , используя
1
,2
,3
,*
,#
(возведение в степень) и(
,)
(декремент, приращение) и преобразует их в символ сc
. Чтобы сохранить некоторые символы, я иногда могу скопировать более ранний символ$
(0$
копирует верхний элемент стека,1$
копирует второй верхний элемент стека и т. Д.).Вот разбивка кода на символы (это также работает):
источник
Marbelous , 83 байта * 10 = 830
Я выбрал,
R Kowalski, 1941
который позволяет мне использовать:{It9A+6=53
Этот ответ немного сложнее, чем старый ответ (ниже), так как многие шарики проходят через несколько устройств, хотя в большинстве случаев мрамору просто добавляют несколько вещей перед печатью. Поскольку у меня не было вычитания или низких чисел, младшие коды ascii пришлось формировать путем сложения двух мраморов с высокими значениями, так как это приводит к сложению по модулю. (Я использовал
=3
в качестве дефлектора, так как он толкает каждый мрамор, не равный 3 вправо, и выглядит как милый кот)выход:
Hello, R Kowalski!
старый ответ:
Марбелоус , 113 * 17 = 1921
У Marbelous все в порядке, так как когда-либо выпадающий с доски мрамор печатается, из-за его 2D-характера, ему нужны несколько цифр + некоторая арифметика, чтобы не допустить, чтобы борад становился слишком большим.
Я выбрал,
Philip D. Estridge, 1937
кто даетu./26EiSj9:8*-+
в качестве доступного набора символов. На самом деле используются символы.+-245689E
Доска довольно проста, первые 3 строки - литералы, когда группа из двух - шестнадцатеричное значение, четвертая строка - арифметические операции для формирования кодов ascii, которые не могут быть написаны явно из-за ограниченного набора символов.
выход:
Hello, Philip Donald Estridge!
Вы можете попробовать это здесь!
Сейчас я буду искать возможного лучшего кандидата, так как похоже, что marbelous действительно может быть конкурентоспособным здесь.
источник
G Boole
с 105 символами * 6 - я думаю, что должно быть ограничение на то, насколько имя может быть сокращено.Using this set and only this set (no tabs, no newlines) of shifted printable ASCII characters
Brainfuck, 1846 * 12 = 22152
Просто чтобы иметь язык, отличный от CJam. Требуется оригинальная спецификация Brainfuck с байтовым типом данных, который переполняется при 256.
Используются только 2 символа:
+
для увеличения текущей ячейки и.
для вывода текущей ячейки.Выход
Благодарность идет к Coredump для выявления следующего в его ответе:
источник
"Привет, Никлаус Эмиль Вирт!" (Befunge-98, 222 × 14 = 3108)
Из Википедии :
Смена 34,
Niklaus Emil Wirth
(18 символов, 14 уникальных) заканчивается какp,./$86Bg0,/By,57+
.Код ( попробуйте здесь ):
Сломать:
Последняя строка помещает символ HALT (
@
) в начале строки. Когда элемент управления вернется к этой точке, программа остановится. Это на самом деле не должно быть необходимым, потому что@
символ в (5,0) все еще там, и ничего не должно быть выведено до того, как он будет достигнут. Тем не менее, единственный онлайн-переводчик Befunge, который запустит это чудовище , не будет работать должным образом без него.Это является на самом деле можно сделать рабочий раствор с помощью всего
Niklaus Wirth
(12 уникальных символов,p,./$86By,57+
), но код намного, намного больше.(Помечен как Befunge-98, потому что ширина Befunge-93 ограничена 80 символами.)
источник
CJam, 323 байта * 10 = 3230
Выход:
CJam, 662 байта * 10 = 6620
8700Не для победы, а только потому, что это выглядит возможным. Используется только
2e(c
.Выход:
Генератор
Тривиальный ответ
222(((((((((((c
(сгенерированныйq{i222_@-'(*'c}%
) имеет 3420 байтов.источник
e_
внешние числовые литералы.2
? Или с помощью других (полезных) символовB
,5
а$
? (Например, вы можете получить второй-четвертый пробел и второй и третий период с2$
, а такжеA
с2$((
.)CJam, 16 *
307288 =49124608Вывод:
Это мой первый ответ с использованием CJam, так что, конечно, это может лучше сыграть в гольф (любой намек приветствуется).
Вот некоторый служебный код, который я использовал. Поскольку я вычислил набор символов для некоторых других имен, это может быть полезно для тех, кто лучше знает CJam (или, может быть, для другого языка).
источник
Brainf_ck - 723 * 12 = 8676
Я выполнил сканирование из Списка Википедии по компьютерным наукам и собрал год рождения и самые длинные имена всех людей, перечисленных там. Я написал программу, чтобы обойти все это и найти все, что я мог бы сделать на общем языке. К сожалению, я не смог найти каких - либо имен , которые могли бы поддержать
echo;
,alert()
,console.log()
(я надеюсь),print
илиmain
.В основном я хотел поделиться своими необработанными данными сканирования, если кто-то захочет аналогичным образом искать другие языки (примечание: может быть неточным и неполным): Данные сканирования .
РЕДАКТИРОВАТЬ : Новая паста для сканирования с 40 новыми именами из Списка компьютерщиков и Списка пионеров в области компьютерных наук .
РЕДАКТИРОВАТЬ : Вручную убрал список.
Я обнаружил, что Джин Дэвид Ичбиа (1940), главный дизайнер Ады, предоставляет
+-.
(самый короткий из трех человек, делающих это). Я сгенерировал этот код BF для него.Александр Киватин Дьюдни предоставил наиболее полезных персонажей BF (
+.<>
), но чуть выше моего ответа. Никто не нашел при условии.[]
.источник
Рубин 1,8 - 250 × 18 = 4500
Доступные персонажи:
Выход:
Анатолий Карацуба , родившийся в 1937 году, наиболее известен своим вкладом в область аналитической теории чисел (область, которой я лично наслаждаюсь), включая алгоритм Карацубы , метод быстрого умножения произвольных операндов точности.
Это первое и единственное имя, которое я попробовал.
источник
GolfScript (125 * 14 = 1750)
Онлайн демо
Дуглас Энгельбарт (1925–2013), пожалуй, наиболее известен благодаря «Матери всех демос» . Его имя и год рождения дают символы
!&(),-./9]^z{~
, из которых это решение использует&()-./9]^~
Основная структура кода состоит в том,
build list of numbers](-
что в массив помещается множество чисел с пустой строкой, которая начинается в стеке, затем извлекается эта строка и используется с повышением типа-
для преобразования массива чисел в строку.Поскольку нет доступа к элементам ниже вершины стека, я написал программу на C #, чтобы найти короткие фрагменты, которые берут данное целое число сверху стека и добавляют следующее требуемое целое число. Это создало одну небольшую проблему, когда фрагмент кода для
69
(E
) закончился на-
и фрагмент кода для110
(n
) начался с9
: для использования длинного фрагмента для одного символа требуется один символ110
.источник
CaneCode ,
458410 * 16 =73286560Соответствующий БФ:
Выходы:
CaneCode - это просто прямая замена символов Brainfuck, где
12348
соответствуют+-><.
соответственно. Я потратил около 2 часов, пытаясь найти короткое имя+-.
для нормального Brainfuck, но безуспешно.Джек Элтон Брезенхэм , изобретатель линейного алгоритма Брезенхэма, родившийся в 1937 году, дает следующие символы:
К сожалению, в то время как
5
([
) доступен, отсутствие6
(]
) означает, что код все еще должен был увеличивать область из 100 символов (для строчных символов) медленным способом.источник
> <> (Рыба) , 163 * 15 = 2445
Выходы:
Ивар Хьялмар Якобсон , родившийся в 1939 году, был найден благодаря данным сканирования BMac . Он обеспечивает символы
> <>, как и Befunge, является языком на основе 2D-стека. Полезные команды> <>:
*+24567
для арифметики (обратите внимание, что47
a4
и a7
помещает в стек, а не47
))
больше чем (полезно для получения1
):
для дублирования вершины стекаo
для вывода;
для завершения программыp
также хорош для размышлений, но я не смог придумать, как его использовать.>
это еще одна команда> <>, направляющая поток программы вправо, но поскольку программа уже выполняется в этом направлении, она не была нужна.источник