Pilih ilmuwan komputer terkenal favorit Anda atau pelopor ilmu komputer yang lahir pada tahun 1942 atau lebih awal (karena tahun 1943 menandai dimulainya penciptaan komputer 'pertama' ). Mereka harus memiliki halaman Wikipedia atau situs lain yang mencantumkan tahun kelahiran mereka dan memberi tahu bagaimana prestasi mereka terkait dengan ilmu komputer. Anda dapat memilih yang sama dengan orang lain tetapi memilih orang baru dianjurkan.
Ambil nama yang biasa mereka kenal. Ini kemungkinan besar akan menjadi nama depan dan belakang mereka tetapi mungkin termasuk singkatan atau nama tengah jika itu lebih umum. Misalnya, untuk Tony Hoare baik Tony Hoare
dan C. A. R. Hoare
akan diterima.
Semua karakter dalam nama harus dapat dicetak ASCII . Jika nama tersebut mengandung karakter yang tidak dapat dicetak ASCII, tidak masalah jika Anda memilih sesuatu yang mendekati. misalnya Kurt Godel
bukannya Kurt Gödel
.
Ambil set karakter unik dalam nama (misalnya C. ARHoare
) dan geser mereka ke atas skala ASCII yang dapat dicetak pada tahun kelahiran ilmuwan Anda, berputar-putar dari ~
ruang angkasa. (Pada dasarnya tambahkan tahun lahir modulo 95.) Ini akan memberi Anda (kemungkinan besar) karakter baru ASCII yang dapat dicetak.
Misalnya, CAR Hoare lahir pada tahun 1934, sehingga mengubah setiap karakter pada tahun C. ARHoare
1934 (34 mod 95) memberi karakter ePBctj2$5(
.
Cuplikan Stack ini akan melakukan semua pergeseran untuk Anda:
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>
Tantangan
Dengan menggunakan set ini dan hanya set ini (tanpa tab, tidak ada baris baru) dari karakter ASCII yang dapat dicetak yang digeser, tulislah sebuah program yang mencetak Hello, [name]!
ke stdout atau alternatif terdekat, di mana [name]
nama persis sama yang Anda pilih di atas dan bergeser untuk mendapatkan karakter program Anda. Anda dapat menggunakan beberapa karakter dari set atau tidak menggunakan sama sekali. Sebagai contoh, program teoritis PetBee($25
dicetak Hello, C. A. R. Hoare!
.
Mencetak gol
Skor Anda adalah ukuran kode Anda dalam byte kali jumlah karakter unik dalam nama yang Anda pilih. Sakit terendah menang.
sumber
Rear Admiral Grace Murray Hopper, United States Navy, (Retired), Doctor of Philosophy
. Lahir tahun 1906. Apakah itu baik-baik saja?Rear Admiral Grace Murray Hopper
. Ingat bahwa ukuran kode Anda dikalikan dengan jumlah karakter unik dalam nama sehingga nama yang lebih panjang belum tentu lebih baik.Jawaban:
Insomnia,
1039998 * 8 = 784George Boole , 1815
Semua 5 program di bawah ini memiliki panjang yang sama (98) dan output yang sama.
Cetakan
Hello, George Boole!
Insomnia, 103 * 6 = 618 (mungkin optimal dan unik)
Jika
G Boole
( George Boole , 1815) dapat diterima ...Cetakan
Hello, G Boole!
Insomnia,
9492898583 * 10 = 830Kurt Godel, 1906.
Cetakan
Hello, Kurt Godel!
Saya menulis sebuah program untuk mencari solusinya. Versi kedua dari program saya harus lebih dekat ke optimal daripada versi pertama saya.
Sesuai nitpick @Martin Büttner (
100928885 karakter, set karakter yang sama):Cetakan
Hello, Kurt Goedel!
Penerjemah
sumber
Gödel
hanya menggunakan alfabet LatinGoedel
. ;)CJam,
230117115114113110107106 byte * 13 = 1378Uji di sini.
Saya memilih
Edsger Dijkstra
, lahir tahun 1930, yang memberi sayac#2&$1>b()* 3
(yang saya benar-benar hanya memilih karena dia adalah yang pertama saya temukan yang namanya menghasilkan karakter yang berguna untuk CJam; Saya sudah memeriksa selusin nama sejak dan tidak ada yang tampak menjanjikan).Kode pada dasarnya hanya membangun kode ASCII menggunakan
1
,2
,3
,*
,#
(eksponensial) dan(
,)
(penurunan, selisih) dan bertobat mereka untuk karakter denganc
. Untuk menyimpan beberapa karakter, saya kadang-kadang dapat menyalin karakter sebelumnya$
(0$
menyalin elemen tumpukan atas,1$
menyalin elemen tumpukan kedua-ke-atas dan sebagainya).Berikut ini rincian kode menjadi karakter (ini juga bisa dijalankan):
sumber
Marbelous , 83 byte * 10 = 830
Saya telah memilih
R Kowalski, 1941
yang memungkinkan saya untuk menggunakan:{It9A+6=53
Yang ini sedikit lebih kompleks daripada jawaban lama (di bawah) karena banyak kelereng melewati beberapa perangkat, semuanya marmer hanya punya beberapa hal yang ditambahkan sebelum dicetak. Karena saya tidak memiliki pengurangan atau angka yang rendah, kode ascii yang lebih rendah harus dibentuk dengan menambahkan dengan menggabungkan dua kelereng bernilai tinggi, karena ini menghasilkan modulo tambahan. (Saya telah menggunakan
=3
sebagai deflektor karena mendorong setiap marmer tidak sama dengan 3 ke kanan dan terlihat seperti kucing yang lucu)keluaran:
Hello, R Kowalski!
jawaban lama:
Marbelous , 113 * 17 = 1921
Marbelous tidak apa-apa di sini, karena marmer yang jatuh dari papan akan dicetak, karena sifat 2D-nya, perlu beberapa angka + beberapa aritmatika agar borad tidak menjadi terlalu besar.
Saya telah memilih
Philip D. Estridge, 1937
siapa yang menghasilkanu./26EiSj9:8*-+
sebagai set karakter yang tersedia. Karakter yang sebenarnya digunakan adalah.+-245689E
Papannya cukup sederhana, 3 baris pertama adalah literal, grup dua adalah nilai heksadesimal, baris keempat adalah operasi aritmatika untuk membentuk kode ascii yang tidak dapat dituliskan secara eksplisit karena set karakter yang terbatas.
keluaran:
Hello, Philip Donald Estridge!
Anda bisa mencobanya di sini!
Sekarang saya akan mencari kandidat yang mungkin lebih baik, karena sepertinya marbelous sebenarnya bisa bersaing di sini.
sumber
G Boole
dengan 105 karakter * 6 - Saya pikir harus ada batasan pada seberapa banyak nama dapat disingkat.Using this set and only this set (no tabs, no newlines) of shifted printable ASCII characters
Brainfuck, 1846 * 12 = 22152
Hanya untuk memiliki bahasa selain CJam. Membutuhkan spec Brainfuck asli dengan byte datatype, yang melimpah pada 256.
Hanya menggunakan 2 karakter:
+
untuk meningkatkan sel saat ini, dan.
untuk menampilkan sel saat ini.Keluaran
Penghargaan diberikan kepada Coredump karena mengungkapkan hal berikut dalam jawabannya:
sumber
"Halo, Niklaus Emil Wirth!" (Befunge-98, 222 × 14 = 3108)
Dari Wikipedia :
Dengan perubahan 34,
Niklaus Emil Wirth
(18 karakter, 14 unik) berakhir sebagaip,./$86Bg0,/By,57+
.Kode ( coba di sini ):
Kerusakan:
Baris terakhir menempatkan karakter HALT (
@
) di awal baris. Ketika kontrol membungkus kembali ke titik ini, program akan berhenti. Ini sebenarnya tidak perlu, karena@
karakter di (5,0) masih ada dan tidak ada yang harus dihasilkan sebelum tercapai. Namun, satu-satunya juru bahasa Befunge online yang akan menjalankan monstrositas ini tidak akan berfungsi tanpa itu.Hal ini sebenarnya mungkin untuk membuat solusi bekerja dengan hanya
Niklaus Wirth
(12 chars unik,p,./$86By,57+
), tetapi kode ini banyak, banyak lagi.(Ditandai sebagai Befunge-98 karena Befunge-93 terbatas pada lebar 80 karakter.)
sumber
CJam, 323 byte * 10 = 3230
Keluaran:
CJam, 662 byte * 10 = 6620
8700Bukan untuk menang tetapi hanya karena itu terlihat mungkin. Hanya digunakan
2e(c
.Keluaran:
Generator
Jawaban sepele
222(((((((((((c
(dihasilkan olehq{i222_@-'(*'c}%
) memiliki 3420 byte.sumber
e_
angka literal luar.2
? Atau dengan menggunakan karakter (berguna) lainnyaB
,5
dan$
? (Misalnya, Anda bisa mendapatkan ruang kedua hingga keempat dan periode kedua dan ketiga dengan2$
, sertaA
dengan2$((
.)CJam, 16 *
307288 =49124608Menampilkan:
Ini adalah jawaban pertama saya menggunakan CJam, jadi pasti ini bisa bermain golf lebih baik (ada isyarat selamat datang).
Berikut adalah beberapa kode utilitas yang saya gunakan. Karena saya menghitung set karakter untuk beberapa nama lain, ini mungkin berguna untuk seseorang yang lebih tahu CJam (atau mungkin untuk bahasa lain).
sumber
Brainf_ck - 723 * 12 = 8676
Saya melakukan penjelajahan dari Daftar ilmuwan komputer Wikipedia dan mengumpulkan tahun kelahiran dan nama terpanjang dari semua orang yang terdaftar di sana. Saya menulis sebuah program untuk membahas semua ini dan menemukan apa yang bisa saya lakukan dalam bahasa yang sama. Sayangnya, saya tidak dapat menemukan nama-nama setiap yang bisa mendukung
echo;
,alert()
,console.log()
(aku bisa berharap),print
ataumain
.Saya terutama ingin membagikan data penjelajahan mentah saya jika ada orang yang ingin mencari bahasa lain dengan cara yang sama (catatan: mungkin tidak akurat dan tidak lengkap): Data Perayapan .
EDIT : Tempel perayapan baru dengan sekitar 40 nama baru dari Daftar orang komputasi dan Daftar pelopor dalam ilmu komputer .
EDIT : Secara manual membersihkan daftar.
Saya memang menemukan bahwa Jean David Ichbiah (1940), kepala desainer Ada, menyediakan
+-.
(yang terpendek dari tiga orang untuk melakukannya). Saya membuat kode BF ini untuknya.Alexander Keewatin Dewdney memberikan karakter BF paling berguna (
+.<>
), tetapi muncul sedikit di atas jawaban saya. Tidak ada yang saya temukan disediakan.[]
.sumber
Ruby 1,8 - 250 × 18 = 4500
Karakter yang tersedia:
Keluaran:
Anatolii Karatsuba , lahir 1937, paling terkenal karena kontribusinya di bidang teori bilangan analitik (bidang yang saya nikmati secara pribadi), termasuk Algoritma Karatsuba , sebuah metode untuk penggandaan cepat operan presisi sewenang-wenang.
Ini adalah nama pertama dan satu-satunya yang saya coba.
sumber
GolfScript (125 * 14 = 1750)
Demo online
Douglas Engelbart (1925 - 2013) mungkin paling terkenal dengan "Mother of All Demos" . Nama dan tahun kelahirannya memberikan karakter
!&(),-./9]^z{~
, yang digunakan solusi ini&()-./9]^~
Struktur dasar dari kode adalah
build list of numbers](-
yang menempatkan banyak angka dalam array dengan string kosong yang dimulai pada stack, kemudian menarik string itu dan menggunakannya dengan promosi tipe-
untuk mengubah array angka menjadi string.Karena tidak ada akses ke elemen di bawah bagian atas tumpukan saya menulis program C # untuk menemukan potongan pendek yang mengambil bilangan bulat yang diberikan di bagian atas tumpukan dan menambahkan bilangan bulat berikutnya yang diperlukan. Ini menciptakan satu masalah kecil, ketika cuplikan untuk
69
(E
) diakhiri dengan-
dan cuplikan untuk110
(n
) dimulai dengan9
: biayanya satu arang untuk menggunakan cuplikan yang lebih panjang untuk110
.sumber
CaneCode ,
458410 * 16 =73286560BF yang sesuai:
Output:
CaneCode hanyalah pengganti simbol langsung dari Brainfuck, di mana masing
12348
-+-><.
masing sesuai . Saya menghabiskan sekitar 2 jam mencoba mencari nama pendek yang memberikan+-.
Brainfuck normal, tanpa hasil.Jack Elton Bresenham , penemu algoritma garis Bresenham dan lahir tahun 1937, memberikan karakter berikut:
Sayangnya, ketika
5
([
) tersedia, kurangnya6
(]
) berarti bahwa kode masih harus menambah area 100-ish (untuk karakter huruf kecil) dengan cara lambat.sumber
> <> (Ikan) , 163 * 15 = 2445
Output:
Ivar Hjalmar Jacobson , lahir 1939, ditemukan berkat data penjelajahan BMac . Dia menyediakan chars
> <>, seperti Befunge, adalah bahasa berbasis stack 2D. Perintah yang berguna> <> adalah:
*+24567
untuk aritmatika (catatan yang47
mendorong a4
dan a7
di stack, bukan47
))
untuk lebih dari (berguna untuk mendapatkan1
):
untuk menduplikasi bagian atas tumpukano
untuk output;
untuk penghentian programp
juga baik untuk refleksi, tetapi saya tidak dapat memikirkan penggunaan yang baik untuk itu.>
adalah perintah lain> <>, mengarahkan aliran program ke kanan, tetapi karena program sudah dijalankan ke arah itu, itu tidak diperlukan.sumber