Muak dengan keandalan penyimpanan flash, Anda memutuskan untuk menyimpan semua program Anda di salah satu disket 1.440 KiB tua yang bagus itu. Namun, setelah menyalin bahkan tidak 3.000 program, disk penuh. Bagaimana itu mungkin? Terampil dalam seni kode golf seperti Anda, sebagian besar program Anda bahkan tidak sepanjang 100 byte, jadi harus ada banyak ruang tersisa ...
Setelah bertanya tentang hal itu di Super User, Anda menemukan bahwa Anda telah dirugikan oleh ukuran cluster sistem file , plot jahat dari desainer FAT12 yang membuat sebagian besar floppy Anda tidak digunakan dan memaksa Anda untuk membeli lebih dari yang sebenarnya Anda butuhkan.
Beli lebih banyak disket? Tak pernah! Ukuran cluster tidak akan terlalu menjadi masalah jika kita hanya menyimpan banyak program dalam satu file, yang dimungkinkan karena kompiler / juru bahasa yang berbeda akan berperilaku berbeda untuk kode sumber yang sama.
Tugas
Tulis polyglot yang cocok dalam satu cluster (512 byte atau kurang) dan selesaikan sebanyak mungkin tugas berikut.
Baca semua input dan cetak.
Cetak Halo, Dunia! .
Baca baris / argumen ( nama ) sebagai masukan dan cetak Selamat Ulang Tahun, [nama]! .
Baca semua input dan cetak tab I love! jika mengandung satu atau lebih tabulasi (0x09) dan saya benci spasi! jika tidak.
Baca dua baris / argumen dan cetak nilai yang benar jika yang kedua adalah substring yang pertama dan nilai yang salah jika tidak.
Baca baris / argumen dan cetak nilai kebenaran jika karakternya berada dalam urutan yang benar-benar naik dan nilai yang salah jika tidak.
Baca baris / argumen dan karakter dan cetak indeks semua kejadian karakter itu.
Baca baris / argumen dan cetak salah satu karakter dengan jumlah kemunculan tertinggi.
Baca dua bilangan bulat antara 0 dan 255 dan cetak jumlahnya.
Baca bilangan bulat tunggal antara 0 dan 255 dan cetak hasil bagi dan sisa pembagiannya sebesar 7 .
Baca bilangan bulat tunggal antara 1 dan 255 dan cetak nilai kebenaran jika itu adalah angka komposit (bukan 1 atau prima) dan nilai palsu jika tidak.
Baca bilangan bulat tunggal antara 1 dan 255 dan cetak nilai kebenaran jika itu adalah kekuatan 2 dan nilai palsu jika tidak.
Baca dua bilangan bulat antara 0 dan 255 dan cetak yang lebih besar.
Baca bilangan bulat desimal antara 0 dan 255 cetak representasi heksadesimalnya.
Baca bilangan bulat tunggal antara 0 dan 255 dan cetak bobot Hamming-nya (jumlah 1-bit).
Baca satu bilangan bulat n antara 1 dan 13 dan mencetak F n , yang n th nomor Fibonacci .
Misalnya, untuk input
13
, cetak233
.
Baca baris / argumen input dan bingkai itu.
Misalnya, untuk input
Programming Puzzles & Code Golf
, cetak ini:+---------------------------------+ | Programming Puzzles & Code Golf | +---------------------------------+
Baca blok karakter persegi panjang dan putar seperempat putaran searah jarum jam.
Misalnya untuk input
tye xll epb tma id sa s e i r hsn Tiu
cetak ini:
This text is simply unreadable
Baca bilangan bulat antara 1 dan 40 dan cetak berlian dengan panjang sisi itu.
Misalnya, untuk input
3
, cetak ini:/\ / \ / \ \ / \ / \/
Cetak ini:
....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@....
Mencetak gol
Jawaban yang berhasil memasukkan jumlah program terbanyak dalam satu file yang sesuai dengan cluster 512 byte tunggal menang. Dasi dipecah oleh jumlah byte (lebih rendah lebih baik).
Aturan tambahan
Untuk setiap tugas yang Anda klaim untuk skor Anda, file yang sama (byte per byte) harus merupakan program lengkap - dalam bahasa pilihan Anda - yang menyelesaikan tugas khusus ini.
Setiap tugas harus diselesaikan dalam bahasa yang berbeda.
Bahasa dianggap berbeda jika bukan versi yang berbeda dari bahasa yang sama. Misalnya, hanya ada satu JavaScript, satu Python dan satu TI-BASIC, tetapi C, C ++, Octave, dan MATLAB adalah empat bahasa yang berbeda.
Bahasa yang dipilih untuk setiap tugas harus memenuhi definisi bahasa pemrograman kami yang biasa .
Selain itu, bahasa tersebut harus sudah diterbitkan dan diimplementasikan sebelum 9 September 2015.
Kompiler / juru bahasa Anda mungkin tidak memerlukan tanda non-standar untuk menghasilkan perilaku yang diharapkan.
Pengecualian untuk aturan ini mencakup bendera yang diperlukan untuk menentukan bahasa tertentu, untuk membaca program dari file (tunggal) atau untuk menekan banner.
Input untuk setiap tugas terdiri dari karakter ASCII yang dapat dicetak (0x20 hingga 0x7E) dan linefeeds (0x0A), dan panjangnya tidak akan melebihi 255 byte.
Semua bilangan bulat dapat dibaca dalam desimal atau unary, kecuali dinyatakan sebaliknya dalam tugas.
Perilaku untuk input yang tidak valid tidak ditentukan.
Anda dapat membaca input dari STDIN (atau alternatif terdekatnya) atau sebagai argumen baris perintah.
Jika suatu tugas membutuhkan membaca dua potong input, Anda dapat membacanya - dalam urutan apa pun - dipisahkan oleh pembatas satu byte pilihan Anda, sebagai argumen baris perintah yang terpisah atau satu dari STDIN dan yang lainnya sebagai argumen baris perintah.
Jika salah satu dari potongan input adalah satu baris, satu-satunya pembatas yang mungkin adalah linefeed.
Cetak hasilnya ke STDOUT (atau alternatif terdekat). Semua output ke STDERR akan diabaikan.
Untuk setiap tugas, aturan kode-golf standar berlaku.
Secara khusus, ini termasuk celah yang dilarang secara default , dengan pengecualian hard-coding output , yang secara eksplisit diizinkan untuk tantangan ini.
2>/dev/null
dan mendapatkan output yang benar untuk stdout, tidak apa-apa? Hanya untuk memastikan.Jawaban:
12 bahasa, 418 byte
Ini tantangan yang menyenangkan. Semakin sulit untuk memasukkan lebih banyak bahasa, tetapi dengan banyak byte yang tersisa saya mungkin bisa melakukan satu lagi.
Manfaatkan bahasa 2D secara serampangan. Perhatikan bahwa karakter di antara baris
[ ]
on-@-[ ]e<
line adalah tab. Juga, ini membutuhkan\n
akhir baris agar TRANSCRIPT berfungsi.Pendahuluan (Tugas 1 / Kucing)
?(!?)
hanyalah terjemahan langsung dari,[.,]
dalam BF. Prelude()
loop bertindak seperti[]
loop BF , jadi semuanya mulai dari(
di kolom paling kiri hingga)
sebelum program inti tidak dieksekusi.Aturan sintaks Prelude berarti bahwa tanda kurung harus dicocokkan (membaca kolom ke kiri ke kanan), dan hanya ada satu tanda kurung per kolom. Selain itu, bahasa ini cukup mudah untuk digunakan.
Pastikan
NUMERIC_OUTPUT
diatur keFalse
jika Anda menggunakan juru bahasa Python.TRANSCRIPT (Tugas 2 / Halo dunia)
TRANSCRIPT adalah esolang tematis berdasarkan fiksi interaktif. Jalur yang tidak dikenali oleh TRANSCRIPT diabaikan, sehingga mudah untuk masuk.
Tr is here.
mendeklarasikanTr
variabel string, dan baris kedua mengatur isi variabel menjadiHello, World!
.X Tr
(X
untuk memeriksa) kemudian mengeluarkan string.Meskipun TRANSCRIPT sangat mudah untuk digunakan, ini adalah bahasa yang sangat bertele-tele, jadi saya membuatnya mengambil tantangan termudah.
Fission (Tugas 3 / Pesan Ulang Tahun)
yang mencetak bagian pertama, memasukkan input dengan loop 2D kecil, kemudian mengeluarkan tanda seru tambahan. Yang
R
menandakan bahwa sebuah atom mulai di sini bergerak ke kanan, yang berguna karena program ini dapat dipindahkan di mana saja.Rail (Tugas 4 / Tab)
Seperti halnya Fission, Rail adalah bahasa 2D yang memiliki keuntungan karena dapat dipindahkan ke mana saja. Eksekusi dimulai dari
$
darimain
fungsi, menuju tenggara.Pertama-tama kita turun
\
s, belok kiri-
, memukul[<tab>]
yang mendorong tab.e<
kemudian cabang berdasarkan EOF - jika EOF, kita kepala ke bawah dan mencetak"I hate spaces!"
sebelum berhenti, kalau tidak kita menuju ke atas. Jika kita menuju ke atas, kita membaca char berikutnya dan membandingkannya dengan tab, sekali lagi bercabang - jika tab, kepala ke atas dan cetak"I love tabs!"
sebelum berhenti, lain kepala ke bawah dan lanjutkan loop input.Program ini cukup mahal, tetapi karena TRANSCRIPT mengambil Hello World, sulit untuk memilih dan tugas yang sesuai untuk Rail.
> <> (Tugas 6 / Masukan naik)
Mencetak
1
jika benar-benar naik,0
sebaliknya.> <> adalah bahasa 2D lain, dan eksekusi dimulai dari kiri atas.
"..."
adalah mode string, mendorong karakter dalam satu per satu. Setelah string pertama yang kita tekan#
, yang memantulkan IP ke kiri, mendorong lebih banyak string dan membungkus (> <> adalah toroidal) sebelum memukul\
, sebuah cermin yang memantulkan kita ke atas.Di bagian bawah program adalah
.91<
, yang mengirim kami ke(9, 1)
, di mana program inti berada. Setelah ini0[
menghapus semua sampah dari string,0
mendorong nol untuk mewakili karakter yang terakhir dibaca, dan setelah ini hanya membaca karakter satu per satu, memastikan kita masih naik.Mungkin lebih baik untuk memindahkan program inti ke bawah daripada melakukan teleportasi, tetapi saya akan mengatasinya nanti jika perlu.
Befunge (Tugas 9 / Tambahan)
Diuji dengan penerjemah yang ditemukan di sini . Ini adalah program yang cukup mudah, dengan mulai mendorong tali yang tidak berguna dan
#
melompati ruang. Setelah itu baru program inti&&+.@
.Labyrinth (Tugas 10 / Divmod oleh 7)
Dengan mudah,
'
dan"
ada NOP di Labyrinth yang bertindak seperti jalan setapak di labirin. Saya akan melewatkan navigasi yang berantakan, tetapi pada dasarnya ada banyak berbalik dan berkeliaran di sekitar terjadi sebelum kita menekan?
, yang merupakan awal dari program inti.Program ini tidak cukup rata untuk menghitung Prelude (mis.
?
Adalah input baca di Prelude).Python 2 (Tugas 14 / Heksadesimal)
The
xxx
s mewakili bagian yang tidak relevan komentar oleh string multiline atau komentar. Di antara keduanyaprint hex(input())
, progam inti. Ini output dengan yang terkemuka0x
, tapi saya berasumsi tidak apa-apa (jika tidak, maka itu adalah perbaikan yang mudah pula).Baris pertama adalah string
"1\"# &&+.@\""
diikuti oleh dua" "
s. Tiga string ini disatukan oleh parser, dan dibiarkan tidak digunakan (baris pertama ini bekerja sama untuk Ruby dan Julia nanti).GolfScript (Tugas 15 / Berat Hamming)
Baris pertama mendorong tiga string, dan baris kedua adalah komentar.
''''
mendorong dua string lagi, lalu<<
melakukan dua perbandingan (s
diabaikan). Akhirnya,""'("'
dorong dua string lainnya.Semua ini adalah sampah kemudian dihapus dengan membungkusnya dalam sebuah array dan mendapatkan elemen pertama (
]0=
), yang merupakan input awalnya pada stack. Kami kemudian mengevaluasi input dengan~
, berubah menjadi biner dengan2base
jumlah bit kemudian{+}*
. Berikutnya tidak}
ada tandingannya, dan komentar luar biasa dari sisa program.Julia (Tugas 16, Fibonacci)
#=
memulai komentar multiline dan=#
mengakhiri komentar multiline. Program inti menggunakan eksponensial matriks untuk menghitung angka Fibonacci (diambil dari Rosetta ).Ruby (bingkai Tugas 17 / ASCII)
Program ini mengasumsikan bahwa input tidak berakhir dengan baris baru tambahan.
Kami memiliki string yang tidak berguna, komentar, string yang tidak berguna kemudian heredoc yang berkomentar sebagian besar program. Setelah itu adalah program inti, diikuti oleh
#
komentar satu baris .CJam (Tugas 19 / Diamond)
Dua string ruang pada akhir baris pertama adalah untuk memenuhi CJam, karena
#=
dua operator biner. Saya tidak akan terlalu banyak detail dengan yang satu ini, tetapi pada dasarnya itu berantakan, dengan program inti menjadi belakadiantara.
Perbedaan utama antara GolfScript dan CJam adalah bahwa, di CJam, kutipan tunggal
'
tidak memulai dan mengakhiri string, tetapi sebaliknya mendorong karakter berikutnya ke stack. Ini berarti bahwa dalam CJammendorong a
(
lalu mulai string dengan"
(karakter pertama adalah'
), sedangkan di atas hanya string tunggal lurus dalam GolfScript.Cobalah online .
1>
digunakan alih-alih(
untuk menjelaskan Prelude.Berikut 12 bahasa, 373 byte . Beberapa tugas telah berpindah, TRANSCRIPT telah dihapus (itu membuat Rail terlalu mahal) dan Skema (ayam) telah ditambahkan. Ini hanya lapangan golf saya untuk pembaruan yang akan datang karena memperbarui posting utama selamanya.
Saya bisa menyimpan beberapa byte untuk Julia karena komentar multiline yang tidak dikuatkan meningkatkan kesalahan pada STDERR.
sumber
;)
saya menunda-nunda mengubah apa pun dalam jawaban saya, karena deskripsi panjang. lol78910 bahasa,398431447507 byteIni mungkin yang paling cocok untuk solusi saya saat ini.
Baris terakhir berisi kode Whitespace yang dikodekan sehingga SE tidak memakannya. Untuk menjalankan kode, ganti semua
S
dengan spasi,T
dengan tab danN
dengan baris baru.C89, tugas 16
Inilah yang dilihat oleh kompiler:
Segala sesuatu yang lain dilucuti sebagai komentar atau di dalam
#if 0
.C ++, tugas 14
Saya menggunakan trik yang dicuri dari sini untuk membedakan antara C89 dan C ++.
Lua, tugas 2
Inilah struktur dasarnya.
Brainfuck, tugas 1
Saya hanya harus memastikan tidak ada loop atau nyasar yang tak terbatas
.,
ditemukan. Komentar multiline Lua juga dua kali lipat sebagai komentar BF. Semuanya terpisah dari 2 karakter pertama adalah loop NOP besar.Python, tugas 6
Sekali lagi, saya menggunakan fitur khusus bahasa untuk NOP atau mengomentari kode lainnya.
Pyth, tugas 17
Pyth bagus untuk hal ini. Dibutuhkan yang pertama
#
sebagaiwhile True:
loop yang keluar secara diam-diam karena kesalahan . Jadi, saya hanya membuat sebagian besar kode string (untuk menghindari;
s mengakhiri loop awal), kemudian hanya mengakhiri loop, keluar dari yang lain yang dibuat oleh komentar Python dan melakukan tugas. Ini dia dengan semua string non-kosong diganti dengan" string "
, itu masih setara secara fungsional:> <>, tugas 3
Yang ini sangat menarik. Eksekusi memantul di dalam kode, menggunakan lompatan di mana diperlukan untuk mengatasi hambatan. Bagian yang relevan:
Starry , tugas 9
Di sini saya harus mulai masuk ke bahasa "buang semua karakter kecuali". Ada lagi yang dilucuti, sepertinya:
Kode melewatkan sebagian besar tanda baca dengan lompatan untuk menghindari kesulitan, hanya menggunakan awal dan akhir kode. Kode ini secara fungsional setara dengan
Befunge-98, tugas 10
Bekerja serupa dengan> <> satu. Untungnya,
#
adalah cermin di> <> dan lompatan di Befunge, sehingga kita dapat menerapkan perilaku yang berbeda. Juga0/0 == 0
,.Spasi , tugas 13
Ini adalah hal terakhir yang saya cocokkan. Beberapa baris pertama hanya mendorong nol ke stack, karena mereka hanya berisi spasi dan baris baru dari kode "normal". Kode dikodekan; ganti semua
S
dengan spasi,T
dengan tab danN
dengan baris baru.sumber
17 versi Pip yang berbeda, 383 byte (tidak valid)
Sementara pertanyaan ini di-sandbox, saya menyisir semua revisi bahasa saya, Pip, dan muncul dengan polyglot menggunakan 17 di antaranya. Sedihnya, versi-versi dengan bahasa yang sama tidak diizinkan oleh peraturan tantangan sekarang, tetapi dengan izin Dennis dan penafian saya tetap memposting pekerjaan saya.
Kode mentah
Strateginya
Di Pip, huruf kecil adalah variabel. Huruf besar lebih rumit: mereka dipecah menjadi menjalankan paling banyak dua karakter, yang bisa operator atau variabel. Jika token huruf besar tidak secara khusus didefinisikan sebagai variabel atau operator, itu diasumsikan sebagai variabel yang tidak ditentukan, yang mengevaluasi nihil.
Jadi, untuk membedakan antara dua versi Pip, saya hanya perlu menemukan beberapa operator variabel atau alfabet yang ditambahkan di yang lebih baru dari keduanya. Di yang lebih tua, itu akan menjadi nol. Kode
v:uIN[...]
mengumpulkan daftar besar yang berisi salah satu pemeriksaan ini untuk setiap versi yang ingin saya uji, mencari tahu berapa banyak nil yang ada dalam daftar itu (u
variabel secara eksplisit diinisialisasi ke nil), dan menyimpan nomor dalamv
(untuk "versi") .Setelah beberapa perhitungan lain, ada daftar besar lain yang menghitung hasil untuk 17 tugas dari tantangan dan digunakan
v
untuk memilih satu berdasarkan versi apa ini.Versi dan tugas
0.15.09.04
Diagnostik:
(oTM0,0i)
(memperbaiki bug dengan operatorT
ri diM
mana pemangkasan 0 karakter dari setiap ujung string akan memberikan string kosong sebagai gantinya; pengindeksan ke string kosong memberikan nihil)Tugas 18:
Iv<2W##YqlPBy
(setup: baca semua baris dari stdin jikav
kurang dari 2) diikuti oleh((J_M ZRVl)|0)Jn
(membalikkan daftar baris, transpos, dan bergabung kembali ke string)0.15.08.06
Diagnostik:
EN1
(ditambahkanEN
operator umerate)Tugas 1:
Iv<2W##YqlPBy
(kode pengaturan yang sama seperti di atas) diikuti olehl?lJnl
(gabung di baris baru)0.15.08.03
Diagnostik:
1N1
(ditambahkanN
sebagai versi singkat dariIN
operator)Tugas 20:
c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0
(pengaturan: buat daftar yang berisi bagian papan catur atas dan bawah dan simpan dic
) diikuti olehcJn
(gabung di baris baru)0.15.08.01
Diagnostik:
Y1
(tambahY
operator pergelangan kaki)Tugas 19:
Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}
(setup: jikav
3, bangun setengah dari berlian did
) diikuti olehd.n.RVd
(mundur untuk bagian bawah dan bergabung di baris baru)0.15.06.19
Diagnostik:
RCk
(menambahkanR
andomC
Operator hoice)Tugas 17:
m:'+.'-X#a+2.'+.n."| "
(setup: build+----+\n|
string inm
) diikuti olehm.a.RVm
(bungkus input masukm
dan mundur darim
)0.15.06.12
Diagnostik:
k
(k
variabel yang diinisialisasi ke", "
; sebelumnya tidak ditentukan dan dengan demikian nihil)Tugas 16:
Iv=5La{i+:oSio}
(jikav
5, hasilkan angka Fibonaccii
) diikuti olehi
0.15.06.08 (catatan: nomor versi tidak diubah hingga komit berikut)
Diagnostik:
w
(w
variabel yang diinisialisasi ke`\s+`
)Tugas 15:
h:$+TBa
(konversi input ke biner dan jumlah digit; simpan hasilnyah
untuk tugas 12 nanti)0.15.05.29
Diagnostik:
(hR`1.+0``&2o`)@>3@AB0
Versi ini ditambahkan
&
sebagai pola penggantian untuk seluruh string yang cocok dalam penggantian regex (terinspirasi oleh sed). Kode di atas mengambilh
(100
) dan menggantinya dengan`&2o`
(yaitu"1002o"
dalam versi yang lebih baru tetapi hanya"&2o"
dalam versi yang lebih lama). Itu kemudian mengiris semua karakter setelah 3 ("2o"
dalam versi yang lebih baru,""
dalam versi yang lebih lama) dan upaya untuk mengindeks ke dalam string itu. Pengindeksan ke string kosong memberi nol.Tugas 7:
j:ak:b
(setup: menyalin vars lokala
,b
ke vars globalj
,k
sehingga mereka akan tersedia di dalam fungsi) diikuti oleh({j@aEQk}FI0,#a).s
(filter untuk indeks dia
mana karakter yang sesuai samab
, dan bergabung di luar angkasa)0.15.05.26
Diagnostik:
`u`
(menambahkan tipe Pola; dalam versi sebelumnya, backticks diabaikan sebagai karakter yang tidak dikenal, dan ekspresi dievaluasi menjadiu
, yang nihil)Tugas 14:
aTB16
(convertT
oB
ase 16)0.15.05.24
Diagnostik:
rZ4
(membuatr
variabel khusus yang mengembalikan nilai acak antara 0 dan 1 setiap kali direferensikan; sebelumnya itu tidak terdefinisi dan dengan demikian ekspresi dievaluasi menjadi nol)Tugas 13:
a>b?ab
(ekspresi ternary)0.15.05.12
Diagnostik:
rZ4
(ditambahkanZ
operator ip)Tugas 12:
h=1
(jumlah bit dari tugas 15 harus sama dengan 1)0.15.05.11
Diagnostik:
AB6
(AB
operator nilai tambah terlarut)Tugas 11:
Pv=11?a>1&0INa%(2,a)[...]@v
(jikav
11, keluaran1
jika input lebih besar dari 1 dan jumlah yang lebih kecil membaginya dengan tepat,0
jika tidak; jikav
ada hal lain, gunakanv
sebagai indeks pada daftar untuk memutuskan apa yang akan dihasilkan)0.15.05.02
Diagnostik:
({a}V7)
(V
operator ditambahkan ; ketikaV
tidak ditentukan, ini mengirimkan argumen nil dan 7 ke fungsi{a}
yang mengembalikan argumen pertamanya)Tugas 10:
a//7.s.a%7
(input dipisahkan oleh 7 dan mod 7, dipisahkan oleh ruang)0.15.04.26
Diagnostik:
BN8
(ditambahkan operatorB
egation itwiseN
)Tugas 9:
a+b
0.15.04.23
Diagnostik:
AZ
(AZ
variabel yang diinisialisasi ke huruf besar)Tugas 5:
bINa
(IN
memberikan jumlah kemunculan)0.15.04.20
Diagnostik:
m@0:0
diikuti oleh9@m
The
m
variabel preinitialized untuk 1000. Dalam hal ini komit, yang@
operator yang tetap untuk kembali lvalues; sebelumnya, menugaskan untukm@0
memberi peringatan dan tidak melakukan apa pun. Dengan demikian, pasca-bugfix, pernyataan set pertamam
untuk0000
, yang merupakan indeks hukum bagi9
; pra-bugfix,m
tetap1000
, yang bukan indeks hukum. (Indeks belum siklus.)Tugas 3:
"Happy Birthday, ".a.'!
0.15.04.18
Semua diagnostik sebelumnya menghasilkan nihil yang ditambahkan ke daftar diagnostik.
Tugas 2:
"Hello, World!"
Sebagian besar kode lain adalah tweak yang harus saya buat untuk menghindari kesalahan dalam berbagai versi. Posting ini sudah terlalu lama, jadi jika Anda ingin tahu tentang sesuatu yang belum saya jelaskan, mari kita diskusikan ke chatroom bahasa esoterik .
sumber
6 bahasa, 226 byte (229 tergantung bagaimana
\x1b
diterima!)Jadi, saya pikir saya tidak membuat pilihan bahasa yang terbaik dan saya membayangkan ini tidak terlalu kompetitif tetapi saya menemukan ini tantangan yang menarik! Secara keseluruhan, tidak banyak tantangan yang bisa diselesaikan, tetapi saya mungkin bisa memilih tantangan di ruang putih atau yang serupa, tapi inilah yang saya miliki sejauh ini:
1. Brainfuck
Diuji pada http://copy.sh/brainfuck/ dan http://brainfuck.tk/ .
Setelah menghapus semua karakter yang diabaikan, program di atas adalah yang tersisa, yang merupakan contoh program kucing dengan beberapa loop kosong untuk memotong penggunaan bahasa lain dari simbol.
2. Ruby
Pemakaian:
Kode di atas adalah setelah semua komentar dihapus. Baris pertama adalah sepenuhnya tidak berguna di Ruby seperti yang kita mendefinisikan beberapa ekspresi reguler untuk mengandung Befunge-93 dan brainfuck kode, maka kita membuat array mengandung
Hello
danWorld
dan mencetaknya menggunakanprintf
(untuk menambahkan,
dan!
).3. Perl
Pemakaian:
Sangat mirip dengan Ruby, kecuali karena kita menyimpan referensi array
$a
, ketika kita mencoba mengaksesnya$a[0]
kosong, jadi kita bisa menggantinya dengan teks untuk tantangan 3,Happy Birthday
danpop
(yang menunjukkan argumen terakhir ke program baris perintah ).4. JavaScript
Penggunaan: rekatkan ke konsol browser dan jalankan.
Sama seperti Ruby dan Perl, baris pertama pada dasarnya menciptakan
RegExp
objek yang tidak berguna , kami kemudian menyimpan array yang tidak berguna di$a
dan instantiate dua string yang tidak berguna, satu berisi kode Ruby / Perl dan satu berisi baris baru dan a#
, lalu kamiprompt()
untuk input danalert()
hasil yang diharapkan oleh kebanyakan manusia untuk tantangan 4. Kita akhiri dengan objek lain yang tidak bergunaRegExp
untuk menutup loop brainfuck.9. Befunge-93
Diuji pada http://www.quirkster.com/iano/js/befunge.html .
Seperti yang saya pahami,
/
bagi tumpukan dan dorong hasil yang tidak memiliki efek buruk kecuali mendorongNaN
di situs di atas,&
meminta input bilangan bulat sehingga kami membaca kedua angka yang diperlukan oleh tantangan 9 ke dalam tumpukan,#
memastikan kami melewati[
yang ada untuk brainfuck,+
lalu menambahkan dua angka teratas di tumpukan,.
mengeluarkannya,#]
untuk brainfuck lagi dan@
keluar.13. PHP (berjalan dalam Bash)
Pemakaian:
Dalam PHP, apa pun yang tidak termasuk dalam
<?
tag adalah keluaran kata demi kata, jadi ini mengeluarkan kode Befunge-93 dan brainfuck sehingga kamidie()
segera dalam kode, menampilkan layar yang jelas (\x1bc
) lalumax()
dari dua argumen pertama.sumber
the first character in the first string literal is the byte ASCII 27
); skor Anda adalah 226..match'\x09'
(di mana 'adalah `) mungkin saya akan melihat apakah saya dapat menambahkan lebih banyak di beberapa titik!6 bahasa,
450404 bytebash, brainfuck, C, gawk4, JavaScript dan Minimal-2D
Perbarui: Menurunkannya sedikit. Masih tidak yakin apa yang harus ditambahkan, dan saya tidak yakin bagaimana anggota yang bersaing akan berpikir tentang saya menggunakan bahasa mereka untuk tugas yang berbeda. Mencoba menjelaskan algoritma brainfuck.
Nah ini pengalaman poliglot pertamaku, jadi aku harus belajar semuanya dari awal. Memulai dengan awk bukanlah ide yang paling cerdas menurut saya, karena itu relatif tidak memaafkan. Karena jumlah tugas yang diselesaikan relevan, saya mulai dengan tugas yang paling mudah terlebih dahulu. Tidak yakin apakah itu langkah cerdas. Ini tidak terlalu banyak golf, karena saya cukup kesulitan membuat keenam ini bekerja bersama, tetapi saya melakukan apa yang saya bisa untuk membuatnya singkat.
Berikut adalah bahasa dan apa yang mereka lakukan dalam urutan abjad. Saya akan menunjukkan cara mudah untuk menguji mereka semua lebih jauh ke bawah. Karena beberapa di antaranya mungkin versi khusus, saya akan memberi Anda nomor versi alat yang saya gunakan.
bash, tugas 3
Yah, sudah jelas bahwa saya menggunakan sed. Saya mencoba untuk menempatkan skrip sed dalam entah bagaimana, tapi saya tidak bisa membuatnya bekerja, jadi saya pergi rute bash. Cara saya mengirimkannya, ada di dalam komentar C dan awk mengevaluasinya
False
.sed --version
memberised (GNU sed) 4.2.2
bash --version
memberiGNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Jadi bagian sed turun ke
Ini mengelompokkan input, menempelkannya ke string baru dan mencetak hasilnya. Hal yang cukup umum.
brainfuck, tugas 20
Yah ini selalu mudah disembunyikan kurasa. Baris yang dimulai dengan
#//
diabaikan oleh C dan awk. Atau setidaknya mereka bisa hidup dengan sampah di belakangnya.bf
memberibf - a Brainfuck interpreter version 20041219
Ini adalah kode kental. Baris pertama hanya sampah dari bahasa lain.
Saya akan mencoba menjelaskan cara kerjanya
ini mengatur kaset dan penunjuk untuk ini
holding cell 8 adalah counter global untuk loop berikut
ini berapa kali 3 baris yang sama dicetak
set
C1
ke 3, jumlah baris yang samaset
C2
ke 4, jumlah "....@@@@
" dalam satu baris (di awal)mencetak garis lengkap yang mengalami decrementing
C2
dalam prosesketika
C2
nol menghasilkan garis baru dan penurunanC1
.jika
C1
nol, keajaiban terjadi46 bergerak di belakang 64
, 10 dan global counter digerakkan satu ke kanan
maka penghitung global akan dikurangi
jika nol keluar dari program
C, tugas 2
Saya menghabiskan setiap kemampuan kecil terakhir dari C di sini dengan mencetak "Halo, Dunia!". Nah, seseorang harus melakukan pekerjaan ...
gcc --version
memberigcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
Kode C aktual
The
#define func
adalah untuk membuat awk baik saja dengan ini. Menurutnya ini adalah fungsi awk. Singkatan ke func adalah fitur gawk.gawk4, tugas 18
Karena saya telah menggunakan awk untuk hampir semua hal di sini, saya memutuskan, bahwa harus ada dalam ini.
awk --version
memberiGNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
Awk melihat ini
Pola pencarian termasuk
\t
evaluasi untukfalse
. Saya memilih tab di sini, karena saya pikir itu tidak bisa di input.sed
mengevaluasi kefalse
."the string"&&0
mengevaluasi ke false. Fungsinya oke. Program dijalankan jika pola kosong cocok, yaitu untuk setiap input.Itu yang terjadi
Memasukkan
Keluaran
Anda harus memastikan semua jalur input memiliki panjang yang sama. Gunakan spasi untuk mengisinya.
JavaScript, tugas 9
Saya tidak yakin apakah ini sah, karena ini terlalu mudah. Jika Anda memberikan akhir file program html, dan membukanya di browser (saya menggunakan Firefox 40.0.3 dan chrome 45.0.2454.85) itu meminta Anda untuk input. Anda harus memasukkan dua angka yang dipisahkan oleh spasi, dan itu akan mengingatkan jumlah itu.
Minimal-2D , tugas 1
Ini cukup mudah untuk dimasukkan ke dalam baris komentar. Saya menggunakan penerjemah , yang berjalan dalam python, untuk menguji ini. Ini mencetak input ke output. Programnya terlihat seperti ini
RUDL benar, atas, bawah dan kiri. Jadi itu mulai berjalan dengan benar, membaca karakter dari stdin ke memori dan menambahkan satu. Slash melewatkan perintah selanjutnya jika memori memiliki nilai 0. Ini untuk mengakhiri ini. Jika karakter dengan nilai -1 dibaca, input telah berakhir. Jadi, jika -1 dibaca, lewati D dan berakhir. Jika sesuatu yang lain dibaca turun ke kiri, tambahkan 1 kembali ke memori dan cetak karakter ke stdout. Lalu ia pergi ke kiri dan ke atas dan memulai dari awal.
Pengujian
Penafian: Saya tidak akan bertanggung jawab atas segala kerusakan yang Anda lakukan pada sistem Anda dengan ini.
Ini dengan asumsi Anda memiliki bash & co, gawk (setidaknya versi 4, karena ini menggunakan array multidimensi), gcc, python, bf sebagai juru bahasa brainfuck dan Firefox diinstal.
Untuk membuatnya mudah, salin sumber program ke file bernama
cluster.html
. Jadikan file itu dapat dieksekusi untuk tugas bash. Salin dan tempelkan juru bahasa untuk Minimal-2d ke file yang bernamaminimal2D.py
di direktori yang sama. Kemudian salin dan tempel skrip berikut ke file skrip dan masukkan ke direktori yang sama, buatlah itu dapat dieksekusi dan jalankan ... yah, dengan siapa saya berbicara. Jika Anda membaca ini, Anda mungkin tidak perlu banyak penjelasan dan akan tetap menjalankannya.Di sana Anda juga menemukan perintah untuk menjalankan tes secara individual.
Selamat bersenang-senang!
sumber