Ketika saya sedang menulis angka, saya perhatikan setelah beberapa saat bahwa keyboard saya Shiftmenekan dan memblokir dan semua yang saya tulis adalah $%&
-seperti karakter. Dan lebih buruk lagi, saya telah beralih antara tata letak keyboard bahasa Inggris dan Spanyol jadi saya tidak tahu mana yang saya gunakan untuk setiap nomor.
Tantangan
Diberikan string yang berisi karakter simbol, coba tebak nomor yang saya tulis. Keyboard saya menghasilkan karakter berikut untuk angka ketika Shiftditekan:
1234567890
----------
!"·$%&/()= Spanish layout
!@#$%^&*() English layout
- Input akan berupa string non-null, non-kosong yang terdiri dari simbol di atas.
- Output akan menjadi satu nomor jika tata letak keyboard dapat disimpulkan dari string (yaitu jika string berisi
@
tata letak bahasa Inggris digunakan, dan jika string berisi"
tata letak Spanyol digunakan) atau jika nomor tersebut sama untuk kedua tata letak (yaitu input!$
yang diterjemahkan sebagai14
untuk kedua tata letak); jika tidak, output akan menjadi dua angka yang mungkin untuk kedua tata letak jika tidak dapat disimpulkan dan angka yang dihasilkan berbeda. - String input akan selalu ditulis dalam tata letak tunggal. Jadi Anda tidak perlu berharap
"@
sebagai input.
Contohnya
Input --> Output
------------------
/() 789 (Spanish layout detected by the use of /)
$%& 456,457 (Layout cannot be inferred)
!@# 123 (English layout detected by the use of @ and #)
()&! 8961,9071 (Layout cannot be inferred)
((·)) 88399 (Spanish layout detected by the use of ·)
!$ 14 (Layout cannot be inferred but the result is the same for both)
!!$$%% 114455 (Layout cannot be inferred but the result is the same for both)
==$" 0042/42 (Spanish layout, if a number starts with 0 you can choose to
omit them in the result or not)
Single character translations:
------------------------------
! 1
" 2
· 3
$ 4
% 5
& 6,7
/ 7
( 8,9
) 9,0
= 0
@ 2
# 3
^ 6
* 8
Ini adalah kode-golf , jadi semoga kode terpendek untuk setiap bahasa menang!
·
menantang ...·
tidak berguna untuk bahasa Spanyol, ini hanya digunakan dalam bahasa Catalan.{(8, 9, 6, 1), (9, 0, 7, 1)}
(untuk test case ke-4) dapat diterima?Jawaban:
Jelly ,
3231 byteCobalah online!
sumber
Python 3 , 76 byte
Cobalah online!
sumber
Perl 6 , 62 byte
Cobalah online!
Mengembalikan Set. (Bisa dibuat dua atau tiga byte lebih pendek jika tidak ada bug dalam penanganan # dalam daftar pencarian oleh Rakudo.)
sumber
Java (JDK) , 173 byte
Golf
Cobalah online!
Tidak disatukan
Array Pencarian Hashing Sihir
Setelah beberapa bereksperimen dengan nilai-nilai saya menyadari bahwa masing-masing nilai ASCII dari karakter
!"·$%&/()=@#^*
modulo 16 mengembalikan angka unik. The 'sihir hashing lookup array yang' menyimpan nomor English terkait dengan masing-masing karakter pada indeks unik, dan masing-masing dari nomor Spanyol di indeks ini diimbangi oleh 16, membuat mengambil jumlah yang diperlukan dari array sepele untuk setiap bahasa. Hash disimpan untuk nilai-nilai yang tidak valid untuk kedua bahasa.sumber
toCharArray()
dan menghitung eksponen untuk diterapkan pada nilai int membuatnya jauh lebih lama daripada kedua.contains()
pernyataan tersebut.s.equals(e)|s.contains("#")
bisas.matches(e+"|.*#.*")
.Japt, 38 byte
Output array string dengan tata letak Spanyol terlebih dahulu.
Cobalah
sumber
Jelly , 38 byte
Cobalah online!
sumber
()
atau(())
sebagai input, tetapi kode Anda tidak menghasilkan apa-apa. Saya kira itu batasan dengan apa yang diterima Jelly sebagai masukan?'()'
dan'(())'
masing - masing. Ya, jika Anda tidak mengutip argumen, itu hanya dimasukkan sebagai string jika tidak dapateval
dinotasikan ke nilai Python 3.Retina 0.8.2 , 60 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Gandakan input.
Cobalah untuk menerjemahkan setiap baris sesuai dengan tata letak keyboard yang berbeda.
Gandakan hasilnya.
Hanya pertahankan garis yang hanya mengandung digit.
sumber
m
di tahap terakhir Anda?JavaScript (ES6), 99 byte
Cobalah online!
Bagaimana?
x >= 0
sumber
05AB1E ,
4241 bytePort jawaban Jelly @dylnan .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Lihat ini 05AB1E ujung tambang (bagian Cara daftar bilangan bulat kompres? ) Untuk memahami mengapa
•Hhç₁d©u÷^Σ(“ðΣèõĆ\n-•184в
adalah[33,34,183,36,37,38,47,40,41,61,33,64,35,36,37,94,38,42,40,41]
). Ini (bersama-sama dengan2ä
) adalah 1 byte lebih pendek daripada mengambil nilai-nilai unicode string:'""!ÿ·$%&/()=""!@#$%^&*()"‚Ç
.sumber
!$
dan!!$$%%
kasing harus menghasilkan hanya satu nomor karena hasilnya sama untuk kedua tata letak dan tidak ada ambiguitas.Ruby , 68 byte
Cobalah online!
sumber
Bersih , 116 byte
Cobalah online!
Mengambil input dan dikodekan dalam CP437. TIO hanya mendukung UTF-8, jadi escape digunakan dalam kode demo untuk mendapatkan nilai byte literal 250 yang sesuai dengan titik tengah (dihitung sebagai satu byte).
sumber
!$%
masukan harus output hanya satu nomor, bukan dua, karena hasilnya adalah sama untuk kedua layout.APL (Dyalog) , 40 byte
Fungsi awalan diam-diam anonim. Meskipun tidak digunakan,
·
ada dalam set karakter byte tunggal Dyalog . Diasumsikan pengindeksan berbasis 0 (⎕IO←0
) yang default pada banyak sistem.Cobalah online!
⊂
seluruh argumen'=!"·$%&/()' ')!@#$%^&*('⍳¨
indeks karakter di masing-masing string ini{∪⍵/⍨~10∊¨⍵}
terapkan lambda berikut (⍵
adalah argumen):10∊¨⍵
untuk setiap daftar digit, apakah 10 (menunjukkan "tidak ditemukan") adalah anggota daripadanya~
negasi lokal (yaitu hanya yang memiliki semua digit ditemukan)⍵/⍨
saring argumen dengan itu∪
temukan elemen uniknyasumber
Dart , 125 byte
Tidak Terkumpul:
Cobalah di Dartpad!
sumber
T-SQL, 143 byte
Input diambil melalui tabel i yang sudah ada sebelumnya dengan bidang varchar v , sesuai standar IO kami .
Bergabung dengan tabel input dengan dua string karakter yang berbeda, kemudian gunakan fungsi SQL 2017 baru
TRANSLATE
untuk menukar karakter individu, danTRY_CAST
untuk melihat apakah kita berakhir dengan angka. Jika tidak,TRY_CAST
kembaliNULL
.Bagian luar akhir
SELECT DISTINCT
menggabungkan hasil yang identik dan menyaringNULLS
.sumber