Terinspirasi oleh tantangan ini (terima kasih @cairdcoinheringaahing untuk judulnya!), Tugas Anda adalah mengambil dua string ASCII yang dapat dicetak dan melipatgandakannya berdasarkan elemen dengan aturan berikut.
Bagaimana cara kerjanya?
Diberikan dua string (misalnya split
dan isbn
) Anda akan pertama-tama, memotong yang lebih panjang sehingga mereka memiliki panjang yang sama dan kemudian menentukan kode ASCII mereka :
split -> spli -> [115, 112, 108, 105]
isbn -> isbn -> [105, 115, 98, 110]
Langkah selanjutnya adalah memetakannya ke kisaran [0..94]
dengan mengurangi 32
masing-masing kode:
[115, 112, 108, 105] -> [83, 80, 76, 73]
[105, 115, 98, 110] -> [73, 83, 66, 78]
Sekarang Anda akan melipatgandakan modulo elemen-bijaksana mereka 95
(untuk tetap dalam kisaran yang dapat dicetak):
[83, 80, 76, 73] ⊗ [73, 83, 66, 78] -> [74, 85, 76, 89]
Tambahkan 32
untuk kembali ke rentang [32..126]
:
[74, 85, 76, 89] -> [106, 117, 108, 121]
Dan langkah terakhir adalah memetakannya kembali ke karakter ASCII:
[106, 117, 108, 121] -> "july"
Aturan
- Anda akan menulis program / fungsi yang mengimplementasikan langkah-langkah yang dijelaskan pada dua string dan mencetak atau mengembalikan string yang dihasilkan
- Format input fleksibel: Anda dapat mengambil dua string, tupel string, daftar string, dll.
- Input dapat terdiri dari satu atau dua string kosong
- Input akan berupa karakter dalam rentang yang dapat dicetak (
[32..126]
) - Outputnya dicetak ke konsol atau Anda mengembalikan string
- Outputnya dibolehkan memiliki spasi spasi tambahan
Uji kasus
"isbn", "split" -> "july"
"", "" -> ""
"", "I don't matter" -> ""
" ", "Me neither :(" -> " "
"but I do!", "!!!!!!!!!" -> "but I do!"
'quotes', '""""""' -> 'ck_iKg'
"wood", "hungry" -> "yarn"
"tray", "gzip" -> "jazz"
"industry", "bond" -> "drop"
"public", "toll" -> "fall"
"roll", "dublin" -> "ball"
"GX!", "GX!" -> "!!!"
"4 lll 4", "4 lll 4" -> "4 lll 4"
"M>>M", "M>>M" -> ">MM>"
Catatan : Kutipan hanya untuk keterbacaan, dalam test case ke-6 saya menggunakan '
sebagai ganti "
.
abc, def -> [['a', 'b', 'c'], ['d', 'e', 'f']]
Jawaban:
MATL , 12 byte
Cobalah online!
Penjelasan
sumber
Jelly ,
1512 byteCobalah online!
Terima kasih kepada Jonathan Allan .
sumber
ØṖ
,, denganz⁶O_32P€‘ịØṖ
- Anda sebaiknya mengecek apakah aritmatika berfungsi.Python 3 ,
807471 byteTerima kasih kepada @shooqie untuk bermain golf 3 byte!
Cobalah online!
sumber
(s, t)
sebagai tuple:lambda t:''.join(map(lambda x,y:chr((ord(x)-32)*(ord(y)-32)%95+32),*t))
Python 2 ,
7570 byte-3 byte berkat saran Dennis tentang saran shooqie. -2 byte berkat saran Zacharý.
Cobalah online!
sumber
lambda*t:''.join(chr(((ord(i)-32)*(ord(j)-32))%95+32)for i,j in zip(*t))
((ord(i)-32)*(ord(j)-32))%95+32
=>(ord(i)-32)*(ord(j)-32)%95+32
...map
. Saya sedikit terlambat.Haskell ,
6057 byteCobalah online!
Baris pertama adalah fungsi anonim mengambil dua argumen.
Ini merupakan implementasi langsung dari algoritma:
zipWith
mengambil kedua string dan menerapkan fungsi yang diberikan ke pasangan karakter. Ini menangani pemotongan dan juga berfungsi untuk string kosong.fromEnum
dantoEnum
merupakan alternatif untukord
danchr
untuk beralih antara karakter dan nilai ASCII mereka yang tidak memerlukan impor yang panjang.Sunting: -3 bytes terima kasih kepada Bruce Forte.
sumber
3
byte dengan menarik-32
dan menyimpan tanda kurung itu, lihat di sini .C ++,
331291282270268 byte, Versi 2 =178176150148 byteVersi asli :
-40 byte terima kasih kepada Bruce Forte
-39 byte terima kasih kepada Zacharý
Versi 2, terinspirasi oleh jawaban orang lain
Jika versi pertama menggunakan lambda, itu karena saya ingin menguji fungsi C ++ 11 std :: async yang baru saya pelajari sebelumnya, jadi saya menyimpannya tanpa alasan ...
Versi yang lebih mudah dibaca:
sumber
#include <string>
=>#include<string>
dan#include <algorithm>
=>#include<algorithm>
?string
dan menggunakannya sesuai.Dyalog APL,
3634332524 byteCoba online (TryAPL)!
Coba online (TIO)!
Input adalah daftar string, dan memiliki spasi spasi.
Begini cara kerjanya:
sumber
tryapl.org
, jadi inilah TIO untuk mereka yang ingin mencobanya.FSharp 275 byte
sumber
CJam , 23 byte
Cobalah online!
sumber
C # (.NET Core) ,
100 9695 byteCobalah online!
-4 byte terima kasih kepada @ Zacharý
-1 byte dengan menggerakkan kenaikan
Menggunakan lambda dan menyalahgunakan fakta bahwa karakter pada dasarnya int.
sumber
(l[i]-32)*(n[i]-32)%95+32
?Console
dan Anda dapat menggunakan kari untuk menyimpan byte. Kompilasi keAction<string, Action<string>>
likel=>n=>
dan panggil seperti("word")("string")
Mathematica, 114 byte
memasukkan
sumber
Ditumpuk , 52 byte
Cobalah online!
Fungsi yang mengambil dua argumen dari stack.
Penjelasan
Mari kita lihat bagian pertama, dengan asumsi dua item teratas adalah
'split'
dan'isbn'
:Bagian ini melakukan pemangkasan.
Kemudian:
Lalu, bagian terakhir:
sumber
R , 88 byte
fungsi anonim; mengambil input sebagai dua string; Argumen ketiga hanya untuk memastikan ini adalah fungsi satu baris dan menyimpan beberapa byte.
TIO link di bawah ini mengembalikan array dengan entri bernama dengan input pertama.
Coba semua test case!
sumber
Perl 5 , 65 byte
64 byte kode +
-p
bendera.Cobalah online!
sumber
D, 113 byte
Ini adalah port solusi C ++ HatsuPointerKun , jangan lupa untuk meningkatkannya!
Cobalah online!
sumber
05AB1E ,
1615 byteCobalah online!
-1 untuk Emigna yang menunjukkan
₃
dorongan95
.adalah yang lain.
sumber
₃
menghemat satu byte. Sayang sekali tentang input string kosong. Kalau tidak,ø
akan menghemat beberapa lagi.Java 8,
1271159795 bytePenjelasan:
Coba di sini.
sumber
C #, 166 byte
Saya yakin ada banyak golf yang harus dilakukan tetapi saya tidak punya waktu sekarang.
Cobalah online!
Versi Lengkap / Diformat:
sumber
(((c-32)*(t.Substring(0,l)[i]-32))%95)+32)
bisa((c-32)*(t.Substring(0,l)[i]-32)%95+32)
(mungkin mengacaukan parens di sana ... itu tampak seperti cadel!)Gangguan Umum, 99 byte
Cobalah online!
sumber
Japt , 24 byte
Mengembalikan string dengan mengekor null-chars (
\u0000
) saat input pertama lebih panjang dari yang kedua.Cobalah online! dengan
-Q
flag untuk menampilkan output yang diformat, termasuk null-chars.Jalankan semua test case menggunakan WIP CodePen saya.
sumber
Python 2 ,
9573 byteCobalah online!
sumber
(((ord(x[i])-32)*(ord(y[i])-32))%95)+32
=>(ord(x[i])-32)*(ord(y[i])-32)%95+32
Arang , 30 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Saya benar-benar menulis perhitungan
(32 - ord(q)) * (32 - ord(h))
karena itu menghindari literal angka berturut-turut tapi saya kira saya bisa saja menulis(ord(q) - ord(" ")) * (ord(h) - ord(" "))
saja.sumber
Perl 5 , 95 byte
Cobalah online!
Penjelasan:
sumber
Pip , 19 byte
Mengambil string sebagai argumen baris perintah. Cobalah online!
Penjelasan
sumber
Faktor , 45
Ini kutipan (lambda),
call
dengan dua string di stack, meninggalkan string baru di stack.Sebagai sebuah kata:
sumber
K (oK) , 26 byte
Larutan:
Cobalah online!
Contoh:
Penjelasan:
Evaluasi dilakukan dari kanan ke kiri:
sumber
PHP, 112 byte
sumber
for($i=0;$i<strlen($a=$argv[1])&&$i<strlen($b=$argv[2]);)echo chr((ord($a[$i])-32)*(ord($b[$i++])-32)%95+32);
Juga, saya tidak sepenuhnya yakin apakah mengganti&&
dengan&
mungkin juga dimungkinkan dalam PHP, menguranginya dengan byte lain menjadi 108 .JavaScript (ES6), 89 byte
Javascript dan kutukan dari nama fungsi yang panjang ...
Menggunakan currying dan fakta yang
charCodeAt
kembaliNaN
ketika dipanggil dengan posisi yang tidak valid. Mungkin ada trailing nulls di output.Uji
sumber