Bitcoin Forum
May 07, 2024, 04:31:49 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: [1]
1  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: February 03, 2018, 04:52:15 PM

Awesome! I had trouble being convinced that narrow/wide flames were a data stream since some flames seemed ambiguous to me, but turns out it was! That's where I spun off, sadly. Really fun puzzle, and honestly it came to be an iconic cryptocurrency puzzle that gave people a lot of enjoyment and knowledge. You should be really proud coinartist!
2  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: January 29, 2018, 06:24:30 PM
regarding the infrared effect (Night vision) the rabbit mentioned that idea just to group the flames which may imply that evey flame you can see with infrared is a real flame (1) the others (0)
when you apply the infrared effect (which means you can see at night without any light) then the image looks like this: (Green colour is dominant)
https://imgur.com/a/tQC0W

that particular effect doesnt do a great job of bringing much out.. one thing i noticed is that if you do a simple invert operation in gimp, the background to the flames comes out as a row of more standard-looking flames, with the white-orange-red sort of coloring..

https://imgur.com/a/YItrz

These types of analyses seem futile to me. She painted this particular painting by hand. I don't see infrared effects or other filters being useful here. If anything, this is a puzzle about correctly interpreting symbolism.

Symbolism and all of these cloud reading efforts are futile, in my opinion. Whatever is hidden, and however it is hidden, is likely encoded in a way that is not open to interpretation or ambiguity. Or at least that's how I would design it. What is the least ambiguous element of the puzzle in my opinion? The colors of the flames, and whether or not they are tall or short. The orange squat flames are ambiguous, I'd say. Along with the thick/thin angle people are going for.
3  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: January 15, 2018, 11:43:18 PM
When read according to the drips clockwise, the very start of the decode you get the following word relevant to the painting:
*MPSRI*
Prism.

Can you please elaborate on this? I've been trying to explore decoding via this method over the past day or so, but I haven't had much luck. I also do not understand how DNA/RNA codons are supposed to be paired (I mean obviously in groups of three, but how are you proposing those groups of three be created?). I wrote some more, fairly badly executed, code that can decode the flames based on the amino acids (posted below) and I've tried reading the flames in all sorts of ways, But haven't found anything interesting..., So I'm curious by what you mean according to the drips?


For anyone who wants it.., although I'm sure you could do better, here is my shitty code. To use it for DNA/RNA decypher: ./debacon -f filename -D | less

The File must be a text file containing no more then 16 lines. Also, It doesn't recognize dna/rna codons via the letters atcg or aucg, but instead c is either b or p (depending if you wanna call the color purple or blue), a is o (for orange, maybe it's red, but I think the flames look orange), t or u is y (for yellow), and g is still g (for green)

Sample input for a track of flames: ypygygogyp

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void shift(char* string);
int getlines(FILE* stream, char** line, ssize_t* nread, int* ntot, size_t len);
char* normalize(char* string, int nflag);
void clean(char* string);
void divideString(char* string, int n);
void debacon(char* string, int btype);
void flip(char* string);
void deHex(char* string);
void deRNA(char* string);
int verbose = 0;


int main(int argc, char* argv[]){
FILE* scram;
int opt;
int fcheck = 0;
int nflag = 0;
int btype = 0;
int bitflip = 0;
char** line = malloc(sizeof(char *) * 16);
int i = 0;
int j = 0;
int k = 0;
size_t len = 0;
ssize_t nread[16];
int ntot = 0;
char buffer[1024];
char temp[1024];
int runBacon = 0;
int runHex = 0;
int runDNA = 0;

while((opt = getopt(argc, argv, "hvf:a:n:i:HBD")) != -1){
switch(opt){
case 'h':
printf("\nUSAGE: ./decode -f path_to_input_file type_of_decode options\n");
printf("OPTIONS: -f [FILENAME] to specify input file\n");
printf("OPTIONS: -v for verbose mode\n");
printf("OPTIONS: -a [a or b] to specify which type of bacon alphebet (Bacon Cypher Only)\n");
printf("OPTIONS: -n [0 or 1 or 2 or 3] to specify how the bitstring should be read\n");
printf("OPTIONS: -i [t or f] to specify how 0's and 1's are read from the bitstring\n");
printf("OPTIONS: -B for Bacon Cypher\n");
printf("OPTIONS: -H for HEX conversion\n");
printf("OPTIONS: -D for DNA RNA Stop Codon Cypher\n");
printf("OPTIONS: -h displays this menu\n");
printf("\nEXAMPLE: ./decode -f file -B -a b -n 2 -i f -v\n");
exit(EXIT_SUCCESS);
case 'f':
scram = fopen(optarg, "r");
fcheck = 1;
break;
case 'v':
printf("\nTurning on Verbose Mode...\n");
verbose = 1;
break;
case 'a':
if(optarg[0] == 'a' || optarg[0] == 'A'){
btype = 0;
} else if(optarg[0] == 'b' || optarg[0] == 'B'){
btype = 1;
} else{
printf("\nERROR: Invalid argument for for -a option, must be a or b\n");
exit(EXIT_FAILURE);
}
break;
case 'n':
if(atoi(optarg) < 4){
nflag = atoi(optarg);
} else{
printf("\nERROR: Invalid argument for -n option, must be 0, 1, 2, or 3\n");
}
break;
case 'i':
if(optarg[0] == 't' || optarg[0] == 'T'){
bitflip = 1;
}
break;
case 'B':
if(runHex == 1){
printf("\nERROR: Cannot run Bacon Cypher and Hex conversion together\n");
exit(EXIT_FAILURE);
} else if(runDNA == 1){
printf("\nERROR: Cannot run Bacon Cypher and DNA RNA conversion together\n");
exit(EXIT_FAILURE);
} else{
runBacon = 1;
}
break;
case 'H':
if(runBacon == 1){
printf("\nERROR: Cannot run Bacon Cypher and Hex conversion together\n");
exit(EXIT_FAILURE);
} else if(runDNA== 1){
printf("\nERROR: Cannot run DNA RNA Cypher and Hex conversion together\n");
exit(EXIT_FAILURE);
} else{
runHex = 1;
}
break;
case 'D':
if(runHex == 1){
printf("\nERROR: Cannot run Hex conversion and DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else if(runBacon == 1){
printf("\nERROR: Cannot run Bacon Cypher and DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else{
runDNA = 1;
}
break;
default:
printf("ERROR: Unrecognized option, try -h\n");
exit(EXIT_FAILURE);
}
}

if(fcheck == 0){
printf("ERROR: Must specify input file, try -h\n");
exit(EXIT_FAILURE);
} else if(argc <=3){
printf("ERROR: Must specify -H, -B, or -D.., try -h for help\n");
}

i = getlines(scram, line, nread, &ntot, len);

if(verbose == 1){
for(j = 0; j < i; j++){
printf("Retrieved line of length %zu:\n", nread[j]);
printf("line %i is: %s\n", j, line[j]);
}
printf("Total Characters Read: %i\n\n", ntot);
j = 0;
}

if(runDNA == 1){
for(j = 0; j < i; j++){
line[j] = normalize(line[j], 8);
}
j = 1;
strcpy(buffer, line[0]);
for(j = 1; j < i; j++){
strcat(buffer, line[j]);
}

if(verbose == 1){
printf("\nCombined String: %s\n", buffer);
}

for(k = 0; k <= strlen(buffer); k++){
divideString(buffer, 3);
if(verbose == 1){
printf("\nString split into 3's for decoding:\n");
printf("%s\n", buffer);
printf("\nDNA RNA Cypher Decode\n");
}
deRNA(buffer);
shift(buffer);
}
for(j = 0; j <= i; j++){
free(line[j]);
}
fclose(scram);
return 0;
}

for(j = 0; j < i; j++){
        if(verbose == 1){
                printf("Normalizeing line %i\n", j);
                }
                if(bitflip == 1){
                flip(line[j]);
                }
                line[j] = normalize(line[j], nflag);
                if(verbose == 1){
                printf("Line %i is now: %s\n", j, line[j]);
                }
}
       
        j = 1;
        strcpy(buffer, line[0]);
        for(j = 1; j < i; j++){
        strcat(buffer, line[j]);
        }
       
        if(verbose == 1){
        printf("\nCombined String: %s\n", buffer);
        }


if(runBacon == 1){
for(k = 0; k <= strlen(buffer); k++){
divideString(buffer, 5);
if(verbose == 1){
printf("\nString split into 5's for decoding:\n");
printf("%s\n", buffer);

printf("\nDebaconing:\n");
}
debacon(buffer, btype);

shift(buffer);
}
}

if(runHex == 1){
for(k = 0; k <= strlen(buffer); k++){
if(strlen(buffer)%4 != 0){
switch(strlen(buffer)%4){
case 1:
temp[0] = '0';
temp[1] = '0';
temp[2] = '0';
temp[3] = '\0';
strcat(temp, buffer);
break;
case 2:
temp[0] = '0';
temp[1] = '0';
temp[2] = '\0';
strcat(temp, buffer);
break;
case 3:
temp[0] = '0';
temp[1] = '\0';
strcat(temp, buffer);
break;
default:
printf("Something bad happened...\n");
break;
}
} else{
strcpy(temp, buffer);
}
divideString(temp, 4);
if(verbose == 1){
printf("\nString split into 4's\n");
printf("%s\n", temp);
printf("\nConverting to Hex:\n");
}
deHex(temp);
clean(temp);
shift(buffer);

}
}
j = 0;
for(j = 0; j <= i; j++){
free(line[j]);
}
free(line);
fclose(scram);
return 0;
}

void flip(char *string){
char *i;
for(i=string; *i; i++){
if(*i == '1'){
*i = '0';
} else if(*i == '0'){
*i = '1';
}
}
}

void deRNA(char *string){
char buffer[4];
int i = 0;

while(string[i] != '\0'){
buffer[0] = string[i];
i++;
buffer[1] = string[i];
i++;
buffer[2] = string[i];
buffer[3] = '\0';
i+=2;

if(strcmp(buffer, "yyy") == 0 || strcmp(buffer, "YYY") == 0 || strcmp(buffer, "ttt") == 0 || strcmp(buffer, "TTT") == 0 || strcmp(buffer, "uuu") == 0 || strcmp(buffer, "UUU") == 0){
printf("F");
} if(strcmp(buffer, "yyp") == 0 || strcmp(buffer, "YYP") == 0 || strcmp(buffer, "yyb") == 0 || strcmp(buffer, "YYB") == 0){
printf("F");
} if(strcmp(buffer, "yyo") == 0 || strcmp(buffer, "YYO") == 0){
printf("L");
} if(strcmp(buffer, "yyg") == 0 || strcmp(buffer, "YYG") == 0){
printf("L");
} if(strcmp(buffer, "pyy") == 0 || strcmp(buffer, "PYY") == 0 || strcmp(buffer, "byy") == 0 || strcmp(buffer, "BYY") == 0){
printf("L");
} if(strcmp(buffer, "pyp") == 0 || strcmp(buffer, "PYP") == 0 || strcmp(buffer, "byb") == 0 || strcmp(buffer, "BYB") == 0){
printf("L");
} if(strcmp(buffer, "pyo") == 0 || strcmp(buffer, "PYO") == 0 || strcmp(buffer, "byr") == 0 || strcmp(buffer, "BYR") == 0){
printf("L");
} if(strcmp(buffer, "pyg") == 0 || strcmp(buffer, "PYG") == 0 || strcmp(buffer, "pyg") == 0 || strcmp(buffer, "PYG") == 0){
printf("L");
} if(strcmp(buffer, "oyy") == 0 || strcmp(buffer, "OYY") == 0){
printf("I");
} if(strcmp(buffer, "oyp") == 0 || strcmp(buffer, "OYP") == 0 || strcmp(buffer, "ryb") == 0 || strcmp(buffer, "RYB") == 0){
printf("I");
} if(strcmp(buffer, "oyo") == 0 || strcmp(buffer, "OYO") == 0){
printf("I");
} if(strcmp(buffer, "oyg") == 0 || strcmp(buffer, "OYG") == 0){
printf(" - M - ");
} if(strcmp(buffer, "gyy") == 0 || strcmp(buffer, "GYY") == 0){
printf("V");
} if(strcmp(buffer, "gyp") == 0 || strcmp(buffer, "GYP") == 0 || strcmp(buffer, "gyb") == 0 || strcmp(buffer, "GYB") == 0){
printf("V");
} if(strcmp(buffer, "gyo") == 0 || strcmp(buffer, "GYO") == 0){
printf("V");
} if(strcmp(buffer, "gyg") == 0 || strcmp(buffer, "GYG") == 0){
printf("V");
} if(strcmp(buffer, "ypy") == 0 || strcmp(buffer, "YPY") == 0 || strcmp(buffer, "yby") == 0 || strcmp(buffer, "YBY") == 0){
printf("S");
} if(strcmp(buffer, "ypp") == 0 || strcmp(buffer, "YPP") == 0 || strcmp(buffer, "ybb") == 0 || strcmp(buffer, "YBB") == 0){
printf("S");
} if(strcmp(buffer, "ypo") == 0 || strcmp(buffer, "YPO") == 0 || strcmp(buffer, "ybr") == 0 || strcmp(buffer, "YBR") == 0){
printf("S");
} if(strcmp(buffer, "ypg") == 0 || strcmp(buffer, "YPG") == 0 || strcmp(buffer, "ybg") == 0 || strcmp(buffer, "YBG") == 0){
printf("S");
} if(strcmp(buffer, "ppy") == 0 || strcmp(buffer, "PPY") == 0 || strcmp(buffer, "bby") == 0 || strcmp(buffer, "BBY") == 0){
printf("P");
} if(strcmp(buffer, "ppp") == 0 || strcmp(buffer, "PPP") == 0 || strcmp(buffer, "bbb") == 0 || strcmp(buffer, "BBB") == 0){
printf("P");
} if(strcmp(buffer, "ppo") == 0 || strcmp(buffer, "PPO") == 0 || strcmp(buffer, "bbr") == 0 || strcmp(buffer, "BBR") == 0){
printf("P");
} if(strcmp(buffer, "ppg") == 0 || strcmp(buffer, "PPG") == 0 || strcmp(buffer, "bbg") == 0 || strcmp(buffer, "BBG") == 0){
printf("P");
} if(strcmp(buffer, "opy") == 0 || strcmp(buffer, "OPY") == 0 || strcmp(buffer, "rby") == 0 || strcmp(buffer, "RBY") == 0){
printf("T");
} if(strcmp(buffer, "opp") == 0 || strcmp(buffer, "OPP") == 0 || strcmp(buffer, "rbb") == 0 || strcmp(buffer, "RBB") == 0){
printf("T");
} if(strcmp(buffer, "opo") == 0 || strcmp(buffer, "OOO") == 0 || strcmp(buffer, "rbr") == 0 || strcmp(buffer, "RBR") == 0){
printf("T");
} if(strcmp(buffer, "opg") == 0 || strcmp(buffer, "OPG") == 0 || strcmp(buffer, "rbg") == 0 || strcmp(buffer, "RBG") == 0){
printf("T");
} if(strcmp(buffer, "gpy") == 0 || strcmp(buffer, "GPY") == 0 || strcmp(buffer, "gby") == 0 || strcmp(buffer, "GBY") == 0){
printf("A");
} if(strcmp(buffer, "gpp") == 0 || strcmp(buffer, "GPP") == 0 || strcmp(buffer, "gbb") == 0 || strcmp(buffer, "GBB") == 0){
printf("A");
} if(strcmp(buffer, "gpo") == 0 || strcmp(buffer, "GPO") == 0 || strcmp(buffer, "gbr") == 0 || strcmp(buffer, "GBR") == 0){
printf("A");
} if(strcmp(buffer, "gpg") == 0 || strcmp(buffer, "GPG") == 0 || strcmp(buffer, "gbg") == 0 || strcmp(buffer, "GBG") == 0){
printf("A");
} if(strcmp(buffer, "yoy") == 0 || strcmp(buffer, "YOY") == 0){
printf("Y");
} if(strcmp(buffer, "yop") == 0 || strcmp(buffer, "YOP") == 0 || strcmp(buffer, "yrb") == 0 || strcmp(buffer, "YRB") == 0){
printf("Y");
} if(strcmp(buffer, "yoo") == 0 || strcmp(buffer, "YOO") == 0){
printf(" STOP ");
} if(strcmp(buffer, "yog") == 0 || strcmp(buffer, "YOG") == 0){
printf(" STOP ");
} if(strcmp(buffer, "poy") == 0 || strcmp(buffer, "POY") == 0 || strcmp(buffer, "bry") == 0 || strcmp(buffer, "BRY") == 0){
printf("H");
} if(strcmp(buffer, "pop") == 0 || strcmp(buffer, "POP") == 0 || strcmp(buffer, "brb") == 0 || strcmp(buffer, "BRB") == 0){
printf("H");
} if(strcmp(buffer, "poo") == 0 || strcmp(buffer, "POO") == 0 || strcmp(buffer, "brr") == 0 || strcmp(buffer, "BRR") == 0){
printf("Q");
} if(strcmp(buffer, "pog") == 0 || strcmp(buffer, "POG") == 0 || strcmp(buffer, "brg") == 0 || strcmp(buffer, "BRG") == 0){
printf("Q");
} if(strcmp(buffer, "ooy") == 0 || strcmp(buffer, "OOY") == 0){
printf("N");
} if(strcmp(buffer, "oop") == 0 || strcmp(buffer, "OOP") == 0 || strcmp(buffer, "rrb") == 0 || strcmp(buffer, "RRB") == 0){
printf("N");
} if(strcmp(buffer, "ooo") == 0 || strcmp(buffer, "OOO") == 0){
printf("K");
} if(strcmp(buffer, "oog") == 0 || strcmp(buffer, "OOG") == 0){
printf("K");
} if(strcmp(buffer, "goy") == 0 || strcmp(buffer, "GOY") == 0){
printf("D");
} if(strcmp(buffer, "gop") == 0 || strcmp(buffer, "GOP") == 0 || strcmp(buffer, "grb") == 0 || strcmp(buffer, "GRB") == 0){
printf("D");
} if(strcmp(buffer, "goo") == 0 || strcmp(buffer, "GOO") == 0){
printf("E");
} if(strcmp(buffer, "gog") == 0 || strcmp(buffer, "GOG") == 0){
printf("E");
} if(strcmp(buffer, "ygy") == 0 || strcmp(buffer, "YGY") == 0){
printf("C");
} if(strcmp(buffer, "ygp") == 0 || strcmp(buffer, "YGP") == 0 || strcmp(buffer, "ygb") == 0 || strcmp(buffer, "YGB") == 0){
printf("C");
} if(strcmp(buffer, "ygo") == 0 || strcmp(buffer, "YGO") == 0){
printf(" STOP ");
} if(strcmp(buffer, "ygg") == 0 || strcmp(buffer, "YGG") == 0){
printf("W");
} if(strcmp(buffer, "pgy") == 0 || strcmp(buffer, "PGY") == 0 || strcmp(buffer, "bgy") == 0 || strcmp(buffer, "BGY") == 0){
printf("R");
} if(strcmp(buffer, "pgp") == 0 || strcmp(buffer, "PGP") == 0 || strcmp(buffer, "bgb") == 0 || strcmp(buffer, "BGB") == 0){
printf("R");
} if(strcmp(buffer, "pgo") == 0 || strcmp(buffer, "PGO") == 0 || strcmp(buffer, "bgr") == 0 || strcmp(buffer, "BGR") == 0){
printf("R");
} if(strcmp(buffer, "pgg") == 0 || strcmp(buffer, "PGG") == 0 || strcmp(buffer, "bgg") == 0 || strcmp(buffer, "BGG") == 0){
printf("R");
} if(strcmp(buffer, "ogy") == 0 || strcmp(buffer, "OGY") == 0){
printf("S");
} if(strcmp(buffer, "ogp") == 0 || strcmp(buffer, "OGP") == 0 || strcmp(buffer, "rgb") == 0 || strcmp(buffer, "RGB") == 0){
printf("S");
} if(strcmp(buffer, "ogo") == 0 || strcmp(buffer, "OGO") == 0){
printf("R");
} if(strcmp(buffer, "ogg") == 0 || strcmp(buffer, "OGG") == 0){
printf("R");
} if(strcmp(buffer, "ggy") == 0 || strcmp(buffer, "GGY") == 0){
printf("G");
} if(strcmp(buffer, "ggp") == 0 || strcmp(buffer, "GGP") == 0 || strcmp(buffer, "ggb") == 0 || strcmp(buffer, "GGB") == 0){
printf("G");
} if(strcmp(buffer, "ggo") == 0 || strcmp(buffer, "GGO") == 0){
printf("G");
} if(strcmp(buffer, "ggg") == 0 || strcmp(buffer, "GGG") == 0){
printf("G");
} else{
printf(" ");
}
}
printf("\n");
}

void deHex(char *string){
char buffer[5];
int i = 0;

while(string[i] != '\0'){
buffer[0] = string[i];
i++;
buffer[1] = string[i];
i++;
buffer[2] = string[i];
i++;
buffer[3] = string[i];
buffer[4] = '\0';
i+=2;

if(strcmp(buffer, "0000") == 0){
printf("0");
} else if(strcmp(buffer, "0001") == 0){
printf("1");
} else if(strcmp(buffer, "0010") == 0){
printf("2");
} else if(strcmp(buffer, "0011") == 0){
printf("3");
} else if(strcmp(buffer, "0100") == 0){
printf("4");
} else if(strcmp(buffer, "0101") == 0){
printf("5");
} else if(strcmp(buffer, "0110") == 0){
printf("6");
} else if(strcmp(buffer, "0111") == 0){
printf("7");
} else if(strcmp(buffer, "1000") == 0){
printf("8");
} else if(strcmp(buffer, "1001") == 0){
printf("9");
} else if(strcmp(buffer, "1010") == 0){
printf("A");
} else if(strcmp(buffer, "1011") == 0){
printf("B");
} else if(strcmp(buffer, "1100") == 0){
printf("C");
} else if(strcmp(buffer, "1101") == 0){
;printf("D");
} else if(strcmp(buffer, "1110") == 0){
printf("E");
} else if(strcmp(buffer, "1111") == 0){
printf("F");
} else{
printf(" ");
}
}
printf("\n");
}

void debacon(char *string, int btype){
char buffer[6];
int i = 0;

while(string[i] != '\0'){

buffer[0] = string[i];
i++;
buffer[1] = string[i];
i++;
buffer[2] = string[i];
i++;
buffer[3] = string[i];
i++;
buffer[4] = string[i];
buffer[5] = '\0';
i+=2;

if(btype == 0){
if(strcmp(buffer, "00000") == 0){
printf("A");
} else if(strcmp(buffer, "00001") == 0){
printf("B");
} else if(strcmp(buffer, "00010") == 0){
printf("C");
} else if(strcmp(buffer, "00011") == 0){
printf("D");
} else if(strcmp(buffer, "00100") == 0){
printf("E");
} else if(strcmp(buffer, "00101") == 0){
printf("F");
} else if(strcmp(buffer, "00110") == 0){
printf("G");
} else if(strcmp(buffer, "00111") == 0){
printf("H");
} else if(strcmp(buffer, "01000") == 0){
printf("J");
} else if(strcmp(buffer, "01001") == 0){
printf("K");
} else if(strcmp(buffer, "01010") == 0){
printf("L");
} else if(strcmp(buffer, "01011") == 0){
printf("M");
} else if(strcmp(buffer, "01100") == 0){
printf("N");
} else if(strcmp(buffer, "01101") == 0){
printf("O");
} else if(strcmp(buffer, "01110") == 0){
printf("P");
} else if(strcmp(buffer, "01111") == 0){
printf("Q");
} else if(strcmp(buffer, "10000") == 0){
printf("R");
; } else if(strcmp(buffer, "10001") == 0){
printf("S");
} else if(strcmp(buffer, "10010") == 0){
printf("T");
} else if(strcmp(buffer, "10011") == 0){
printf("V");
} else if(strcmp(buffer, "10100") == 0){
printf("W");
} else if(strcmp(buffer, "10101") == 0){
printf("X");
} else if(strcmp(buffer, "10110") == 0){
printf("Y");
} else if(strcmp(buffer, "10111") == 0){
printf("Z");
} else{
printf(" ");
}
}
if(btype == 1){
if(strcmp(buffer, "00000") == 0){
printf("A");
} else if(strcmp(buffer, "00001") == 0){
printf("B");
} else if(strcmp(buffer, "00010") == 0){
printf("C");
} else if(strcmp(buffer, "00011") == 0){
printf("D");
} else if(strcmp(buffer, "00100") == 0){
printf("E");
} else if(strcmp(buffer, "00101") == 0){
printf("F");
} else if(strcmp(buffer, "00110") == 0){
printf("G");
} else if(strcmp(buffer, "00111") == 0){
printf("H");
} else if(strcmp(buffer, "01000") == 0){
printf("I");
} else if(strcmp(buffer, "01001") == 0){
printf("J");
} else if(strcmp(buffer, "01010") == 0){
printf("K");
} else if(strcmp(buffer, "01011") == 0){
printf("L");
} else if(strcmp(buffer, "01100") == 0){
printf("M");
} else if(strcmp(buffer, "01101") == 0){
printf("N");
} else if(strcmp(buffer, "01110") == 0){
printf("O");
} else if(strcmp(buffer, "01111") == 0){
printf("P");
} else if(strcmp(buffer, "10000") == 0){
printf("Q");
} else if(strcmp(buffer, "10001") == 0){
printf("R");
} else if(strcmp(buffer, "10010") == 0){
printf("S");
} else if(strcmp(buffer, "10011") == 0){
printf("T");
} else if(strcmp(buffer, "10100") == 0){
printf("U");
} else if(strcmp(buffer, "10101") == 0){
printf("V");
} else if(strcmp(buffer, "10110") == 0){
printf("W");
} else if(strcmp(buffer, "10111") == 0){
printf("X");
} else if(strcmp(buffer, "11000") == 0){
printf("Y");
} else if(strcmp(buffer, "11001") == 0){
printf("Z");
} else{
printf(" ");
}
}
}
printf("\n");
}

void divideString(char *string, int n){
int size = strlen(string);
int i = 1;
int j = 1;
char buffer[1024];

strcpy(buffer,string);
string[0] = buffer[0];

for(i = 1; j < size; i++){
if(j%n == 0){
string[i] = ' ';
i++;
}
string[i] = buffer[j];
j++;
}
string[i] = '\0';
}

char* normalize(char* string, int nflag){
char *i;
switch(nflag){
case 0:
for(i=string; *i; i++){
if(*i == 'y' || *i == 'Y'){
*i = '1';
} else if(*i == 'o' || *i == 'O'){
*i = '0';
} else if(*i == 'g' || *i == 'G'){
*i = '1';
} else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
*i = '0';
} else if(*i == '\n'){
*i = '\0';
}
}
return string;
case 1:
for(i=string; *i; i++){
if(*i == 'y' || *i == 'Y'){
*i = '0';
} else if(*i == 'o' || *i == 'O'){
*i == '1';
} else if(*i == 'g' || *i == 'G'){
*i = '1';
} else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
*i = '0';
} else if(*i == '\n'){
*i == '\0';
}
}
return string;
case 2:
for(i=string; *i; i++){
if(*i == 'y' || *i == 'Y'){
*i = '1';
} else if(*i == 'o' || *i == 'O'){
*i = '0';
} else if(*i == 'g' || *i == 'G'){
*i == '0';
} else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
*i == '1';
} else if(*i == '\n'){
*i = '\0';
}
}
return string;
case 3:
for(i=string; *i; i++){
if(*i == 'y' || *i == 'Y'){
*i = '0';
} else if(*i == 'o' || *i == 'O'){
*i = '1';
} else if(*i == 'g' || *i == 'G'){
*i = '0';
} else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
*i = '1';
} else if(*i == '\n'){
*i = '\0';
}
}
return string;
; case 8:
for(i=string; *i; i++){
if(*i == '\n'){
*i = '\0';
}
}
return string;
default:
printf("\nERROR: Could not normalize stirng\n");
return string;
}
}

int getlines(FILE* stream, char** line, ssize_t* nread, int* ntot, size_t len){
int i = 0;
for(i = 0; i < 16; i++){
nread[i] = getline(&line[i], &len, stream);
if(nread[i] == -1){
break;
}
*ntot += nread[i];
}

return i;
}

void clean(char* string){
char *nospace = string;
char *temp = string;

        if(verbose == 1){
        printf("\nRemoving Spaces\n");
}
while(*temp != 0){
*nospace = *temp++;
if(*nospace != ' '){
nospace++;
}
}
*nospace = 0;
}

void shift(char* string){
char *nospace = string;
char *temp = string;
char buffer[1024];

char t;
int i = 0;
int size;

if(verbose == 1){
printf("\nRemoving Spaces\n");
}
while(*temp != 0){
*nospace = *temp++;
if(*nospace != ' '){
nospace++;
}
}
*nospace = 0;
if(verbose == 1){
printf("\n%s\n", string);
printf("\nShifting String\n");
}
strcpy(buffer, string);
if(verbose == 1){
printf("Buffer: \n%s\n\n", buffer);
}
t = string[0];
size = strlen(string);
for(i = 0; i < (size-1); i++){
string[i] = buffer[i+1];
}
string[i] = t;
string[i+1] = '\0';
if(verbose == 1){
printf("%s\n", string);
}
}

There is also this
https://www.nature.com/polopoly_fs/7.38631.1472212682!/image/DNA_storage_graphic_WEB.jpg_gen/derivatives/landscape_630/DNA_storage_graphic_WEB.jpg

Took a look at this. There's a problem with this kind of rotating encoding though.
https://images.techhive.com/images/article/2016/04/screen-shot-2016-04-11-at-12.37.07-pm-100655391-orig.png

It's built so you never have "repeats" of a DNA element. (A will never follow A).
In the flames, you have repeats of up to 3 flames in a row. So it doesn't match the data.
It could be a modified version, though, some kind of quaternary rotating encoding.
4  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: January 10, 2018, 01:50:45 AM

Quote
ah I see, yes, makes more sense! So I guess we are looking for ATG as the starting point?

I'm going to play with this now though, thank you!

Depends. Did the author start the encoding the way real proteins would start? Any flame could be a reasonable start point depending how things were encoded.
5  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: January 10, 2018, 01:39:44 AM
When read according to the drips clockwise, the very start of the decode you get the following word relevant to the painting:
*MPSRI*
Prism.

Can you please elaborate on this? I've been trying to explore decoding via this method over the past day or so, but I haven't had much luck. I also do not understand how DNA/RNA codons are supposed to be paired (I mean obviously in groups of three, but how are you proposing those groups of three be created?). I wrote some more, fairly badly executed, code that can decode the flames based on the amino acids (posted below) and I've tried reading the flames in all sorts of ways, But haven't found anything interesting..., So I'm curious by what you mean according to the drips?


For anyone who wants it.., although I'm sure you could do better, here is my shitty code. To use it for DNA/RNA decypher: ./debacon -f filename -D | less

The File must be a text file containing no more then 16 lines. Also, It doesn't recognize dna/rna codons via the letters atcg or aucg, but instead c is either b or p (depending if you wanna call the color purple or blue), a is o (for orange, maybe it's red, but I think the flames look orange), t or u is y (for yellow), and g is still g (for green)

Sample input for a track of flames: ypygygogyp

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void shift(char* string);
int getlines(FILE* stream, char** line, ssize_t* nread, int* ntot, size_t len);
char* normalize(char* string, int nflag);
void clean(char* string);
void divideString(char* string, int n);
void debacon(char* string, int btype);
void flip(char* string);
void deHex(char* string);
void deRNA(char* string);
int verbose = 0;


int main(int argc, char* argv[]){
FILE* scram;
int opt;
int fcheck = 0;
int nflag = 0;
int btype = 0;
int bitflip = 0;
char** line = malloc(sizeof(char *) * 16);
int i = 0;
int j = 0;
int k = 0;
size_t len = 0;
ssize_t nread[16];
int ntot = 0;
char buffer[1024];
char temp[1024];
int runBacon = 0;
int runHex = 0;
int runDNA = 0;

while((opt = getopt(argc, argv, "hvf:a:n:i:HBD")) != -1){
switch(opt){
case 'h':
printf("\nUSAGE: ./decode -f path_to_input_file type_of_decode options\n");
printf("OPTIONS: -f [FILENAME] to specify input file\n");
printf("OPTIONS: -v for verbose mode\n");
printf("OPTIONS: -a [a or b] to specify which type of bacon alphebet (Bacon Cypher Only)\n");
printf("OPTIONS: -n [0 or 1 or 2 or 3] to specify how the bitstring should be read\n");
printf("OPTIONS: -i [t or f] to specify how 0's and 1's are read from the bitstring\n");
printf("OPTIONS: -B for Bacon Cypher\n");
printf("OPTIONS: -H for HEX conversion\n");
printf("OPTIONS: -D for DNA RNA Stop Codon Cypher\n");
printf("OPTIONS: -h displays this menu\n");
printf("\nEXAMPLE: ./decode -f file -B -a b -n 2 -i f -v\n");
exit(EXIT_SUCCESS);
case 'f':
scram = fopen(optarg, "r");
fcheck = 1;
break;
case 'v':
printf("\nTurning on Verbose Mode...\n");
verbose = 1;
break;
case 'a':
if(optarg[0] == 'a' || optarg[0] == 'A'){
btype = 0;
} else if(optarg[0] == 'b' || optarg[0] == 'B'){
btype = 1;
} else{
printf("\nERROR: Invalid argument for for -a option, must be a or b\n");
exit(EXIT_FAILURE);
}
break;
case 'n':
if(atoi(optarg) < 4){
nflag = atoi(optarg);
} else{
printf("\nERROR: Invalid argument for -n option, must be 0, 1, 2, or 3\n");
}
break;
case 'i':
if(optarg[0] == 't' || optarg[0] == 'T'){
bitflip = 1;
}
break;
case 'B':
if(runHex == 1){
printf("\nERROR: Cannot run Bacon Cypher and Hex conversion together\n");
exit(EXIT_FAILURE);
} else if(runDNA == 1){
printf("\nERROR: Cannot run Bacon Cypher and DNA RNA conversion together\n");
exit(EXIT_FAILURE);
} else{
runBacon = 1;
}
break;
case 'H':
if(runBacon == 1){
printf("\nERROR: Cannot run Bacon Cypher and Hex conversion together\n");
exit(EXIT_FAILURE);
} else if(runDNA== 1){
printf("\nERROR: Cannot run DNA RNA Cypher and Hex conversion together\n");
exit(EXIT_FAILURE);
} else{
runHex = 1;
}
break;
case 'D':
if(runHex == 1){
printf("\nERROR: Cannot run Hex conversion and DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else if(runBacon == 1){
printf("\nERROR: Cannot run Bacon Cypher and DNA RNA Cypher together\n");
exit(EXIT_FAILURE);
} else{
runDNA = 1;
}
break;
default:
printf("ERROR: Unrecognized option, try -h\n");
exit(EXIT_FAILURE);
}
}

if(fcheck == 0){
printf("ERROR: Must specify input file, try -h\n");
exit(EXIT_FAILURE);
} else if(argc <=3){
printf("ERROR: Must specify -H, -B, or -D.., try -h for help\n");
}

i = getlines(scram, line, nread, &ntot, len);

if(verbose == 1){
for(j = 0; j < i; j++){
printf("Retrieved line of length %zu:\n", nread[j]);
printf("line %i is: %s\n", j, line[j]);
}
printf("Total Characters Read: %i\n\n", ntot);
j = 0;
}

if(runDNA == 1){
for(j = 0; j < i; j++){
line[j] = normalize(line[j], 8);
}
j = 1;
strcpy(buffer, line[0]);
for(j = 1; j < i; j++){
strcat(buffer, line[j]);
}

if(verbose == 1){
printf("\nCombined String: %s\n", buffer);
}

for(k = 0; k <= strlen(buffer); k++){
divideString(buffer, 3);
if(verbose == 1){
printf("\nString split into 3's for decoding:\n");
printf("%s\n", buffer);
printf("\nDNA RNA Cypher Decode\n");
}
deRNA(buffer);
shift(buffer);
}
for(j = 0; j <= i; j++){
free(line[j]);
}
fclose(scram);
return 0;
}

for(j = 0; j < i; j++){
        if(verbose == 1){
                printf("Normalizeing line %i\n", j);
                }
                if(bitflip == 1){
                flip(line[j]);
                }
                line[j] = normalize(line[j], nflag);
                if(verbose == 1){
                printf("Line %i is now: %s\n", j, line[j]);
                }
}
       
        j = 1;
        strcpy(buffer, line[0]);
        for(j = 1; j < i; j++){
        strcat(buffer, line[j]);
        }
       
        if(verbose == 1){
        printf("\nCombined String: %s\n", buffer);
        }


if(runBacon == 1){
for(k = 0; k <= strlen(buffer); k++){
divideString(buffer, 5);
if(verbose == 1){
printf("\nString split into 5's for decoding:\n");
printf("%s\n", buffer);

printf("\nDebaconing:\n");
}
debacon(buffer, btype);

shift(buffer);
}
}

if(runHex == 1){
for(k = 0; k <= strlen(buffer); k++){
if(strlen(buffer)%4 != 0){
switch(strlen(buffer)%4){
case 1:
temp[0] = '0';
temp[1] = '0';
temp[2] = '0';
temp[3] = '\0';
strcat(temp, buffer);
break;
case 2:
temp[0] = '0';
temp[1] = '0';
temp[2] = '\0';
strcat(temp, buffer);
break;
case 3:
temp[0] = '0';
temp[1] = '\0';
strcat(temp, buffer);
break;
default:
printf("Something bad happened...\n");
break;
}
} else{
strcpy(temp, buffer);
}
divideString(temp, 4);
if(verbose == 1){
printf("\nString split into 4's\n");
printf("%s\n", temp);
printf("\nConverting to Hex:\n");
}
deHex(temp);
clean(temp);
shift(buffer);

}
}
j = 0;
for(j = 0; j <= i; j++){
free(line[j]);
}
free(line);
fclose(scram);
return 0;
}

void flip(char *string){
char *i;
for(i=string; *i; i++){
if(*i == '1'){
*i = '0';
} else if(*i == '0'){
*i = '1';
}
}
}

void deRNA(char *string){
char buffer[4];
int i = 0;

while(string[i] != '\0'){
buffer[0] = string[i];
i++;
buffer[1] = string[i];
i++;
buffer[2] = string[i];
buffer[3] = '\0';
i+=2;

if(strcmp(buffer, "yyy") == 0 || strcmp(buffer, "YYY") == 0 || strcmp(buffer, "ttt") == 0 || strcmp(buffer, "TTT") == 0 || strcmp(buffer, "uuu") == 0 || strcmp(buffer, "UUU") == 0){
printf("F");
} if(strcmp(buffer, "yyp") == 0 || strcmp(buffer, "YYP") == 0 || strcmp(buffer, "yyb") == 0 || strcmp(buffer, "YYB") == 0){
printf("F");
} if(strcmp(buffer, "yyo") == 0 || strcmp(buffer, "YYO") == 0){
printf("L");
} if(strcmp(buffer, "yyg") == 0 || strcmp(buffer, "YYG") == 0){
printf("L");
} if(strcmp(buffer, "pyy") == 0 || strcmp(buffer, "PYY") == 0 || strcmp(buffer, "byy") == 0 || strcmp(buffer, "BYY") == 0){
printf("L");
} if(strcmp(buffer, "pyp") == 0 || strcmp(buffer, "PYP") == 0 || strcmp(buffer, "byb") == 0 || strcmp(buffer, "BYB") == 0){
printf("L");
} if(strcmp(buffer, "pyo") == 0 || strcmp(buffer, "PYO") == 0 || strcmp(buffer, "byr") == 0 || strcmp(buffer, "BYR") == 0){
printf("L");
} if(strcmp(buffer, "pyg") == 0 || strcmp(buffer, "PYG") == 0 || strcmp(buffer, "pyg") == 0 || strcmp(buffer, "PYG") == 0){
printf("L");
} if(strcmp(buffer, "oyy") == 0 || strcmp(buffer, "OYY") == 0){
printf("I");
} if(strcmp(buffer, "oyp") == 0 || strcmp(buffer, "OYP") == 0 || strcmp(buffer, "ryb") == 0 || strcmp(buffer, "RYB") == 0){
printf("I");
} if(strcmp(buffer, "oyo") == 0 || strcmp(buffer, "OYO") == 0){
printf("I");
} if(strcmp(buffer, "oyg") == 0 || strcmp(buffer, "OYG") == 0){
printf(" - M - ");
} if(strcmp(buffer, "gyy") == 0 || strcmp(buffer, "GYY") == 0){
printf("V");
} if(strcmp(buffer, "gyp") == 0 || strcmp(buffer, "GYP") == 0 || strcmp(buffer, "gyb") == 0 || strcmp(buffer, "GYB") == 0){
printf("V");
} if(strcmp(buffer, "gyo") == 0 || strcmp(buffer, "GYO") == 0){
printf("V");
} if(strcmp(buffer, "gyg") == 0 || strcmp(buffer, "GYG") == 0){
printf("V");
} if(strcmp(buffer, "ypy") == 0 || strcmp(buffer, "YPY") == 0 || strcmp(buffer, "yby") == 0 || strcmp(buffer, "YBY") == 0){
printf("S");
} if(strcmp(buffer, "ypp") == 0 || strcmp(buffer, "YPP") == 0 || strcmp(buffer, "ybb") == 0 || strcmp(buffer, "YBB") == 0){
printf("S");
} if(strcmp(buffer, "ypo") == 0 || strcmp(buffer, "YPO") == 0 || strcmp(buffer, "ybr") == 0 || strcmp(buffer, "YBR") == 0){
printf("S");
} if(strcmp(buffer, "ypg") == 0 || strcmp(buffer, "YPG") == 0 || strcmp(buffer, "ybg") == 0 || strcmp(buffer, "YBG") == 0){
printf("S");
} if(strcmp(buffer, "ppy") == 0 || strcmp(buffer, "PPY") == 0 || strcmp(buffer, "bby") == 0 || strcmp(buffer, "BBY") == 0){
printf("P");
} if(strcmp(buffer, "ppp") == 0 || strcmp(buffer, "PPP") == 0 || strcmp(buffer, "bbb") == 0 || strcmp(buffer, "BBB") == 0){
printf("P");
} if(strcmp(buffer, "ppo") == 0 || strcmp(buffer, "PPO") == 0 || strcmp(buffer, "bbr") == 0 || strcmp(buffer, "BBR") == 0){
printf("P");
} if(strcmp(buffer, "ppg") == 0 || strcmp(buffer, "PPG") == 0 || strcmp(buffer, "bbg") == 0 || strcmp(buffer, "BBG") == 0){
printf("P");
} if(strcmp(buffer, "opy") == 0 || strcmp(buffer, "OPY") == 0 || strcmp(buffer, "rby") == 0 || strcmp(buffer, "RBY") == 0){
printf("T");
} if(strcmp(buffer, "opp") == 0 || strcmp(buffer, "OPP") == 0 || strcmp(buffer, "rbb") == 0 || strcmp(buffer, "RBB") == 0){
printf("T");
} if(strcmp(buffer, "opo") == 0 || strcmp(buffer, "OOO") == 0 || strcmp(buffer, "rbr") == 0 || strcmp(buffer, "RBR") == 0){
printf("T");
} if(strcmp(buffer, "opg") == 0 || strcmp(buffer, "OPG") == 0 || strcmp(buffer, "rbg") == 0 || strcmp(buffer, "RBG") == 0){
printf("T");
} if(strcmp(buffer, "gpy") == 0 || strcmp(buffer, "GPY") == 0 || strcmp(buffer, "gby") == 0 || strcmp(buffer, "GBY") == 0){
printf("A");
} if(strcmp(buffer, "gpp") == 0 || strcmp(buffer, "GPP") == 0 || strcmp(buffer, "gbb") == 0 || strcmp(buffer, "GBB") == 0){
printf("A");
} if(strcmp(buffer, "gpo") == 0 || strcmp(buffer, "GPO") == 0 || strcmp(buffer, "gbr") == 0 || strcmp(buffer, "GBR") == 0){
printf("A");
} if(strcmp(buffer, "gpg") == 0 || strcmp(buffer, "GPG") == 0 || strcmp(buffer, "gbg") == 0 || strcmp(buffer, "GBG") == 0){
printf("A");
} if(strcmp(buffer, "yoy") == 0 || strcmp(buffer, "YOY") == 0){
printf("Y");
} if(strcmp(buffer, "yop") == 0 || strcmp(buffer, "YOP") == 0 || strcmp(buffer, "yrb") == 0 || strcmp(buffer, "YRB") == 0){
printf("Y");
} if(strcmp(buffer, "yoo") == 0 || strcmp(buffer, "YOO") == 0){
printf(" STOP ");
} if(strcmp(buffer, "yog") == 0 || strcmp(buffer, "YOG") == 0){
printf(" STOP ");
} if(strcmp(buffer, "poy") == 0 || strcmp(buffer, "POY") == 0 || strcmp(buffer, "bry") == 0 || strcmp(buffer, "BRY") == 0){
printf("H");
} if(strcmp(buffer, "pop") == 0 || strcmp(buffer, "POP") == 0 || strcmp(buffer, "brb") == 0 || strcmp(buffer, "BRB") == 0){
printf("H");
} if(strcmp(buffer, "poo") == 0 || strcmp(buffer, "POO") == 0 || strcmp(buffer, "brr") == 0 || strcmp(buffer, "BRR") == 0){
printf("Q");
} if(strcmp(buffer, "pog") == 0 || strcmp(buffer, "POG") == 0 || strcmp(buffer, "brg") == 0 || strcmp(buffer, "BRG") == 0){
printf("Q");
} if(strcmp(buffer, "ooy") == 0 || strcmp(buffer, "OOY") == 0){
printf("N");
} if(strcmp(buffer, "oop") == 0 || strcmp(buffer, "OOP") == 0 || strcmp(buffer, "rrb") == 0 || strcmp(buffer, "RRB") == 0){
printf("N");
} if(strcmp(buffer, "ooo") == 0 || strcmp(buffer, "OOO") == 0){
printf("K");
} if(strcmp(buffer, "oog") == 0 || strcmp(buffer, "OOG") == 0){
printf("K");
} if(strcmp(buffer, "goy") == 0 || strcmp(buffer, "GOY") == 0){
printf("D");
} if(strcmp(buffer, "gop") == 0 || strcmp(buffer, "GOP") == 0 || strcmp(buffer, "grb") == 0 || strcmp(buffer, "GRB") == 0){
printf("D");
} if(strcmp(buffer, "goo") == 0 || strcmp(buffer, "GOO") == 0){
printf("E");
} if(strcmp(buffer, "gog") == 0 || strcmp(buffer, "GOG") == 0){
printf("E");
} if(strcmp(buffer, "ygy") == 0 || strcmp(buffer, "YGY") == 0){
printf("C");
} if(strcmp(buffer, "ygp") == 0 || strcmp(buffer, "YGP") == 0 || strcmp(buffer, "ygb") == 0 || strcmp(buffer, "YGB") == 0){
printf("C");
} if(strcmp(buffer, "ygo") == 0 || strcmp(buffer, "YGO") == 0){
printf(" STOP ");
} if(strcmp(buffer, "ygg") == 0 || strcmp(buffer, "YGG") == 0){
printf("W");
} if(strcmp(buffer, "pgy") == 0 || strcmp(buffer, "PGY") == 0 || strcmp(buffer, "bgy") == 0 || strcmp(buffer, "BGY") == 0){
printf("R");
} if(strcmp(buffer, "pgp") == 0 || strcmp(buffer, "PGP") == 0 || strcmp(buffer, "bgb") == 0 || strcmp(buffer, "BGB") == 0){
printf("R");
} if(strcmp(buffer, "pgo") == 0 || strcmp(buffer, "PGO") == 0 || strcmp(buffer, "bgr") == 0 || strcmp(buffer, "BGR") == 0){
printf("R");
} if(strcmp(buffer, "pgg") == 0 || strcmp(buffer, "PGG") == 0 || strcmp(buffer, "bgg") == 0 || strcmp(buffer, "BGG") == 0){
printf("R");
} if(strcmp(buffer, "ogy") == 0 || strcmp(buffer, "OGY") == 0){
printf("S");
} if(strcmp(buffer, "ogp") == 0 || strcmp(buffer, "OGP") == 0 || strcmp(buffer, "rgb") == 0 || strcmp(buffer, "RGB") == 0){
printf("S");
} if(strcmp(buffer, "ogo") == 0 || strcmp(buffer, "OGO") == 0){
printf("R");
} if(strcmp(buffer, "ogg") == 0 || strcmp(buffer, "OGG") == 0){
printf("R");
} if(strcmp(buffer, "ggy") == 0 || strcmp(buffer, "GGY") == 0){
printf("G");
} if(strcmp(buffer, "ggp") == 0 || strcmp(buffer, "GGP") == 0 || strcmp(buffer, "ggb") == 0 || strcmp(buffer, "GGB") == 0){
printf("G");
} if(strcmp(buffer, "ggo") == 0 || strcmp(buffer, "GGO") == 0){
printf("G");
} if(strcmp(buffer, "ggg") == 0 || strcmp(buffer, "GGG") == 0){
printf("G");
} else{
printf(" ");
}
}
printf("\n");
}

void deHex(char *string){
char buffer[5];
int i = 0;

while(string[i] != '\0'){
buffer[0] = string[i];
i++;
buffer[1] = string[i];
i++;
buffer[2] = string[i];
i++;
buffer[3] = string[i];
buffer[4] = '\0';
i+=2;

if(strcmp(buffer, "0000") == 0){
printf("0");
} else if(strcmp(buffer, "0001") == 0){
printf("1");
} else if(strcmp(buffer, "0010") == 0){
printf("2");
} else if(strcmp(buffer, "0011") == 0){
printf("3");
} else if(strcmp(buffer, "0100") == 0){
printf("4");
} else if(strcmp(buffer, "0101") == 0){
printf("5");
} else if(strcmp(buffer, "0110") == 0){
printf("6");
} else if(strcmp(buffer, "0111") == 0){
printf("7");
} else if(strcmp(buffer, "1000") == 0){
printf("8");
} else if(strcmp(buffer, "1001") == 0){
printf("9");
} else if(strcmp(buffer, "1010") == 0){
printf("A");
} else if(strcmp(buffer, "1011") == 0){
printf("B");
} else if(strcmp(buffer, "1100") == 0){
printf("C");
} else if(strcmp(buffer, "1101") == 0){
;printf("D");
} else if(strcmp(buffer, "1110") == 0){
printf("E");
} else if(strcmp(buffer, "1111") == 0){
printf("F");
} else{
printf(" ");
}
}
printf("\n");
}

void debacon(char *string, int btype){
char buffer[6];
int i = 0;

while(string[i] != '\0'){

buffer[0] = string[i];
i++;
buffer[1] = string[i];
i++;
buffer[2] = string[i];
i++;
buffer[3] = string[i];
i++;
buffer[4] = string[i];
buffer[5] = '\0';
i+=2;

if(btype == 0){
if(strcmp(buffer, "00000") == 0){
printf("A");
} else if(strcmp(buffer, "00001") == 0){
printf("B");
} else if(strcmp(buffer, "00010") == 0){
printf("C");
} else if(strcmp(buffer, "00011") == 0){
printf("D");
} else if(strcmp(buffer, "00100") == 0){
printf("E");
} else if(strcmp(buffer, "00101") == 0){
printf("F");
} else if(strcmp(buffer, "00110") == 0){
printf("G");
} else if(strcmp(buffer, "00111") == 0){
printf("H");
} else if(strcmp(buffer, "01000") == 0){
printf("J");
} else if(strcmp(buffer, "01001") == 0){
printf("K");
} else if(strcmp(buffer, "01010") == 0){
printf("L");
} else if(strcmp(buffer, "01011") == 0){
printf("M");
} else if(strcmp(buffer, "01100") == 0){
printf("N");
} else if(strcmp(buffer, "01101") == 0){
printf("O");
} else if(strcmp(buffer, "01110") == 0){
printf("P");
} else if(strcmp(buffer, "01111") == 0){
printf("Q");
} else if(strcmp(buffer, "10000") == 0){
printf("R");
; } else if(strcmp(buffer, "10001") == 0){
printf("S");
} else if(strcmp(buffer, "10010") == 0){
printf("T");
} else if(strcmp(buffer, "10011") == 0){
printf("V");
} else if(strcmp(buffer, "10100") == 0){
printf("W");
} else if(strcmp(buffer, "10101") == 0){
printf("X");
} else if(strcmp(buffer, "10110") == 0){
printf("Y");
} else if(strcmp(buffer, "10111") == 0){
printf("Z");
} else{
printf(" ");
}
}
if(btype == 1){
if(strcmp(buffer, "00000") == 0){
printf("A");
} else if(strcmp(buffer, "00001") == 0){
printf("B");
} else if(strcmp(buffer, "00010") == 0){
printf("C");
} else if(strcmp(buffer, "00011") == 0){
printf("D");
} else if(strcmp(buffer, "00100") == 0){
printf("E");
} else if(strcmp(buffer, "00101") == 0){
printf("F");
} else if(strcmp(buffer, "00110") == 0){
printf("G");
} else if(strcmp(buffer, "00111") == 0){
printf("H");
} else if(strcmp(buffer, "01000") == 0){
printf("I");
} else if(strcmp(buffer, "01001") == 0){
printf("J");
} else if(strcmp(buffer, "01010") == 0){
printf("K");
} else if(strcmp(buffer, "01011") == 0){
printf("L");
} else if(strcmp(buffer, "01100") == 0){
printf("M");
} else if(strcmp(buffer, "01101") == 0){
printf("N");
} else if(strcmp(buffer, "01110") == 0){
printf("O");
} else if(strcmp(buffer, "01111") == 0){
printf("P");
} else if(strcmp(buffer, "10000") == 0){
printf("Q");
} else if(strcmp(buffer, "10001") == 0){
printf("R");
} else if(strcmp(buffer, "10010") == 0){
printf("S");
} else if(strcmp(buffer, "10011") == 0){
printf("T");
} else if(strcmp(buffer, "10100") == 0){
printf("U");
} else if(strcmp(buffer, "10101") == 0){
printf("V");
} else if(strcmp(buffer, "10110") == 0){
printf("W");
} else if(strcmp(buffer, "10111") == 0){
printf("X");
} else if(strcmp(buffer, "11000") == 0){
printf("Y");
} else if(strcmp(buffer, "11001") == 0){
printf("Z");
} else{
printf(" ");
}
}
}
printf("\n");
}

void divideString(char *string, int n){
int size = strlen(string);
int i = 1;
int j = 1;
char buffer[1024];

strcpy(buffer,string);
string[0] = buffer[0];

for(i = 1; j < size; i++){
if(j%n == 0){
string[i] = ' ';
i++;
}
string[i] = buffer[j];
j++;
}
string[i] = '\0';
}

char* normalize(char* string, int nflag){
char *i;
switch(nflag){
case 0:
for(i=string; *i; i++){
if(*i == 'y' || *i == 'Y'){
*i = '1';
} else if(*i == 'o' || *i == 'O'){
*i = '0';
} else if(*i == 'g' || *i == 'G'){
*i = '1';
} else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
*i = '0';
} else if(*i == '\n'){
*i = '\0';
}
}
return string;
case 1:
for(i=string; *i; i++){
if(*i == 'y' || *i == 'Y'){
*i = '0';
} else if(*i == 'o' || *i == 'O'){
*i == '1';
} else if(*i == 'g' || *i == 'G'){
*i = '1';
} else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
*i = '0';
} else if(*i == '\n'){
*i == '\0';
}
}
return string;
case 2:
for(i=string; *i; i++){
if(*i == 'y' || *i == 'Y'){
*i = '1';
} else if(*i == 'o' || *i == 'O'){
*i = '0';
} else if(*i == 'g' || *i == 'G'){
*i == '0';
} else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
*i == '1';
} else if(*i == '\n'){
*i = '\0';
}
}
return string;
case 3:
for(i=string; *i; i++){
if(*i == 'y' || *i == 'Y'){
*i = '0';
} else if(*i == 'o' || *i == 'O'){
*i = '1';
} else if(*i == 'g' || *i == 'G'){
*i = '0';
} else if(*i == 'p' || *i == 'P' || *i == 'b' || *i == 'B'){
*i = '1';
} else if(*i == '\n'){
*i = '\0';
}
}
return string;
; case 8:
for(i=string; *i; i++){
if(*i == '\n'){
*i = '\0';
}
}
return string;
default:
printf("\nERROR: Could not normalize stirng\n");
return string;
}
}

int getlines(FILE* stream, char** line, ssize_t* nread, int* ntot, size_t len){
int i = 0;
for(i = 0; i < 16; i++){
nread[i] = getline(&line[i], &len, stream);
if(nread[i] == -1){
break;
}
*ntot += nread[i];
}

return i;
}

void clean(char* string){
char *nospace = string;
char *temp = string;

        if(verbose == 1){
        printf("\nRemoving Spaces\n");
}
while(*temp != 0){
*nospace = *temp++;
if(*nospace != ' '){
nospace++;
}
}
*nospace = 0;
}

void shift(char* string){
char *nospace = string;
char *temp = string;
char buffer[1024];

char t;
int i = 0;
int size;

if(verbose == 1){
printf("\nRemoving Spaces\n");
}
while(*temp != 0){
*nospace = *temp++;
if(*nospace != ' '){
nospace++;
}
}
*nospace = 0;
if(verbose == 1){
printf("\n%s\n", string);
printf("\nShifting String\n");
}
strcpy(buffer, string);
if(verbose == 1){
printf("Buffer: \n%s\n\n", buffer);
}
t = string[0];
size = strlen(string);
for(i = 0; i < (size-1); i++){
string[i] = buffer[i+1];
}
string[i] = t;
string[i+1] = '\0';
if(verbose == 1){
printf("%s\n", string);
}
}

Sure. I think I see where the confusion might be.
You have 4 distinct flames (RB RG YB YG). Consider those to be the fundamental unit (not the individual colors).
Pick a way to assign them each to a DNA base (RB=a RG=t YB=c YG=g).
Pick a place to start decoding, pick a direction. Here's an example string to decode. Lets decode left to right. 
CTAGCCTATTTATTCTACATCGCACTTATCCACCGTAATTGCTAATTGCTT
Translate them three at a time into amino acids

CTA= D
this triplet, in this order, translates to the amino acid D.

CTA GCC TAT TTA TTC TAC ATC GCA CTT ATC CAC CGT AAT TGC TAA TTG CTT
D     R     I     N    K    M    *     R     E     *     V    A     L      T     I     N    E

if you took this backwards, it would not read the same.
TTCGTTAATCGTTAATGCCACCTATTCACGCTACATCTTATTTATCCGATC
TTC GTT AAT CGT TAA TGC CAC CTA TTC ACG CTA CAT CTT ATT TAT CCG ATC
K    Q     L     A     I     T     V     D     K    C     D     V    E     *    I     G     *

If you started reading at a different letter (say one letter in), it also is a different message
CTAGCCTATTTATTCTACATCGCACTTATCCACCGTAATTGCTAATTGCTT
TAG CCT ATT TAT TCT ACA TCG CAC TTA TCC ACC GTA ATT GCT AAT TGC TT
I     G     *     I    R     C     S     V     N    R    W     H    *     R     L     T

Make more sense?
6  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: January 05, 2018, 08:43:09 PM
When read according to the drips clockwise, the very start of the decode you get the following word relevant to the painting:
*MPSRI*
Prism.
7  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: January 05, 2018, 02:37:49 AM
- DNA/RNA has 4 symbols ('atcg' or 'aucg'), is read three units (called bases) at a time, and there are 21 proteins (indicated by one letter abbreviations).
- The three drips on the chess piece could indicate a reading frame, which tells you how to chunk the bases. A different start point will lead to different amino acids, so this is important.
- DNA/RNA has stop codons, which indicate when to stop making a protein. These can either be delimiters between words, or be considered by their pigment based names (amber, ochre, opal).

seriously? don't tell me that coin-artist have a Phd in medicine or biochemistry Grin
your post could be a good lecture, but of course not here.

It's literally done for you here, no brain power or PhD involved.
https://www.dcode.fr/codons-genetic-code

I don't think it's that far-fetched.
8  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: January 04, 2018, 11:28:05 PM
OK, I'll share what I've had for a bit in the interest of getting to solve this. I just hope fellow puzzle enthusiast strangers on the internet can acknowledge the contributions of others.
I'm pretty positive it's a DNA/RNA encoding to amino acids (protein building blocks) in some fashion.

- The game of life/life/love topic is relevant.
- The WR portal with the QR code from an earlier stage featured a colored blob. It definitely looks like a volume filled protein structure. Not sure which one.
- DNA/RNA has 4 symbols ('atcg' or 'aucg'), is read three units (called bases) at a time, and there are 21 proteins (indicated by one letter abbreviations).
- The three drips on the chess piece could indicate a reading frame, which tells you how to chunk the bases. A different start point will lead to different amino acids, so this is important.
- DNA/RNA has stop codons, which indicate when to stop making a protein. These can either be delimiters between words, or be considered by their pigment based names (amber, ochre, opal).

Consider only the 4 color combinations of the flames (RB RG YB YG) and treat them as bases (atcg).
Consider the permutations of the bases, reading order of the strips, and reading direction.
Consider reading frames (just in case).

Just looking at the inner colored flames, many combinations will produce keys within the range of a minikey (~29 or 30, with/without omitting stops).
Combining the inner and outer colored flames, all combinations are within range of a privkey, as has been noted (50, without omitting stops).

The question is if this is a key:
What start, order, and direction (and maybe frame, if it changes per strip), and if capitalization is also encoded somehow.

Stuff to rule out:
If DNA/RNA, there is an amino acid that indicates when to start, but I've tried those keys.
I've read according to the spirals, and combos of CCW & CW, as well as many other combos.
Some combinations and starts do indeed encode BIP38 beginnings, but I haven't gotten anywhere fruitful.
Using the ribbons as capitalization doesn't work.
Inner triplets are not consistently one height, if flame height encodes capitalization.
I don't see a pattern in the outer flames that would indicate how to capitalize the inner flames.

If it's not a key:
Translating it could also produce a phrase which points to the next step, and there are legible words (and maybe phrases) in the most likely permutation and frame, but not all of them are. There is one word which relates directly to the painting when unscrambled. Substitution, rearrangement as an anagram, caesar, and vigenère don't go anywhere as a whole that I can see.
9  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: January 04, 2018, 08:43:23 PM

(Here, I've concatenated all the data starting with lengths, then inner, then outer colors in the order of the pattern. This is just ONE of a many ways of concatenating the data. Just for demonstration purposes, I used a base 58 alphabet here and use ? when the value goes beyond 58.  By no means is this a complete list).



Have you tried using the inner shape as the third bit (skinny line or blob of paint)?

Each inner flame is either a blob or a line.

Inner Color, Outer Color, (Line/Blob)

8 variations of flames taken in pairs.  76 pairs of 64 variations.

I still think we are looking for a BIP38 encrypted key starting with 6PR.

Can I ask why you think that's the case?
10  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: December 15, 2017, 04:01:04 AM
https://books.google.com/books?id=D2xIAQAAMAAJ&pg=PA10&lpg=PA10&dq=the+love+or+mate+of+another+phoenix&source=bl&ots=5WHf7o9bYQ&sig=EiaAGdkQFMB72M8b-ghEltrWeDQ&hl=en&sa=X&ved=2ahUKEwid2urYjovYAhWD6CYKHZtXDvgQ6AEwA3oECAcQAQ#v=onepage&q=the%20love%20or%20mate%20of%20another%20phoenix&f=false

This is the page on the left of her new post.
11  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: December 13, 2017, 04:13:31 PM
Crazy and likely irrelevant tangents, but I've been diving into some math and topology to see if there's anything relevant.

The meanders at the corners can only be aligned if you map the 2D image to a non-orientable surface called a klein bottle

Klein bottles are one of the topological maps that a Game of Life game can take for it's map, along with a torus and some other topologies

John Horton Conway was involved in some great mathematical fields, having a type of notation used in knot theory named after him
https://en.wikipedia.org/wiki/Conway_notation_(knot_theory)
https://en.wikipedia.org/wiki/Knot_theory

The term Meander also has ties to mathematics, describing a non-self intersecting closed curve
https://en.wikipedia.org/wiki/Meander_(mathematics)

I've looked around a bit at meander notation and knot notation without success so far
https://en.wikipedia.org/wiki/List_of_prime_knots

The chess game that has been previously mentioned (that matches the number of ivy leaves) was played against a man with the surname Morphy, by the way.

Also, if each leaf pointing to a chess square is associated with two characters, and each leaf pointing to a flame/lack of flame represents one character, we have enough characters to make a minikey. (29+ the S that is leading by default). Each square could have a different combo based on the board orientation, but some are excluded due to allowable characters in base58 notation. Still though, the permutation space is intractable unless we know the order to put the leaves in.
12  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: November 26, 2017, 02:03:36 AM
What is with these new-ish accounts conversing with themselves on this thread. They sound like crypto markov chain chatbots.
13  Bitcoin / Bitcoin Discussion / Re: The Legend of Satoshi Nakamato, FINAL STEP PUBLISHED.... 4.87 BTC GRAND PRIZE! on: October 26, 2017, 04:08:24 AM
Doubt it. Check out the domain name registration date.

Domain Name: c0d3.attorney
Registry Domain ID: 1fd4b79d5497486bbec8444e90a65f09-RSIDE
Registrar WHOIS Server: www.godaddy.com
Registrar URL: http://www.godaddy.com
Updated Date: 2017-10-09T18:01:30Z
Creation Date: 2016-05-15T07:42:10Z
Pages: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!