8 비트 체스 픽셀 카운팅


20

당신은 컴퓨터 화 된 체스 게임을하고 있습니다. 디스플레이는 흑백으로 만 표시되며 픽셀은 청키합니다. 흰색 픽셀은 검은 색 픽셀에 비해 많은 전력을 사용하며 탄소 발자국이 걱정됩니다.

체스 표기법에서 정사각형과 조각이 주어지면 정사각형에 표시된 흰색 픽셀 수를 반환하십시오.

해결책은 기능 또는 완전한 프로그램의 형태 일 수 있습니다.

입력

다음을 정의하는 4 자 문자열 :

  1. wb흰색 또는 검은 색 조각 중 하나입니다 . (일반적인 체스 표기법의 일부는 아니지만이 퍼즐에 필요합니다.)
  2. KQBNRP킹, 퀸, 비숍, 나이트, 루크 또는 폰 중 하나입니다 .
  3. abcdefgh작품 파일 (열) 중 하나입니다 .
  4. 12345678조각의 순위 중 하나입니다 (행).

산출

체스 조각과 기본 사각형을 그리는 데 사용되는 흰색 픽셀 수입니다.

요구 사항

  • 체스 사각형은 8x8 픽셀이며 모두 흰색이거나 모두 검은 색입니다.
  • a1 검은 사각형입니다.
  • 흰색 체스 조각은 검은 윤곽선이있는 흰색으로 그려집니다. 검은 조각은 흰색 윤곽선이있는 검은 색입니다. 모든 조각에는 기본 정사각형을 나타내는 투명한 픽셀이 있습니다.
  • 입력은 대소 문자를 구분합니다.
  • 입력이 유효하다고 가정하십시오.

체스 조각에는 다음과 같은 스프라이트가 있습니다.
.작품의 색상입니다.
#조각 색상의 역수입니다.
/기본 사각형의 색상입니다.

King        Queen       Bishop  
////////    ////////    ////////
///#.#//    /#.#.#.#    ///#.#//
//#...#/    //#...#/    //##..#/
///#.#//    ///###//    //#.#.#/
///###//    //#...#/    ///###//
//#...#/    //#...#/    //#...#/
//#...#/    //#...#/    //#...#/
//#.#.#/    //#.#.#/    //#.#.#/

kNight      Rook        Pawn    
////////    ////////    ////////
////////    /#.#.#.#    ////////
//#..#//    /#.....#    ////////
/#....#/    /##...##    ///#.#//
///#..#/    //#...#/    //#...#/
//#..#//    //#...#/    ///#.#//
//#...#/    //#...#/    //#...#/
//#...#/    //#...#/    //#...#/

각 조각의 조각 색상, 조각 개요 및 기본 사각형의 픽셀 수는 다음과 같습니다.

Piece    Fill  Outline  Square
==============================
King     13    16       35
Queen    17    18       29
Bishop   13    18       33
Knight   16    12       36
Rook     23    18       23
Pawn     11    10       43

테스트 사례

Input  Output
wRa1   23
bRa1   18
wPc2   54
bKg8   51

채점

성탄절까지 가장 짧은 바이트 코드는 스타킹에 약간의 여유가 있습니다.

답변:


2

Pyth, 54 53 바이트

이 코드에는 인쇄 할 수없는 문자가 포함되어 있으므로 뒤집을 수있는 xxd16 진수 덤프는 다음과 같습니다.

0000000: 732a 562b 5f57 2543 687a 322c 3031 2573  s*V+_W%Chz2,01%s
0000010: 434d 7474 7a32 4063 434d 2e22 0a2b 011e  CMttz2@cCM.".+..
0000020: d699 71d0 c6dc 3db8 eeae 2233 252a 4368  ..q...=..."3%*Ch
0000030: 747a 5433 31                             tzT31

또는 다음은 온라인 에서 복사 하거나 테스트 스위트를 사용할 수있는 복사 붙여 넣기 친화적 인 버전입니다 .

s*V+_W%Chz2,01%sCMttz2@cCM."\n+\x01\x1e\xd6\x99q\xd0\xc6\xdc=\xb8\xee\xae"3%*ChtzT31

6

C # 6, 107 바이트

여기 내 자신의 답변이 있습니다. 나는 도전을 제기 한 사람이 될 것이라고 기대하지 않습니다.

user81655의 답변 에서 영감을 얻었습니다 .

long P(string a)=>(a[0]>99?12201284685:11042628752)+(a[2]+a[3])%2*46566348643>>"KQBNRP".IndexOf(a[1])*6&63;

픽셀 수는 6 비트 블록으로 인코딩됩니다. 윤곽선 또는 채우기가 사각형에 추가됩니다 (흰색 인 경우). 마지막으로 적절한 조각에 대한 6 비트 블록이 추출됩니다.

고맙게도, 운영 우선 순위는 제게 유리하게 작용했습니다.


5

자바 스크립트 (ES6), 106

익명의 기능으로.

x=>(o=+'137999'[p='PNKBQR'.search(x[1])],f=+'262149'[p]+p,(parseInt(x[2]+x[3],19)%2?9:55-f-o)+(x>'w'?f:o))

지금까지 나는 계산으로 답을 찾는 가장 간단한 방법을 따르고 있습니다. 이것이 최선의 방법은 아닙니다.

검은 사각형 위에 답은 흰색 조각의 채우기 크기와 검은 조각의 윤곽 크기입니다. 흰색 사각형 위에 여유 공간을 추가해야합니다. 아래의 스 니펫 내부 표 참조

각 조각에 대한 채우기 및 윤곽의 크기를 유지하면 사각형 내부의 여유 공간을 64에서 뺀 값을 찾을 수 있습니다. 공간을 절약하기 위해 윤곽선을 한 자리 afer at subtracing 9로 저장합니다. 범위가 넓을수록 채우기가 더 까다로워집니다 , 코드를 확인하십시오 (그 방법은 점유 공간별로 조각이 정렬되는 방식입니다)

테스트 스 니펫 :

F=x=>(
  o=+'137999'[p='PNKBQR'.search(x[1])], // get outline - 9
  f=+'262149'[p]+p, // get fill -9
  (
    parseInt(x[2]+x[3],19) // parse with an odd base the differentiate between odd and even rows
    %2?9:55-f-o // black square if odd,, white if even so calc free space
  ) +(x>'w'?f:o) // add fill or outline based on piece color
)

// Test suite

console.log=x=>O.innerHTML+=x+'\n'

for(i=0; z='PNKBQR'[i]; i++)
{
  o = '';
  t = 'w'+z+'c2'; // white piece, white square
  o += t+' '+F(t)+', '
  t = 'b'+z+'c2'; // black piece, white square
  o += t+' '+F(t)+', '
  t = 'w'+z+'a1'; // white piece, black square
  o += t+' '+F(t)+', '
  t = 'b'+z+'a1'; // black piece, black square
  o += t+' '+F(t)
  console.log(o);
}
<pre>
Piece    Fill  Outline  Free  w/w b/w w/b b/b
=============================================
Pawn     11    10       43     54  53  11  10
Knight   16    12       36     52  48  16  12
King     13    16       35     48  51  13  16
Bishop   13    18       33     46  51  13  18
Queen    17    18       29     46  47  17  18
Rook     23    18       23     46  41  23  18
</pre>    
<pre id=O></pre>


3

자바 스크립트 (ES6) 135 112 바이트

s=>(c={K:`\u000a\u0010\u0023`,Q:`\u0011\u0012\u001d`,B:`\u000a\u0012\u0021`,N:`\u0010\u000c\u0024`,R:`\u0017\u0012\u0017`,P:`\u000b\u000a\u002b`}[s[1]])[f="charCodeAt"](s<"w")+((s[f](2)-s[3])%2&&c[f](2))

모든 \u00xx문자는 1 바이트 문자 여야합니다. Stack Exchange는 게시물에서 읽을 수없는 문자를 자동으로 제거하기 때문에 여기에서 코드로 표시됩니다.

설명

s=>

  // c = string of three (mostly unreadable) characters, the ASCII code of each character
  //     represents the number of pixels in the fill, outline and square respectively
  (c={
    K:`\u000a\u0010\u0023`,
    Q:`\u0011\u0012\u001d`,
    B:`\u000a\u0012\u0021`,
    N:`\u0010\u000c\u0024`,
    R:`\u0017\u0012\u0017`,
    P:`\u000b\u000a\u002b`
  }[s[1]])

  [f="charCodeAt"](s<"w") // if piece is black add outline pixels, else add fill pixels
  +((s[f](2)-s[3])%2      // this returns 1 if the square is white or 0 if black
    &&c[f](2))            // if the square is white add the square's pixels

테스트


1

루아, 158155 바이트

c,p,l,n=(...):byte(1,4)m="KQBNRP"d={}d[1]={13,17,13,16,23,11}d[0]={16,18,18,12,18,10}p=m:find(string.char(p))print(d[c%2][p]+(l+n)%2*(64-d[0][p]-d[1][p]))

아마도 데이터를 인코딩하여 바이트 수를 줄일 수는 있지만 현재 테이블 방법과 비슷합니다.

사각형의 색은 ASCII 값 'w'또는 'b'를 기준으로합니다. 하나는 짝수이고 하나는 홀수라는 사실을 이용합니다. m문자열 변수 에서 조각의 기호 위치를 기준으로 조각의 정수 값을 할당 합니다. (l+n)%2ASCII 값을 다시 활용 하여 사각형이 어둡거나 밝은 지 여부를 처리 합니다.

언 골프

c,p,l,n=(...):byte(1,4)   --stores input of all characters into variables
m="KQBNRP"                --piece encoded string
d={}                      --data table
d[1]={13,17,13,16,23,11}  --fill
d[0]={16,18,18,12,18,10}  --outline
p=m:find(string.char(p))  --position in string for position in tables
print(d[c%2][p] +         --takes data element from corresponding table according to color of piece and type of piece
     (l+n)%2  *           --is square black or white? 0 if back, 1 if white
     (64-d[0][p]-d[1][p]) --if white, pixels not used by piece would be area (64) minus pixels used by piece, or corresponding data in the tables
     )

제거하여 바이트 -3 c=c%2전과 print및 사용 d[c%2][p]대신 d[c][p].

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.