Wybierz swojego ulubionego znanego informatyka lub pioniera informatyki, który urodził się w 1942 roku lub wcześniej (ponieważ 1943 oznacza początek stworzenia „pierwszego” komputera ). Powinni mieć stronę w Wikipedii lub inną witrynę, która podaje rok ich urodzenia i pokazuje, w jaki sposób ich osiągnięcia odnoszą się do informatyki. Możesz wybrać to samo co ktoś inny, ale zachęcamy do wybrania kogoś nowego.
Weź nazwę, pod którą są powszechnie znani. Najprawdopodobniej będzie to ich imię i nazwisko, ale może zawierać skróty lub drugie imiona, jeśli jest to bardziej powszechne. Na przykład, dla Tony Hoare zarówno Tony Hoare
i C. A. R. Hoare
byłoby do przyjęcia.
Wszystkie znaki w nazwie muszą być drukowalne ASCII . Jeśli nazwa zawiera znaki, których nie można wydrukować w formacie ASCII, dobrze jest, jeśli wybierzesz coś przybliżonego. np. Kurt Godel
zamiastKurt Gödel
.
Weź zestaw unikalnych znaków w nazwie (np. C. ARHoare
) I przesuń je w górę skali ASCII do druku do roku urodzenia swojego naukowca, przechodząc od ~
miejsca do miejsca. (Zasadniczo dodaj rok urodzenia modulo 95.) Otrzymasz (najprawdopodobniej) nowy zestaw drukowalnych znaków ASCII.
Na przykład CAR Hoare urodził się w 1934 roku, więc przeniesienie każdej postaci C. ARHoare
o 1934 (34 mod 95) daje ePBctj2$5(
.
Ten urywek stosu wykona za Ciebie wszystkie zmiany:
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>
Wyzwanie
Używając tego zestawu i tylko tego zestawu (bez tabulatorów, bez nowych linii) przesuniętych drukowalnych znaków ASCII, napisz program, który drukuje Hello, [name]!
na standardowe lub najbliższe alternatywy, gdzie [name]
jest taka sama dokładna nazwa, którą wybrałeś powyżej i którą przesunąłeś, aby uzyskać znaki programu. Możesz użyć wielu znaków z zestawu lub w ogóle ich nie używać. Na przykład PetBee($25
drukowany jest program teoretyczny Hello, C. A. R. Hoare!
.
Punktacja
Twój wynik to rozmiar kodu w bajtach razy liczba unikalnych znaków w wybranej nazwie. Najniższy ból wygrywa.
źródło
Rear Admiral Grace Murray Hopper, United States Navy, (Retired), Doctor of Philosophy
. Urodzony w 1906 r. Czy byłoby dobrze?Rear Admiral Grace Murray Hopper
. Pamiętaj, że rozmiar kodu jest mnożony przez liczbę unikalnych znaków w nazwie, więc dłuższa nazwa niekoniecznie jest lepsza.Odpowiedzi:
Bezsenność,
1039998 * 8 = 784George Boole , 1815
Wszystkie 5 poniższych programów ma tę samą długość (98) i to samo wyjście.
Wydruki
Hello, George Boole!
Bezsenność, 103 * 6 = 618 (prawdopodobnie optymalna i unikalna)
Jeśli
G Boole
( George Boole , 1815) jest akceptowalny ...Wydruki
Hello, G Boole!
Bezsenność,
9492898583 * 10 = 830Kurt Godel, 1906.
Wydruki
Hello, Kurt Godel!
Napisałem program do wyszukiwania rozwiązania. Moja druga wersja programu powinna być bliższa optymalnej niż moja pierwsza wersja.
Zgodnie z nitpick @Martin Büttner (
100928885 znaków, ten sam zestaw znaków):Wydruki
Hello, Kurt Goedel!
Interpretator
źródło
Gödel
użycia tylko alfabetu łacińskiego toGoedel
. ;)CJam,
230117115114113110107106 bajtów * 13 = 1378Sprawdź to tutaj.
Wybrałem
Edsger Dijkstra
, urodzony w 1930 roku, co daje mic#2&$1>b()* 3
(którego tak naprawdę wybrałem, ponieważ był pierwszym, którego znalazłem, którego imię przyniosło użyteczne postacie dla CJam; od tamtej pory sprawdziłem tuzin nazwisk i żadne nie wyglądało tak obiecująco).Kod zasadzie tylko buduje kodów ASCII za pomocą
1
,2
,3
,*
,#
(potęgowanie) i(
,)
(ubytek, przyrostu) i konwertuje je do postaci zc
. Aby zapisać niektóre znaki, czasami mogę skopiować wcześniejszy znak$
(0$
kopiuje element najwyższego stosu,1$
kopiuje od drugiego do górnego itd.).Oto podział kodu na znaki (można to również uruchomić):
źródło
Cudowny , 83 bajty * 10 = 830
Wybrałem,
R Kowalski, 1941
co pozwala mi korzystać z:{It9A+6=53
Ta jest nieco bardziej złożona niż stara odpowiedź (poniżej), ponieważ wiele kulek przechodzi przez wiele urządzeń, w większości marmurów wystarczy dodać kilka rzeczy przed wydrukowaniem. Ponieważ nie miałem odejmowania ani niskich cyfr, musiałem utworzyć niższe kody ascii poprzez dodanie dwóch marmurów o wysokiej wartości, ponieważ powoduje to dodatkowe modulo. (Użyłem
=3
jako deflektora, ponieważ popycha każdy marmur nie równy 3 w prawo i wygląda jak słodki kot)wydajność:
Hello, R Kowalski!
stara odpowiedź:
Marbelous , 113 * 17 = 1921
Marbelous ma się tu dobrze, ponieważ drukowany jest marmur spadający z planszy, ale ze względu na jego charakter 2D potrzebuje kilku cyfr + pewnej arytmetyki, aby borad nie stał się zbyt duży.
Wybrałem,
Philip D. Estridge, 1937
kto dajeu./26EiSj9:8*-+
jako dostępny zestaw znaków. Znaki faktycznie używane są.+-245689E
Tablica jest dość prosta, pierwsze 3 rzędy są literałami, zawsze grupa dwóch jest wartością szesnastkową, czwarty rząd to operacje arytmetyczne, aby utworzyć kody ascii, których nie można było napisać wyraźnie z powodu ograniczonych zestawów znaków.
wydajność:
Hello, Philip Donald Estridge!
Możesz to wypróbować tutaj!
Poszukam teraz potencjalnie lepszego kandydata, ponieważ wygląda na to, że cudowny może być tutaj konkurencyjny.
źródło
G Boole
with 105 characters * 6 - I think there should be a limit on how much the name can be shortened.Using this set and only this set (no tabs, no newlines) of shifted printable ASCII characters
Brainfuck,1846*12 = 22152
Just to have a language other than CJam. Requires original spec Brainfuck with byte datatype, that overflows at 256.
Only uses 2 characters:
+
to increment the current cell, and.
to output the current cell.Output
Credit goes to Coredump for revealing the following in his answer:
źródło
"Hello, Niklaus Emil Wirth!" (Befunge-98, 222×14=3108)
From Wikipedia:
With a shift of 34,
Niklaus Emil Wirth
(18 characters, 14 unique) ends up asp,./$86Bg0,/By,57+
.Code (try it out here):
Breakdown:
The last line places a HALT character (
@
) at the beginning of the line. When the control wraps around back to this point, the program will stop. This shouldn't actually be necessary, because the@
character at (5,0) is still there and nothing should be output before it is reached. However, the only online Befunge interpreter that will run this monstrosity won't work properly without it.It is actually possible to make a working solution with just
Niklaus Wirth
(12 unique chars,p,./$86By,57+
), but the code is much, much longer.(Tagged as Befunge-98 because Befunge-93 is limited to a width of 80 characters.)
źródło
CJam, 323 bytes * 10 = 3230
Output:
CJam, 662 bytes * 10 = 6620
8700Not to win but just because it looks possible. It used only
2e(c
.Output:
Generator
The trivial answer
222(((((((((((c
(generated byq{i222_@-'(*'c}%
) has 3420 bytes.źródło
e_
outside number literals.2
? Or by using the other (useful) charactersB
,5
and$
? (E.g. you can get second to fourth space and the second and third period with2$
, as well as theA
with2$((
.)CJam, 16 *
307288 =49124608Displays:
This is my first answer using CJam, so surely this can better golfed (any hint is welcome).
Here is some utility code I used. Since I computed the character set for some other names, this may be useful for someone who better knows CJam (or maybe for another language).
źródło
Brainf_ck - 723 * 12 = 8676
I did a crawl from Wikipedia's List of computer scientists and collected the birthyears and longest names of all the people listed there. I wrote a program to run over all these and find any I could possibly do in a common language. Sadly, I was unable to find any names that could support
echo;
,alert()
,console.log()
(I can hope),print
, ormain
.I mainly wanted to share my raw crawl data in case anyone wanted to similarly search for other languages (note: may be inaccurate and incomplete): Crawl Data.
EDIT: New crawl paste with about 40 new names from List of computing people and List of pioneers in computer science.
EDIT: Manually cleaned up the list.
I did find that Jean David Ichbiah (1940), chief designer of Ada, provides
+-.
(the shortest of three people to do so). I generated this BF code for him.Alexander Keewatin Dewdney provided the most usable BF characters (
+.<>
), but came in slightly above my answer. No one I found provided.[]
.źródło
Ruby 1.8 - 250 × 18 = 4500
Characters available:
Output:
Anatolii Karatsuba, born 1937, is most well known for his contributions to the field of analytic number theory (a field I personally enjoy), including the Karatsuba Algorithm, a method for fast multiplication of arbitrary precision operands.
This is the first and only name I tried.
źródło
GolfScript (125 * 14 = 1750)
Online demo
Douglas Engelbart (1925 - 2013) is perhaps most famous for the "Mother of All Demos". His name and year of birth give characters
!&(),-./9]^z{~
, of which this solution uses&()-./9]^~
The basic structure of the code is
build list of numbers](-
which puts a lot of numbers in an array with the empty string that starts on the stack, then pulls out that string and uses it with the type promotion of-
to turn the array of numbers into a string.Since there's no access to elements below the top of the stack I wrote a C# program to find short snippets that take a given integer on the top of the stack and add the next integer required. This created one small problem, when the snippet for
69
(E
) ended with-
and the snippet for110
(n
) started with9
: it cost one char to use a longer snippet for110
.źródło
CaneCode,
458410 * 16 =73286560Corresponding BF:
Outputs:
CaneCode is just a direct symbol substitution of Brainfuck, where
12348
correspond to+-><.
respectively. I spent about 2 hours trying to look for a short name which gave+-.
for normal Brainfuck, with no success.Jack Elton Bresenham, inventor of Bresenham's line algorithm and born 1937, gives the following characters:
Unfortunately, while
5
([
) is available, the lack of6
(]
) means that the code still had to increment up the 100-ish area (for lowercase chars) the slow way.źródło
><> (Fish), 163 * 15 = 2445
Outputs:
Ivar Hjalmar Jacobson, born 1939, was found thanks to BMac's crawl data. He provides the chars
><>, like Befunge, is a 2D stack-based language. The useful ><> commands are:
*+24567
for arithmetic (note that47
pushes a4
and a7
on the stack, not47
))
for greater than (useful for getting1
):
for duplicating the top of the stacko
for output;
for program terminationp
is also good for reflection, but I was unable to think of a good use for it.>
is another ><> command, directing program flow rightwards, but since the program already executes in that direction it was not needed.źródło