首页 > 其他分享 >js hw7

js hw7

时间:2022-12-30 16:02:00浏览次数:38  
标签:function return ++ js length let hw7 array

console.log("hw7.js");

var ensure = function(condition) {
  // 在条件不成立的时候, 输出 message
  if(!condition) {
      console.log('*** 测试失败 ')
  }
  else {
      console.log("succeed!");
  }
}

// 定义一个增强的 ensureEqual
var ensureEqual = function(a, b) {
  if (a != b) {
      console.log(`*** 测试失败, ${a} 不等于 ${b}`)
  }
  else {
      console.log("succeed!");
  }
}

function arrayEqual(a, b) {
  if (a.length != b.length) return false;
  for (let i = 0; i < a.length; i++) {
    if (a[i] != b[i]) return false;
  }
  return true;
}

// 作业 1
// 实现函数
// 多看提示多讨论
  /*
  delimiter 是 string
  array 是包含 string 的 array

  把 array 中的元素用 delimiter 连接成一个字符串并返回
  */
function join(delimiter, array) {
  let ans = '';
  for (let i = 0; i < array.length - 1; i++) {
    ans += ( array[i]+ delimiter)
  }
  ans += array[array.length - 1]
  return ans;
}

function test_join() {
  ensure(join('#', ['hello', 'gua']) == 'hello#gua')
  ensure(join(' ', ['hello', 'gua']) == 'hello gua')
  ensure(join('\n', ['multi', 'line', 'string']) == 'multi\nline\nstring')
}

// 作业 2
// 实现函数
/*
s 是 string
delimiter 是 string, 默认为空格 ' 
以 delimiter 为分隔符号, 返回一个 array
例如
split('1 2 3') 返回 ['1', '2', '3']
split('a=b&c=d', '&') 返回 ['a=b', 'c=d']
注意, 测试 array 是否相等得自己写一个函数用循环来
 0123456789
'a=bc=def'
[0, 1, 4, s.length]
(0, 1)
(1, 4)
(4, s.length)
*/
function split(s, delimiter = ' ') { 
  let l = []
  let space = delimiter.length
  let start = 0
  for(let i = 0; i < s.length; i++) {
    if (s.slice(i, i + space) === delimiter) {
        l.push(s.slice(start, i))
      start = i + space
      }
  }
  l.push(s.slice(start))
  return l
}


function test_split() {
  ensure(arrayEqual(split("abcdecfgc", 'c'), ['ab', 'de', 'fg', '']))
  ensure(arrayEqual(split("abcdecfgc", 'b'), ['a', 'cdecfgc']))
  ensure(arrayEqual(split("abcdacfgc", 'a'), ['', 'bcd', 'cfgc']))
}

// 作业 3
// 实现函数

  /*
  s old newString 都是 string
  返回一个「将 s 中出现的所有 old 字符串替换为 new 字符串」的字符串
  */
function replaceAll(s, old, newString) { 
  let s1 = split(s, old)
  let s2 = join(newString, s1)
  return s2
}



// 作业 4
// 实现函数
  /*
  n 是 int
  返回这样规律的字符串, 特殊情况不考虑
  n       返回值
  1       '1'
  2       '121'
  3       '12321'

  1-n
  (n-1)-1
  */
function str1(n) {
  let s = ''
  for (let i = 1; i <= n; i++) {
      s += String(i)
  }
  for (let i = n - 1; i > 0; i--) {
      s += String(i)
  }
  return s
}


// 作业 5
// 实现函数
 /*
  n 是 int
  返回这样规律的字符串, 特殊情况不考虑
  n       返回值
  1       'A'
  2       'ABA'
  3       'ABCBA'
  */
  // 用下标来取字符
function str2(n) {
  //n <27
  let upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  let s = ''
  // 左边
  for (let i = 0; i < n; i++) {
      s += upper[i]
  }
  // 右边, 注意下标
  for (let i = n - 2; i >= 0; i--) {
      s += upper[i]
  }
  return s
} 

// 作业 6
// 实现加法口诀表
//
function addLine(number) {
  let s = ''
  for (let i = 0; i < number; i++) {
      let n = i + 1
      s += `${number} + ${n} = ${number+n}  `
  }
  return s
}

  /*
  返回这样格式的加法口诀表(没写全, 但是要返回完整的)
  注意, 这只是我输入的内容
  实际上你普通 log 出来是不会有回车的
  [
      '1 + 1 = 2',
      '2 + 1 = 3  2 + 2 = 4',
      '3 + 1 = 4  3 + 2 = 5  3 + 3 = 6',
  ]
  */

function addTable() {

  var table = []
  for (var i = 1; i <= 9; i++) {
      var line = addLine(i)
      table.push(line)
  }
  return join('\n', table)
}

// 作业 7
// 实现函数
   /*
    start end 都是 int

    返回一个 array, 假设 start 为 1, end 为 5, 返回数据如下
    [1, 2, 3, 4]
    */
function range1(start, end) {
  let l = [];
  for (let i = start; i < end; i++) {
    l.push(i);
  }
  return l;
}
// 作业 8
// 实现函数
    /*
    start end step 都是数字
    step 是大于 0 的正整数

    返回一个 array
    假设 start=1, end=5, step=1 返回数据如下
    [1, 2, 3, 4]
    假设 start=0, end=6, step=2 返回数据如下
    [0, 2, 4]
    */

function range2(start, end, step=1) {
  let l = [];
  for (let i = start; i < end; i += step) {
    l.push(i);
  }
  return l;
}
// 作业 9
// 实现函数
// start end step 都是数字

// 和 range2 一样, 但是要求支持负数 step
// 使用 while 循环
// 返回一个 array
// 假设 start=1, end=5, step=1 返回数据如下
// [1, 2, 3, 4]
// 假设 start=6, end=0, step=-1 返回数据如下
// [6, 5, 4, 3, 2, 1]
function range3(start, end, step=1) {
  let l = [];
  for (let i = start; step > 0? i < end : i > end; i += step) {
    l.push(i);
  }
  return l;
}

// 作业 10
// 实现函数
    /*
    js 标准数学库有一个随机数函数
    Math.random()
    它返回 0 - 1 之间的小数

    用它实现本函数, 返回 0 或 1
    */
    // r 是一个 0 - 1 的小数
function random01() {
  let a = Math.random()
  return a > 0.5 ? 1 : 0;
}

// 作业 11
// 实现函数

  /*
  返回一个只包含了 0 1 的随机 array, 长度为 n
  假设 n 为 5, 返回的数据格式如下(这是格式范例, 真实数据是随机的)
  [0, 0, 1, 0, 1]
  */
function randomLine01(n) {
  let l = [];
  for (let i = 0; i < n; i++) {
    l.push(random1())
  }
  return l;
}

// 作业 12

  /*
  返回以下格式的数据
  假设 n 为 3, 返回的数据格式如下(这是格式范例, 真实数据是随机的)
  注意, 这只是一个 array, 并不是它显示的样子
  注意, 这是一个 array 不是 string
  [
      [0, 0, 1],
      [1, 0, 1],
      [0, 0, 0],
  ]
  返回, 包含了 n 个『只包含 n 个「随机 0 1」的 array』的 array
  */
function randomSquare01(n) { 
  let l = [];
  for (let i = 0; i < n; i++) {
    l.push(randomLine1());
  }
  return l;
}


// 作业 13

  /*
  返回一个只包含了 0 9 的随机 array, 长度为 n
  假设 n 为 5, 返回的数据格式如下(这是格式范例, 真实数据是随机的)
  [0, 0, 9, 0, 9]

  上上期有初学编程的同学用了一个很优雅的办法, 我就想不到
  */
  // 额外的 2 种方法
  // 1,取下标法
  // var numbers = [0, 9, 7]
  // var index = randomLine01(n)
  // var n = numbers[index]
  // 2,直接 * 9
  // var n = random01() * 9
function randomLine09(n) {
  let l = [];
  for (let i = 0; i < n; i++) {
    l.push(random01() * 9)
  }
  return l; 
}

function randomSquare09(n) {
  let l = [];
  for (let i = 0; i < n; i++) {
    l.push(randomLine09(n));
  }
  return l;
}

// 作业 14
// 更好的思路是把9左右两边的数字加一
  /*
  array 是一个只包含了 0 9 的 array
  返回一个标记过的 array
  ** 注意, 使用一个新数组来存储结果, 不要直接修改老数组
  复制数组用 array.slice(0) 实现

  标记规则如下
  对于下面这样的 array
  [0, 0, 9, 0, 9]
  标记后是这样
  [0, 1, 9, 2, 9]

  规则是, 0 会被设置为左右两边 9 的数量
  */
function markedLine(array) { 
  let a = array.slice(0);
  for (let i = 0; i < a.length; i++) {
    if (a[i] === 0) {
      if (i > 0 && i < a.length - 1) {
        if (a[i - 1] === 9 && a[i + 1] !== 9) {
          a[i] = 1;
        }
        else if (a[i - 1] === 9 && a[i + 1] === 9) {
          a[i] = 2;
        }
        else if (a[i - 1] !== 9 && a[i + 1] === 9) {
          a[i] = 1;
        }
      }
      else if (i == 0 && a[i + 1] === 9) {
        a[i] = 1;
      } 
      else if (i == a.length - 1 && a[i - 1] === 9) {
        a[i] = 1;
      }      
    }
  }
  return a;
}

// 作业 15
    /*
    array 是一个「包含了『只包含了 0 9 的 array』的 array」
    返回一个标记过的 array
    ** 注意, 使用一个新数组来存储结果, 不要直接修改老数组

    范例如下, 这是 array
    [
        [0, 9, 0, 0],
        [0, 0, 9, 0],
        [9, 0, 9, 0],
        [0, 9, 0, 0],
    ]

    这是标记后的结果
    [
        [1, 9, 2, 1],
        [2, 4, 9, 2],
        [9, 4, 9, 2],
        [2, 9, 2, 1],
    ]

    规则是, 0 会被设置为四周 8 个元素中 9 的数量
    */
function clonedSquare(array) {
      let s = []
      for (let i = 0; i < array.length; i++) {
          let line = []
          for (let j = 0; j < array[i].length; j++) {
              line.push(array[i][j])
          }
          s.push(line)
      }
      return s
  }
function markedSquare(array) { 
  let a = clonedSquare(array);
  let x = [0, 1, -1];
  let y = [0, 1, -1];
  for (let i = 0; i < a.length; i++) {
    for (let j = 0; j < a[i].length; j++) {
      if (a[i][j] == 9) {
        for (let x1 = 0; x1 < x.length; x1++) {
          for (let y1 = 0; y1 < y.length; y1++) { 
            let m = i + x[x1];
            let n = j + y[y1];
            if (m >= 0 && n >= 0 && m < a.length && n < a[i].length && a[m][n] !== 9) {
              a[m][n]++;
            }
          }
        }
      }
    }
  }
  return a;
}


标签:function,return,++,js,length,let,hw7,array
From: https://www.cnblogs.com/echoT/p/17015100.html

相关文章

  • html css js复习
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content=......
  • Docker 安装 Node.js
    Docker安装Node.jsNode.js是一个基于ChromeV8引擎的JavaScript运行环境,是一个让JavaScript运行在服务端的开发平台。Node.js使用了一个事件驱动、非阻塞式I/O的模型......
  • java 读取json文件到对象
    1、新建json文件[{"id":1,"name":"酒水专区","imageUrl":"7cf/e61b0aec87f07393.png","previewImageUrl":"/9f8d4360d3a125b5.png"},{......
  • 前端提交json对象前格式化对象数据和对象名称的方法
    1.格式化json对象名称,如把名称连接使用“_”剔除。constrenameFun=(obj)=>{lettoString=Object.prototype.toString;if(toString.call(obj)==='[object......
  • js 批量大文件上传下载
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传......
  • 静态页分页功能js代码
    <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""​​http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd​​​"><htmlxmlns="​​​http://ww......
  • 直播平台制作,JS判断某个时间戳是否为当天时间
    直播平台制作,JS判断某个时间戳是否为当天时间vue中直接在标签中判断如下(item.PostTime为发帖时间戳) <imgclass="new"src="@/assets/img/new.png"v-if="newDate(Num......
  • list转json tree的工具类
    packagecom.glodon.safety.contingency.job;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;i......
  • Js 之拖拽动画
    一、效果图 二、示例代码<!DOCTYPEhtml><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initial-scale=1">......
  • JSON学习
    1.JSON语法是JavaScript对象表示语法的子集。l 数据在名称/值对中l 数据由逗号分隔l 花括号保存对象l 方括号保存数组JSON 值可以是:l 数字(整......