Anda adalah Desmond Hume. Selama 3 tahun terakhir, Anda dan pasangan Anda, Kelvin, telah menjadi budak komputer yang membutuhkan urutan yang sangat spesifik untuk dimasukkan ke dalamnya setiap 108 menit untuk menyelamatkan dunia.
4 8 15 16 23 42
Pasangan Anda meninggal 40 hari yang lalu (karena kecelakaan yang tidak menyenangkan yang melibatkan kepala dan batu besar Kelvin), dan Anda tidak memiliki siapa pun untuk diajak bicara. Tidak ada yang memasukkan angka untuk Anda. Tidak ada yang memecahkan kebodohan. Pada awalnya itu tidak terlalu buruk, tetapi Anda tidak bisa menangani keheningan lagi. Dan jika Anda harus mendengarkan "Jadikan Musik Sendiri Sendiri" sekali lagi, Anda akan menjerit.
Anda memutuskan bahwa Anda harus keluar. Untuk melarikan diri. Anda memutuskan bahwa Anda akan membangun rakit dan berlayar di luar pulau. Tetapi kemudian Anda menyadari berita buruknya: Anda terjebak di sini. Anda harus terus menyelamatkan dunia.
Tetapi kemudian Anda menyadari kabar baiknya: Anda adalah seorang programmer! Anda dapat secara otomatis menyelamatkan dunia! Bersemangat, Anda berlari ke komputer, dan, menggunakan keterampilan python terpercaya Anda, Anda menyiapkan skrip cepat untuk memasukkan angka untuk Anda.
import time
while True:
print "4 8 15 16 23 42"
time.sleep(60 * 107)
Cepat, sederhana, andal, pendek, dan mudah. Segala sesuatu yang seharusnya menjadi skrip python bagus. Tetapi kemudian, ketika Anda mencoba mengujinya, Anda mendapatkan kesalahan.
Bad command or file name.
Hah, aneh. Oh well, mari kita coba c ++.
#include <iostream>
#include <unistd.h>
int main()
{
while (true)
{
std::cout << "4 8 15 16 23 42" << std::endl;
sleep(60 * 107);
}
}
Tidak! C ++ juga tidak ditemukan. Anda mencoba setiap bahasa yang dapat Anda pikirkan. Javascript, Ruby, Perl, PHP, C #. Tidak ada. Komputer ini dibuat sebelum semua bahasa populer saat itu.
Tantangan
Anda harus menulis sebuah program yang akan:
1) Cetak persis ini: "4 8 15 16 23 42" (tanpa tanda kutip)
2) Tunggu beberapa saat antara 104 dan 108 menit. (Menurut The Lost Wiki )
3) Ulangi selamanya. (Atau sampai Anda menyadari bahwa ini semua adalah penipuan yang rumit, dan bahwa Anda terjebak dalam limbo aneh karena malas menulis, dan mengajukan pertanyaan yang tidak ada jawabannya. Terima kasih JJ Abrams!)
Namun ada masalah: Anda HARUS menggunakan bahasa bahwa komputer di stasiun angsa benar-benar akan mampu berjalan. Berasumsi bahwa
A) Komputer sudah mutakhir pada saat konstruksi,
B) Belum ada pembaruan untuk perangkat lunak komputer, dan
C) Tidak ada koneksi internet yang tersedia (Artinya Anda tidak dapat mengunduh Golfscript ...),
dan membuat perkiraan terbaik kami untuk tanggal pembangunan The Swan Station, (Lagi-lagi, The Lost Wiki. )
Ini berarti Anda harus menggunakan bahasa yang pertama kali dirilis pada atau sebelum 31 Desember 1977.
Beberapa klarifikasi aturan:
Termasuk pustaka adalah OK, tetapi aturan yang sama berlaku (pustaka harus pra-1977).
Anda tidak perlu khawatir tentang kompatibilitas OS.
Jika Anda menggunakan
system
, atau bahasa Anda setara, Anda harus membuktikan bahwa perintah sistem apa pun yang Anda gunakan akan tersedia sebelum 1978. Artikel wikipedia mungkin merupakan cara terbaik untuk membuktikan ini.Tidak masalah ketika Anda memulai program, asalkan berakhir dengan pola pencetakan dan tidur bergantian. (print-sleep-print-sleep ... dan sleep-print-sleep-print ... keduanya dapat diterima.)
Ini adalah Code-Golf, jadi jawaban tersingkat dalam byte menang.
sumber
Jawaban:
APL ,
28242524 byteIni bekerja di APL * PLUS STSC dan di SharpAPL IPSA pada tahun 1977, dan sementara APL modern memiliki banyak fitur baru, ini masih bekerja pada semua APL utama saat ini:
Baris pertama mencetak jumlah kumulatif dari angka yang ditampilkan, yang merupakan angka yang diperlukan. Baris kedua d e l ays 6360 detik (106 menit), kemudian mengambil signum itu (1, jelas), dan pergi ke baris yang (yaitu sebelumnya, nomor-mencetak satu).
Namun, APL \ 360 (APL untuk IBM System / 360 ) dari tahun 1966 sebenarnya mengalahkannya dengan satu byte (diuji pada emulator IBM / 370 gratis ):
Tidur I-beam ( " IBM " -? Mendapatkannya) mengambil menunggu waktu di jiffies dari 1 / 300 th dari kedua, jadi kami menunggu 19 × 10 5 jiffies = 105 menit dan 33 1 / 3 detik.
sumber
+\⎕A⍳'EEHBHT'
(jika⎕IO=0
)⎕A
.+\4 4 7 1 7 19
kemudian?MUMPS - 30 karakter, sekitar tahun 1966 (standar ANSI pertama pada tahun 1977)
Upaya pertama saya di kode golf, ini dia!
MUMPS masih merupakan bahasa populer untuk perangkat lunak EHR, dibuat oleh Massachusetts General Hospital di Boston. Implementasi yang paling dikenal adalah Sistem Epik di Verona, WI.
sumber
TECO, 53 byte
TECO (Teks [sebelumnya Tape] Editor dan Korektor) adalah editor teks yang berasal pada tahun 1962. Ini juga dapat digunakan untuk menjalankan program mandiri. Ini adalah editor canggih untuk PDP, VAXen, dll.
Menurut manual TECO,
^H
perintah memberi waktu. Pastikan untuk memeriksa sistem operasi dan catu daya Anda, karena satuan waktu dapat bervariasi sesuai dengan mesin Anda:Program berikut ini bekerja pada sistem yang waktu waktunya diukur dalam detik / 2:
Perhatikan bahwa
^H
dan$
harus dimasukkan dengan memukul, masing-masing, CONTROL-H dan ESCAPE.Angka-angka dalam program ini dapat disesuaikan untuk mesin-mesin berikut:
sumber
Bourne shell,
4745 bytesumber
sleep
sebenarnya tersedia saat itu - apakah Anda menemukannya? en.wikipedia.org/wiki/…sleep
sebagaiwhile
kondisi. Menghemat 2 byteC,
5452 bytesumber
main(){for(;;sleep(6360))puts("4 8 15 16 23 42");}
FORTRAN 66 (
10898 Bytes)Sudah pasti bahwa komputer tersebut memiliki kompiler FORTRAN, karena mendominasi bidang ilmiah dan teknik di zaman itu. Saya lahir 18 tahun setelah tahun eponymous, tetapi selama program matematika saya di universitas kami belajar FORTRAN. Satu ceramah yang menyenangkan kami pelajari cara memprogram kartu meninju. Tidak mudah untuk memformatnya dengan benar di sini, harus ada 6 spasi kosong sebelum setiap perintah dan saya hanya bisa menemukan referensi ke fungsi Sleep untuk Fortran 77 tetapi seharusnya sudah ada di Fortran IV dan 66.
PS: Kita bisa menghapus satu Byte dengan menggunakan label 1 bukan label 42.
PPS: Jika komputer tersebut menggunakan kartu punching untuk input program, Anda semua kurang beruntung dan byte tidak penting lagi: D.
sumber
60*107
dengan80**2
, juga.MacLisp,
4746 byteSemua konstruksi diambil dari manual referensi 1974 (PDF) . Tidak diuji karena saya tidak punya juru bahasa MacLisp.
sumber
nil
bisa ditulis()
Altair Basic
Yang pasti, Desmond dan Kelvin akan memiliki Altair 8800 (atau emulator) hanya untuk bersenang-senang. Altair Basic (dari seorang lelaki bernama Bill Gates, dari beberapa lelaki kecil pemula yang disebut Micro-Soft) mencicit dengan rilis tahun 1975.
Desmond perlu sedikit menyempurnakan untuk memastikan
FOR
lingkaran dalam berlangsung satu menit. Saat itu, semua orang tahu loop sibuk salah, tetapi semua orang menggunakannya!Sebagai alternatif, Desmond dapat memasang papan 88-RTC (dirakit dari komponen !: http://www.classiccmp.org/altair32/pdf/88-virtc.pdf ) dan mendapatkan akses melalui interupsi ke jam waktu nyata yang hilang saluran listrik atau kristal internal.
Dia perlu menulis rutin interupsi untuk menangani input jam, yang pada gilirannya dapat memperbarui port, mengatakan setiap 59 detik dibawa ke darat selama satu detik, lalu naikkan tinggi.
Altair Basic memiliki
WAIT
fungsi, jadi kodenya akan disederhanakan menjadi seperti ini (saya tidak dapat menemukan daftar port, jadi saya hanya memilih 125 dengan harapan tidak akan digunakan.):Ini sebenarnya pertanyaan kecil yang menyenangkan, kembali ke beberapa komputer yang benar-benar belum sempurna. Kesabaran yang dimiliki oleh orang-orang tua (termasuk saya)!
sumber
Assembler PDP-11 untuk Unix System 6 -
736874 karakterBerbicara tentang tahun 70-an, wajib menghormati Unix dan perangkat keras tempat semuanya dimulai!
Anda dapat dengan mudah menjalankannya di sini (tetapi pertama-tama Anda harus menemukan kembali kesenangan menggunakan
ed
untuk memasukkan teks - dalam kasus khusus saya, saya bahkan harus menemukan cara untuk benar-benar mengedit teks di dalamnya:)
).Dirakit menjadi 108 byte.
sumber
msg
boros, saya bisa pergi denganm
(mencukur 4 byte lainnya).br
bukanjmp
, bukan? Juga, menulis membutuhkan deskriptor file di r0 - Anda tampaknya memiliki 1 (atau 2) di dalamnya untuk loop pertama Anda, tetapi Anda menghancurkannya dengan waktu tidur Anda.br
, berkat yang satu dan beberapa trik lainnya (terutama memotong spasi putih dan menggunakan oktal bila memungkinkan) kami mendapat 74 karakter bahkan menambahkan yang pertamamov
.LOGO, 61 byte (mungkin) atau 48 byte (mungkin tidak)
Sayangnya, saya belum berhasil menemukan salinan online The LOGO System: Preliminary Manual (1967) oleh BBN, atau referensi apa pun oleh MIT Logo Group (1960-an +). Logo Apple oleh LCSI agak terlalu baru (~ 1980). Namun, berdasarkan buku online, beberapa variasi berikut ini mungkin berhasil pada saat itu. Perhatikan bahwa TUNGGU 60 menunggu selama 1 detik, bukan 60.
Kami dapat melakukan sedikit lebih baik dengan optimasi panggilan ekor, meskipun ini mungkin tidak tersedia pada saat itu.
sumber
CBM BASIC 1.0,
5238 karakter, ditautkan hingga4531 byteCBM BASIC 1.0 diperkenalkan dengan Commodore PET pada Oktober 1977. Perintah biasanya akan ditampilkan dalam huruf besar dan karakter grafik CBM, tetapi saya telah mendaftarkannya di sini dalam huruf kecil + huruf besar demi kemudahan (baik milik saya dan milik Anda! :-) ). Perhatikan juga bahwa ^ sebenarnya akan ditampilkan sebagai as. Diturunkan, setelah mendaftar ini dengan
LIST
ini akan menghasilkan:6502 PET berjalan pada 1MHz, jadi ini akan memakan waktu sekitar 105 menit atau lebih untuk menyelesaikannya.
Sunting : Menyadari bahwa loop bersarang tidak benar-benar diperlukan dan saya salah menghitung token saya. Masih belum cukup untuk menang (dan sudah terlambat, untuk boot), tapi setidaknya lebih baik.
sumber
Pascal -
10795 byteVersi tidak disatukan:
sumber
Keempat , 50 byte
Meskipun FORTH-79 adalah versi standar paling awal, bahasa ini dalam pengembangan mulai tahun 1968, dan dapat digunakan pada IBM 1130. Ini digunakan pada sistem lain juga sebelum 1977 muncul. Saya mungkin melakukan sedikit riset lebih lanjut untuk memastikan semua kata-kata ini tersedia, tetapi saya cukup yakin ini cukup mendasar untuk ada pada saat itu. Ini semua tersedia oleh FORTH-79, pasti.
Loops selamanya, menunggu 6420000 milidetik di antara pencetakan string. Tidak ada baris baru yang dicetak.
sumber
Smalltalk, 95 (atau 68 jika celah diizinkan)
Sudah ada sejak 1972
Tidak ada pengalaman dengan yang ini, lihat di wikipedia: P
Melihat secara online cara mengulang dan menunda, sintaksisnya harus benar tetapi tidak dapat menemukan cara untuk menjalankannya.
Kemungkinan celah
Seharusnya mencetak urutan setiap 108 menit, tetapi tidak menyatakan bahwa itu harus 108 menit.
Ini bisa membuat kode lebih pendek
Kode akan mencetak urutan tanpa interval, sehingga dijamin bahwa ia akan mencetak setelah 108 menit juga.
sumber
Wait some time between 104 and 108 minutes
, jadi saya tidak berpikir celah itu mungkin.SAS,
827569Bukan bahasa golf yang khas, tapi saya pikir itu memenuhi syarat untuk tantangan ini, dengan asumsi
file stdout
itu berlaku di SAS era 1977.Perbaikan:
data _null_;
->data;
menyimpan 7 karakter (dan sekarang menghasilkan dataset kosong serta mencetak ke stdout).sumber
Thompson shell, 1971 (1973 untuk perintah tidur)
43 byte
Karena shell Bourne, meskipun ada pada tahun 1977, tidak ada dalam versi Unix yang dirilis sampai v7 pada tahun 1979. Shell Unix yang asli tidak memiliki perintah kontrol loop mewah. (Jika Anda ingin mengakhiri satu lingkaran, Anda dapat menggunakan
if
perintah untuk melewati goto.)sumber
exec $0
menghemat sedikitgoto
?C, 50 byte
Lebih pendek dari solusi C lainnya, dan karenanya bukan duplikat. Saya benar-benar menulis ini sebelum saya perhatikan (hampir) komentar identik Digital Trauma pada solusi C lainnya.
sumber
COBOL, 240 byte
Ya, spasi putih terkemuka sangat penting. Kompilasi dan jalankan like
cobc -x save.cob; ./save
. (-x
Opsi menghasilkan executable yang bertentangan dengan lib bersama dan dengan demikian saya tidak berpikir itu perlu dihitung.)Jika kita ingin menjadi membosankan, kita dapat menambahkan
--free
opsi kompilasi untuk kode format bebas, kemudian 158 + 6 = 164 byte tetapi ini tidak mungkin bekerja kembali di '77.sumber
ALGOL 60/68 / W,
744750 byteJalankan program lengkap ini dengan
a68g save.a68
, menggunakanalgol68g
.ALGOL tidak memiliki cara untuk tidur tetapi kita dapat menjalankan dasarnya
/bin/sleep
:Jawaban lama:
sumber
system
baik-baik saja dan tidak baik-baik saja? Anda baik-baik sajasystem("ping ...")
tetapi tantangannya mengatakan saya tidak dapat menggunakansystem
dari C untuk mis. Perintah bash. ALGOL melakukan pencetakan, tapi saya tidak punya cara lain selainping(8)
atausleep(1)
tidur.system("sleep")
akan berfungsi pada OS dari waktu itu. Saya akan mengedit posting.