Anda harus membuat game Terlalu rendah --- Terlalu tinggi (TLTH) dalam kode terpendek (dalam byte)
Aturan gim:
- Komputer akan memilih nomor acak di luar rentang integer (-32768..32767).
- Sekarang Anda akan memikirkan angka dan memasukkannya.
- Komputer akan memberi tahu apakah nomor Anda lebih rendah (
TOO LOW
) atau lebih tinggi (TOO HIGH
) daripada nomor yang dipilih. - Ketika Anda menebak nomornya, komputer akan ditampilkan
Congrats! You found the number!
.
Aturan Kode:
Jangan gunakan karakter
T
,O
,L
,W
,H
,I
danG
(tidak huruf kecil atau huruf besar) dalam string atau karakter literal.
Contohnya:tolower(T); // Acceptable cout<<"T"; // Unacceptable char ch='T'; // Unacceptable
Hapus 300 byte jika kode Anda dapat menampilkan aturan permainan sebelum memulai permainan.
Hapus 50 byte jika kode Anda dapat menghitung jumlah putaran dan menampilkan jumlah putaran yang terjadi di akhir permainan seperti ini:
"Congrats! You found the number in n turns!"
di mana n adalah jumlah putaran yang dilakukan, bukan
"Congrats! You found the number!"
Hapus 25 byte dari skor Anda jika kode Anda dapat memberi tahu pengguna bahwa angka yang Anda masukkan di luar kisaran integer.
Sebagai contoh:Enter the number: 40000 Sorry! This number is out of range Please Enter the number again:
Hapus 25 byte Jika kode Anda mengambil nomor acak bukan dari fungsi acak bawaan.
Hapus 10 byte Jika kode Anda menampilkan "selamat" berwarna (pilih warna apa pun kecuali putih standar).
Aturan Pengiriman:
Tambahkan judul dengan nama bahasa Anda dan skor dengan semua perhitungan hadiah dan penjelasannya.
Poskan kode golf dan tidak serigala Anda.
Pemenang
- Jawaban dengan paling tidak byte menang.
- Jika ada dasi, jawabannya dengan lebih banyak suara akan menang.
- Pemenang akan dipilih setelah 5 hari.
EDIT : Tolong tunjukkan output kode Anda.
EDIT-2 : Anda dapat mengabaikan Aturan-1 untuk Aturan-2,3 & 4 dalam Aturan Kode
Semoga berhasil :]
WhileURong(USayNumbr;ISayBigrOrSmalr)
Jawaban:
JavaScript (-210 poin (
190
byte -300
(untuk aturan) -50
(untuk jumlah tebakan) -25
(untuk tidak menggunakan sumber nomor acak bawaan) -25
(untuk memberi tahu Anda jika input di luar kisaran yang ditandatangani16
-bit integer) ):Golf:
Kode lengkap (diformat dengan baik):
Keluaran:
sumber
0
. :-( Juga, bukankah seharusnya ada ruang diTOO LOW
/TOO HIGH
?Perl 5.10+:
159144 byte - 350 = −206 poinSunting 2: Dengan perubahan aturan terbaru yang memungkinkan saya untuk menggunakan string literal apa pun untuk pesan "congrats", saya dapat menyimpan 15 byte dari solusi 159-byte asli saya. Tidak ada yang khusus atau menarik tentang kode baru di atas dibandingkan dengan kode lama (saya baru saja menghilangkan
p
fungsi, dansay
langsung menelepon saja), jadi sisa tulisan ini akan menjelaskan kode asli, yang ditunjukkan di bawah ini:Ya, saya menyalahgunakan aturan 1. Siapa yang butuh string, ketika Anda dapat memiliki kata kunci ? ;-)
Jalankan dengan
perl -M5.010
untuk mengaktifkan fitur Perl 5.10+say
(atau ganti badanp
fungsi dengan denganprint join$",@_,$/
biaya tambahan 5 byte).Skor bonus:
Kode tidak mengandung string literal dalam arti yang ketat, jadi saya akan mengatakan bahwa aturan 1 secara teknis tidak dilanggar. Kuncinya adalah, di Perl, tanpa
use strict
, pengenal apa pun yang tidak sesuai dengan kata kunci atau subrutin bahasa yang dikenal akan dengan mudah mengevaluasi ke namanya sendiri. Fungsinyap
kemudian hanya mengambil daftar kata dan mencetaknya, dipisahkan oleh spasi.Contoh play-through:
Sunting: Oh, benar, aturannya mengatakan saya perlu memposting versi yang tidak golf juga, jadi begini saja. Secara teknis, ini "de-golfed", karena saya biasanya menyusun program golf kode saya dalam bentuk golf yang kurang lebih sepenuhnya dari awal, dan kadang-kadang bisa sulit untuk menghapus semua optimasi "golfy" tanpa secara mendasar mengubah cara beberapa bagian dari pekerjaan program. Namun, saya setidaknya sudah mencoba menambahkan spasi putih, komentar, dan nama fungsi / variabel yang lebih bermakna:
Ps. Sebagai alternatif, jika hanya menggunakan kata kunci bukan string terasa terlalu curang untuk Anda, inilah solusi 182-byte yang tidak menggunakan huruf-huruf
TOLWHIG
bahkan dalam kata kunci (tetapi menggunakannya dalam operator transliterasi). Masih mendapat bonus yang sama, dengan skor total 182 - 350 = −168 poin :Outputnya terlihat persis sama seperti di atas. Sesuai aturan (asli), saya menggunakan surat
t
dani
mencetak aturan, karena diizinkan; menghilangkan bahkan penggunaan itu hanya membutuhkan dua byte tambahan. Sebaliknya, membuat semua huruf besar keluaran (yang, berdasarkan komentar di atas, tampaknya diizinkan) akan membuat saya menghemat tiga byte.sumber
def method_missing *args;args.join' ';end
.Python 2: -80 poin (270-300-50)
Skor adalah 270 karakter, minus 300 untuk menunjukkan instruksi, minus 50 untuk menunjukkan jumlah tebakan di "selamat!" string, untuk total 80 poin negatif.
Versi loop yang tidak digabungkan, dengan string yang tidak terhapuskan:
Built-in
cmp
fungsi kembali 0 jika nilai-nilai yang sama, -1 jika yang pertama adalah lebih kecil dan 1 jika yang pertama adalah lebih besar. Saya menggunakan nilai untuk mengindeks tupel string, dan sekali lagi sebagai kondisi keluar dari loop. Pengindeksan urutan dengan indeks negatif (seperti -1) dihitung dari akhir urutan, bukan dari awal.Saya sangat tergoda untuk melewatkan impor dan hanya menggunakan
4
sebagai nomor acak saya, sesuai XKCD 221 (akankah itu memenuhi syarat untuk bonus karakter -25?).Contoh dijalankan (lengkap dengan kesalahan, di mana saya tidak dapat melakukan matematika negatif):
sumber
g
adalah nol danwhile
loop berakhir.You can ignore Rule-1 for Rules-2,3 & 4 in Code Rules
JavaScript 293, -300 (aturan) - 50 (tampilan belok) - 25 (peringatan rentang) - 25 (tidak ada fungsi acak) = -107 (skor baru)
r=new Date%65536+~(z=32767);n=x="";for((A=alert)("\107uess my number, \111 \147\151ve feedback");(x=prompt())!=r;A(0>(x-~z^x-z)?"\164\157\157 "+(x>r?"\150\151\147\150":"\154\157\167"):"Ran\147e: "+~z+" - "+z))n++;A("C\157n\147ra\164s! Y\157u f\157und \164\150e number \151n "+ ++n+"\164urns!")
Saya akan mengklaim bahwa dengan konvensi RGB bahwa hitam adalah warna, tapi itu akan menjadi agak curang ...
Oh, dan mungkin saya tambahkan, jangan melanggar aturan # 1, baik!
Keluaran dalam serangkaian peringatan dan konfirmasi
Kode tidak dikunci:
sumber
A=alert;
dan mengganti semuaalert
denganA
. Dan satu lagi jika Anda memindahkan lansiranA(0>(x...
setelah tanda titik koma masukprompt())!=r;)n++1
.feedback if too high/low
yang menggunakan 84 karakter saat ini kei give feedback
(yang hanya membutuhkan\151 \147\151ve feedback
atau 24 karakter untuk menyimpan 60 karakter .n++
dari for loop ke dalamx=prompt(n++)
untuk menyimpan harus dilakukan+ ++n+
dalam peringatan terakhir. Ini akan menghemat 3.Javascript, 324 byte, skor -76
[Diperbarui karena perubahan aturan]
Total skor: -76
Golf:
Mari kita ungolf kekacauan ini.
Pertama, diidentifikasi dengan benar (tapi ini masih kurang bagus dengan kode yang dikaburkan):
Kedua, mengganti nama pengidentifikasi:
Jadi fungsi unencrypt mendapatkan semua karakter antara ASCII 33 (
!
) dan ASCII 58 (:
) dan menambahkan 32, mengonversinya dalam karakter dalam rentangA-Z
.Mari ungolf kode lebih banyak dengan mencabut semua string:
Dan akhirnya mari kita pindahkan beberapa instruksi ke tempat lain, ganti rantai terner panjang dengan ifs dan elses, gabung string senar, dan sederhanakan matematika, untuk meningkatkan keterbacaan:
Mencicipi:
sumber
C - 272 karakter - 300 - 50 - 25 = -103
Kode golf:
Tidak Terkumpul:
Keluaran:
sumber
C: 237 - 300 - 50 - 25 - 25 - 10: -173 poin
-300 untuk aturan, -50 untuk menunjukkan jumlah tebakan, -25 untuk tidak menggunakan generator nomor acak bawaan, -25 untuk pesan di luar jangkauan dan -10 untuk mewarnai pesan ucapan selamat.
Tidak Terkumpul:
Contoh dijalankan:
Baris terakhir muncul sebagai merah.
sumber
bash, -137
Skor
273 (byte) - 300 (aturan) - 50 (mencoba hitungan) - 25 (peringatan OOF) - 25 (custom PRNG) - 10 (warna)
Versi golf
Perhatikan bahwa baris terakhir adalah komentar, sehingga tidak mengandung string atau karakter literal.
Versi tidak disatukan
Output sampel
Baris terakhir dicetak dengan warna hijau.
sumber
C #: -30 poin
Golf :
Untuk menjalankannya, memasukkannya ke dalam sebuah file (code.cs) dan dijalankan dengan scriptcs pada baris perintah:
scriptcs code.cs
.Tidak Digabungkan : Memperluas nama variabel menjadi sesuatu yang lebih mudah dipahami, dan mengubah huruf heks menjadi huruf asli.
Contoh output tersedia di sini .
sumber
T
,O
,L
,W
,H
,I
danG
(tidak huruf kecil atau huruf besar) dalam string atau karakter literal. "T
,O
,L
... dengan\x54
,\x4F
,\x4C
... dan Anda sedang baik-baik saja.C ++ 505 + (-300-50-25-25) = 105
-300: Petunjuk
-50: Menampilkan jumlah putaran
-25: Tidak menggunakan fungsi acak
-25: memperingatkan pengguna tentang input di luar jangkauan
TERLENGKAP
UNGOLFED
KELUARAN
sumber
C, 183-300-25 = -142
183 byte -300 untuk aturan -25 karena tidak menggunakan perpustakaan acak
versi tanpa ungolfed:
contoh dijalankan:
sumber
"TOO HIGH"
dan"TOO LOW"
keduanya mengandung karakter ilegalTOLWHIGtolwhig
.TOO LOW
diizinkan oleh EDIT 2 juga?J - 190 char -300 -50 = -160 poin
Penjelasan (ingat bahwa J dibaca dari kanan ke kiri):
'WhileURong(USayNumbr;ISayBigrOrSmalr)'1!:2]2
- Cetak aturannya.32767-?2^16[
- Letakkan nilai kembali, lalu buat angka acak antara 0 dan 2 ^ 16-1 inklusif. Kemudian, sesuaikan ke kisaran -32768..32767 dengan mengurangi dari 32767.1>:@]^:(...)^:_~
-x u^:v^:_ y
Polanya agak seperti loop sementara.x
tetap konstan, dany
dimutasi dengan setiap eksekusiu
. Ini berlanjut sampaix v y
mengembalikan 0 ataux u y
menghasilkan tidak ada perubahan paday
. The~
swap dua argumen, sehinggax
akan menjadi nomor acak dany
akan dimulai pada 1. kamiu
adalah>:@]
, yang increment ini 1 dan kembali itu, sehingga bertindak sebagai counter danx u y
kondisi penghentian tidak pernah bisa terjadi.[:".1!:1@1:
- Ambil penghitung, dan abaikan nilainya, gunakan angka 1 sebagai gantinya (1:
). Baca dalam barisan input (1!:1
) dari keyboard (pegangan file 1) dan jalankan (".
). Ini memungkinkan J, yang tanda negatifnya biasanya_
, untuk mengambil angka dalam formulir-n
(dievaluasi sebagai negasi yang diterapkan pada nomor tersebutn
).]`(...)@.*@-
- Ambil selisih angka acak dari sebelumnya dan tebak (-
). Sekarang, kami memilih tindakan berikutnya tergantung pada apakah perbedaan ini nol (@.*
). Jika ya, return (]`
) yang 0 sebagai hasilnyax v y
, sehingga eksekusi berakhir, dan keseluruhan loop sementara mengembalikan penghitung. Lain...71+13 8 8 _39,(5 8 16;1 2 0 1){::~0&>
- Kembalikan array5 8 16
jika angkanya negatif, dan1 2 0 1
jika positif. Kemudian tambahkan13 8 8 _39
dan tambahkan 71 ke semuanya, jadi kita punya salah satu84 79 79 32 76 79 87
atau84 79 79 32 72 73 71 72
.1[2:1!:2~a.{~
- Ubah angka-angka ini ke karakter ASCII dengan mengindeks alfabeta.
dengan mereka. Kemudian cetak dengan1!:2
(menggunakan pegangan file 2) dan kembalikan 1 sebagai hasilx v y
.'Congrats, you found the number in ',' turns!',~":
- Ketika loop selesai, ia mengembalikan counter. Konversikan ke string dengan":
dan letakkan di antara string'Congrats, you found the number in '
dan' turns!'
.Output sampel:
sumber
JavaScript -40
335 - 300 (aturan) - 50 (hitungan putaran) - 25 (di luar jangkauan)
Tidak akan menang tetapi cara yang menyenangkan untuk mendapatkan surat-surat yang saya pikir.
Golf
Tidak disatukan
Output sampel
sumber
APL (Dyalog) (157 - 300 - 50 = -193)
(Ya, ini dihitung sebagai byte, rangkaian karakter APL cocok dalam satu byte.)
Saya telah mengklaim "tampilkan aturan permainan" dan "hitung jumlah putaran".
Contoh dijalankan:
Tidak Terkumpul:
sumber
Pogo: -95 (255 - 300 - 50)
Jika angkanya 10:
Hitungan karakter didasarkan pada kode dengan semua spasi kosong dihapus.
Perhatikan bahwa Pogo bukan bahasa palsu. Saya membuatnya dan menulis kompiler dan IDE untuk itu di sini: https://github.com/nrubin29/Pogo
sumber