首页 > 其他分享 >js. hw4

js. hw4

时间:2022-12-29 15:23:12浏览次数:50  
标签:function index js ensure result error let hw4

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

相关文章

  • nestjs 使用异常过滤器
    创建过滤器需要实现ExceptionFilter然后实现他的catch方法最后通过response.status(status).json返回(response通过host.switchToHttp().getResponse()获取)在局部使用则......
  • js 实现版本号排序
    //方法一:从左到右迭代,从高位判断,返回高位的大小结果注意:仅适用于版本号各个位的位数相同letversions=["1.45.0","1.5","6","2.3.4.5"];versions=versions.sor......
  • vue+nuxtJs+monaco制作Monaco Editor编辑器
    目录前言一、版本二、使用前配置nuxt.config.js三、使用四、附录1.kind提示图标类型2.默认action前言使用版本较低一、版本二、使用前配置nuxt.config.js实现下方......
  • [JZOJ3864]【JSOI2014】歌剧表演
    DescriptionSolution这题非常有意思。本来我想各种二进制搞一波,但我看到数据后我放弃了。。。其实这题十分的水。我们把目前分辨不出的放在同一集合。那么对于演出操作,就......
  • 随手记(五):js函数参数默认值+热更新失效问题+常见操作符
    1.js函数参数ES5写法如果函数在调用时未提供隐式参数,参数会默认设置为: undefinedfunctionmyFunction(x,y){y=y||0;}ES6写法functionmyFunction(x,......
  • 在前端js worker里使用dom并且加载jquery
    四个工具:nodejs+npmnpm安装的jsdomnpm安装的jquerynpm安装的browserify网址:browserify:https://browserify.org/jsdom:https://github.com/jsdom/jsdom/安......
  • js判断是否为空对象
    一、js判断是否为空对象https://www.cnblogs.com/sefaultment/p/9444345.html方案1:vardata={};varb=JSON.stringify(data)=="{}";alert(b);//true方案......
  • React.js 和 Spring Data REST(二)
    第2部分-超媒体控件在上一节,您了解了如何使用SpringDataREST创建后端工资单服务来存储员工数据。它缺乏的一个关键功能是使用超媒体控件和链接导航。相反,它对路径进......
  • React.js 和 Spring Data REST(三)
    第4部分-事件在上一节,您引入了条件更新以避免在编辑相同数据时与其他用户发生冲突。您还学习了如何使用乐观锁定对后端的数据进行版本控制。如果有人编辑了同一记录,您会......
  • JS 鼠标位置信息说明
    clientX鼠标相对于浏览器(这里说的是浏览器的有效区域)左上角x轴的坐标;不随滚动条滚动而改变;clientY鼠标相对于浏览器(这里说的是浏览器的有效区域)左上角y轴的坐标;不......