我正在通过平方码方法构建一个秘密消息应用程序,我需要获取字符串以形成接近完美的正方形/矩形(rxc),其中c是列数,r是数行,例如c> = r和c-r <= 1,
例如
“如果要让人类呆在地上,上帝会给我们扎根。”
被标准化为:
“ ifmanwasmeanttostathegroundgodwouldhavegivenusroots”
,并进一步组织成一个矩形,该矩形是长度的函数。 规范化的文本长54个字符,规定了一个c = 8且r = 7的矩形:
“ ifmanwas”
“ meanttos”
“停留”
“ groundgo”
“ dwouldha”
“ vegivenu”
“根”
const text = document.querySelector('#normalized_text');
const string = document.querySelector('#message');
const error = document.querySelector('#alert');
const encodeMessage = () => {
const message = string.value;
function wordCount() {
return message.split(" ").length;
}
function newMessage() {
return message.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
}
function rectangleSize() {
return Math.ceil(Math.sqrt(newMessage.length));
}
if(wordCount < 2 || message.length < 50) {
error.innerHTML = "invalid message!";
return false;
}
text.innerHTML = newMessage();
return newMessage();
}
<form>
<input type="text" placeholder="Type your secret message" id="message">
<p id="alert"></p>
<button type="button" class="button" onclick="encodeMessage()">Encode message</button>
</form>
<div class="box">
<h3>Normalised Text</h3>
<p id="normalized_text"></p>
</div>
答案 0 :(得分:0)
***经过更好的理解后进行了编辑。
这会将字符串转换为小写字母,删除所有不是a-z
或0-9
的字符,并根据归一化长度的平方根将字符串拆分为大块数组。
然后,您可以加入此数组并以等宽字体显示,并以字母间距播放以获得“正方形”的代码感觉。
function Squarinize(content) {
let normilized = content.toLocaleLowerCase().replace(/[^a-z0-9]/g, '');
let columns = Math.ceil(Math.sqrt(normilized.length));
let square = [];
for (i = 0; i < normilized.length; i += columns) {
square.push(normilized.slice(i, i + columns));
}
document.getElementById("myDiv").innerHTML = square.join('<br />');
}
window.onload = function(e) {
Squarinize('test value')
}
<div style="font-family: monospace; letter-spacing: 10px;" id="myDiv"></div>
结果:
t e s
t v a
l u e