function ensure(condition, message) {
// 在条件不成立的时候, 输出 message
if(!condition) {
console.log('*** 测试失败:', message)
}
else {
console.log('succeed!')
}
}
// 作业 1
/*
s1 s2 都是 string
但 s2 的长度是 1
返回 s2 在 s1 中的下标, 从 0 开始, 如果不存在则返回 -1
*/
function find(s1, s2) {
let index = -1;
for (let i = 0; i < s1.length; i++) {
if(s1[i] == s2) {
index = i;
break;
}
}
return index;
}
// 测试函数, 自行实现
function test_find() {
ensure(find("abcdedf", 'b') == 1, 'error')
ensure(find("abcdedf", 'c') == 2, 'error')
ensure(find("abcdedf", 'a') == 0, 'error')
}
/*
作业 2
定义一个函数
参数是一个字符串 s
返回大写后的字符串
注意, 假设 s 字符串全是小写字母
注意, 自行实现测试函数, 之后的题目都要求自行实现测试函数
*/
let lower = 'abcdefghijklmnopqrstuvwxyz'
let upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
function uppercase(s) {
let result = ""
for (let i = 0; i < s.length; i++) {
let index = find(lower, s[i])
result += upper[index]
}
return result
}
function test_uppercase() {
ensure(uppercase("abcdef") == "ABCDEF", 'error')
ensure(uppercase("abcde") == "ABCDE", 'error')
ensure(uppercase("abc") == "ABC", 'error')
}
/*
作业 3
实现 lowercase1
它能正确处理带 小写字母 的字符串
*/
function lowercase1(s) {
let result = ""
for (let i = 0; i < s.length; i++) {
let index = find(upper, s[i])
if (index > -1) {
result += lower[index]
} else {
result += s[i]
}
}
return result
}
function test_lowercase1() {
ensure(lowercase1("abCDEF") == "abcdef", 'error')
ensure(lowercase1("abcD") == "abcd", 'error')
ensure(lowercase1("ABC") == "abc", 'error')
}
/*
作业 4
实现 uppercase1
它能正确处理带 大写字母 的字符串
*/
function uppercase1(s) {
let result = ""
for (let i = 0; i < s.length; i++) {
let index = find(lower, s[i])
if (index > -1) {
result += upper[index]
} else {
result += s[i]
}
}
return result
}
function test_uppercase1() {
ensure(uppercase1("abCDEF") == "ABCDEF", 'error')
ensure(uppercase1("abcD") == "ABCD", 'error')
ensure(uppercase1("ABCccc") == "ABCCCC", 'error')
}
/*
作业 5
实现一个叫 凯撒加密 的加密算法, 描述如下
对于一个字符串, 整体移位, 就是加密
以右移 1 位为例
原始信息 'afz' 会被加密为 'bga'
实现 encode1 函数, 把明文加密成密码并返回
右移 1 位
*/
function shiftedChar(char, n) {
let index = find(upper, char)
if (index > -1) {
let newIndex = (index + n + 26) % 26
return upper[newIndex]
}
else {
index = find(lower, char)
if (index > -1) {
let newIndex = (index + n + 26) % 26
return lower[newIndex]
}
else {
return char
}
}
}
function encode1(s) {
let result = ''
for (let i = 0; i < s.length; i++) {
let c1 = s[i]
let c2 = shiftedChar(c1, 1)
result += c2
}
return result
}
function test_endoce1() {
ensure(encode1("abcde") == "bcdef", 'error')
ensure(encode1("ABC") == "BCD", 'error')
ensure(encode1("AAACCC") == "BBBDDD", 'error')
}
/*
作业 6
实现 decode1 函数, 把作业 5 加密的密码解密为明文并返回
*/
function decode1(s) {
let result = ''
for (let i = 0; i < s.length; i++) {
let c = shiftedChar(s[i], -1)
result += c
}
return result
}
function test_endoce1() {
ensure(decode1("bcdef") == "abcde", 'error')
ensure(decode1("BCD") == "ABC", 'error')
ensure(decode1("BBBDDD") == "AAACCC", 'error')
}
/*
作业 7
实现 encode2
多了一个参数 shift 表示移的位数
*/
function encode2(s, shift) {
let result = ''
for (let i = 0; i < s.length; i++) {
let c1 = s[i]
let c2 = shiftedChar(c1, shift)
result += c2
}
return result
}
function test_endoce1() {
ensure(encode2("abcde", 1) == "bcdef", 'error')
ensure(encode2("ABC", 2) == "CDE", 'error')
ensure(encode2("AAACCC", 3) == "DDDFFF", 'error')
}
/*
作业 8
实现 decode2
多了一个参数 shift 表示移的位数
*/
function decode2(s, shift) {
let result = ''
for (let i = 0; i < s.length; i++) {
let c = shiftedChar(s[i], -shift)
result += c
}
return result
}
/*
作业 9
实现 encode3
多了一个参数 shift 表示移的位数
如果 s 中包含了不是字母的字符, 比如空格或者其他符号, 则对这个字符不做处理保留原样
*/
function encode3(s, shift) {
let result = ''
for (let i = 0; i < s.length; i++) {
let c = shiftedChar(s[i], -shift)
result += c
}
return result
}
/*
作业 10
实现 decode3
多了一个参数 shift 表示移的位数
如果 s 中包含了不是字母的字符, 比如空格或者其他符号, 则对这个字符不做处理保留原样
*/
function decode3(s, shift) {
let result = ''
for (let i = 0; i < s.length; i++) {
let c = shiftedChar(s[i], -shift)
result += c
}
return result
}
/*
作业 11
知乎有一个求助题, 破译密码的
链接在此
https://www.zhihu.com/question/28324597
这一看就是凯撒加密...
如果没思路, 可看本文件最后的提示
我把密码放在下面, 请解出原文
*/
let code = 'VRPHWLPHV L ZDQW WR FKDW ZLWK BRX,EXW L KDYH QR UHDVRQ WR FKDW ZLWK BRX'
function decode4(s) {
// 不知道shift所以都试一下 看结果应该是3
for (let i = 1; i < 26; i++) {
let source = decode3(s, i)
console.log(source)
}
}
decode4(code)
标签:function,index,js,ensure,result,error,let,hw4
From: https://www.cnblogs.com/echoT/p/17012620.html