Pada 1984, Michael Crichton menulis program keamanan di BASIC yang diterbitkan di majalah Creative Computing. Program akan meminta pengguna untuk mengetik frasa pilihannya, mencatat interval antara penekanan tombol, lalu memintanya mengetik ulang frasa. Jika waktunya berbeda terlalu banyak, program akan mengidentifikasi pengguna sebagai penipu.
Tugas Anda: buat versi program Crichton dalam bahasa pilihan Anda.
Aturan:
Frasa untuk berkomunikasi dengan pengguna ("Silakan ketikkan frasa kunci," "Silakan ketik frasa kunci lagi," dll.) Dihitung setiap satu byte, berapa pun panjang sebenarnya. Ini hanya untuk komunikasi pengguna, jangan mencoba menyembunyikan kode program di dalam string.
Tes lulus / gagal harus didasarkan pada nilai absolut rata-rata dari persentase persentase dari interval asli. Jika string tidak cocok, kembalikan gagal atau izinkan pengguna untuk mencoba lagi, atas kebijakan Anda.
Frasa kunci seharusnya tidak mengizinkan string nol. Jika frasa kunci terlalu panjang untuk tipe data string Anda, terpotong atau tidak diizinkan dan mulai lagi, sesuai kebijakan Anda.
Sensitivitas tes (ambang batas untuk lulus / gagal tes) harus disesuaikan dalam kode sumber.
Saya awalnya memberikan bonus 20% dari jumlah byte total jika kode sumber Anda dapat diformat agar menyerupai dinosaurus. Telah ditunjukkan bahwa ini sangat subjektif dan mungkin lebih tepat untuk kontes popularitas, jadi saya telah menghapus bonus ini. Namun saya masih dengan sungguh-sungguh mendorong pemformatan dinosaurus, dan jika Anda memformat kode Anda agar terlihat seperti dinosaurus, Anda dapat mengurangi komentar kosmetik murni, linebreak, atau karakter spasi putih dari total byte Anda.
Kemenangan byte terpendek, tergantung pada panjang string dan penyesuaian format dinosaurus.
Perhatikan bahwa spesifikasi saya di atas tidak sama persis dengan operasi kode Crichton, salinannya dapat ditemukan online. Ikuti spek, jangan coba mengkloning yang asli.
"Please type the key phrase"
dihitung sebagai 1 byte, atau hanya frasa yang dihitung dan frasa yang dikutip dihitung sebagai 3 byte ("
, frasa,"
)? Apakah disengaja bahwa interval yang lebih lama dan interval yang lebih pendek akan "membatalkan" dan menjadi lebih lagi? Apakah program harus memverifikasi bahwa kedua frasa kunci cocok?Jawaban:
Rubi,
171 167157 byteOutput
true
jika varians rata-rata di atas 20%, jika tidak outputfalse
.Upaya seni Dinosaurus ASCII:
Tidak Disatukan:
require 'io/console'
dapat dihapus ketika dijalankan di beberapa REPL Ruby, karena perpustakaan sudah dimuat.sumber
Java 768 byte
apa? Jawa? untuk kode golf?
Ini mungkin hal terburuk yang harus dilakukan, tetapi saya tetap mencobanya.
Ini menampilkan pesan apa pun di jendela konsol, tetapi pengetikan yang sebenarnya terjadi di JTextField. Tidak terlihat cantik. Oh, dan untuk menghemat 5 byte, Anda harus mengubah ukuran JFrame sendiri. Juga, itu tidak memeriksa kebenaran string untuk kedua kalinya. Tidak yakin apakah itu melanggar spesifikasi.
Menggunakan:
Ketikkan kunci Anda di bidang teks.
Jangan tekan enter, pergi ke konsol dan ketik sesuatu. Ini akan menampilkan pesan lain
Ketikkan hal yang sama di bidang teks (yang sekarang harus dihapus).
Pergi ke konsol dan tekan sesuatu lagi. Ini akan menampilkan apakah Anda seorang penyusup atau tidak.
ungolfed:
golf:
sumber
JFrame
, jadi Anda tidak perluf
.HTML, JavaScript (ES6), 328
Total jumlah byte kode adalah 402 byte dan pesan untuk berinteraksi dengan pengguna:
adalah total 78 byte, jadi total skor => 402 - 78 + 4 = 328
Jalankan cuplikan di bawah ini di Firefox terbaru dan ketik kunci di kotak input diikuti oleh tombol Enter.
Kode memeriksa apakah kunci yang dimasukkan dan yang dimasukkan kembali sama, (meminta untuk memasukkan kembali jika tidak), menghitung persentase perbedaan absolut rata-rata dan memeriksa apakah kurang dari nilai variabel.
V
sumber
C, 154 (86 + 68 untuk bendera)
Mengkompilasi dengan
-DY=(y=clock())-x
,-DZ=a[d]
,-DE=getch()
,-DW=);while
,-DU=i++[d]=Y
dan-DP=puts(
. Baris baru ditambahkan untuk tujuan presentasi dan dapat dihapus (jumlah byte yang diberikan adalah tanpa).+ Komentar tidak dikumpulkan:
Ini tidak memeriksa apakah frasa yang diketik ulang itu identik, juga tidak menghasilkan apa pun jika pengguna tidak diidentifikasi sebagai penipu.
Ini juga tidak mempertimbangkan waktu yang diambil setelah diminta sebelum penekanan tombol pertama.
sumber
getch
bertaruhgetc
ataugetchar
? Saya memiliki referensi yang tidak jelas ke `getch ', yang jika saya ingat dengan benar sudah usang?char
sebelum deklarasi global, dan sekarang, ini memberikan kesalahan segmentasi saat runtime. Bisakah Anda memberikan detail tentang cara membangunnya? Kompiler apa yang Anda gunakan? Terima kasih.int
, dan diinisialisasi ke0
. Saya sudah menguji ini menggunakan gcc pada Windows (menggunakan Windowgetch
).getch
digunakan sebagai gantigetc
ataugetchar
karenagetch
tidak memerlukan tombol kembali untuk ditekan sebelum memproses karakter apa pun (getch
memang sudah usang pada Windows, meskipun tidak ada yang salah dengan menggunakan fungsi yang sudah tidak digunakan lagi di sini).Scala REPL 233
Dengan semua spasi dihapus, Anda memiliki:
Yang saya yakin seseorang yang lebih berbakat dari saya bisa menjadi dinosaurus!
Penjelasan singkat:
The
l
Metode membaca karakter dan membuat saluran darinanoTime
ketika masing-masing karakter yang diketik.The
m
Metode cetak"Enter"
, istirahatl
metode atas memukul masukkan (karakter 13), maka peta untuk hanyananoTimes
, dan kemudian mendapat interval waktu antara masing-masing karakter.2 baris berikutnya dibaca dalam 2 string, ritsleting, kemudian menemukan nilai absolut rata-rata dari perbedaan persentase antara interval kedua dan yang pertama, dan akhirnya mencetak apakah rata-rata ini kurang dari atau tidak
0.2
.sumber
Gangguan Umum: 660
Tidak disatukan
Tanda tambahan
Bonus dinosaurus
Saya harus mendapat bonus karena semua orang tahu bahwa " Common Lisp adalah dinosaurus yang hampir mati ".
sumber