testing

by Thyiad

HTML

<script src="https://unpkg.com/vue"></script>

<div id="app">
  <h3>1. 编程:断开链条</h3>
  <p>
    测试数据:<input type="text" :value="arrTest1" readonly style="width:200px;">
    <button @click="randomArrTest1">随机{{randomNum}}个数</button>
  </p>
  <p>
    取出数量:<input type="text" v-model="takeNum" @keyup.enter="doTake" style="width:200px;">
    <button @click="doTake">取出最优解</button>
  </p>
  <p>
    最优解:{{test1Optimum}}
  </p>
   <h3>2. 编程: M个最大的数</h3>
   <p>测试数据采用上面的</p>
  <p>
        取出数量:<input type="text" v-model="takeNum2" @keyup.enter="doTake2" style="width:200px;">
    <button @click="doTake2">取出最大数</button>
  </p>
    <p>
    最大数:{{test2Result.join()}}
  </p>
  <h3>3. 编程: 最大方形</h3>
  <p>
    测试数据:<textarea name="" cols="20" rows="7" :value="arr3Show" readonly></textarea>
    <select name="" id="" @change="changeTest3Data">
      <option value="0">第一个</option>
      <option value="1">第二个</option>
      <option value="2">第三个</option>
    </select>
    <button @click="takeMaxRect">取出最大方形</button>
  </p>
  <p>最大方形:{{maxRect}}</p>
  <h3>4. 编程:顺时针环绕列印矩阵元素</h3>
  <p>
    测试数据:<textarea id="rectTest4" name="" cols="20" rows="7" :value="arr4Show"></textarea>
    <button @click="takeClockwise">取出矩阵元素</button>
  </p>
  <p>矩阵元素:{{clockwise}}</p>
  <h3>5.问答题,摔iphone</h3>
  <p>这个其实就是二分算法吧,不断折中去尝试。(为什么强调2个iphone,感觉与题无关。。)假设是在顶层,那么就会有 [60, 90, 105, 112, 116, 118, 119] 共计7次的失败尝试,这个就不写了,其实就是一个递归,在限定的索引内不断尝试查找。没有上面的烧脑。。
  </p>
  <p>第一题,随着取出数量不相同,能组合的情况也存在很多种,但只要能把它们分解到最后一步,取出单个最小值就OK了。虽然解出来了,但个人并不是太满意,组合尝试的次数很多,暂时也没有想到优化的办法。</p>
  <p>第二题,不知道是不是我理解错误,只是倒序取一个数组的值吗。。</p>
  <p>第三题,路线其实就是限定了右、下两种,目标点很确定,所以优先判断一下起点和终点是否能容纳矩形,然后在路途中每走一步都判断一下是否能容纳矩形,不行就回退到上一步</p>
  <p>第四题,主要是长宽比不确定,一开始没注意,自测后加入了下、左两条线是否需要取出的判断,如果当前圈圈的终点x/y小于等于起点x/y,那么显然当前圈圈只是一条横向或者纵向的线了</p>
</div>

JavaScript

Array.prototype.max = function(){ 
return Math.max.apply({},this) 
} 
Array.prototype.min = function(){ 
return Math.min.apply({},this.filter(item=>item!=null)) 
} 
Array.prototype.sum=function(){
return eval(this.join("+"))
}

var test3List = [
      [
        [1,1,1,0],
        [1,1,1,0],
        [1,1,1,0],
        [1,1,1,1],
        [0,1,1,1],
        [1,0,1,1],
      ],
      [
        [1,1,0,0],
        [1,0,0,0],
        [0,1,0,1]
      ],
      [
        [1]
      ]
    ];

new Vue({
  el: '#app',
  data: {
    arrTest1:[],
    randomNum:10,	// 随机多少个数字 
    takeNum:3,
		arrOptimum:[],
    
    takeNum2:3,
    test2Result: [],
    
    arrTest3:test3List[0],
    pathList:[],
    failList:[],
    maxRect:null,
    
    arrTest4: [
      [2,3,4,8],
      [5,7,9,12],
    	[1,0,6,10]
    ],
    clockwise: "",
  },
  computed:{
  	test1Optimum:function(){
    	if(this.arrOptimum.length<=0){
      	return "";
      }
      
      let str = this.arrOptimum.join("+");
      return `${str} = ${this.arrOptimum.sum()}`;
    },
    arr3Show:function(){
      if(this.arrTest3.length<=0){
        return "";
      }
      
      return this.arrTest3.map(item=>{
        return item.map(_item=>_item?"true":"false").join(",")
      }).join("\n");
      
    },
    rectWidth:function(){
      return this.arrTest3[0].length;
    },
    rectHeight:function(){
      return this.arrTest3.length;
    },
    arr4Show:function(){
      if(this.arrTest4.length<=0){
        return "";
      }
      
      return this.arrTest4.map(item=>{
        return item.join(",")
      }).join("\n");
      
    },
  },
  methods:{
    
    // --------------------------------------- 第一题 ------------------------------------------------
    
  	randomArrTest1:function(){
    	let temp = [];
      while(temp.length<this.randomNum){
      	let nowRandomNum = Math.floor(Math.random()*this.randomNum*2+1);
        if(temp.indexOf(nowRandomNum)<0){
        	temp.push(nowRandomNum);
        }
      }
   ...