Buat program, yang menghasilkan string halo dunia ("Halo dunia", "Halo, Dunia" dll.), Dan kode sumber. Output ditulis ke stdout atau setara. Halo string dunia tertanam dalam kode sumber.
Misalnya, output untuk mungkin
(some source code here)hello world(some source code here)
Ketika output dikompilasi atau ditafsirkan kembali, itu harus membuat output yang sama, tetapi string hello world harus memiliki tanda baca atau kapitalisasi yang berbeda. Sebagai contoh, contoh sebelumnya dapat membuat output berikut
(some source code here)hello, wORld(some source code here)
Setiap "(beberapa kode sumber di sini)" dalam contoh-contoh ini dapat berubah setelah setiap eksekusi, atau bisa sama.
Output Anda harus mengandung string halo dunia yang valid tepat sekali. Ini mungkin mengandung jumlah string dunia hello yang tidak valid. Kode sumber dapat berisi jumlah komentar berapa pun, dan string halo dunia dapat disematkan dalam komentar. Program pertama dapat memiliki nol atau satu string hello world yang valid, tetapi tidak lebih.
Tanda baca berikut ini valid:
hello, world
hello world
helloworld
Kapitalisasi apa pun dapat diterima. Sebagai contoh, ini adalah string hello world yang valid:
Hello, world
hellO WORld
HELLoworlD
String ini tidak valid:
Hello world
Hello(newline)world
Hello,world
Hello, Steve
Program Anda gagal segera setelah salah satu dari kondisi berikut dipenuhi:
- Ini menghasilkan string halo dunia yang telah dikeluarkan selama beberapa eksekusi sebelumnya,
- output tidak lagi kode sumber yang valid dalam bahasa yang sama, atau
- output tidak mengandung tepat satu string hello world yang valid.
Program Anda tidak berlaku untuk kontes ini kecuali setidaknya dua eksekusi pertama berhasil. Ini berarti bahwa output ketiga diizinkan tidak valid. Output dari program Anda mungkin tidak acak. Eksekusi pertama harus selalu membuat output kedua yang sama, eksekusi kedua harus selalu membuat output ketiga yang sama, dll.
Skor dihitung sebagai jumlah byte dalam kode sumber program awal. Skor terendah menang.
Bonus berikut berlaku (hingga -60%):
- -5% * (N - 2), di mana N adalah indeks eksekusi setelah program Anda menghasilkan output yang tidak valid. Batas bonus ini sebesar -50%. Jika program Anda berhasil 12 kali atau lebih, Anda mendapatkan bonus maksimal.
- -10%, jika output Anda (termasuk kode sumber pertama) menyertakan ketiga alternatif tanda baca yang valid.
Kiriman Anda harus menyertakan kode sumber pertama, dan itu juga harus berisi output dari eksekusi yang berhasil. Jika program Anda berhasil lebih dari 12 kali, tambahkan output untuk 12 eksekusi.
Contoh
Baris berikutnya adalah kode sumber pertama. Saat kami mengeksekusinya, ini adalah eksekusi pertama.
hello world(some source code here)
Baris berikutnya adalah output dari kode kode sumber pertama. Ini adalah output pertama.
hello, world(some source code here)
Baris berikutnya adalah output dari eksekusi kedua. Ini adalah output kedua.
helloworld(some source code here)
Ketika kami mengeksekusi output pertama, program ini menjadi memenuhi syarat untuk bonus -10%. Itu berarti kita memiliki dua keluaran, dan satu kode asli, yang semuanya memiliki tanda baca yang berbeda. Selain itu, karena output kedua valid, program ini memenuhi syarat untuk kontes ini.
Baris berikutnya adalah output dari eksekusi ketiga. Ini adalah output ketiga.
Helloworld(some source code here)
Baris berikutnya adalah output dari eksekusi keempat. Ini adalah output keempat.
hellworld(some source code here)
Output ini tidak valid. Indeks pelaksanaan terakhir yang valid adalah 4. Program ini memenuhi syarat untuk bonus -5% * (4 - 2) dan bonus -10% dari tanda baca. Ini membuat total -20%. Panjang kode sumber pertama ("hello world (beberapa kode sumber di sini)") adalah 34 byte, jadi skor akhirnya adalah 27,2.
hello world
?Jawaban:
Pyth, 17 byte
Solusi Pyth yang berbeda:
Keluaran:
Output kedua:
sumber
Mathematica, 214 - 50% = 107 byte
Saya memutuskan untuk mengoptimalkan jumlah string di sini. Ini berjalan untuk 1024 program tanpa henti, melalui setiap kombinasi huruf besar dan kecil. Eksekusinya bisa dilihat di sini .
sumber
s
, dan mengevaluasinya denganToExpression
.)Vitsy, 33 - 33 * .05 * (11-2) = 18.15 Bytes
Heh! Kalahkan itu! Anda mungkin akan melakukannya. : c
Output pertama:
Output kedua:
Keluaran ketiga:
Output keempat:
Output kelima:
Output keenam:
Output ketujuh:
Output kedelapan:
Keluaran kesembilan:
Output kesepuluh:
Output kesebelas:
Ini adalah keluaran terakhir, karena akan menyebabkan kesalahan.
sumber
CJam, N =
34, 28 byte - 10% - 10% = 22,4ini memulai rantai berikut:
di mana yang terakhir tidak lagi berisi "Halo, Dunia" yang valid.
Uji di sini.
Penjelasan
Perhatikan bahwa program awal tidak mengandung "Hello, World" yang valid, tetapi itu memungkinkan kita untuk melanjutkan satu iterasi lebih lanjut.
sumber
CJam
6960 - 50% = 30Saya masih pemula, Tolong beritahu saya cara bermain golf di CJam.
Sangat membosankan untuk mencetak setiap iterasi, karena itu akan berlaku untuk 99 iterasi.
Ini bekerja dengan menghitung kapitalisasi kata hello. Kebosanan adalah untuk memisahkan string menjadi beberapa bagian karena "halo dunia" dan penghitung harus diperbarui.
Penjelasan
CATATAN: Saya tidak membaca jawaban Mathematica, maaf, saya pikir itu asli
Dengan penataan ulang, dan kapitalisasi yang berbeda, saya kehilangan 9 byte.
CJam 73 - 60% = 29.2
Kali ini juga menyebutkan tanda baca.
sumber
GolfScript, 35 byte - 50% = 17,5
Saya memutuskan untuk melakukan terlalu banyak jumlah eksekusi sebelum pengulangan. Program ini, dengan outputnya dimasukkan kembali ke dalam juru bahasa GolfScript, akan menghasilkan 890 string Hello World yang berbeda sebelum pengulangan yang pertama. Sebagai contoh singkat, berikut adalah 15 iterasi pertama:
Cara kerjanya adalah dengan melakukan iterasi melalui string, membalik kapitalisasi setiap huruf (dengan XORing kode ASCII dengan 32) jika huruf sebelumnya (setelah kemungkinan kasusnya dibalik) huruf kecil. Huruf pertama akan dibalik kasusnya jika angka pada program awal adalah 32 daripada 0 - dan nomor output untuk iterasi berikutnya akan menjadi 32 setiap kali huruf terakhir dari string huruf kecil, sehingga menyebabkan perubahan pada akhir string untuk merambat kembali ke awal pada iterasi berikutnya.
(Proses umpan balik khusus ini diperoleh dengan cara yang benar-benar ad hoc . Saya awalnya ingin menjalankan penghitung biner sederhana menggunakan huruf besar dan kecil, tetapi itu membutuhkan terlalu banyak byte untuk diterapkan, jadi saya mulai men-tweak untuk menemukan sesuatu yang lebih pendek. yang masih akan menghasilkan panjang siklus yang cukup tinggi. Karena maksimum teoritis, hanya menggunakan case-flipping, adalah 2 10 = 1024, mendapatkan siklus iterasi 890 cukup bagus.)
Sayangnya, bonus untuk iterasi tambahan dibatasi pada −50%; tanpa batas, program ini akan memiliki opping4440% bonus kekalahan. ;-)
sumber
Pyth, 18 byte
Yang mengembalikan:
Yang pada gilirannya mencetak:
Saya punya solusi yang melakukan ketiga ejaan, tetapi lebih lama bahkan dengan bonus.
sumber
Simplex , 21 byte.
Inilah tujuan lahirnya Simplex . Saya pasti bisa lebih jauh dengan ini.
(Saya terus menekan Ctrl + Enter, maaf! Saya salahkan pada keyboard tablet)
Percobaan 3, v.0.8 +, 31 -5% = 29.45 byte (metode UTF-8)
Emote di tengah mengekspresikan diri saya. Semacam. Mengapa saya melakukan ini lagi? ._.
Output 2:
3 output:
Hasil akhir:
Percobaan 2, v.0.8 +, 21 byte (UTF-8, saya pikir)
Keluaran:
Hasil akhir:
Percobaan 1, v.0.7 +
2826 byteSaya tidak yakin apakah ini memenuhi syarat untuk bonus pertama ...
Output pertama:
Program luar dievaluasi pada akhir eksekusi (melakukannya untuk y; seperti inilah tampilan program luar:
Hasil akhir:
sumber
Ruby, 81 - 50% = 40.5
Kode asli:
Output berturut-turut:
Saya pikir ini dianggap sebagai 50% penuh? Bisa mati satu per satu. Juga, mungkin ada solusi non-bonus dengan skor yang lebih baik di Ruby.
Kode asli tidak mengandung "helloworld", tetapi membangun quine yang menggantikan huruf kapital pertama dalam kode sumbernya dengan versi huruf kecil. Jadi setiap menjalankan quine menghasilkan satu huruf kapital yang lebih sedikit.
Kuncinya di sini adalah dengan menggunakan string format untuk menginterpolasi baik string itu sendiri, untuk quining, dan string Hello World, sehingga hanya muncul sekali.
sumber
PHP, 297 - 40% = 178,2 byte
Tidak terlalu kompetitif tetapi menyenangkan untuk menulis
Ini variasi dari quine ini:
tetapi juga menambahkan "helloworld" ke output dan menggantikannya
0
dengan0+1
(dalam iterasi berikutnya1
dengan1+1
dan seterusnya). Menggunakansubstr
output "helloworld" yang ada akan dihapus sebelum "helloworld" baru ditambahkan.Untuk mendapatkan hasil yang berbeda, satu huruf "helloworld" dikapitalisasi (ditentukan oleh angka yang bertambah). Ini adalah kode yang relevan:
Tantangannya adalah tidak menggunakan nomor apa pun kecuali di sini dan untuk penggantian nomor
Di sana Anda sudah melihat bahwa
+1
disadari sebagai+(int)true
.Untuk argumen substring yang saya butuhkan
0, 146
:String non-kosong "i" akan dipaksa
true
dan dinegasi.false
adalah argumen integer yang valid dan diperlakukan seperti0
.ord(I)
adalah nilai ASCII dari "I": 73Output (iterasi 1):
Output (iterasi ke-2):
Output (iterasi ke-10):
Ini adalah output yang valid terakhir tetapi bukan program yang valid lagi
sumber
(int)true
ke `` !! i` dan menyimpan 12 byte. Akan mencoba untuk bermain golf sedikit lebih lambatPip, 48 - 50% = 24
yang berkembang sebagai berikut:
dengan output terakhir menjadi tidak valid karena
HELLOWORLD
belum berubah. (Koreksi saya jika saya belum melakukan bonus dengan benar.)Berkat pertanyaan ini, saya baru saja menemukan teknik quine baru! Quine dasar adalah
V Y"`V Y`.RPy"
:Kode tambahan kami memodifikasi string di
y
, sebelum mengarangnya, sebagai berikut:0
karakter adalah huruf besar;0
dengano+0
(di manao
adalah variabel bawaan yang sama dengan 1).Waktu berikutnya di sekitar nomor dalam kode
1
bukan0
, dan sebagainya.sumber
Javascript, 52 byte
Uji
=>
<='("hello world").replace(" ","")'
=> eval('("hello world").replace(" ","")')
<= 'helloworld'
sumber
///, 23 byte - 10% = 20,7?
Cobalah online!
Output pertama:
Output kedua:
sumber
BBC BASIC, 56 byte
Saya punya celah di ini sebelum saya menyadari betapa terlambatnya permainan saya. Untuk apa nilainya, inilah versi saya dan upaya pertama saya di StackExchange code golf.
Di sini, V. menggemakan karakter yang diberikan oleh kode ASCII dalam daftar yang dipisahkan koma berikut dan P. adalah singkatan untuk dicetak. Saya menggunakan karakter backspace untuk menimpa string 'helloworld' yang ada.
Kode input:
Output pertama:
Output Kedua:
Itu dapat diuji secara online di https://bbc.godbolt.org/
sumber