Mengacu pada kode karakter ASCII yang dapat dicetak dalam desimal, kita tahu bahwa dari 32 hingga 126 kita memiliki karakter yang dapat dicetak dengan 32 berada (spasi). Tantangan Anda adalah menulis sebuah program yang hanya menggunakan karakter dari 32 menjadi 125 (tidak termasuk 126) yang ketika dijalankan, mencetak kode sumbernya sendiri kecuali setiap karakter dalam kode sumber memiliki kode ASCII yang bertambah satu.
Misalnya, jika kode sumbernya
main(){printf("Hello World");}
hasilnya akan
nbjo)*|qsjoug)#Ifmmp!Xpsme#*<~
Berikut ini dilarang:
- Membaca / menulis / menggunakan file atau penyimpanan eksternal apa pun (termasuk internet)
- Membaca / menggemakan kode sumber Anda sendiri
- Kode sumber dengan kurang dari 2 karakter (tidak menyenangkan). Harus lebih besar atau sama dengan 2.
Menjadikannya kontes popularitas di mana setelah menunggu setidaknya dua minggu, jawabannya, dalam bahasa apa pun, dengan upvotes tertinggi menang dengan jumlah karakter yang lebih kecil sebagai tie-breaker.
popularity-contest
quine
Titik pasti
sumber
sumber
~
benar-benar menyebalkan untuk GolfScript. Taruhan Anda sengaja melakukannya. :-)Jawaban:
Python (27 karakter)
Di shell Python, skrip berikut akan menampilkan hasil yang diinginkan:
Iya! itu output:
sumber
Hah? , 5 karakter
Perhatikan bahwa karakter ke-5 adalah spasi setelahnya
Ntbg
. Ini adalah trik yang sama dengan jawaban saya sebelumnya .Ntbg
adalah jalur yang tidak valid, sehingga penerjemah akan menampilkanOuch!
Anda harus menjalankannya seperti ini:sumber
PHP (351)
Saya yakin ada cara yang lebih baik untuk melakukan ini, karena saya baru mengenal codegolfing, tapi inilah solusi PHP saya:
Keluaran:
sumber
TI-BASIC, 10
Untuk kalkulator TI-83/84 Anda!
Output:
sumber
GolfScript, 15 karakter
Keluaran:
Cobalah online.
Solusi yang cukup mudah berdasarkan teknik yang saya gunakan untuk masuk ke tantangan "rotating quine" . Satu detail yang rumit adalah bahwa karakter
~
(ASCII 126) tidak diizinkan oleh aturan tantangan, jadi saya tidak dapat menggunakannya untuk menjalankan blok kode saya. Untungnya,1*
bisa digunakan sebagai sinonim dari itu.Penjelasan:
Blok kode
{`{)}%"/2+"}
digandakan oleh.
, dan salinan kedua dieksekusi oleh1*
(secara teknis, loop satu-iterasi), meninggalkan salinan lain di tumpukan. Di dalam blok kode,`
meringkas blok kode, dan{)}%
menggulung (kode ASCII) karakternya, masing-masing bertambah satu per satu. Akhirnya,"/2+"
dorong string literal/2+
(yaitu.1*
digeser satu) ke stack. Pada akhir program, penerjemah GolfScript kemudian secara otomatis mencetak semua yang ada di tumpukan.Ps. Ya, saya tahu ini adalah kontes popularitas daripada golf kode ketat , tapi apa lagi yang akan saya lakukan dengan GolfScript - seni ASCII? ;-)
sumber
JavaScript, 117 karakter
Saya tahu ini bukan kode golf, tetapi saya tetap golf.
(Saya tidak membaca kode sumber saya sendiri; aku hanya menggunakan
Function
objektoString
fungsi.)sumber
Java - 1331 byte, 618 byte, dan 504 byte
Ini dia di java. Yang keren adalah itu cukup mudah dibaca dan fleksibel. Anda dapat mencoba mengubah
SHIFT
variabel menjadi 0 dan itu akan menjadi quine. Anda dapat mengubahnya ke nilai apa pun yang Anda inginkan, termasuk nilai negatif dan itu akan mengubah kode sesuai.Namun, satu-satunya kelemahan di kelas sebelumnya adalah jeda baris, yang tidak diizinkan dalam spec pertanyaan (berada di luar kisaran 32 hingga 125). Jadi saya berikan di sini versi golf yang bebas dari jeda baris (dan bebas dari kebiasaan untuk menangani mereka). Anda dapat mengedit nilai
S
variabel untuk mengubah shift. Ini memiliki 618 byte:Tentunya, jika kita menjatuhkan penyesuaian offset dan hardcode nilai pergeseran, kita dapat melakukan versi yang sepenuhnya golf dengan 504 byte:
sumber
Perl 5, 284 karakter termasuk umpan baris
Tidak diizinkan menggunakan ~ membuatnya sedikit lebih rumit.
sumber
Python, 99
Keluaran:
Ini dapat disingkat menjadi 75 karakter , tetapi akan mencetak karakter baris baru setelah output, secara teknis melanggar aturan:
sumber
\x09
) di bagian akhir, karena tab yang digeser oleh yang lain adalah baris baru (\x0A
). Kemudian versi singkat Anda akan bekerja dengan 76 byte.Stax , 16 byte
Jalankan dan debug itu
Adaptasi
"34bL"34bL
quine. Karena sekarang"
menjadi#
yang tidak perlu melarikan diri kita bisa memasukkannya ke dalam string.sumber
Lua - 192
Cukup mudah,
sumber
C - 156
Hanya Cine klasik dengan modifikasi yang diperlukan
PS, rupanya
sprintf(f,...,f,...)
adalah segfault.sumber
JavaScript (276)
Tanpa menggunakan
.toString()
:sumber
Ruby, 63
Sial, tidak bisa menggunakan heredoc yang satu ini.
Ruby memiliki metode asli
.succ
yang melakukan ini pada karakter, dan mencetak tanpa baris baru lebih pendek daripada mencetak dengan, jadi ini bekerja dengan cukup rapi.sumber
C, 153
Modifikasi lain dari quine klasik dalam ...
sumber
> <>, 16 byte
Coba di sini!
Ini kurang lebih hanya standar quine di> <> (tanpa menggunakan
g
instruksi). Satu-satunya perbedaan adalah ia tidak membaca source-code-nya sendiri dan menambah 1 karakter sebelum mengeluarkannya.Keluaran
*> <> , 15 byte (tidak bersaing)
Coba di sini!
sumber
Tcl , 89 byte
Cobalah online!
Tcl , 89 byte
Cobalah online!
Dua pendekatan; panjang byte yang sama!
sumber
Haskell , 64 byte
Cobalah online!
sumber
Perl 5 , 55 byte
Cobalah online!
sumber
J, 42 Bytes
sumber