Ada yang salah dengan keyboard Anda. The Shiftkey memiliki pikiran sendiri. Setiap kali Anda mengetik karakter Anda tidak tahu apakah itu akan keluar bergeser atau tidak (meskipun 50-50). Selain tombol karakter standar, tidak ada pada keyboard yang berfungsi. Tidak ada mouse atau sarana input lainnya.
Entah bagaimana Anda tahu satu-satunya cara untuk memperbaiki keadaan adalah dengan menulis sebuah program yang menghasilkan Dear Computer, please stop giving me shift!
stdout. Untungnya IDE Anda terbuka dan Anda mampu menjalankan suatu program, tetapi tentu saja saat Anda mengetiknya Anda tidak akan tahu karakter mana yang akan digeser.
Apa urutan penekanan tombol yang akan Anda gunakan untuk menulis sebuah program yang memiliki peluang terbaik untuk bekerja pada percobaan pertama?
Detail
Anda menggunakan keyboard QWERTY standar , jadi ada 50 tombol karakter yang dapat Anda tekan.
Versi tidak tergeser (hanya 47):
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
Versi bergeser (47 saja):
~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
3 Kunci terakhir adalah Enter, Tab, dan Space, yang sama bergeser dan unshifted.
Urutan N dari karakter-karakter ini memiliki 2 N - (whitespace char count) cara yang mungkin dihasilkan jika Anda mengetiknya dengan keyboard yang salah. Misalnya, mengetik A Space mmungkin telah menghasilkan
a m
atau A m
atau a M
atau A M
.
Tulis program karakter-karakter ini dan lihat semua kemungkinan kombinasi 2 N - (whitespace char count) yang mungkin. Semakin banyak kombinasi yang menghasilkan Dear Computer, please stop giving me shift!
semakin baik. Skor Anda adalah jumlah kombinasi kerja (program yang valid) dibagi dengan jumlah total kombinasi. Skor tertinggi menang.
Catatan
- Untuk program yang valid, pencetakan tepat
Dear Computer, please stop giving me shift!
dan tidak ada lagi yang harus dilakukan adalah satu-satunya efek samping. - Program yang valid seharusnya tidak mengambil input.
- Program yang tidak valid dapat melakukan apa saja.
- Komentar dapat digunakan di mana saja.
- Whitespace jawaban tidak dapat menang karena mendapatkan skor 100% (relatif) sepele. Anda masih dapat mengirimkan solusi Whitespace untuk bersenang-senang.
- Panjang program Anda harus paling banyak 1024 karakter.
Update: Berubah Stop giving me shift!
untuk Dear Computer, please stop giving me shift!
untuk memungkinkan lebih banyak jawaban yang kompleks. Jawaban yang ada dapat tetap seperti itu jika diinginkan.
sumber
Jawaban:
Applescript, 2 0 (100%)
Saya yakin saya bisa mengklaim skor sempurna di sini:
myFunc
didefinisikan, maka IDE akan secara otomatis mengkonversiMYFUNC
,myfunc
,MyFuNc
, dll referensi untukmyFunc
Ini dia:
Berkat bantuan @kernigh dan @paradigmsort, sekarang ini adalah 1020 byte, hanya mencicit di bawah batas 1024 byte!
Penjelasan:
string id <n>
, yang mengembalikan karakter yang sesuai dengan nilai asciin
n
harus dihasilkan dengan cara yang lebih mendasar. Secara khusus kami membuat masing-masingn
dengan menghitung daftar, dan kemudian menambahkan item lain ke daftar itu. Inirepeat with q in system info
memungkinkan kita melakukan ini sebanyak 16 kali, sepertisystem info
biasa mengembalikan daftar 16 item.text
dan dicetak.Keluaran:
Menggunakan
osascript
penerjemah, tetapi Editor Applescript berfungsi dengan baik:sumber
end name
. Seperti, saya harus gunakansed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -c
untuk menghitungnya. Anda juga bisa turun dari 1044 ke 1037 dengan mengubahcount of a
kecount a
, dan menghapuslog
darilog f as text
. Saya menguji dengan sistem OS X 10.4 lama, di manalog
perintah memiliki hasil kosong;osascript
hanya mencetak hasilnya, bukan log peristiwa, jadi saya tidak mendapatkan hasil kecuali jika saya menghapuslog
.# Interpret all upper case: $ tr A-Z a-z
- Args mundur, kan?PHP, 2 ^ -12
PHP menjadi PHP, kapitalisasi
echo
,ucwords
danstrtolower
tidak penting. Panggilan keucwords
danstrtolower
memastikan bahwa kasus string tidak akan mengubah output.Oleh karena itu, satu-satunya karakter yang tidak dapat diubah adalah
((,)).(!);
(10 karakter).Setiap sepasang tanda kutip juga memiliki kesempatan 50% menjadi valid (
''
dan""
berlaku, tetapi'"
dan"'
tidak), oleh karena itu masing-masing menambahkan kekuatan lain dari dua.sumber
ucwords
menggunakan huruf besar untuk setiap kata''
atau""
, serta tanda kurung penutup, jadi meskipun Anda masih memiliki peluang 50% untuk(
, itu)
harus otomatis.strtolower("Dear Computer, '"0)
...<?
di awal program?Catatan: Ini sebenarnya 3 jawaban dalam satu. Saya tidak melihat inti dari memecahnya menjadi beberapa jawaban ketika keduanya merupakan terjemahan harfiah satu sama lain. Jika mereka harus dibagi, beri tahu saya dan saya akan mengurusnya.
Setelah membaca ulang spesifikasi, saya menyadari bahwa ini sebenarnya tidak valid. Setiap jawaban> 4000 karakter. Tapi saya akan meninggalkan ini di sini karena metode yang berbeda.
Python 2, 2 ** - 41
Hanya untuk memberikan gaya solusi yang berbeda. Ini mengkodekan nilai ascii dari setiap karakter di tab, dibagi pada spasi. Jumlah tab adalah angka untuk nilai ascii.
Ini adalah solusi identik di
Pyth, 2 ** - 11
Solusi identik lainnya - kecuali ruang diganti dengan baris baru - di
Golfscript, 2 ** - 8
sumber
CJam,
2 -72 -12 kesempatanIni memiliki ide yang mirip dengan jawaban pertama Quincunx , tetapi di CJam.
sumber
K
bukanC
?Spasi (645 bytes, 2 ^ 0 probabilitas)
Karena program ini hanya menggunakan tab, spasi, dan baris baru (yang semuanya tidak terpengaruh oleh perubahan), program ini memberikan tingkat keberhasilan 100%.
Program dijalankan
sumber
CJam, peluang 2 -9 , 739 byte
base64:
Berdasarkan ide Pengoptimal dan jawaban Quincunx.
sumber
Python 2, 2 -20 kesempatan
print
,S
,+
,!
, Dan.lower()
semua harus versi yang benar; itu 18 karakter. Dua kutipan untuk string juga harus sejajar, yang membuat dua kekuatan lebih dari dua.Untuk salah satu dari itu
top giving me shift
, jika dikonversi ke versi kapital, kami mengubahnya menjadi huruf kecil dan berfungsi dengan baik.Sayangnya, saya tidak dapat menggunakan Python yang bagus
capitalize()
, karena itu membutuhkan satu karakter lagi.sumber
VisualBasic.net 2 ^ -18
Karakter kritis:. ("DearC" + ",!". ())
Diuji dalam LINQPad, Language = "Program VB"
sumber
>
bukan.
dengan mengubahConsole.Write(string)
keWrite(string)
dan bertukar(string).ToLower()
keluar untukLCase(string)
.Pyth, 2 ** - 15
Sepertinya saya tidak dapat menemukan versi Pyth
lower()
, jadi saya akan meminjam dari Python. Karakter yang tidak dapat ditukarkan adalah+"S"$
,!
, dan.lower()
, untuk total 14 karakter. Kutipan setelah$
harus cocok, menambahkan kekuatan lain 2.sumber
lower()
- itu tidak cukup digunakan. Saya mungkin harus menambahkannya kembali.Kata-kata kasar, 2 -21
Serangkaian metapattern dan
caps
panggilan memaksa pemformatan yang tepat. Nama dan argumen fungsi tidak peka huruf besar-kecil.Versi online
sumber
CJam, 2 -13 peluang
Sesuai string yang diperbarui ( 696 byte).
Hanya
""N/:,2/Kfb:c
beresiko saat ini.Cobalah online di sini dan karena editor teks ini menghabiskan semua ruang, di sini adalah inti dengan kode yang benar.
sumber
VB.NET,
2 ^ -122 ^ -112 -12
2 -11
sumber
Saya memikirkan jawaban saya sebelum sampai ke '50 karakter termasuk hanya aturan Enter, Tab, Space '. Jadi milikku tidak valid.
Tampaknya memiliki bahasa pemrograman yang tidak sensitif huruf adalah kuncinya di sini. Atau, jika Anda dapat menggunakan keyboard QWERTY standar Nyata (termasuk Caps Lock, Shift lainnya, Backspace, dan Periode Numpad) hanya akan ada 2 peluang 50% yang diperlukan yang hanya akan menghasilkan 2 penekanan tombol tambahan per kegagalan. Jawaban tidak valid saya untuk Aplikasi Konsol C # yang menunjukkan penekanan tombol yang sebenarnya:
76 pers minimum dengan hanya 2 peluang 50% yang diperlukan
sumber
Excel, 2 -11
Kasus
PROPER
danLOWER
tidak masalah. Memasukkan formula dimulai dengan+
memasukkan secara otomatis=
. Jadi hanya(
,"
,,
,)
,&
,!
bisa istirahat.sumber