/* primitives cut for peg solitaire LED display */
# include <stdio.h>
// m# include "wtf.h"
/* */
# define WTF 32768
int serial_putc(char c, FILE *)
{
Serial.write(c);
return c;
}
void printf_begin(void)
{
fdevopen(&serial_putc, 0);
}
char temp[32];
void stripSetup(void);
void solveIt(void);
void setup() {
Serial.begin(115200);
printf_begin();
printf("Hello Peg Solitaire World!\n");
printf("That's All Folks! %x\n", 57005);
stripSetup();
}
void loop() {
reset(0);
solveIt();
delay(477);
reset(1);
solveIt();
delay(477);
// for (; ; ) {}
}
# include <Adafruit_NeoPixel.h>
# define PIN 8
;// game size!
# define NNEOS 31 // 61
// 24 on a stick Adafruit_NeoPixel strip = Adafruit_NeoPixel(NNEOS, PIN, NEO_GRB + NEO_KHZ800);
// 61 on a stick Adafruit_NeoPixel strip = Adafruit_NeoPixel(NLAMPS, PIN, NEO_GRBW + NEO_KHZ800);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NNEOS, PIN, NEO_GRB + NEO_KHZ800);
void stripSetup()
{
strip.begin();
for (int ii = 0; ii < NNEOS; ii++)
strip.setPixelColor(ii, 0x010101);
strip.show();
delay(333);
}
// mostly pegsol2.c
unsigned char toggle = 0;
// full board# define N2 (NNEOS / 2) // number of blue pegs 15 / 2 = 7, 7 + 1 + 7 = 15
// didnt we do merging snakes?
# define N2 15
# define N (N2 << 1) // you tell me
# define NSLOTS (N + 1)
unsigned char blue[N2]; // blue peg locations
unsigned char red[N2]; // you tell me
unsigned char theBoard[NSLOTS];
unsigned char theHole;
void reset(unsigned char left)
{
if (left) {
for (int ii = 0; ii < N2; ii++) {
blue[ii] = N2 - ii - 1;
red[ii] = N2 + 1 + ii;
}
}
else {
for (int ii = 0; ii < N2; ii++) {
red[ii] = N2 - ii - 1;
blue[ii] = N2 + 1 + ii;
}
}
/*
printf("\n");
for (int ii = 0; ii < N2; ii++)
printf("%d ", blue[ii]);
printf(" and ");
for (int ii = 0; ii < N2; ii++)
printf("%d ", red[ii]);
printf("\n");
*/
theHole = N2;
}
void loadBoard()
{
for (int ii = 0; ii < NSLOTS; ii++)
theBoard[ii] = 0;
for (int ii = 0; ii < N2; ii++) {
theBoard[blue[ii]] = 1;
theBoard[red[ii]] = 2;
}
}
//
# define THIRTEEN 0
void stripBoard()
{
for (int ii = 0; ii < NNEOS; ii++)
strip.setPixelColor(ii, 0x010101);
strip.setPixelColor(theHole + THIRTEEN, 0x080808);
for (int ii = 0; ii < N2; ii++) {
strip.setPixelColor(blue[ii] + THIRTEEN, 0x0404d0);
strip.setPixelColor(red[ii] + THIRTEEN, 0xa8080c);
}
strip.show();
}
void printBoard()
{
loadBoard();
// printf("\n");
for (int ii = 0; ii < NSLOTS; ii++)
printf("%c", theBoard[ii] ? ((theBoard[ii] == 1) ? 'R' : 'B') : '_');
// printf("\n");
stripBoard();
delay(266);
}
void printMove(int color, int rank) /*AndDo*/
{
static int counter = 0;
counter++;
printf(" Move %2d : %s %d\n", counter, color ? "dime" : "cent", rank);
/**/
if (color == 0) { /* red move */
unsigned char temp = red[rank];
red[rank] = theHole;
theHole = temp;
}
else { /* blue move */
unsigned char temp = blue[rank];
blue[rank] = theHole;
theHole = temp;
}
printBoard();
}
//int N2;
void solveIt()
{
// printf("S O L V I N G\n");
// reset();
printBoard();
// printf("\nSolving %d\n\n", N2);
for (int ii = 1; ii <= N2; ii++) {
for (int jj = 0; jj < ii; jj++)
printMove(toggle, jj);
toggle = 1 - toggle;
}
for (int jj = 0; jj < N2; jj++)
printMove(toggle, jj);
toggle = 1 - toggle;
for (int ii = N2; ii >= 1; ii--) {
for (int jj = N2 - ii; jj < N2; jj++)
printMove(toggle, jj);
toggle = 1 - toggle;
}
}
ON/OFF
ON
OFF
15 just now