Diberikan salah satu karakter berikut (atau baris baru):
`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>?
Program Anda harus menampilkan baris yang ada di keyboard
Karena keyboard saya hampir kehabisan baterai, kode Anda harus sesingkat mungkin
Keyboard yang harus digunakan program Anda (untuk pencarian baris), akan terlihat seperti:
Row 1:~` !1@2 #3$4 %5^6 &7*8 (9)0 _-+=
Row 2: Q W E R T Y U I O P {[ }] |\
Row 3: A S D F G H J K L :; "' ↵ return
Row 4: Z X C V B N M <, >. ?/
Row 5: space
Di mana ↵ returnbaris baru. Kunci kosong tidak berarti apa-apa.
Contohnya
"$"
1
"R"
2
"a"
3
"?"
4
"\n"
3
" "
5
di mana \n
karakter baris baru.
Spesifikasi
- Program Anda harus peka terhadap huruf besar-kecil
- Program Anda hanya perlu menangani karakter pada keyboard yang ditampilkan
sumber
kbd
?Jawaban:
Pyth,
626665 byteCobalah online.
Menggunakan string yang dikemas mewakili angka dalam heks yang, ketika dipotong menjadi dua-bit, mewakili deretan setiap karakter kecuali
dan
!
sebagai nilai dari 0 hingga 3. Kami meninggalkandan
!
jadi kami tidak perlu menyimpan 4 atau memiliki a 0 pada awal angka ini, lalu tambahkan nilai barisnya menggunakan+,4Z
. Setelah kami mengubah string menjadi nilai baris, yang harus kita lakukan adalah menggunakan kode karakter dari input untuk mengindeks ke dalam array nilai, dan kemudian menambahkan 1.Newline ditangani secara terpisah karena ditafsirkan oleh Pyth sebagai string kosong dan memiliki kode karakter 0.
Ini akan lebih pendek jika saya bisa mengetahui cara menggunakan basis 256 di Pyth, tapi saya tidak bisa membuatnya berfungsi.
sumber
JavaScript (ES6),
105102101 bytePenjelasan
Di JavaScript
test
mengembalikan boolean yang bertindak sama1
atau0
jadi saya kalikan dengan baris mereka. Pengujian untuk baris 2 mengambil byte terbanyak jadi saya menggunakan yang itu sebagai default jika tidak ada yang cocok.Uji
Tampilkan cuplikan kode
sumber
c="q"
,++c
=NaN
,NaN*7
=NaN
,NaN^2
mengubah operan menjadi bilangan bulat (uncastables likeNaN
menjadi0
) kemudian melakukan0 XOR 2
yang mana2
.Glava 1,5 , 164 byte
Glava adalah dialek Jawa yang membuat kode Java lebih pendek. Sayangnya kode ini tidak kompetitif karena komit (2 jam terlambat ...) yang digunakan dibuat setelah tantangan ini, yang memperbaiki beberapa bug penting yang tidak memungkinkan program ini bekerja.
Ini adalah program lengkap yang mengambil input melalui argumen baris perintah. Bekerja hanya dengan menguji baris regex yang cocok, lalu menampilkan nomor yang sesuai.
sumber
Python 3, 142
Mungkin ada cara yang lebih pendek yang saya hadapi ¯ \ _ (ツ) _ / ¯
sumber
Pyth , 98
tidak yakin bagaimana agar rentang 0-9 berfungsi karena beberapa alasan: |, terinspirasi oleh jawaban pengguna81655
sumber
jkUT
untuk string dengan rentang 0 hingga 9, tidak yakin apakah ada cara yang lebih pendek. Anda juga dapat menggunakan string yang dikemas untuk menyimpan beberapa byte, misalnya."!~WÏù¹_(<]úÝ"
untuk"~`!@#$%^&*()_-=+"
.Bash, 108
Tidak ada jawaban Bash? Bash menjawab.
grep -Fin
jelas merupakan alat yang tepat untuk pekerjaan ini.Program ini dalam dua file.
k
, 73 byteAda 5 baris, yang terakhir adalah spasi. Jika Anda mengalami masalah dalam mereproduksi file, base64 adalah:
b
, 34 byteIni adalah program itu sendiri, dibutuhkan input sebagai satu-satunya argumen baris perintah.
Nilai: 34 + 73 + 1 (untuk
k
nama file) = 108 byteTidak disatukan
Penjelasan
grep
- mencari file untuk baris yang cocok dengan string atau ekspresi reguler, hanya output baris tersebut-F
alias--fixed-strings
- menonaktifkan ekspresi reguler sehingga[
dll ditangani dengan benar-i
alias-y
alias--ignore-case
- pencocokan case-insensitive-n
alias--line-number
- tampilkan nomor baris dan: sebelum setiap baris (mis.4:zxcvbnm,./<>?
)"$1"
- mencari argumen baris perintah skrip pertama, tanda kutip diperlukan untuk menangani baris baru dan spasik
- Pencarian dalam filek
grep
Perintah ini akan cocok dengan semua lima baris jika inputnya adalah baris baru, dan hanya satu baris sebaliknya.|
- pipa, kirim output standar dari satu perintah ke input standar berikutnyatail
- mengeluarkan garis N terakhir atau karakter dari input standar-n3
alias--lines=3
- output 3 baris terakhir-n
bendera menyalagrep
. Kalau tidak, perintah ini hanya mengambil baris 3, 4 dan 5 (3 baris terakhir).|
- pipahead
- output garis N pertama atau karakter input standar-c1
alias--bytes=1
- menampilkan karakter pertamasumber
Japt,
737066 byteCobalah online! (dalam contoh, input secara harfiah adalah baris baru)
sumber
!1
adalah sesuatu yang cocok dengan "false", akhirnya saya tahu bagaimana melakukannya, terima kasih :)Java, 300 byte
Saya bukan ahli, dan ini adalah usaha pertama saya bermain golf, tetapi saya pikir, apa-apaan, kenapa tidak? Di atas adalah versi program lengkap, kode aktual yang masuk ke dalamnya kemungkinan besar akan menghilangkan sejumlah karakter.
sumber
class A{public static void main(String[]a){int f="~'!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r".indexOf(new java.util.Scanner(System.in).nextLine().charAt(0));System.out.print(f<0?4:f<26?1:f<53?2:f<76?3:5);}}
( 243 byte ) Saya menghapus beberapa tanda kurung yang tidak perlu; dipersingkatargs
; dihapuspublic
; langsung menggunakan String dan Scanner; dan menghapus impor sekarang yangjava.util.Scanner
digunakan sekali.Pyth, 105 byte
Penjelasan:
Saya memutuskan untuk memilih baris pertama sebagai baris "harus jika tidak ada yang lain" karena itu memerlukan byte paling banyak untuk mewakili bahkan setelah bermain golf.
sumber
Perl 6, 128 byte
Saya membuat daftar regex yang berisi kelas karakter bersama dengan ruang literal string. Saya kemudian memanggil
first
metode pada daftar (yang hanya versi metode darifirst
fungsi tingkat tinggi), menggunakan smartmatch untuk membandingkan argumen yang diteruskan ke program terhadap item saat ini dalam daftar. Perhatikan bahwa smartmatch melakukan "hal yang benar" untuk regex dan string literal. The:k
parameter opsional untukfirst
penyebab metode untuk mengembalikan indeks dari item yang cocok dalam daftar, yang kemudian saya tambahkan 1 ke dan output melaluisay
.Perhatikan bahwa saat menggunakan program ini Anda harus keluar dari karakter tertentu seperti `dan spasi di shell Anda. Misalnya: perl6 keyboard.p6 \ `
sumber
JavaScript ES6, 114 byte
Solusi JavaScript lainnya. Prinsipnya adalah untuk mengembalikan indeks input char dalam array baris ditambah 2 (sehingga 0-9 baris mengembalikan -1, yaitu tidak ada, -1 + 2 = 1.
q
adalah dalam string pertama array, sehingga mengembalikan 0 + 2 = baris ke-2).sumber
Perl,
967776 byteJalankan menggunakan
perl -p
. Pastikan Anda memberinya hanya karakter tunggal; misalnya, untuk menjalankannya dari filekey.pl
(untuk menghindari mucking sekitar dengan urutan shell escape)echo -n q|perl -p key.pl
.Menyalahgunakan fungsi rentang regex itu menyenangkan.
sumber
echo
untuk mengontrol input - misalnya.echo -n q|perl -n key.pl
, yang menghasilkan dengan benar2
.chomp
input.chomp
mengedit input, saya tidak akan dapat mengembalikan '3' untuk kunci kembali.$_=~
untuk pertandingan,m//
(yang adalah apa/.../
) bekerja$_
secara otomatis! Juga jika Anda menggunakan-p
alih-alih,-n
Anda dapat menggunakan$_=
alih-alihprint
menyimpan beberapa byte lagi. Menggunakan baris baru literal bukannya\n
dapat menghemat byte lain juga! Itu harus mengurangi kode Anda sedikit! Mungkin layak menambahkan contoh penggunaan juga sehingga pengujian siapa pun tahu Anda perlu menggunakanecho -n
:)PHP, 173 byte
Idenya di sini adalah menggunakan regex capturing nomor grup sebagai indeks baris. Mungkin beberapa optimasi lagi di regex itu sendiri.
The
preg_match()
panggilan akan menciptakan sebuah array$m
dari pertandingan, dan jika kita mencetak itu, akan terlihat seperti ini (dengan asumsiz
itu input):Membalik array itu, dengan menukar kunci dan nilai, bergerak dari kiri ke kanan dan hanya menyimpan kunci berbeda terakhir, jadi kita berakhir dengan:
Kemudian kami menggunakan karakter input sebagai indeks dalam array untuk mendapatkan hasil kami.
Cobalah di sini .
sumber
C,
145 143 136 132 127106 byteIni menggunakanIni mengasumsikan ASCII dan 32 bit int.index()
dari POSIX.1-2001 dan sudah usang di POSIX.1-2008.sumber
Python 3, 89 byte
Karena saya belum dapat berkomentar, saya memposting peningkatan untuk jawaban Python 3 saat ini secara terpisah.
Sunting : Semua kode
print
sekarang dan lebih lanjut diubah.sumber
Ruby , 82 byte
Cobalah online!
sumber
CJam, 125 byte
Penjelasan
sumber
SpecBAS - 178 byte
Saya menggunakan string panjang di mana setiap baris panjangnya 26 karakter (# 34 adalah kode untuk kutipan ganda dan # 13 adalah kode untuk pengembalian).
Kemudian cetak hasil posisi pembulatan / 26.
sumber
C # 6, 201 byte
Tidak ada yang istimewa di sini. Saya menemukan lebih murah untuk hanya menulis kedua case daripada menggunakan ToUpper () karena lebar string yang tetap.
Bertakuk:
sumber
Python 2, 146 byte
sumber
Excel, 132 byte
=INT((FIND(A1,"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:""aaa zxcvbnm,./ZXCVBNM<>?zzzzzz ")-1)/26)+1
Mencoba menggunakan case in-sensitive
SEARCH()
bukannyaFIND()
mengungkapkan bahwa Excel cocok~
,*
dan?
to(tick). The matching of
?means we can't use
SEARCH () `, yang akan mencukur 5 byte besar ...sumber