实现功能:
1、输入一段生物基因链,
2、输入病毒基因链,病毒基因链是个环状
3、判断是否感染
效果展示:
代码的原理用到了我上一篇文章中讲的BF穷举法,大家有疑问的可以去参考一下
那就直接上代码了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
}
h1 {
position: absolute;
top: 80px;
left: 50%;
transform: translate(-50%);
text-align: center;
}
div {
width: 400px;
height: 200px;
border: 2px solid rgb(49, 30, 225);
margin: 150px auto;
padding: 20px;
text-align: center;
box-sizing: border-box;
}
input {
width: 80%;
height: 30px;
margin-bottom: 15px;
padding-left: 10px;
}
p {
margin-top: 10px;
}
</style>
</head>
<body>
<h1>新馆病毒基因链检测</h1>
<div>
<input type="text" placeholder="请输入查询患者的基因链" class="test">
<input type="text" placeholder="请输入病毒基因链" class="vir">
<button>点击检测</button>
<p>显示结果</p>
</div>
<script>
// 获取元素
var test = document.querySelector('.test')
var vir = document.querySelector('.vir')
var btn = document.querySelector('button')
var p = document.querySelector('p')
// 病毒基因链 病毒基因链是环状的
// 把病毒的基因数列翻倍 然后依次截取一组的长度 截取n(病毒的长度)次
function start() {
// var pname = 'adsfssjhgasdsjhdgdfghfghdfghasasas' //待检测基因链
// var vname = 'asd'
var pname = test.value //待检测基因链
var vname = vir.value
// var pname = localStorage.getItem('pname') //待检测基因链
// var vname = localStorage.getItem('vname')
console.log('检测者基因链:\t'+pname);
function getVirus(str) { // str 是需要处理的病毒基因链
var str1 = str.concat(str) // 首先翻倍
let i = 0;
let j = str.length
let arr = [] // 创造新数组
//构造所有可能的病毒数组
return ((function getVirusArr(s, i) { // 形参代表 需要处理的数组
if (i >= j) {
return arr
} else {
arr.push(s.slice(i, i + j))
return getVirusArr(s, i + 1)
}
})(str1, i))
}
var vnameArr = getVirus(vname) // 接收病毒基因链的数组
console.log('病毒基因链组合:\t'); // 打印病毒基因链数组
console.log(vnameArr);
// 下面是用循环检测每一个病毒基因链
var flag = true
for (var i = 0; i < vnameArr.length; i++) {
function bf(s, t) {
let i = 0
let j = 0
var arr = []
// debugger
while (i <= s.length && j <= t.length) {
if (s[i] == t[j]) {
i++
j++
if (j > t.length - 1) {
arr.push(i - t.length)
if (i >= s.length - t.length + 1) {
return arr
}
}
} else {
i = i - j + 1
j = 0
if (i >= s.length - 1) {
return arr
}
}
}
}
let result = bf(pname, vnameArr[i])
if (result.length > 0) {
flag = false
console.log('患者已经感染,病毒基因链:' + vnameArr[i] + '\t在患者基因链中出现的位置为\t' + result);
} else {
console.log('检测者体内不存在\t' + vnameArr[i] + '\t病毒基因链');
}
}
if (flag) {
p.innerHTML = '没有感染'
} else {
p.innerHTML = '已经感染'
flag = true
}
}
//点击按键 调动检测机器(函数)
btn.onclick = function () {
start()
test.value = ''
vir.value = ''
// start()
}
</script>
</body>
</html>
编写不易,点给赞呗!