♛ rchess A Chess package for R (2024)

  • Introduction
  • Installation
  • Basic Usage
  • Load PGN and FEN
    • FEN
    • PGN
  • Validation Functions
    • State validation
    • Slatemate validation
    • Three fold repetition
    • Insufficient material
  • Helpers Functions
    • History Detail
    • Plot a boad via ggplot
    • Auxiliar Data
  • Data
    • FIDE World cups
    • Chess Openings
  • More Details
    • Under the hood
    • Session Info

Back to Top

♛ rchess A Chess package for R (1) ♛ rchess A Chess package for R (2) ♛ rchess A Chess package for R (3)

Introduction

The rchess package is a chess move, generation/validation, piece placement/movement, and check/checkmate/stalemate detection.

Installation

Via standar install:

install.packages("rchess")

Or if you want to be risky you can install the latest development version from github with:

devtools::install_github("jbkunst/rchess")

Basic Usage

chss <- Chess$new()

Check the legal next moves:

chss$moves()## [1] "a3" "a4" "b3" "b4" "c3" "c4" "d3" "d4" "e3" "e4" "f3" ## [12] "f4" "g3" "g4" "h3" "h4" "Na3" "Nc3" "Nf3" "Nh3"chss$moves(verbose = TRUE)## Source: local data frame [20 x 6]## ## color from to flags piece san## (chr) (chr) (chr) (chr) (chr) (chr)## 1 w a2 a3 n p a3## 2 w a2 a4 b p a4## 3 w b2 b3 n p b3## 4 w b2 b4 b p b4## 5 w c2 c3 n p c3## 6 w c2 c4 b p c4## 7 w d2 d3 n p d3## 8 w d2 d4 b p d4## 9 w e2 e3 n p e3## 10 w e2 e4 b p e4## 11 w f2 f3 n p f3## 12 w f2 f4 b p f4## 13 w g2 g3 n p g3## 14 w g2 g4 b p g4## 15 w h2 h3 n p h3## 16 w h2 h4 b p h4## 17 w b1 a3 n n Na3## 18 w b1 c3 n n Nc3## 19 w g1 f3 n n Nf3## 20 w g1 h3 n n Nh3

Make a move:

chss$move("a3")

We can concate some moves (and a captures)

chss$move("e5")$move("f4")$move("Qe7")$move("fxe5")
plot(chss)

Or a ggplot2 version (I know, I need to change the chess pieces symbols in unicode; maybe use a chess typeface)

plot(chss, type = "ggplot")

♛ rchess A Chess package for R (4)

There are function to get information of actual position:

chss$turn()## [1] "b"chss$square_color("h1")## [1] "light"chss$get("e5")## $type## [1] "p"## ## $color## [1] "w"chss$history(verbose = TRUE)## Source: local data frame [5 x 8]## ## color from to flags piece san captured number_move## (chr) (chr) (chr) (chr) (chr) (chr) (chr) (int)## 1 w a2 a3 n p a3 NA 1## 2 b e7 e5 b p e5 NA 2## 3 w f2 f4 b p f4 NA 3## 4 b d8 e7 n q Qe7 NA 4## 5 w f4 e5 c p fxe5 p 5chss$history()## [1] "a3" "e5" "f4" "Qe7" "fxe5"chss$undo()## $color## [1] "w"## ## $from## [1] "f4"## ## $to## [1] "e5"## ## $flags## [1] "c"## ## $piece## [1] "p"## ## $captured## [1] "p"## ## $san## [1] "fxe5"chss$history()## [1] "a3" "e5" "f4" "Qe7"chss$fen()## [1] "rnb1kbnr/ppppqppp/8/4p3/5P2/P7/1PPPP1PP/RNBQKBNR w KQkq - 1 3"

You can edit the header.

chss$header("White", "You")chss$header("WhiteElo", 1800)chss$header("Black", "Me")chss$header("Date", Sys.Date())chss$header("Site", "This R session")

Get the header

chss$get_header()## $White## [1] "You"## ## $WhiteElo## [1] "1800"## ## $Black## [1] "Me"## ## $Date## [1] "2015-11-18"## ## $Site## [1] "This R session"

And get the pgn.

cat(chss$pgn())## [White "You"]## [WhiteElo "1800"]## [Black "Me"]## [Date "2015-11-18"]## [Site "This R session"]## ## 1. a3 e5 2. f4 Qe7

Or plot the board in ascii format:

chss$ascii()## +------------------------+## 8 | r n b . k b n r |## 7 | p p p p q p p p |## 6 | . . . . . . . . |## 5 | . . . . p . . . |## 4 | . . . . . P . . |## 3 | P . . . . . . . |## 2 | . P P P P . P P |## 1 | R N B Q K B N R |## +------------------------+## a b c d e f g h

Load PGN and FEN

FEN

chssfen <- Chess$new()fen <- "rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2"chssfen$load(fen)## [1] TRUEplot(chssfen)

PGN

pgn <- system.file("extdata/pgn/kasparov_vs_topalov.pgn", package = "rchess")pgn <- readLines(pgn, warn = FALSE)pgn <- paste(pgn, collapse = "\n")cat(pgn)## [Event "Hoogovens A Tournament"]## [Site "Wijk aan Zee NED"]## [Date "1999.01.20"]## [EventDate "?"]## [Round "4"]## [Result "1-0"]## [White "Garry Kasparov"]## [Black "Veselin Topalov"]## [ECO "B06"]## [WhiteElo "2812"]## [BlackElo "2700"]## [PlyCount "87"]## ## 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Be3 Bg7 5. Qd2 c6 6. f3 b5## 7. Nge2 Nbd7 8. Bh6 Bxh6 9. Qxh6 Bb7 10. a3 e5 11. O-O-O Qe7## 12. Kb1 a6 13. Nc1 O-O-O 14. Nb3 exd4 15. Rxd4 c5 16. Rd1 Nb6## 17. g3 Kb8 18. Na5 Ba8 19. Bh3 d5 20. Qf4+ Ka7 21. Rhe1 d4## 22. Nd5 Nbxd5 23. exd5 Qd6 24. Rxd4 cxd4 25. Re7+ Kb6## 26. Qxd4+ Kxa5 27. b4+ Ka4 28. Qc3 Qxd5 29. Ra7 Bb7 30. Rxb7## Qc4 31. Qxf6 Kxa3 32. Qxa6+ Kxb4 33. c3+ Kxc3 34. Qa1+ Kd2## 35. Qb2+ Kd1 36. Bf1 Rd2 37. Rd7 Rxd7 38. Bxc4 bxc4 39. Qxh8## Rd3 40. Qa8 c3 41. Qa4+ Ke1 42. f4 f5 43. Kc1 Rd2 44. Qa7 1-0chsspgn <- Chess$new()chsspgn$load_pgn(pgn)## [1] TRUEcat(chsspgn$pgn())## [Event "Hoogovens A Tournament"]## [Site "Wijk aan Zee NED"]## [Date "1999.01.20"]## [EventDate "?"]## [Round "4"]## [Result "1-0"]## [White "Garry Kasparov"]## [Black "Veselin Topalov"]## [ECO "B06"]## [WhiteElo "2812"]## [BlackElo "2700"]## [PlyCount "87"]## ## 1. e4 d6 2. d4 Nf6 3. Nc3 g6 4. Be3 Bg7 5. Qd2 c6 6. f3 b5## 7. Nge2 Nbd7 8. Bh6 Bxh6 9. Qxh6 Bb7 10. a3 e5 11. O-O-O Qe7## 12. Kb1 a6 13. Nc1 O-O-O 14. Nb3 exd4 15. Rxd4 c5 16. Rd1 Nb6## 17. g3 Kb8 18. Na5 Ba8 19. Bh3 d5 20. Qf4+ Ka7 21. Rhe1 d4## 22. Nd5 Nbxd5 23. exd5 Qd6 24. Rxd4 cxd4 25. Re7+ Kb6## 26. Qxd4+ Kxa5 27. b4+ Ka4 28. Qc3 Qxd5 29. Ra7 Bb7## 30. Rxb7 Qc4 31. Qxf6 Kxa3 32. Qxa6+ Kxb4 33. c3+ Kxc3## 34. Qa1+ Kd2 35. Qb2+ Kd1 36. Bf1 Rd2 37. Rd7 Rxd7## 38. Bxc4 bxc4 39. Qxh8 Rd3 40. Qa8 c3 41. Qa4+ Ke1 42. f4 f5## 43. Kc1 Rd2 44. Qa7 1-0chsspgn$history()## [1] "e4" "d6" "d4" "Nf6" "Nc3" "g6" "Be3" "Bg7" ## [9] "Qd2" "c6" "f3" "b5" "Nge2" "Nbd7" "Bh6" "Bxh6" ## [17] "Qxh6" "Bb7" "a3" "e5" "O-O-O" "Qe7" "Kb1" "a6" ## [25] "Nc1" "O-O-O" "Nb3" "exd4" "Rxd4" "c5" "Rd1" "Nb6" ## [33] "g3" "Kb8" "Na5" "Ba8" "Bh3" "d5" "Qf4+" "Ka7" ## [41] "Rhe1" "d4" "Nd5" "Nbxd5" "exd5" "Qd6" "Rxd4" "cxd4" ## [49] "Re7+" "Kb6" "Qxd4+" "Kxa5" "b4+" "Ka4" "Qc3" "Qxd5" ## [57] "Ra7" "Bb7" "Rxb7" "Qc4" "Qxf6" "Kxa3" "Qxa6+" "Kxb4" ## [65] "c3+" "Kxc3" "Qa1+" "Kd2" "Qb2+" "Kd1" "Bf1" "Rd2" ## [73] "Rd7" "Rxd7" "Bxc4" "bxc4" "Qxh8" "Rd3" "Qa8" "c3" ## [81] "Qa4+" "Ke1" "f4" "f5" "Kc1" "Rd2" "Qa7"chsspgn$history(verbose = TRUE)## Source: local data frame [87 x 8]## ## color from to flags piece san captured number_move## (chr) (chr) (chr) (chr) (chr) (chr) (chr) (int)## 1 w e2 e4 b p e4 NA 1## 2 b d7 d6 n p d6 NA 2## 3 w d2 d4 b p d4 NA 3## 4 b g8 f6 n n Nf6 NA 4## 5 w b1 c3 n n Nc3 NA 5## 6 b g7 g6 n p g6 NA 6## 7 w c1 e3 n b Be3 NA 7## 8 b f8 g7 n b Bg7 NA 8## 9 w d1 d2 n q Qd2 NA 9## 10 b c7 c6 n p c6 NA 10## .. ... ... ... ... ... ... ... ...plot(chsspgn)

Validation Functions

State validation

chss2 <- Chess$new("rnb1kbnr/pppp1ppp/8/4p3/5PPq/8/PPPPP2P/RNBQKBNR w KQkq - 1 3")
plot(chss2)
chss2$in_check()## [1] TRUEchss2$in_checkmate()## [1] TRUE

Slatemate validation

chss3 <- Chess$new("4k3/4P3/4K3/8/8/8/8/8 b - - 0 78")plot(chss3)
chss3$in_stalemate()## [1] TRUE

Three fold repetition

chss4 <- Chess$new("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1")chss4$in_threefold_repetition()## [1] FALSEchss4$move('Nf3')$move('Nf6')$move('Ng1')$move('Ng8')chss4$in_threefold_repetition()## [1] FALSEchss4$move('Nf3')$move('Nf6')$move('Ng1')$move('Ng8')chss4$in_threefold_repetition()## [1] TRUEchss4$history()## [1] "Nf3" "Nf6" "Ng1" "Ng8" "Nf3" "Nf6" "Ng1" "Ng8"

Insufficient material

chss5 <- Chess$new("k7/8/n7/8/8/8/8/7K b - - 0 1")plot(chss5)
chss5$insufficient_material()## [1] TRUE

Helpers Functions

There some helper function to get more information

History Detail

This functions is a detailed version from the history(verbose = TRUE).

chsspgn$history_detail()## Source: local data frame [88 x 8]## ## piece from to number_move piece_number_move status## (chr) (chr) (chr) (int) (int) (chr)## 1 a1 Rook a1 d1 21 1 NA## 2 a1 Rook d1 d4 29 2 NA## 3 a1 Rook d4 d1 31 3 NA## 4 a1 Rook d1 d4 47 4 captured## 5 b1 Knight b1 c3 5 1 NA## 6 b1 Knight c3 d5 43 2 captured## 7 c1 Bishop c1 e3 7 1 NA## 8 c1 Bishop e3 h6 15 2 captured## 9 White Queen d1 d2 9 1 NA## 10 White Queen d2 h6 17 2 NA## .. ... ... ... ... ... ...## Variables not shown: number_move_capture (int), captured_by (chr)

Plot a boad via ggplot

You can plot a specific fen vía ggplot:

ggchessboard(chsspgn$fen())

♛ rchess A Chess package for R (5)

Auxiliar Data

There function to retrieve some data which is easier to plot:

Pieces

rchess:::.chesspiecedata()## Source: local data frame [32 x 7]## ## fen start_position name name_long color## (chr) (chr) (chr) (chr) (chr)## 1 R a1 a1 Rook White's Queen's Rook w## 2 N b1 b1 Knight White's Queen's Knight w## 3 B c1 c1 Bishop White's Queen's Bishop w## 4 Q d1 White Queen White's Queen w## 5 K e1 White King White's King w## 6 B f1 f1 Bishop White's King's Bishop w## 7 N g1 g1 Knight White's King's Knight w## 8 R h1 h1 Rook White's King's Rook w## 9 P a2 a2 Pawn White's Queen's Rook's Pawn w## 10 P b2 b2 Pawn White's Queen's Knight's Pawn w## .. ... ... ... ... ...## Variables not shown: unicode (chr), name_short (chr)

Board

rchess:::.chessboarddata()## Source: local data frame [64 x 9]## ## idcell col row x y cell cc piece text## (dbl) (chr) (int) (int) (int) (chr) (chr) (chr) (chr)## 1 1 a 1 1 1 a1 b R <U+2656>## 2 2 b 1 2 1 b1 w N <U+2658>## 3 3 c 1 3 1 c1 b B <U+2657>## 4 4 d 1 4 1 d1 w Q <U+2655>## 5 5 e 1 5 1 e1 b K <U+2654>## 6 6 f 1 6 1 f1 w B <U+2657>## 7 7 g 1 7 1 g1 b N <U+2658>## 8 8 h 1 8 1 h1 w R <U+2656>## 9 9 a 2 1 2 a2 w P <U+2659>## 10 10 b 2 2 2 b2 b P <U+2659>## .. ... ... ... ... ... ... ... ... ...

Data

The package have two data sets:

FIDE World cups

data("chesswc")str(chesswc)## Classes 'tbl_df', 'tbl' and 'data.frame': 1266 obs. of 11 variables:## $ event : chr "FIDE World Cup 2011" "FIDE World Cup 2011" "FIDE World Cup 2011" "FIDE World Cup 2011" ...## $ site : chr "Khanty-Mansiysk RUS" "Khanty-Mansiysk RUS" "Khanty-Mansiysk RUS" "Khanty-Mansiysk RUS" ...## $ date : Date, format: "2011-08-28" "2011-08-28" ...## $ round : num 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 ...## $ white : chr "Kaabi, Mejdi" "Ivanchuk, Vassily" "Ibrahim, Hatim" "Ponomariov, Ruslan" ...## $ black : chr "Karjakin, Sergey" "Steel, Henry Robert" "Mamedyarov, Shakhriyar" "Gwaze, Robert" ...## $ result : chr "0-1" "1-0" "0-1" "1-0" ...## $ whiteelo: int 2344 2768 2402 2764 2449 2746 2477 2741 2493 2736 ...## $ blackelo: int 2788 2362 2765 2434 2760 2452 2744 2480 2739 2493 ...## $ eco : chr "D15" "E68" "E67" "B40" ...## $ pgn : chr "1. d4 d5 2. Nf3 Nf6 3. c4 c6 4. Nc3 dxc4 5. e3 b5 6. a4 b4 7. Nb1 Ba6 8. Ne5 e6 9. Nxc4 c5 10. b3 cxd4 11. exd4 Nc6 12. Be3 Be7"| __truncated__ "1. c4 Nf6 2. Nc3 g6 3. g3 Bg7 4. Bg2 O-O 5. d4 d6 6. Nf3 Nbd7 7. O-O e5 8. e4 c6 9. Rb1 exd4 10. Nxd4 Re8 11. h3 Nc5 12. Re1 a5"| __truncated__ "1. Nf3 Nf6 2. c4 g6 3. Nc3 Bg7 4. g3 O-O 5. Bg2 d6 6. O-O Nbd7 7. d4 e5 8. b3 exd4 9. Nxd4 Re8 10. Bb2 Nc5 11. Qc2 h5 12. Rad1 "| __truncated__ "1. e4 c5 2. Nf3 e6 3. d3 Nc6 4. g3 e5 5. Bg2 d6 6. O-O Be7 7. c3 Nf6 8. Nbd2 O-O 9. a3 b5 10. Re1 Kh8 11. d4 Bd7 12. b4 cxd4 13"| __truncated__ ...head(chesswc)## Source: local data frame [6 x 11]## ## event site date round## (chr) (chr) (date) (dbl)## 1 FIDE World Cup 2011 Khanty-Mansiysk RUS 2011-08-28 1.1## 2 FIDE World Cup 2011 Khanty-Mansiysk RUS 2011-08-28 1.1## 3 FIDE World Cup 2011 Khanty-Mansiysk RUS 2011-08-28 1.1## 4 FIDE World Cup 2011 Khanty-Mansiysk RUS 2011-08-28 1.1## 5 FIDE World Cup 2011 Khanty-Mansiysk RUS 2011-08-28 1.1## 6 FIDE World Cup 2011 Khanty-Mansiysk RUS 2011-08-28 1.1## Variables not shown: white (chr), black (chr), result (chr), whiteelo## (int), blackelo (int), eco (chr), pgn (chr)

Chess Openings

data("chessopenings")str(chessopenings)## Classes 'tbl_df', 'tbl' and 'data.frame': 554 obs. of 4 variables:## $ eco : chr "A01" "A02" "A03" "A04" ...## $ name : chr "Irregular Opening" "Bird's Opening" "Bird's Opening" "Irregular Opening" ...## $ variant: chr "Nimzowitsch-Larsen Attack" "Bird's Opening" "Bird's Opening" "Reti Opening" ...## $ pgn : chr "1. b3" "1. f4" "1. f4 d5" "1. Nf3" ...head(chessopenings)## Source: local data frame [6 x 4]## ## eco name variant pgn## (chr) (chr) (chr) (chr)## 1 A01 Irregular Opening Nimzowitsch-Larsen Attack 1. b3## 2 A02 Bird's Opening Bird's Opening 1. f4## 3 A03 Bird's Opening Bird's Opening 1. f4 d5## 4 A04 Irregular Opening Reti Opening 1. Nf3## 5 A05 Irregular Opening Reti Opening 1. Nf3 Nf6## 6 A06 Irregular Opening Reti Opening 1. Nf3 d5

More Details

Under the hood

This package is mainly a wrapper of chessjs by jhlywa.

The main parts in this package are:

  • V8 package and chessjs javascript library.
  • R6 package for the OO system.
  • htmlwidget package and chessboardjs javascript library.

Thanks to the creators and maintainers of these packages and libraries.

Session Info

print(sessionInfo())## R version 3.2.2 (2015-08-14)## Platform: i386-w64-mingw32/i386 (32-bit)## Running under: Windows 7 (build 7601) Service Pack 1## ## locale:## [1] LC_COLLATE=Spanish_Chile.1252 LC_CTYPE=Spanish_Chile.1252 ## [3] LC_MONETARY=Spanish_Chile.1252 LC_NUMERIC=C ## [5] LC_TIME=Spanish_Chile.1252 ## ## attached base packages:## [1] stats graphics grDevices utils datasets methods base ## ## other attached packages:## [1] rchess_0.1## ## loaded via a namespace (and not attached):## [1] Rcpp_0.12.2 rstudioapi_0.3.1 knitr_1.11 ## [4] magrittr_1.5 munsell_0.4.2 colorspace_1.2-6 ## [7] R6_2.1.1 stringr_1.0.0 plyr_1.8.3 ## [10] dplyr_0.4.3 tools_3.2.2 parallel_3.2.2 ## [13] grid_3.2.2 gtable_0.1.2 DBI_0.3.1 ## [16] htmltools_0.2.6 lazyeval_0.1.10 yaml_2.1.13 ## [19] assertthat_0.1 digest_0.6.8 ggplot2_1.0.1.9003## [22] formatR_1.2.1 htmlwidgets_0.5 curl_0.9.3 ## [25] evaluate_0.8 rmarkdown_0.8.1 V8_0.9 ## [28] stringi_1.0-1 scales_0.3.0 jsonlite_0.9.17
♛ rchess A Chess package for R (2024)

FAQs

What is the chess package in R? ›

{chess} is an opinionated wrapper for R around python-chess, an amazing library created by Niklas Fiekas. It allows users to read and write PGN files as well as create and explore game trees such as the ones seen in chess books.

What does 0 0 mean in chess? ›

0-0 means king-side castling. 0-0-0 means queen-side castling. 1-0 means white won.

How to write chess notes? ›

In standard (or short form) algebraic notation, each move of a piece is indicated by the piece's uppercase letter, plus the coordinates of the destination square. For example, Be5 (bishop moves to e5), Nf3 (knight moves to f3). For pawn moves, a letter indicating pawn is not used, only the destination square is given.

Why is chess so expensive? ›

Handmade by Skilled Artisans: Another reason why luxury chess sets are so expensive is that they are often handmade by skilled artisans. Each set requires countless hours of work, and the process of making one is very labour-intensive.

What is the best chess com package? ›

Diamond is the top tier membership, unlock the full potential of Chess.com! Diamond accounts get everything Basic, Gold and Platinum accounts get PLUS: Unlimited Game Review PLUS get coach explanations on all of your moves! Access the Insights feature to see stats and data on all your games!

What is the rarest move in chess called? ›

Underpromoting to a bishop must be the rarest move in chess. We can easily think of some famous examples of rook promotions (such as the brilliant Saavedra study), and by comparison knight underpromotions happen every day - just think of this opening trap in the Albin Countergambit.

What is the number 1 rule in chess? ›

Chess Rule #1: Touch move

So here goes… the rule states that when a chess player intentionally touches one of his pieces, he or she must make a move with this piece (of course, if there is a legal move available).

What is the most risky move in chess? ›

10 Most Deadly Chess Opening Traps You Must Know: 1.King Pawn Game: Busch-Gass Gambit (C40)43
  • Benoni Defense: General (A43) ...
  • Reti Opening (A09) ...
  • Philidor Defense (C41) ...
  • Vienna Game (C27) ...
  • Sicilian Defense: Dragon Variation (B70) ...
  • Scandinavian Defense: Ilundain Variation (B01)

What is the weakest chess piece? ›

The pawn (♙, ♟) is the most numerous and weakest piece in the game of chess.

What is D in chess? ›

The initials to identify the pieces are taken from the equivalent Spanish words: R = rey (king), D = dama (queen), T = torre (rook), C = caballo (knight), A = alfil (bishop) and P = peón (pawn).

What is the 20 rule in chess? ›

No pieces can be captured and no pawns can be moved. Every 20 moves, you can remove one of your opponents pawns.

What are the chess pieces with the R? ›

The Rook. Each side starts with two rooks, one on the queenside and one on the kingside. All four rooks are located in the corners of the board.

How many pieces of R are in a chess set? ›

A chess set consists of a chessboard and white and black chess pieces for playing chess. There are sixteen pieces of each color: one king, one queen, two rooks, two bishops, two knights, and eight pawns.

What does chess do on Mac? ›

Use Chess on your Mac to play a match online, against your computer, or even against yourself.

What is chess 360? ›

Chess 360 is a variant of chess 960 in which each pawn is defended atleast once. We would like to conduct a trial tournamentof around 6 players to guage the interest of this concept from the 960 players.

Top Articles
Latest Posts
Article information

Author: Merrill Bechtelar CPA

Last Updated:

Views: 5365

Rating: 5 / 5 (70 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Merrill Bechtelar CPA

Birthday: 1996-05-19

Address: Apt. 114 873 White Lodge, Libbyfurt, CA 93006

Phone: +5983010455207

Job: Legacy Representative

Hobby: Blacksmithing, Urban exploration, Sudoku, Slacklining, Creative writing, Community, Letterboxing

Introduction: My name is Merrill Bechtelar CPA, I am a clean, agreeable, glorious, magnificent, witty, enchanting, comfortable person who loves writing and wants to share my knowledge and understanding with you.