如何在矩形中显示字符串

时间:2019-06-21 22:38:32

标签: javascript html

我正在通过平方码方法构建一个秘密消息应用程序,我需要获取字符串以形成接近完美的正方形/矩形(rxc),其中c是列数,r是数行,例如c> = r和c-r <= 1,

例如

“如果要让人类呆在地上,上帝会给我们扎根。”

被标准化为:

“ ifmanwasmeanttostathegroundgodwouldhavegivenusroots”

,并进一步组织成一个矩形,该矩形是长度的函数。 规范化的文本长54个字符,规定了一个c = 8且r = 7的矩形:

“ ifmanwas”

“ meanttos”

“停留”

“ groundgo”

“ dwouldha”

“ vegivenu”

“根”

代码:

JS:

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();
}

HTML:

<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>

1 个答案:

答案 0 :(得分:0)

***经过更好的理解后进行了编辑。

这会将字符串转换为小写字母,删除所有不是a-z0-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