2024-04-12

<template>
    <div id="app">

        <div class="r9page">
            <!-- <p class="r9title">第XXX</p> -->
            <div class="r9list" v-for="(item,index) in listData">
                <div class="r9num">{{index+1}}</div>
                <div class="r9sele">
                    <span @click="clickSpan(1,index)" :style="{background: item.x0 !== undefined ? '#bbb': '' }">3 {{item.x0}}</span>
                    <span @click="clickSpan(2,index)" :style="{background: item.x1 !== undefined ? '#bbb': '' }">1 {{item.x1}}</span>
                    <span @click="clickSpan(3,index)" :style="{background: item.x2 !== undefined ? '#bbb': '' }">0 {{item.x2}}</span>
                </div>
            </div>
            <div class="r9btn">
                <!-- <span>选了<em>0</em><i class="r9tag">至少选9个</i></span> -->
                <span @click="submit()">选好了</span>{{mon}}
            </div>
        </div>
        
        <div class="r9res">
            <div class="r9table" v-for="(item,index) in combination">
                <div class="tbeNum">{{index+1}}.</div>
                <div class="tbecon">
                    <div class="tbelist" v-for="(itm,idx) in item">
                        <span v-if="itm.x0 !== undefined || itm.x1 !== undefined || itm.x2 !== undefined">
                            {{itm.x0 ? 3 : ''}} {{itm.x1 ? 1 :''}} {{itm.x2 ? 0 :''}}
                        </span>
                        <span v-else>*</span>
                    </div>
                </div>

            </div>
        </div>


    </div>
</template>

<script>

    export default {
        name: 'app',
        data(){
            return{
                listData:[{},{},{},{},{},{},{},{},{},{},{},{},{},{}],
                seleRow:[],
                combination:[],
                noSeleRow:[],
                mon:1
            }
        },
        mounted(){
            console.log(this.listData,999)
        },
        methods:{
            clickSpan(x,y){
        
                let sx = x === 1 ? 'x0' : x === 2 ? 'x1' : x === 3 ? 'x2' : ''
                if(this.listData[y][sx] !== undefined){
                                
                    delete this.listData[y][sx] 
                    console.log(this.listData,111)
                    this.fSeleSpanY(y)
                    this.$forceUpdate()
                    return
                    
                }

                this.listData[y][sx] = x
                // this.listData[y].y = y
                
                console.log(this.listData,222)
                this.fSeleSpanY(y)
                this.$forceUpdate()
            },
            fSeleSpanY(y){
                this.combination = []
                this.listData.forEach((item,index) => {
                    /* 等于1说明只有一个y的key,所以删除*/
                    if(Object.keys(item).length === 1){
                        delete this.listData[y].y 
                    }
                })
                
                this.seleRow = []
                this.noSeleRow = []
                this.listData.forEach((item,index) => {
                    /* 记录y编号与选中的x */
                    if(JSON.stringify(item) !== '{}'){
                        item.y = index
                        this.seleRow.push(item)
                    }else{
                        this.noSeleRow.push(index)
                    }
                })
                console.log(this.seleRow,'行')
            
                
            },
            /* 提交 */
            submit(){
            if(this.seleRow.length<9){
                alert('NO')
                return
            }

            this.combination = this.cmn(this.seleRow,9)
            
            
            /* 遗漏项 */
            let omit = []
            this.combination.forEach((item1,index1) => {
                omit.push(this.getNewArr(item1,this.seleRow))
            })
            
            // 指定位置插入遗漏的kong值
            this.combination.forEach((item1,index1) => {
                omit.forEach((item3,index3) => {
                    if(index1 === index3){
                        item3.forEach((item4,index4) => {
                            item1.splice(item4.y*1, 0, {
                                key:'kong'
                            });
                        })
                    }
                })
            })
            
            // 指定位置插入没选的kong值
            this.combination.forEach((item1,index1) => {  //指定位置插入值
                this.noSeleRow.forEach((item3,index3) => {
                    item1.splice(item3, 0, {
                        key:'kong'
                    });
                })
            })


            let localPar = {
                time:this.currentDate(),
                data:this.combination
            }

            let lishi = JSON.parse(localStorage.getItem('r9HistoryData')) || []
            
            lishi.push(localPar)
            
            // 只保留最近三次的数组
            if(lishi.length>3){
                lishi.splice(0,1)
            }
            
            localStorage.setItem('r9HistoryData',JSON.stringify(lishi)) 
            
            /* 计算多少种可能性 */
            let mon = 0
            
            this.combination.forEach((item0,index0) => {
                let mon3b = 0
                let mon2b = 0
                    console.log(item0,'=======')
                item0.forEach((item1,index1) => {
                    if(item1.x0 && item1.x1 && item1.x2 ){
                        
                        console.log(item1,'---333----')
                        mon3b ++ 
                    }else if((item1.x0 && item1.x1) || (item1.x0 && item1.x2) || (item1.x1 && item1.x2)){
                        console.log(item1,'---222----')
                        mon2b++
                    }
                    
                })
                mon = mon + Math.pow(3,mon3b) * Math.pow(2,mon2b)
            })
            
            this.mon = mon
                        
            console.log(this.combination,'combination')
    
            },
            
             //求:组合C(m, n),m为上标,n为下标。m选n的所有项
            cmn(m, n, currentIndex = 0, choseArr = [], result = []) {

                let mLen = m.length
                if (currentIndex + n > mLen) {
                return
                }
                for (let i = currentIndex; i < mLen; i++) {
                    if (n === 1) {
                        result.push([...choseArr, m[i]])
                        i + 1 < mLen && this.cmn(m, n, i + 1, choseArr, result)
                        break
                    }
                    this.cmn(m, n - 1, i + 1, [...choseArr, m[i]], result)
                }
                return result
            },
            
            /*筛选数组中不相同的值*/
             getNewArr(a,b){
                const arr = [...a,...b];
                return arr.filter(item => {
                    return !(a.includes(item) && b.includes(item));
                });
            },
            
            /* 获取当前时间 */
          currentDate(){
            var d = new Date();
            var year = d.getFullYear();
            var month = d.getMonth();
            month = month + 1 > 12 ? 1 : month + 1;
            month =  month > 9 ? month : "0" +month.toString();
            var day = d.getDate();
            var hour = d.getHours();
            hour = hour > 9 ? hour : "0" + hour.toString();
            var minute = d.getMinutes();
            minute = minute > 9 ? minute : "0" + minute.toString();
            var second = d.getSeconds();
            return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
          }
        }
        
    }
</script>

<style scoped="scoped">
    #app {
        font-family: 'Avenir', Helvetica, Arial, sans-serif;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
        text-align: center;
        color: #2c3e50;
    }

    .r9page {
        width: 100%;
    }
    .r9title{}
    .r9list{        
        display: flex;
        justify-content: space-evenly;
        margin-bottom: 10px;
        
        }
    .r9num{
        width: 30%;
        padding: 1px 0;
    }
    .r9sele{
        width: 70%;
        display: flex;
        justify-content: space-evenly;
        
    }
    .r9sele span{
        width: 30%;
        background: #eee;
        padding: 1px 0;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    .r9sele span:last-child{
        border-right: none;
    }
    .r9btn{
        display: flex;
        justify-content: space-between;
    }
    .r9btn span{
        width: 50%;

    }
    .r9tag{
        font-style: normal;
        display: block;
        font-size: 8px;
        color: #666;
    }
    
    
    /* table */
    .r9res{
        width: 100%;
    }
    .r9table{
        display: flex;
        align-items: center;
        height: 46px;
    }
    .r9table .tbeNum{
        font-size: 12px;
        width: 34px;
    }
    .r9table .tbelist{
        
        border-top: 1px solid #CCCCCC;
        border-right: 1px solid #CCCCCC;
        height: 100%;
        display: flex;
        align-items: center;
        
    }
    .r9table .tbecon{
        border-left: 1px solid #CCCCCC;
        
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100%;
    }
    
    .r9table:last-child .tbecon:last-child{
        
        border-bottom: 1px solid #CCCCCC;
    }
    
    .r9table .tbelist span{
        float: left;
        font-size: 12px;
        display: block;
        text-align: center;
        margin: 0 auto;
        width: 15px;
        padding: 0 3px;
        
    }
    
</style>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 中国学费最高的五所大学: 第一高→上海兴伟学院(民办): 学费 149,985元/年, 住宿费为10,000元/年...
    博学知识库阅读 748评论 0 0
  • 今天星期五。 今早呼呼5:30点就起床了,昨晚来了他一个病友住到家里了,今天早晨他俩去晨走。 我6:30点起床,简...
  • 事实是,卡夫卡终其一生,都在思考个体如何融入整体生活,并因此引发的荒诞及焦虑问题。当然,只有那些心思敏感者,才会对...
    来者2024阅读 890评论 0 3
  • 路老在第一版“作文”两个字下面写了一个字:“生”问哪位同学能认读一下这个字?同学们全都把手高高地举起来。路老师用手...
    760dcea3c989阅读 819评论 0 1
  • 在中国的古代教育史上,戒尺,作为教育工具,占据了举足轻重的地位。它的由来可以追溯到两千多年前,与古代的教育理念紧密...
    张奉哲阅读 1,131评论 0 1