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

in #kr6 years ago

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 ( @clarkgold ) 응원합니다 !! 아자아자 !! 흥해라 ~

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

우왓~! 카드 카운팅~ 굉장하십니당~ ^^
영화 <21> 떠오르네용~ㅋㅋ

bluengel_i.jpg Created by : mipha thanks :)항상 행복한 하루 보내셔용^^ 감사합니다 ^^
'스파'시바(Спасибо스빠씨-바)~!

저도 예전에 그영화 잼나게 봤었는데 ㅋ

저도 페어플레이 하면서 이게 궁금했어요. 이제 20번은 해본 거 같은데, 딜러 점수가 6 이하인걸 한번도 본 적 없는 것 같거든요.. 그래서 딜러 카드는 적어도 7점이상이 나오게 뽑는다, 이런 룰이 있지 않을까 했습니다.

음... 정확하진 않지만 ... 그럴지도? 하지만 뭐 즐기는 게임이니... 넘 고민은 않해도 될것 같아요

pairplay 가 kr-dev 컨텐츠를 응원합니다! :)

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.032
BTC 63241.83
ETH 3086.26
USDT 1.00
SBD 3.82