#include "puzutl.h"
int koho[] = { 0, 1, 5, 6, 7, 8, -1, -2}; // -1:÷, -2:=
int nkoho = sizeof(koho)/sizeof(koho[0]);
int used[] = { 0, 0, 0, 0, 0, 0, 0, 0};
char equ( int i)
{
if( i == -1) return '/';
if( i == -2) return '=';
return i+'0';
}
cstring equ( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
{
static char buf[11];
buf[0] = equ(i1);
buf[1] = equ(i2);
buf[2] = equ(i3);
buf[3] = equ(i3);
buf[4] = equ(i4);
buf[5] = equ(i5);
buf[6] = equ(i1);
buf[7] = equ(i6);
buf[8] = equ(i7);
buf[9] = equ(i8);
buf[10] = NIL;
return buf;
}
void check( int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
{
int buf[11];
if( i1 < 0 || i3 < 0) return; // 2つあるのは記号にはならない
buf[0] = i1;
buf[1] = i2;
buf[2] = i3;
buf[3] = i3;
buf[4] = i4;
buf[5] = i5;
buf[6] = i1;
buf[7] = i6;
buf[8] = i7;
buf[9] = i8;
int a = 0, b = 0, c = 0;
for( int i=0; i< 10; i++) {
if( buf[i] == -1) { i++; break;}
if( buf[i] == -2) return; // ÷より前に=が出現した。
a *= 10;
a += buf[i];
}
for( ; i< 10; i++) {
if( buf[i] == -2) { i++; break;}
b *= 10;
b += buf[i];
}
if( i == 10) return; // =より後ろの文字が無い
for( ; i< 10; i++) {
c *= 10;
c += buf[i];
}
if( b == 0) return;
if( (a % b) == 0 && a / b == c) {
ps( "Find( %d / %d = %d (%s)\n", a, b, c, equ(i1,i2,i3,i4,i5,i6,i7,i8));
}
}
int main( int argc, cstring argv[])
{
int cnt = 0;
for( int i1=0; i1< nkoho; i1++) { // P
used[i1] = YES;
for( int i2=0; i2< nkoho; i2++) { // U
if( used[i2]) continue;
used[i2] = YES;
for( int i3=0; i3< nkoho; i3++) { // Z
if( used[i3]) continue;
used[i3] = YES;
for( int i4=0; i4< nkoho; i4++) { // L
if( used[i4]) continue;
used[i4] = YES;
for( int i5=0; i5< nkoho; i5++) { // E
if( used[i5]) continue;
used[i5] = YES;
for( int i6=0; i6< nkoho; i6++) { // A
if( used[i6]) continue;
used[i6] = YES;
for( int i7=0; i7< nkoho; i7++) { // R
if( used[i7]) continue;
used[i7] = YES;
for( int i8=0; i8< nkoho; i8++) { // K
if( used[i8]) continue;
used[i8] = YES;
cnt++;
// P U Z Z L E P A R K で式が完成するか?
check( koho[i1], koho[i2], koho[i3], koho[i4], koho[i5], koho[i6], koho[i7], koho[i8]);
used[i8] = NO;
}
used[i7] = NO;
}
used[i6] = NO;
}
used[i5] = NO;
}
used[i4] = NO;
}
used[i3] = NO;
}
used[i2] = NO;
}
used[i1] = NO;
}
ps( "cnt:%d\n", cnt);
return 0;
}