wonsama avatar

[kr-dev] pairplay 카드 카운팅 도전 !

wonsama

Published: 20 Jun 2018 › Updated: 20 Jun 2018[kr-dev] pairplay 카드 카운팅 도전 !

[kr-dev] pairplay 카드 카운팅 도전 !

pairplay 소개

  • pairplay : 보팅 후 /hold, /change 를 통해 1 ~ 30 까지 나온 카드 값을 가지고 대결을 하는 게임 입니다.
  • 승리시 보팅을 해주는 가볍게 즐기고, 보팅도 받는 게임이죠

pairplay 카드 카운팅

  • 자 도박사들이 자주하는 카드 카운팅, 프로그램으로 함 맞춰보기를 시작합니다 !
  • 바로는 할 수 없고 19명 이상 게임에 참여 할 때 딜러의 카드가 뭘까 함 맞춰보는 것이 목표 !
  • pairplay 게임방법

덱은 하나(40장)만 사용합니다. 나눠줄 카드가 모두 떨어지게 되면(0장) 다시 새로운 덱을 사용합니다.

  • 자 이제 위 룰에 입각하여 카드 카운팅을 해보도록 합니다. ( 시간 순서별 카드 출현 정보를 나열 )
  • 18.06.02 round 2 게임 결과

pairplay.jpg

  • 핑크 : 중복
  • steemitboard : 보팅만 하고 join 하지 않음
  • 미출현 해당 댁(40) 장에서 나오지 않은 카드
처음에 딜러부터 카드 2장을 받고 이후 38장의 카드가 플레이어에게 나눠진다고 하면,
흠... 딜러카드가 (h10, h06) 이라 하는데 ... 제 생각에는 c03, h10 이 나와야 되지 않을까 ?
라고 생각하는데 ... 음 카운팅 프로그램이 잘못되었나 ? 나중에 시간되면 나중에 함 봐야 될거 같네요 ... 급조로 함 만들어 본 것인지라 ...

소스

const {getLocalTime} = require('./util/wdate');
const {getInfoFromLink} = require('./util/wsteem');

const steem = require('steem');
const dateFormat = require('dateformat');

let getAuthor = source=>{
    return source.split(' ')[0].substr(1);
}
let getCards = source=>{
    let results = [];
    let startIdx = 0;
    let f;
    while((f = source.indexOf('![', startIdx))>0){
        results.push( source.substr(f+2, 3) );
        startIdx = f + 1;
    }
    return results;
}
let getNum = (c1, c2) =>{
    c1 = Number(c1.substr(1));
    c2 = Number(c2.substr(1));

    if(c1==c2){
        return c1*2+10;
    }
    return (c1+c2)%10;
}
let findCard = arr=>{

    // init arr
    let marks = ['c','h','s','d'];  // 클로버, 하트, 스페이드, 다이아몬드
    let cards = {};
    for(let i=1;i<=10;i++){
        for(let m of marks){
            cards[`${m}${i.toString().padStart(2, "0")}`] = 0;
        }
    }
    
    // marking
    for(let item of arr){
        delete cards[item.c1];
        delete cards[item.c2];

        // cards[item.c1] = Number(cards[item.c1])+1;
        // cards[item.c2] = Number(cards[item.c2])+1;
    }

    // show card info
    console.log(`카드정보 :`);
    console.log(cards);
}

async function load(a, p){
    return await steem.api.getContentRepliesAsync(a, p);
} 

async function loadAll(link){

    let info = getInfoFromLink(link);
    let a = info.data.author;   // author
    let p = info.data.permlink; // permlink
    let results = await load(a, p);

    let p2;
    let p3 = [];
    for(let result of results){
        if(result.author=='pairplay'){
            p2 = result.permlink;
        }else if(result.children>0){
            p3.push({author:result.author, permlink:result.permlink});
        }
    }

    let cards = []; // {author, created, c1, c2}

    // p2 계산 ( depth 1 )
    let p2results = await load(a, p2);
    for(let result2 of p2results){
        // 대댓글은 pairplay1 작성한 1개만 존재, 하지만 하나에 여러줄을 포함할 수 있음
        let bodies = result2.body.split('\n');
        let created = getLocalTime(result2.created);
        for(let body of bodies){
            if(body.length>0){
                let card = getCards(body);
                let author = getAuthor(body);
                cards.push({author:author, created:created, c1:card[0], c2:card[1], num:getNum(card[0],card[1]) });
            }           
        }
    }

    // p3 계산 ( depth 2 )
    let p3arr = [];
    for(let c of p3){
        p3arr.push(load(c.author,c.permlink));
    }
    
    let p3results = await Promise.all(p3arr);
    for(let result3 of p3results){
        // 대댓글은 pairplay 작성한 1개만 존재 
        let r3 = result3[0]; 
        if(r3.body.indexOf('Changed')>=0){
            let card = getCards(r3.body);
            let author = getAuthor(r3.body);
            cards.push({author:author, created:getLocalTime(r3.created), c1:card[0], c2:card[1], num:getNum(card[0],card[1]) });
        }
    }

    // 정렬 
    cards.sort((a,b)=>{
        return a.created.getTime() - b.created.getTime();
    })

    // 인덱스 추가
    let i = 1;
    for(let c of cards){
        c.idx = i;
        i++;
    }

    // 19번까지만 추출
    let cuts = cards.slice(0,19);
    // console.log(cuts);
    findCard(cuts);

    // 모든 카드 확인용 csv 출력
    for(let c of cards){
        console.log(`${c.idx},${c.author},${c.c1},${c.c2},${c.num},${dateFormat(c.created,'yyyy-mm-dd HH:MM:ss')}`);
    }
}

let link = 'https://steemit.com/pairplay/@pairplay/20180620t045704772z-post';
loadAll(link);

맺음말

  • 솔직히 카드 카운팅 해도 별 의미는 없는거 같네여 -_-; 어짜피 참여할 거자나 !! 😁
  • 단순 보팅 - 저자보상 나눠먹기 보다, 흥미진진한 게임요소가 존재하는 게임이 좋죠 !!
  • pairplay@pairplay ( clarkgold@clarkgold ) 응원합니다 !! 아자아자 !! 흥해라 ~

이전 관련 글은 #w-dev 태그를 통해 확인하실 수 있습니다.
오늘도 행복한 하루 되세요 from wonsama@wonsama

Leave [kr-dev] pairplay 카드 카운팅 도전 ! to:

Written by

개발자 - flutter, nodejs, java, 금융권

Read more #kr posts


Best Posts From wonsama

We have not curated any of wonsama's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From wonsama