Dalam tantangan ini, Anda harus menulis sebuah program atau fungsi yang tidak mengambil input dan mencetak atau mengembalikan string dengan jumlah byte yang sama dengan program itu sendiri. Ada beberapa aturan:
- Anda hanya dapat menghasilkan byte dalam rentang ASCII yang dapat dicetak (0x20 hingga 0x7E, inklusif), atau baris baru (0x0A atau 0x0D).
- Kode Anda tidak boleh berupa quine, jadi kode dan outputnya harus berbeda setidaknya satu byte.
- Panjang kode Anda harus minimal satu byte.
- Jika output Anda mengandung trailing baris baru, itu adalah bagian dari jumlah byte.
- Jika kode Anda memerlukan tanda baris perintah non-standar, hitung seperti biasa (yaitu dengan menambahkan perbedaan pada permintaan standar implementasi bahasa Anda ke jumlah byte), dan panjang output harus sesuai dengan skor solusi Anda. Misalnya, jika program Anda adalah
ab
dan membutuhkan tanda non-standar-n
(kami akan menganggapnya tidak dapat digabungkan dengan tanda standar, jadi ini 3 byte), Anda harus menghasilkan total 5 byte. - Output tidak selalu harus sama, selama Anda dapat menunjukkan bahwa setiap output yang mungkin memenuhi persyaratan di atas.
- Aturan quine biasa tidak berlaku. Anda dapat membaca kode sumber atau ukurannya, tetapi saya ragu ini akan lebih pendek daripada hardcoding di sebagian besar bahasa.
Anda dapat menulis program atau fungsi dan menggunakan salah satu metode standar untuk memberikan hasil. Perhatikan bahwa jika Anda mencetak hasilnya, Anda dapat memilih untuk mencetaknya ke output standar atau aliran kesalahan standar, tetapi hanya satu di antaranya yang diperhitungkan.
Anda dapat menggunakan bahasa pemrograman apa pun , tetapi perhatikan bahwa celah ini dilarang secara default.
Ini adalah kode-golf , sehingga jawaban terpendek yang valid - diukur dalam byte - menang.
Papan peringkat
code-golf
self-referential
Martin Ender
sumber
sumber
Jawaban:
C (Linux modern), 19 byte
Saat dikompilasi dan dijalankan, ini mencetak:
sumber
Excel, 11 byte
Versi bahasa Norwegia:
Versi bahasa Inggris (12 byte):
Menghasilkan nomor n-digit dan mengonversi ke teks dengan mengonversi ke huruf kecil.
sumber
=9^7&""
yang menghasilkan angka 7 digit dalam bahasa apa pun dan hanya 7 byte.Labirin , 4 byte
Cobalah online!
Cetakan
0000
Penjelasan
sumber
Bash (hanya builtins), 8 byte
Cetakan
cho cho
dan baris baru.sumber
Retina , 2 byte
Cobalah online!
Cetakan
0
dan umpan baris.Ada banyak solusi 2-byte, tetapi saya percaya ini optimal. Retina secara default selalu mencetak baris baru dan menghilangkannya membutuhkan terlalu banyak byte. Jadi kita harus menemukan program 1-byte yang membiarkan input kosong tidak berubah. Saya percaya satu-satunya program yang melakukan ini adalah program yang berisi satu linefeedfeed, yang karena itu sama dengan output dan karenanya tidak diizinkan oleh tantangan.
Hal paling sederhana berikutnya yang harus dilakukan adalah hidup dengan Retina mengeluarkan satu digit (jumlah kecocokan beberapa regex terhadap input kosong), dan kita dapat melakukannya dengan banyak pola 2-byte yang gagal (atau cocok).
sumber
Mathematica, 2 byte
faktorial
sumber
C, 20 byte
Output beberapa nomor, diisi dengan spasi hingga 20. (Nomor berapa? Apa pun yang terjadi selanjutnya dalam memori.)
Beberapa sampel berjalan di sistem saya:
Sayang sekali bahwa output tidak dapat byte acak, karena itu akan memungkinkan solusi 19 byte ini:
yang menghasilkan 19 byte sampah, mulai
f
dari alamat.sumber
%esi
register sebelumnya.Bash di Linux, 6
(diikuti oleh baris baru)
Output
Linux
diikuti oleh baris baru.sumber
uname
bukan bash builtin - ini adalah executable terpisahuname
bash builtin? Setiap distro yang saya dapat meletakkan tangan saya pada saat ini adalah biner yang terpisah, termasuk TIO . Sebaliknya, seperti yang ditunjukkan oleh jawaban tertaut Anda,umask
adalah bawaan di sebagian besar / semua shell.uname
sebagai builtin. Ketika saya mengatakan "-1, dan sebenarnya adalah builtin", saya bermaksud "Jawaban ini menggunakanumask
-1 byte, danumask
sebenarnya adalah builtin".Javascript ES6, 9 byte
Menggunakan String Template
sumber
undefined
dianggap sebagai string?(_=>_+'')
.Skema Piramida ,
744342 byteDisimpan 31 byte berkat Khuldraeseth na'Barya! Disimpan 1 byte berkat solusi yang dirancang ulang JoKing!
Cobalah online! Menghasilkan angka 41 digit
28^28 = 33145523113253374862572728253364605812736
, diikuti oleh baris baru.Versi lama
Cobalah online!
Output
71277303925397560663333806233294794013421332605135474842607729452115234375
=160651015 ** 9
, atau sekitar 10 74 .sumber
Python 2 , 9 byte
Ini mencetak
set([1])
dan linefeed.Cobalah online!
sumber
print
, tidak ada solusi yang lebih pendek, dan yang hanya 9-byte adalah varian dari ini dan Luis Mendoprint 1e5
.Python 2 , 9 byte
Output yang ditampilkan berisi baris tambahan.
Cobalah online!
sumber
brainfuck , 25 byte
Cobalah online! Catatan: Memerlukan implementasi dengan sel unsigned 8-bit
Keluaran:
Penjelasan
sumber
.
yang mencetakNULL
karakter yang tidak patut dicetak ?C (Ideone), 14 byte
Pada Ideone , yang menamai executable-nya
prog
, ini menghasilkan yang berikut dengan baris baru tambahan.C (GCC), 15 byte
Karena GCC menulis sebuah executable yang dinamai
a.out
secara default (dengan tidak adanya flag tambahan yang akan menelan biaya byte), ini menghasilkan yang berikut dengan baris baru tambahan.sumber
C (gcc) ,
1817 bytePerhatikan bahwa ada byte STX ( 0x02 ) antara
@
danC
.Cobalah online!
Portabilitas
Ini telah diuji dengan gcc 6.3.1 dan clang 3.9.1 pada Fedora 25, gcc 4.8.4 pada Ubuntu 14.04.4, dan gcc 4.8.3 pada openSUSE 13.2, di mana ia mencetak output berikut.
Saya berharap ini menghasilkan output yang sama dengan semua versi gcc, asalkan dikompilasi ke executable dari tipe berikut.
Platform yang berbeda akan membutuhkan alamat memori yang berbeda dan mungkin urutan yang berbeda untuk byte dalam konstanta karakter multi-karakter.
Misalnya, mengganti
@\2C
dengan@\2\4
cetakanexec/ld-elf.so.1
dan baris baru pada FreeBSD 11 dengan dentang 3.8.0.Verifikasi offline
Bagaimana itu bekerja
Secara default, ld menggunakan 0x400000 sebagai alamat dasar segmen teks, artinya kita dapat menemukan konten ELF mulai dari alamat memori 0x400000 .
640 byte pertama dari ELF sebagian besar independen dari kode sumber yang sebenarnya. Sebagai contoh, jika deklarasi f diikuti oleh
main(){f();}
dan tidak ada yang lain, mereka terlihat sebagai berikut.Menggunakan, misalnya,
main(int c, char**v){f();}
sebagai gantinya mengubah beberapa byte, tetapi bukan offset dari string/lib64/ld-linux-x86-64.so.2
, yang akan kita gunakan untuk menghasilkan output.Offset string tersebut adalah 0x238 dan panjangnya 27 byte. Kami hanya ingin mencetak 17 byte (dan yang terakhir akan menjadi baris baru jika kami gunakan
puts
), jadi kami menambahkan 11 ke offset untuk mendapatkan 0x243 , offset dariinux-x86-64.so.2
. Menambahkan 0x400000 dan 0x243 memberi 0x400243 , lokasi memoriinux-x86-64.so.2
.Untuk mendapatkan alamat memori ini, kita bisa menggunakan konstanta karakter multi-karakter, yang memperlihatkan perilaku yang ditentukan implementasi. 0x400243 adalah (64) (2) (67) dalam basis 256 dan konstanta karakter multi-karakter gcc menggunakan urutan byte big-endian, sehingga
'@\2C'
menghasilkan alamat memori dari string yang diinginkan.Akhirnya,
puts
mencetak sengatan (null-dihentikan) di lokasi memori dan baris baru, menghasilkan 17 byte output.sumber
U
saat dikompilasi dengan-Df=main
.U
saat dikompilasi denganmain(){f();}
.Brainfuck yang memodifikasi sendiri , 5 byte
Cobalah online!
Keluaran:
Penjelasan:
Sangat sederhana, mencetak sumber secara terbalik. Dalam SMBF, isi program disimpan pada kaset, di sebelah kiri posisi awal penunjuk. Meluncur ke kiri dan mencetak akan menampilkan kode sumber mundur.
Karena sumber bacaan diperbolehkan dalam tantangan ini, ini pasti harus sesuai aturan.
sumber
Kalkulator Aritmatika Dasar , 2 byte
1=
cetakan
1.
, atau:pada layar tujuh segmen konyol.
Untuk mereproduksi, ambil kalkulator acak apa pun; mereka semua sudah menginstal bahasa pemrograman ini.
sumber
1.
bukan1x
? Ini juga quine, yang dilarang oleh aturan.1=
, saya kacau. Maksud saya1x
daripada sama implisit, tapi saya lupa itu=
adalah tombol.1
TI-36 dan TI-84 CE saya. Apakah ini tidak dihitung sebagai kalkulator "dasar"?Fourier,
262220 byteCobalah di FourIDE!
Output:
Untuk kapitalisasi yang tepat, ini 4 byte tambahan:
Cobalah di FourIDE!
RIP Adam West
sumber
Brachylog , 1 byte
Cobalah online!
Penjelasan
w
adalah built-in "tulis". Di sini, itu akan menulis Input. Karena Input adalah variabel bebas,w
akan menandainya sebagai integer sebelum dicetak. Bilangan bulat pertama yang dicoba adalah0
.sumber
Here, it will write the Input.
Apakah 'Input' program itu sendiri? Bukankah ini dihitung sebagai membaca sumber, yang secara default curang dalam quine?Java (OpenJDK 8) , 11 byte
Cobalah online!
Keluaran:
Sedikit lebih rumit daripada jawaban yang jelas
()->"".format("%23s",0)
,.Menghemat
sumber
()->1E10-1+""
,"9.999999999E9" (13)
menghemat tiga byte lagi1e10
ke1e9
, atau 2 byte dengan menggunakan masukan kosong bukannya()
seperti ini:o->1e8-1+""
(output9.9999999E7
; panjang & byte-count 11 ).05AB1E , 1 byte
Menghasilkan satu baris baru.
õ
mendorong string kosong, dan secara implisit dikeluarkan dengan baris baru.Cobalah online!
Beberapa solusi 2 byte lainnya, untuk kesenangan Anda menonton (output ada di dalam kurung, dan semua output memiliki baris tambahan):
Ada cara lebih banyak solusi 2 byte.
sumber
V / vim, 1 byte
Ini mencetak satu baris baru.
Cobalah online!
Ada banyak varian pada ini yang akan berhasil juga. Sebagai contoh,
dalam vim, dan
dalam V.
Ada juga banyak banyak banyak solusi tiga byte. Sebagai contoh:
Ini semua khusus untuk V.
sumber
4ii<ESC>
Namun V secara implisit mengisi dalam pelarian di akhir program.Batch, 12 byte
Hitungan byte termasuk mengikuti baris baru untuk skrip dan output, yaitu
sumber
cmd.exe
tentu saja akan menggemakan CRLF setelahWindows_NT
, dengan demikian 12 byte.Hexagony , 3 byte
Cobalah online!
Cetakan
111
.Dibuka:
Tetapi kode ini benar-benar hanya dijalankan dalam urutan
o!@
.sumber
/// , 12 byte
Cobalah online!
Ini mencetak
bcdbcdbcdbcd
, dan karena ini adalah 12 byte, saya telah menambahkan yang tidak berbahaya/
ke akhir kode untuk membuatnya pad.sumber
R, 7 byte
Mencetak "logis"
sumber
MATL , 2 byte
Ada baris baru yang tertinggal.
Cobalah online!
Penjelasan
Clipboard H berisi angka
2
secara default.H
mendorong konten itu ke tumpukan, yang secara implisit ditampilkan dengan baris baru tambahan.sumber
Arang , 2 byte
Cobalah online!
Mencetak panjang-1 garis horizontal
-
ke kanan, dan baris baru.sumber
Jelly , 1 byte
Cukup banyak Jelly one byters - ini adalah satu - ia mengevaluasi argumen kiri yang, ketika tidak ada yang disediakan sebagai input, default ke nol yang pada gilirannya mengevaluasi ke nol dan hasilnya dicetak secara implisit, a
0
.Cobalah online!
Bahkan, dari 256 byte dalam kode-halaman hanya ada 95 yang saat ini tidak menghasilkan output satu byte yang berbeda dalam rentang yang ditentukan ketika dijalankan sebagai program penuh; ini adalah (sebagai karakter halaman kode dalam urutan byte):
Catatan:
Sebagian besar program 1-byte mencetak a
0
(tanpa op / menghasilkan daftar dengan nol tunggal, yang mencetak a0
), sebagian besar yang lain mencetak a1
(0=0
dan sejenisnya)Ọ
adalah satu program yang tidak menghasilkan byte yang berbeda, tapi satu yang di luar jangkauan sesuai spesifikasi - itu menghasilkan nol-byte (gips0
dengan karakter)⁶
menghasilkan spasi (literal)⁷
menghasilkan umpan baris (literal)Beberapa byte yang berfungsi sekarang mungkin tidak melakukannya di masa depan - ada beberapa byte yang adil dicadangkan (saya percaya) untuk nilai-nilai niladik yang, ketika ditugaskan, hampir pasti tidak akan menghasilkan output satu-byte.
sumber
byte
Dibalik , 2 byte
Cobalah online!
Mencetak
0
dengan spasi tambahan. Juga berfungsi di Befunge 98.sumber