Tantangan
Tujuan dari tantangan ini adalah untuk menentukan apakah suatu String yang diberikan dapat diketik hanya menggunakan satu baris keyboard QWERTY UK standar.
Ini code golf
, solusi terpendek dalam byte menang!
IO
Input akan berupa String tunggal nol atau lebih karakter dalam rentang ASCII desimal 32-126 inklusif. Anda dapat mengasumsikan untuk tantangan ini bahwa String kosong tidak memerlukan pengetikan dan dengan demikian dapat diketik menggunakan satu baris.
Anda dapat mengambil input sebagai String, daftar karakter, atau bentuk setara untuk bahasa Anda.
Output harus berupa nilai true untuk String apa pun yang dapat diketik menggunakan satu baris, atau falsey untuk yang tidak bisa.
Tata letak keyboard
Untuk memperjelas setiap ambiguitas tentang apa tata letak keyboard standar di bawah ini adalah daftar tombol yang tersedia di setiap baris, termasuk tombol atas alternatif (diakses menggunakan shift).
- Baris 1
- Standar:
`1234567890-=
- Standar:
- Baris 2
- Standar:
qwertyuiop[]
- Standar:
- Baris 3
- Standar:
asdfghjkl;'#
- Huruf besar:
ASDFGHJKL
- Spesial: Caps Lock
- Standar:
- Baris 4
- Standar:
\zxcvbnm,./
- Bergantian:
|<>?
- Huruf besar:
ZXCVBNM
- Spesial: Bergeser
- Standar:
- Baris 5
- Spesial: Space Bar
Tombol atas alternatif hanya dapat ditekan jika Shift juga berada di jalur yang sama, dan tombol huruf besar hanya dapat diakses melalui Caps Lock atau Shift. Anda benar-benar hanya dapat menggunakan satu baris keyboard!
Uji kasus
-> true (empty string)
45-2=43 -> true (line 1)
qwerty -> true (line 2)
tryitout -> true (line 2)
Qwerty -> false (no shift or caps on line 2)
#sad -> true (line 3)
AsDf -> true (caps lock used)
@sDF -> false (no shift for alternate upper)
zxcvbn? -> true (line 4)
zxc vbn -> false (spacebar on separate line)
123abc -> false (multiple lines)
-> true (just space bar)
!!! -> false (exclamation marks cannot be printed by a single line)
sumber
Jawaban:
Python 2 ,
130123121115 byteCobalah online!
Python 3 , 111 byte
Cobalah online!
-4 byte, terima kasih kepada nedla2004
sumber
Retina 0.8.2 ,
7271 byteCobalah online! Penjelasan: Setiap pergantian cocok dengan baris keyboard yang berbeda. Di
(?i)
tengah-tengah pola menyebabkan seluruh sisa pola dicocokkan dengan case-insensitive. Sunting: Disimpan 1 byte berkat @ KirillL.sumber
opqr
dapat diubah menjadio-r
untuk -1. Juga, apakah Anda lupa karakter backtick untuk Jalur 1, saya tidak melihatnya?[][...
:)05AB1E ,
6647 byteMengambil input sebagai daftar karakter.
-19 byte terima kasih kepada @Emigna . Benar-benar lupa kami memiliki built-in konstan qwerty-keyboard. : D
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Perl 5
-pl
, 76 byteCobalah online!
Pendekatan regex yang jelas.
sumber
Ruby
-n
,8681 byteCobalah online!
sumber
JavaScript (Node.js) ,
999895 byteCobalah online!
-1 dari komentar oleh @ Kirill L. dalam jawaban Retina.
-3 terima kasih @Ismael Miguel dan @Arnauld untuk upaya gabungan mereka.
sumber
asdfghjkl
danASDFGHJKL
di sana? Mengapa Anda tidak menggunakani
benderanyax=>/.../i.test(x)
?QWERTYUIOP
tidak harus dicocokkan oleh regex. Pemeriksaan tambahan akan lebih mahal daripada mengkode huruf-huruf besar itu langsung ke regex.x=>/^([-`=\d]+|[wetyuio-r\[\]]+)$/.test(x)||/^([asdfghjkl;'#]+|[zxcvbnm,.\/<>?\\|]+| *)$/i.test(x)
sama panjangnya|
menghemat 1 byte.\
,]
dan-
(lihat ClassAtomNoDash dalam spesifikasi). Tanda hubung juga dapat muncul tidak terhapus jika itu karakter pertama atau terakhir (jika tidak, itu ditafsirkan sebagai pemisah rentang karakter).Perl 6 ,
102 101100 byte-1 byte terima kasih kepada nwellnhof!
Cobalah online!
Implementasi standar yang cantik. Mungkin ada solusi berbasis regex yang lebih pendek untuk ini, tapi saya tidak tahu regex Perl 6 cukup baik untuk melakukan upaya.
sumber
max
sebagai gantinya?any
(danmin
bukannya?all
).m:P5//
. Tapi saya pikir keduanya tidak layak untuk dikirim sebagai jawaban.Java 10,
209208 byte-1 byte terima kasih kepada @TFeld .
Cobalah online.
Penjelasan:
sumber
!!!
meskipun tanda seru tidak dapat dicetak oleh satu baris pun. Saya baru saja menambahkan itu sebagai test case(?i)
untuk huruf besar lainnya?p==" "
alih-alihp.equals(" ")
Powershell, 87 byte
Port of Neil's Retina regex .
sumber
Jelly , 55 byte
Cobalah online!
Baris pertama menghasilkan daftar garis keyboard dan yang kedua memeriksa apakah input program terkandung pada satu baris (atau nol) dan bahwa tidak ada karakter yang tidak dapat diketik (seperti
QWE!@#
).sumber
C , 150 byte
Cobalah online!
Ini tidak akan memenangkan hadiah apa pun, tetapi ini adalah pendekatan yang menyenangkan: kami memetakan karakter pada lima baris keyboard
4 8 16 32 64
, dan setiap karakter yang tidak valid3
. Kami bitwise ATAU nilai untuk setiap karakter dalam string bersama-sama, dan memeriksa apakah hasilnya memuaskanx&(x-1) == 0
, yang benar ketikax
adalah kekuatan 2 atau nol, yaitu setiap kalix
memiliki paling banyak satu bit yang ditetapkan.sumber
LUA ,
282262259270 bytesCobalah online!
sumber
PHP, 98 byte
Saya sedikit sedih bahwa tidak ada yang lebih pendek dari regex. Itu mungkin bukan solusi tercepat.
Jalankan sebagai pipa dengan
-F
atau coba online .Solusi non-regex terpendek yang saya temukan (124 byte; linebreak dan tab untuk kenyamanan membaca):
keluar dengan kode
1
untuk kebenaran,0
untuk kepalsuan. Jalankan sebagai pipa dengan-R
.Membutuhkan PHP 5.4 atau yang lebih baru; untuk PHP yang lebih lama, gunakan
array(...)
alih-alih[...]
(+5 byte)atau gunakan 123 byte ini dengan
-nR
PHP <7:sumber
AWK ,
163119113 byteIni adalah jawaban AWK, mengembalikan string 1 numerik untuk true, 0 string untuk false. (Ditulis sebagai AWK dipanggil sebagai awk -f file untuk penggunaan interaktif.)
Cobalah online!
Namun, tidak menangani karakter TAB seperti yang tertulis (ekstensi sepele) sebagai bukan bagian dari spesifikasi.
sumber
print
sudah cukup: Cobalah secara online!{print/^[-```1234567890=]*$/||/^[]qwertyuiop\[]*$/||/^[asdfghjkl;'#ASDFGHJKL]*$/||/^[zxcvbnm,.\/\|<>?ZXCVBNM]*$/||/^ *$/}
Bash , 119 byte
Termasuk gema untuk memberikan output "dapat dibaca". Jika Anda meletakkan pembungkus shell yang sesuai (pilihan Anda) di sekitarnya untuk menyertakan print / output, maka Anda dapat menghemat 8 byte. Bacaan saya tentang tantangan menyarankan solusi harus menampilkan indikasi output yang cocok jadi saya tetap dengan 119 byte.
Cobalah online!
sumber