Tantangan Anda sederhana: tulis selama program murni mungkin dalam bahasa pilihan Anda hanya menggunakan byte unik. (Definisi penuh dari program murni, disalin dari tautan itu, ada di bagian bawah pertanyaan ini.)
Itu benar, tidak ada ikatan. Kode Anda tidak perlu melakukan apa pun, jalankan tanpa kesalahan, memenuhi persyaratan untuk program yang masih asli (tertaut di atas), dan tidak menyertakan byte duplikat dalam pengkodean yang Anda gunakan.
Untuk keperluan penjelasan di atas dan definisi yang terhubung dari "program murni", kesalahan didefinisikan sebagai segala sesuatu yang menyebabkan program gagal seluruhnya berjalan atau berakhir dengan kode keluar yang tidak nol setelah waktu yang terbatas.
Karena ini kode-bowling , kode terpanjang , bukan terpendek, menang (diukur dengan jumlah byte). Skor maksimum yang dimungkinkan secara teoritis adalah 256, karena ada 256 byte berbeda yang mungkin. Dalam hal seri, jawaban pertama pada skor tertinggi menang.
Berikut definisi lengkap dari program murni, disalin dari tautan di atas:
Mari kita mendefinisikan program murni sebagai program yang tidak memiliki kesalahan itu sendiri tetapi akan kesalahan jika Anda memodifikasinya dengan menghapus substring N karakter yang berdekatan, di mana
1 <= N < program length
.Misalnya, program tiga karakter Python 2
`8`
adalah program murni karena semua program yang dihasilkan dari menghapus substring dengan panjang 1 menyebabkan kesalahan (kesalahan sintaks sebenarnya, tetapi semua jenis kesalahan akan dilakukan):
8` `` `8
dan juga semua program yang dihasilkan dari menghapus substring panjang 2 menyebabkan kesalahan:
` `
Jika, misalnya,
`8
telah menjadi program non- kesalahan maka`8`
tidak akan murni karena semua hasil penghapusan substring harus kesalahan.
sumber
JMP <address outside of the program's memory>
dalam pertemuan. Pada prinsipnya pada komputer sungguhan itu bisa berulang tanpa henti atau keluar dengan kesalahan tidak nol, tetapi biasanya macet secara spektakuler.Jawaban:
Jelly ,
253 254256 byteCobalah online! atau verifikasi!
Ternyata bahasa golf dapat ...
‘
.Sekarang hanya«»
tidak digunakan«»
. Sekarang miliki skor optimal!Bagaimana?
Fitur penting Jelly yang memungkinkan ini adalah karakter pembuka dan penutup untuk string literal tidak sama seperti di hampir semua bahasa lainnya.
Struktur program adalah sebagai berikut:
M <239 character long string> L»«’Ɗạ‘}237$¤¡
M
menemukan indeks argumennya yang menunjuk ke elemen maksimal. Yang penting adalah bahwa tanpa argumen untuk program ini, Jelly memberikan0
kesalahan rantai dan Jelly saatM
diterapkan0
.Untuk mencegah
M
dari bertindak0
dalam program penuh, kami menggunakan¡
cepat, yang berlakuM
beberapa kali ditentukan oleh hasil tautan segera sebelum itu. Dalam hal ini tautan tersebut adalah<239 character long string> L»«’Ɗạ‘}237$¤
.L
membutuhkan panjang string ini (239), dan»«’Ɗ
mengurangi ini menjadi 238. Bagian»«
ini tidak melakukan apa pun kecualiƊ
(tiga tautan terakhir sebagai monad) membuatnya sehingga jika dihapus, kesalahan akan terjadi. Kemudianạ
mengambil perbedaan absolut antara hasil»«’Ɗ
dan monad yang‘}237$
diterapkan pada string.‘
bertambah dan merupakan monad, tetapi}
mengubahnya menjadi angka dua dan menerapkannya pada argumen yang benar237
, menghasilkan238
. Demikianạ
hasil0
dalam program lengkap.¤
tautan kembali ke string literal membentuk nilad. Hasil dari ini adalah0
, jadiM
tidak diterapkan sama sekali, mencegah kesalahan.Subprogram yang mungkin:
<string>..¤
akan menjadi nol danM
diterapkan0
, menyebabkan kesalahan.L»«’Ɗạ‘}237$
yang dihapus baikM
akan diterapkan0
atau akan ada operasi antara string dan angka, menghasilkan aTypeError
.¤¡
yang dihapus,M
akan diterapkan ke0
.”
dan keduanya’‘
dihapus dan“
tidak, semuanyaM
berubah menjadi string sehinggaM
akan bertindak0
.”
dan’
dihapus dan“
tidak, semuanya antara”
dan‘
berubah menjadi daftar bilangan bulat.M
sendirian dihilangkan ada aEOFError
karena¡
mengharapkan tautan sebelum nilad sebelumnya.M“
dan sejumlah karakter setelah dihapus, akan adaEOFError
karena¤
mencari nilad yang mendahuluinya tetapi tidak menemukannya.238
tidak masuk hitungan karena itu bagian dari monad.Ini cukup banyak mencakup semuanya.
Saya sebelumnya tidak menggunakan
«»‘
karena dua yang terakhir tidak dapat dimasukkan dalam string karena mereka cocok dengan“
karakter untuk membentuk hal-hal selain string.«
tidak bisa dalam“”
string baik tetapi saya tidak tahu mengapa.sumber
Haskell ,
3945505260 byteIdentifier
main
harus memiliki tipeIO a
untuk beberapa tipe a. Ketika program dieksekusi, perhitunganmain
dilakukan, dan hasilnya dibuang. Dalam hal ini tipenya adalahIO ((a,b)->a)
.Hasilnya adalah aplikasi fungsi
(λ a b c d e f → return fst)
, fungsi konstanta enam argumen mengembalikan fungsi pertama (yang memberikan elemen pertama dari 2-tuple), disuntikkan ke monad IO. Enam argumen yangLT
(enum kurang dari),EQ
(enum untuk kesetaraan), daftar kosong[]
,3
,2
dan1
.Apa yang akan menjadi ruang diganti dengan karakter unik yang dihitung sebagai spasi: tab, ruang tanpa putus, formfeed, tab vertikal, OGHAM SPACE MARK, ruang reguler, baris baru dan carriage return. Jika ada yang hilang, akan ada ketidakcocokan dalam jumlah argumen. Nama parameter dipilih sebagai tiga atau empat byte UTF-8 karakter,,
𤶸陸ⵙ商ߜ新
memilih karakter yang tidak menghasilkan duplikat byte.Terima kasih kepada @BMO untuk kontribusinya yang berharga.
Hex dump:
Cobalah online!
sumber
'\109999'
tampaknya valid, setidaknya di GHC 8.2.2.'\10999a'
menghasilkan kesalahan leksikal.
menghasilkan kesalahan leksikal juga.maxBound :: Char
, yaitu'\1114111'
. Catatan: angka desimal secara default, jadi jika Anda ingin hex, Anda harus meletakkanx
setelah\
, misalnya'\x10999a'
.\x10ffff
berfungsi dengan baik, dan\x110000
memberikan kesalahan di luar jangkauan seperti yang diharapkan.Python 2 ,
20 21 33 39 4550 byteSekarang sangat banyak upaya kolaborasi!
+2 berkat Aidan F. Pierce (ganti
sorted({0})
denganmap(long,{0})
)+8 berkat dylnan (penggunaan
\
dan baris baru untuk mengganti spasi; saran untuk beralih dari0
ekspresi matematika; menggantikan-1
dengan-True
; penggunaan heksadesimal)+11 terima kasih kepada Angs (
4*23+~91
->~4836+9*1075/2
lalu nanti~197836254+0xbCABdDF
->~875+0xDEAdFBCbc%1439/2*6
)Cobalah online! Atau lihat paket konfirmasi
0xDEAdFBCbc
heksadesimal dan dievaluasi menjadi59775106236
.~
adalah komplemen bit-bijaksana sehingga~875
dievaluasi untuk-876
.%
adalah operator modulo sehingga0xDEAdFBCbc%1439
dievaluasi untuk293
./
adalah divisi integer jadi0xDEAdFBCbc%1439/2
dievaluasi untuk146
.*
adalah perkalian sehinggaxDEAdFBCbc%1439/2*6
dievaluasi menjadi876
.+
Selain itu jadi~875+xDEAdFBCbc%1439/2*6
mengevaluasi untuk0
.... tidak ada versi yang dilucuti juga dievaluasi
0
.{0}
adalahset
elemen yang mengandung tunggal0
,.Memanggil
sorted
denganset
sebagai argumen menghasilkan daftar, yang dapat diindeks dengan[...]
.Tanpa
sorted
kode({0})
hanya akan menghasilkanset
dan ini tidak dapat diindeks dengan cara yang sama,if({0})[-True]:q
akan menaikkan aTypeError
.Pengindeksan dalam Python adalah berbasis 0 dan memungkinkan pengindeksan negatif dari belakang dan
True
setara dengan1
, karenanyasorted({0})[-True]
menemukan elemen0
, sementarasorted({0})[True]
akan meningkatkan sintaksIndexError
, seperti yang akansorted({})[-True]
dansorted({0})[]
tidak valid.The
0
yang ditemukan adalah falsey sehingga tubuhif
,q
, tidak pernah dieksekusi, namun jika hal itu akan menaikkanNameError
karenaq
belum didefinisikan.Karena daftar yang tidak kosong adalah benar, kami juga tidak dapat memangkasnya
if[-1]:q
.Lihat suite konfirmasi untuk melihat: konfirmasi byte menjadi unik; semua kesalahan; dan keberhasilan kode itu sendiri.
sumber
C (tcc) , x86_64,
2931333940 bytePengembalian 0 . Terima kasih kepada @feersum karena menyarankan digit hex huruf besar.
Cobalah online!
Bagaimana itu bekerja
Tugas menulis dua int ( 184 dan 49664 ) ke lokasi memori utama . Dengan int 32-bit dan urutan bit-endian, byte yang tepat adalah
b8 00 00 00 00 c2 00 00
.Karena tcc tidak mendeklarasikan array yang didefinisikan sebagai .data (kebanyakan kompiler akan), maka melompat ke main akan mengeksekusi kode mesin yang ditunjuknya.
b8 00 00 00 00
(mov eax, imm32
) menyimpan int 0 di register eax.c2 00 00
(ret imm16
) muncul 0 byte tambahan dari tumpukan dan kembali. (Nilai dalam register eax adalah nilai pengembalian fungsi).sumber
> <> , 122 byte
Cobalah online!
Tidak melakukan apa-apa. Berdasarkan format yang sama dengan jawaban saya Programming a Pristine World .
Pertama, kami memeriksa bahwa panjang kode adalah 122 dan kesalahan jika tidak.
><>
program tidak dapat berakhir tanpa menggunakan;
perintah, tetapi jika perintah ini ada di program, kita bisa menghapus semuanya sebelum itu untuk membuat program berakhir dengan segera. Untuk mengatasi ini, kami menggunakanp
perintah untuk menempatkan;
dalam kode selama runtime. Untuk melakukan ini, kita kurangi 6 dariA
dan letakkan setelahp
.Saya mungkin akan menambahkan sebagian besar nilai-nilai lain di atas 127 setelah saya mengetahui nilai dua byte yang tepat. Nilai 5 yang hilang adalah
v^;
dan dua baris baru.Dari 7502 sub-program, 7417 di antaranya kesalahan dari instruksi yang tidak valid, 72 dari kekurangan memori, dan 13 dari kehabisan memori.
sumber
JavaScript, 42 byte
i
,,f
atauif
akan menyebabkanSyntaxError: missing ; before statement
;田
akan menyebabkanSyntaxError: expected expression, got end of script
;田
akan menyebabkanInvalid or unexpected token
;田
Tampilkan cuplikan kode
sumber
Brain-Flak , 2 byte
Cobalah online!
Atau
[]
,,{}
atau()
. Melepaskan salah satu braket menyebabkan braket lainnya menjadi tidak cocok.Bukti bahwa ini adalah solusi optimal:
Program Brain-Flak terbuat dari nilads (sepasang kurung sendiri) atau monad (sepasang kurung berisi 1 atau lebih nilads). Monad tidak dapat berada dalam program murni, karena Anda dapat menghapus satu atau lebih dari nilad. Demikian pula, Anda tidak dapat memiliki lebih dari satu nilad dalam program, karena Anda dapat menghapus salah satu dari mereka tanpa merusak program.
Dengan demikian, ini mungkin bahasa yang paling tidak optimal untuk pemrograman murni atau unik.
sumber
Ada, 110 byte (latin1)
Mungkin jawaban terbaik Anda akan keluar dari bahasa apa pun yang digunakan dalam industri?
Hexdump:
Kompilasi dengan menyimpan ke file apa pun yang berakhir
.ads
dan berjalangcc -c <filename>
. Menghasilkan executable yang tidak melakukan apa-apa. (Tidak dapat memberikan tautan TIO karena TIO memasukkan kode ke dalam.adb
file dangcc
secara default mencoba menemukan spesifikasi yang cocok untuk mereka)Pada dasarnya mendeklarasikan paket dengan nama huruf besar / huruf latin1 yang menyalahgunakan. Membutuhkan karakter spasi putih yang berbeda untuk masing-masing spasi, sehingga menggunakan spasi, CR, LF, dan TAB.
Bagaimana tampilannya dalam versi vim:
Bagaimana itu bekerja
Di Ada bahkan spec dapat dikompilasi. Spec seperti file header c, tetapi lebih berfitur lengkap dan dapat mengkompilasi beberapa kode dasar. Agar valid, spesifikasi apa pun harus memiliki format:
package <NAME> is ... end <NAME>;
dengan<NAME>
pencocokan. Yang menyenangkan tentang Ada adalah bahwa hal itu sepenuhnya case-sensitive. Jadi, selama nama Anda memiliki varian huruf besar dan kecil, Anda akan senang melakukannya!Bagian yang sulit adalah mendapatkan unit yang dapat dikompilasi. Biasanya ada program yang memiliki prosedur atau fungsi 'utama' di luar paket apa pun yang akan menjadi executable akhir. Sayangnya prosedur memerlukan
begin
kata kunci, yang mengarah ke terlalu banyake
(hanya 2 kasus diketahui) sementara fungsi memerlukanreturn
kata kunci, yang mengarah ke terlalu banyakn
. Jadi saya harus mengkompilasi sebuah paket.sumber
C, 8 byte
Tidak melakukan apa-apa.
Cobalah online!
sumber
main(){short x;}
main(){short;}
kompilasi hanya dengan awarning: useless type name in empty declaration
. Saya pikir C99 dan C ++ memerlukan tipe pengembalian eksplisit, jadiint main
(atau mungkinunsigned main
) bisa bekerja, tetapi tidak dengan gcc yang hanya memperingatkan bahkan dengan-std=c11
.return 0;
dimungkinkan dengan C89, di mana tidak ada implisitreturn 0
di akhirmain
. Keluar dengan status bukan nol dapat dianggap gagal, menurut jawaban lain. Apakah menambahkan flag compiler seperti-Werror
menghitung skor dengan cara yang baik dalam bowling kode? Karena dengan tegas menegakkan pelanggaran C11 dapat memungkinkan program yang lebih lama. Hmm,#include<>
sesuatu lalu gunakan; Anda tidak dapat menghapus keduanya termasuk dan penggunaan, dan jika crash tanpa prototipe atau makro def, Anda menang.main
daninclude
keduanya mengandungi
, sehingga Anda tidak bisa memiliki keduanya. Demikian pula untuk mendeklarasikan dan menggunakan suatu fungsi. Juga menggunakanreturn
sama sekali dipikir-pikir.int main
tidak bisa.JavaScript, 22 byte
Cobalah online!
Kemungkinan kesalahan
Ketika diubah, itu akan melempar salah satu kesalahan berikut 1 :
1. Jumlah pasti kesalahan berbeda tergantung pada mesin. Daftar ini dibuat dengan SpiderMonkey (Firefox).
sumber
Python 3 + Flask-Env ,
7131417 byteTidak ada TIO karena tidak ada
flask-env
.Temukan nama modul terpanjang yang tidak memiliki persimpangan dengan
import
dan tidak memiliki angka di akhir nama._sha256
lebih panjang tapi256
itu sendiri tidak kesalahan. Saya memang menemukan satu pustaka,b3j0f.sync
yaitu satu byte lebih lama tetapi saya tidak dapat mengimpornya dengan benar.import
dengan\<newline>
. Mengambil salah satu atau keduanya menyebabkan kesalahan.Mungkin masih ada opsi yang lebih panjang daripada
flask_env
, saya tidak benar-benar melakukan pencarian yang lengkap tapi saya melihat ~ 70.000 modul. Terbuka untuk saran.sumber
256
berjalan tanpa kesalahan.import *[hawkey]
dan serupa tetapi sayangnya tidak berhasil ...R , 14 byte
Cobalah online!
Ini mungkin yang terpanjang dalam R. Memanggil fungsi apa pun akan gagal, karena Anda akan dapat menghapus semuanya kecuali nama fungsi, yang hanya akan menghasilkan pencetakan kode sumber fungsi. Ini adalah objek dengan nama terpanjang dalam pengaturan R default tanpa karakter duplikat dan tidak ada nama objek yang tersisa saat menghapus karakter yang berdekatan.
Percobaan pertama ini tidak berhasil, tetapi saya belajar banyak dengan mencoba!
dontCheck({family;NROW})
sumber
Perl 5, 3 byte
=>
adalah "koma lemak," yang mengutip kata pengantar di sebelah kiri. Jadi ini setara denganyang tidak melakukan apa-apa.
Tanpa tanda koma,
y
adalah operator transliterasi, yang tidak valid tanpa tiga karakter yang sama diulang kemudian.Koma lemak saja tidak valid, sebagaimana adanya
=
dan>
sendiri.sumber
brainfuck , 2 byte
Cobalah online!
Terinspirasi oleh jawaban Otak- Raja Jo King . Ini optimal karena satu-satunya kesalahan dalam brainfuck adalah tanda kurung yang tidak cocok. (Sekali lagi terima kasih kepada Jo King untuk info ini.)
sumber
Ruby , 28 byte
Cobalah online!
Verifikasi!
sumber
ML standar , 22 byte
Cobalah online!
op-(a,b)
adalah bentuk de-sugared daria-b
.~
menunjukkan minus unary, jadi kami sebenarnya menghitung765+324
. Ungkapan ini cocok dengan pola pada konstanta1089
. Pertandingan ini berhasil jika program belum dirusak dan tidak - yah, tidak ada.Jika pertandingan tidak berhasil karena beberapa digit dihapus satu mendapat
unhandled exception: Bind
. Menghapusop-
hasil dalam kesalahan tipe karena tuple cocok padaint
. Semua penghapusan lainnya akan menghasilkan kesalahan sintaksis.sumber
Cepat 4 , 19 byte
Cobalah online!
Semua kemungkinan kesalahan yang saya temukan adalah:
[
,]
,{
atau}
akan menghasilkan kesalahan sintaks[].
akan menghasilkanUse of unresolved identifier 'contains'
.
akan menghasilkanConsecutive statements on a line must be separated by ';'
[]
akan menghasilkanReference to member 'contains' cannot be resolved without a contextual type
{1 !=␊0}
akan menghasilkanExpression resolves to an unused function
1 !=␊0
akan menghasilkanMissing return in a closure expected to return 'Bool'
'!=' is not a prefix unary operator
'=' must have consistent whitespace on both sides
!=
akan menghasilkanMissing return in a closure expected to return 'Bool'
Consecutive statements on a line must be separated by ';'
Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored
[].contains
akan menghasilkanClosure expression is unused
Beberapa program menarik lainnya adalah (satu di setiap baris):
sumber
a
sTcl , 6 byte
Cobalah online!
Tcl , 3 byte
Cobalah online!
Tcl , 2 byte
Cobalah online!
sumber
Batch, 7 byte
Awal yang bagus
sumber
Retina , 2 byte
Saya tidak akan terkejut jika ini optimal ...
Cobalah online!
Regex berisi grup kosong. Menghapus salah satu paren akan menyebabkan kesalahan parse karena tanda kurung yang tidak cocok.
Solusi lain adalah:
\(
,\)
,\[
,\]
,\*
,\+
,\?
,a]
sumber
a]
tidak salah.C (gcc) ,
7375 byteCobalah online!
Berdasarkan jawaban @Steadybox, terima kasih kepada @Angs untuk mendeteksi kesalahan serius.
Ya, ini adalah hack yang kotor (karena sebenarnya menggunakan
#define
with-DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=main
dan-Dg=return
), tapi saya tidak melihat aturan apa pun yang melarang opsi kompiler seperti itu.sumber
-DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=main
+-Dg=return
, jadi saya berpendapat bahwa ini menggunakan bahasa buatan yang dirancang khusus untuk tantangan , yang dilarang secara default.-1
tanpa kesalahan