#D, 113 bytes <!-- language-all: lang-d --> T m(T)(T a,T b){T c;for(int i;i<(a.length<b.length?a.length:b.length);++i)c~=(a[i]-32)*(b[i]-32)%95+32;return c;} This is a port of [HatsuPointerKun's C++ solution](https://codegolf.stackexchange.com/a/133871/55550), don't forget to upvote them! [Try it online!](https://tio.run/##Ncy9DoIwFIbhmV5FF9NTQQaIgxbjTXQjDOVHPQm0pFQdCN56rQaGJ3nzneS03ks6gOQgqUokrfksaSNuxgJqR1FgASrtO313j6Je47ot523hIo6RN58LqBKrQ57xPdRr7U7HOM@E7dzT6vB7IS@DLR0UauB0JhEOo7GOTq5NAzSCRG@Lrus1DFCyiSVsDPoAA8eqpPzX71IHmlWcC7J4/wU)