Pemrograman dengan Kunci Pergeseran Sporadis


39

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 matau A matau a Matau 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.


2
+1, ini adalah tantangan besar, tapi saya berharap Anda memberi kami string keluaran yang lebih panjang. Saya telah memikirkan beberapa trik pintar, tetapi semuanya mengambil lebih dari 18 karakter dalam semua bahasa yang saya tahu.
Nathaniel

2
@ Calvin Hobi tapi ... bagaimana dengan jawaban saat ini?
John Dvorak

1
@ CalvinHobbies Bukan! Dan batasan 1024 mencegah hal itu dengan sangat baik. diberikan semua ini, saya memilih ini untuk menutup sebagai tidak jelas apa yang Anda minta. Tolong jangan mengubah spec yang merugikan sebagian besar jawaban
Pengoptimal

1
@ Calvin'sHobbies Sayang sekali ada batas 1024 char. Saya perlu memikirkan kembali jawaban saya ...
Justin

1
@Optimizer Setidaknya mereka tidak akan menang.
jimmy23013

Jawaban:


46

Applescript, 2 0 (100%)

Saya yakin saya bisa mengklaim skor sempurna di sini:

  • Applescript Editor (IDE saya) secara otomatis mengonversi semua kata kunci menjadi huruf kecil saat dikompilasi / dijalankan
  • Selanjutnya, variabel dan handler didefinisikan nama adalah case sensitif - Sebagai contoh jika handler myFuncdidefinisikan, maka IDE akan secara otomatis mengkonversi MYFUNC, myfunc, MyFuNc, dll referensi untukmyFunc
  • Saya hanya menggunakan karakter alfabet, spasi, dan baris baru, jadi saya tidak perlu khawatir tentang angka yang digeser dan karakter tanda baca.

Ini dia:

global f
on j at a
set end of a to j
end
on c at a
j at a
j at a
end
on k at a
repeat with q in system info
j at a
end
end
on w at a
set d to count a
j at a
return string id d
end
on z at a
set end of f to a
end
set h to space
set y to h as list
k at y
k at y
set x to w at y
c at y
c at y
c at y
c at y
c at y
set q to w at y
k at y
c at y
c at y
copy y to b
c at y
set s to w at y
set d to w at y
set f to d as list
k at b
k at b
set a to w at b
c at b
j at b
set e to w at b
set y to w at b
set g to w at b
set d to w at b
set i to w at b
c at b
set l to w at b
set m to w at b
set n to w at b
set o to w at b
set p to w at b
j at b
set r to w at b
z at e
z at a
z at r
z at h
z at s
set s to w at b
set t to w at b
set u to w at b
set v to w at b
z at o
z at m
z at p
z at u
z at t
z at e
z at r
z at q
z at h
z at p
z at l
z at e
z at a
z at s
z at e
z at h
z at s
z at t
z at o
z at p
z at h
z at g
z at i
z at v
z at i
z at n
z at g
z at h
z at m
z at e
z at h
z at s
z at d
z at i
z at y
z at t
z at x
f as text

Berkat bantuan @kernigh dan @paradigmsort, sekarang ini adalah 1020 byte, hanya mencicit di bawah batas 1024 byte!

Penjelasan:

  • Karakter untuk string keluaran dihasilkan menggunakan string id <n>, yang mengembalikan karakter yang sesuai dengan nilai asciin
  • Karena kita menghindari angka, masing-masing nharus dihasilkan dengan cara yang lebih mendasar. Secara khusus kami membuat masing-masing ndengan menghitung daftar, dan kemudian menambahkan item lain ke daftar itu. Ini repeat with q in system infomemungkinkan kita melakukan ini sebanyak 16 kali, seperti system infobiasa mengembalikan daftar 16 item.
  • Dengan menggunakan teknik yang sama, kami menambahkan setiap karakter dari string terakhir pada gilirannya ke daftar.
  • Akhirnya daftar terakhir dipaksa textdan dicetak.

Keluaran:

Menggunakan osascriptpenerjemah, tetapi Editor Applescript berfungsi dengan baik:

$ # Interpret as-is:
$ osascript dearcase.scpt
Dear Computer, please stop giving me shift!
$ 
$ # Interpret all lower case:
$ tr A-Z a-z < dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$ 
$ # Interpret all upper case:
$ tr a-z A-Z < dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$
$ # Interpret random case for each letter:
$ while read; do for ((i=0;i<${#REPLY};i++)); do c="${REPLY:i:1}"; if ((RANDOM%2)); then printf "%s" "$(tr a-z A-Z <<< "$c")"; else printf "%s" "$(tr A-Z a-z <<< "$c")"; fi; done; echo; done < dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$ 

2
Sangat sangat keren! Saya harap Anda bisa mendapatkannya ke 1024. Pikiran sedikit menjelaskan kode?
Calvin Hobi

2
@ Calvin'sHobbies Applescript seharusnya menjadi salah satu bahasa yang paling mudah dibaca - Anda benar-benar tidak mengerti ini? ;-) Saya akan mencoba menambahkan penjelasan sedikit ...
Digital Trauma

2
Silakan memposting versi golf, tanpa lekukan dan tanpa nama end name. Seperti, saya harus gunakan sed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -cuntuk menghitungnya. Anda juga bisa turun dari 1044 ke 1037 dengan mengubah count of ake count a, dan menghapus logdari log f as text. Saya menguji dengan sistem OS X 10.4 lama, di mana logperintah memiliki hasil kosong; osascripthanya mencetak hasilnya, bukan log peristiwa, jadi saya tidak mendapatkan hasil kecuali jika saya menghapus log.
kernigh

3
Mengubah c untuk memanggil j dua kali alih-alih tiga kali dan memperbarui situs panggilan yang diperlukan menghemat 7 karakter dan membuat Anda di bawah batas.
paradigmsort

3
# Interpret all upper case: $ tr A-Z a-z- Args mundur, kan?
Izkata

16

PHP, 2 ^ -12

echo ucwords(strtolower('Dear Computer, ')).strtolower('please stop giving me shift!');

PHP menjadi PHP, kapitalisasi echo, ucwordsdan strtolowertidak penting. Panggilan ke ucwordsdan strtolowermemastikan 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.


2
@ edc65 ucwordsmenggunakan huruf besar untuk setiap kata
es1024

1
IDE yang baik akan menambahkan kutipan penutupan yang benar untuk Anda (Anda hanya akan berakhir dengan ''atau "", serta tanda kurung penutup, jadi meskipun Anda masih memiliki peluang 50% untuk (, itu )harus otomatis.
WOUNDEDStevenJones

menembak, Anda tidak dapat menggunakan tombol navigasi apa pun (panah), jadi meskipun IDE Anda melakukan pelengkapan otomatis dengan benar, Anda harus mengetikkan karakter yang sama lagi atau akan memasukkan yang baru (salah), seperti ini: strtolower("Dear Computer, '"0)...
DITEMUKAN BELAS

1
@ WOUNDEDStevenJones Saya percaya mengandalkan fitur IDE akan dihitung sebagai curang.
Ingo Bürk

1
Bagaimana dengan <?di awal program?
Michael Mior

5

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

print''.join(map(chr,map(len,'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              '.split(' '))))

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

j""mCldc"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "d

Solusi identik lainnya - kecuali ruang diganti dengan baris baru - di

Golfscript, 2 ** - 8

'                                                                                                                                                                                                                                                                               









































                                                                                                                                    'n/{,}%+

Mungkin penyandian dalam biner akan berfungsi untuk GolfScript. TAB sebagai 1, SPACE sebagai 0, atau sebaliknya.
Justin

3
Saya bukan satu-satunya yang melihat sebagian besar jawaban GolfScript sebagai spasi, kan?
Pharap

1
@Pharap Itulah triknya. Ini adalah banyak tab yang dipisahkan oleh baris baru. Jika Anda pergi ke bawah dan gulir ke kanan, Anda akan melihat di mana string berakhir dan melakukan sihir untuk mengubahnya menjadi ascii.
Justin


4

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


1
Tetapi perhatikan bahwa ini adalah kompetisi di luar sesuai aturan.
Ingo Bürk

3

CJam, peluang 2 -9 , 739 byte

"                         
(lines of space characters)
                                        "N/2fb:c

base64:

IiAJICAgIAkgCQkgICAJICAKICAgCSAJCSAgIAkJCQkgCQoJCQkJIAkgIAkJIAkJICAJCiAJICAg
IAkgCQkgICAgCSAKICAgCSAJCSAgCSAgICAgIAogCQkJCSAJICAJCSAJIAkJCgkJCSAJICAJCSAJ
CSAJCQkKIAkgCQkgIAkgICAgIAkgCQoJIAkJICAJICAgIAkgICAgCgkgIAkJIAkJCQkgIAkJIAkK
CQkgCSAgCQkgCQkJIAkgIAogICAJIAkJICAgCQkJCSAJCiAJICAgIAkgCQkgICAgCSAKIAkJCQkg
CSAgCQkgCQkgIAogICAJIAkJICAJICAgICAgCgkgCQkgIAkgICAgCSAgICAKCSAgCSAgICAJIAkg
CQkgIAogICAJIAkJICAgCQkJCSAJCgkJCQkgCSAgCQkgCQkgIAkKICAgIAkgCQkgICAJCSAJCQog
ICAJIAkJICAgCQkJCSAJCiAgIAkgCQkgIAkgICAgICAKICAgIAkgCQkgICAJCSAJCQoJCSAJICAJ
CSAJCQkgCSAgCgkJCSAJICAJCSAJCSAJCQkKCSAJCSAgCSAgICAJICAgIAogICAJIAkJICAJICAg
ICAgCgkgCSAgCQkgCQkJIAkJCQkKICAJCSAJCQkJIAkgICAgCQogCQkgIAkgICAgCSAgCQkgCiAg
CQkgCQkJCSAJICAgIAkKICAJICAgIAkgCSAJCQkJIAoJIAkgIAkJIAkJCSAJCQkJCiAgIAkgCQkg
IAkgICAgICAKIAkgCQkgIAkgICAgIAkgCQogICAJIAkJICAgCQkJCSAJCiAgIAkgCQkgIAkgICAg
ICAKICAgIAkgCQkgICAJCSAJCQogCQkgCQkJCSAJICAJICAgCiAgCQkgCQkJCSAJICAgIAkKCQkg
CQkJCSAJICAJIAkJIAoJCSAJICAJCSAJCQkgCSAgCgkJIAkJCQkgCSAgCQkgIAkiTi8yZmI6Yw==

Berdasarkan ide Pengoptimal dan jawaban Quincunx.


3

Python 2, 2 -20 kesempatan

print'S'+'top giving me shift!'.lower()

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.


Jika ini membantu, frasa sekarang lebih panjang (tetapi tidak ditulis dengan huruf kapital normal).
Calvin Hobbies

@ Calvin, Hobi aku melihatnya. Itu tidak membantu; itu membahayakan.
Justin

2

VisualBasic.net 2 ^ -18

Karakter kritis:. ("DearC" + ",!". ())

Sub Main
  console.write("Dear C"+"omputer, please stop giving me shift!".tolower())
End Sub

Diuji dalam LINQPad, Language = "Program VB"


Saya pikir visual studio akan mengoreksi casing secara otomatis untuk Anda.
Pharap

@Pharap tetapi casing luar tanda kutip bukan masalah ... VS tidak akan memperbaiki '(' bergeser ke '9'
edc65

1
Dalam hal ini, sesuatu yang lebih berguna: Anda dapat menyingkirkan kasus potensi mendapatkan >bukan .dengan mengubah Console.Write(string)ke Write(string)dan bertukar (string).ToLower()keluar untuk LCase(string).
Pharap

1

Pyth, 2 ** - 15

+"S"$"top giving me shift!".lower()

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.


Pyth tidak memiliki lower()- itu tidak cukup digunakan. Saya mungkin harus menambahkannya kembali.
isaacg

1

Kata-kata kasar, 2 -21

[caps:first][?[caps:word][?[caps:lower]Dear Computer][caps:lower], please stop giving me shift!]

Serangkaian metapattern dan caps panggilan memaksa pemformatan yang tepat. Nama dan argumen fungsi tidak peka huruf besar-kecil.

Versi online


1

CJam, 2 -13 peluang

Sesuai string yang diperbarui ( 696 byte).

"   




















































































             "N/:,2/Kfb:c

Hanya ""N/:,2/Kfb:cberesiko saat ini.

Cobalah online di sini dan karena editor teks ini menghabiskan semua ruang, di sini adalah inti dengan kode yang benar.


1

VB.NET, 2 ^ -12 2 ^ -11

2 -12

Module All
  Sub Main 
    Console.WriteLine StrConv("Dear Computer, ", vbTuesday) & "please stop giving me shift!".ToLower
  End Sub
End Module

2 -11

Imports System.Console

Module All
  Sub Main 
    Write StrConv("Dear Computer, ", vbTuesday)
    WriteLine "please stop giving me shift!".ToLower
  End Sub
End Module

0

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:

HoldShift(C CpsLockOn onsole)

NumPadPeriod

HoldShift(
CpsLockOff W CpsLockOn rite(" 
CpsLockOff D CpsLockOn ear space
CpsLockOff C CpsLockOn omputer
)

, (repeat with Backspace until correct)

HoldShift( please stop giving me shift!"))

; (repeat with Backspace until correct)

76 pers minimum dengan hanya 2 peluang 50% yang diperlukan


0

Excel, 2 -11

=PROPER("Dear Computer, ")&LOWER("please stop giving me shift!")

Kasus PROPERdan LOWERtidak masalah. Memasukkan formula dimulai dengan +memasukkan secara otomatis =. Jadi hanya (, ", ,, ), &, !bisa istirahat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.