import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class alphametics extends Applet implements Runnable{
Thread th = null;
Image os;
Graphics og;
String bua[][] = {{"E","N","O","S","U","Y","","","",""},
{"D","E","M","N","O","R","S","Y","",""},
{"A","E","H","I","R","S","T","V","Y",""},
{"E","F","I","N","O","R","S","T","X","Y"},
{"E","F","H","I","L","N","R","T","V","Y"},
{"E","H","I","N","R","S","T","V","Y",""},
{"A","E","F","H","I","N","R","T","U","W"},
{"A","E","L","N","O","P","R","S","T","U"}};
int bnt[][] = {{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}};
int btd[][][] = {{{ 1, 2, 2, 3,-1,-1,-1,-1},{ 4, 2, 5,-1,-1,-1,-1,-1},{ 0, 0, 3,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1}},
{{ 7, 1, 3, 4, 2,-1,-1,-1},{ 1, 5, 4, 2,-1,-1,-1,-1},{ 0, 3, 1, 6,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1}},
{{ 8, 5, 0, 1,-1,-1,-1,-1},{ 8, 4, 1, 7,-1,-1,-1,-1},{ 5, 3,-1,-1,-1,-1,-1,-1},{ 5, 3, 2, 6,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1}},
{{ 9, 7, 8, 2, 6,-1,-1,-1},{ 3, 0, 7,-1,-1,-1,-1,-1},{ 3, 0, 7,-1,-1,-1,-1,-1},{ 9, 7, 5, 4, 1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1,-1}},
{{ 9, 7, 6, 3, 2, 7,-1,-1},{ 5, 0, 8, 0, 4, 0,-1,-1},{ 0, 5, 3, 5,-1,-1,-1,-1},{ 0, 8, 3, 1,-1,-1,-1,-1},{ 0, 8, 3, 1,-1,-1,-1,-1}},
{{ 8, 6, 4, 2, 1, 6,-1,-1},{ 3, 0, 7, 0, 5,-1,-1,-1},{ 3, 0, 7, 0, 5,-1,-1,-1},{ 3, 0, 7, 0, 5,-1,-1,-1},{ 0, 3, 2, 3,-1,-1,-1,-1}},
{{ 1, 6, 8, 7, 0, 5,-1,-1},{ 6, 1, 7, 0, 9,-1,-1,-1},{ 1, 6, 4, 2,-1,-1,-1,-1},{ 6, 4, 0,-1,-1,-1,-1,-1},{ 3, 7, 6, 0, 1,-1,-1,-1}},
{{ 7, 8, 1, 3, 0, 2, 5,-1},{ 4, 8, 9, 2, 5,-1,-1,-1},{ 1, 3, 9, 8, 5, 1, 3,-1},{ 7, 9, 3, 0, 6, 9,-1,-1},{ 3, 6, 9, 8, 0, 7,-1,-1}}};
String ua[] = new String[10];
int nt[][] = new int[2][10];
int td[][] = new int[5][8];
int px,py,sx,sy,pn = 0;
int fg = 0,ch = 0,ps,as,sw;
Font f = new Font("Century",Font.PLAIN,40);
FontMetrics fm = getFontMetrics(f);
int fw;
int tr1x[] = {22,55,55,22},tr1y[] = {180,160,200,180},tr2x[] = {385,418,385,385},tr2y[] = {160,180,200,160};
public void init(){
setBackground(new Color(255,204,255));
os = createImage(550,450);
og = os.getGraphics();
R_set();
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
px = (e.getX() - 20) / 40;
py = (e.getY() - 280) / 40;
if(fg == 0){
if((px>=0)&&(px<=9)&&(py>=0)&&(py<=1)){
sx = px ; sy = py ;
fg = 1 ;
}
}else if(fg == 1){
if((px>=0)&&(px<=9)&&(py>=0)&&(py<=1)){
sw = nt[py][px] ; nt[py][px] = nt[sy][sx] ; nt[sy][sx] = sw ;
fg = 0;
}
}
if((px==0)&&(py==-2)){
pn = pn - 1;
if(pn < 0){pn = 0;}
R_set();
}
if((px==9)&&(py==-2)){
pn = pn + 1;
if(pn > 7){pn = 7;}
R_set();
}
repaint();
}
}
);
}
public void paint(Graphics g){
og.setColor(new Color(255,204,255));
og.fillRect(0,0,550,450);
og.setColor(new Color(255,255,255));
og.fillRect(58,18,324,204);
og.setColor(new Color(0,0,0));
og.drawRect(58,18,324,204);
og.setColor(new Color(0,0,204));
og.fillPolygon(tr1x,tr1y,4);
og.fillPolygon(tr2x,tr2y,4);
og.setColor(new Color(0,0,153));
og.drawPolygon(tr1x,tr1y,4);
og.drawPolygon(tr2x,tr2y,4);
og.setColor(new Color(0,0,0));
for(int i = 0 ; i < 10 ; i ++){
for(int j = 0 ; j < 2 ; j ++){
og.setColor(new Color(255,255,255));
og.fillRect(20+i*40,240+j*40,39,39);
}
}
for(int ix = 0 ; ix < 8 ; ix ++){
for(int iy = 0 ; iy < 5 ; iy ++){
if(td[iy][ix] != -1){
og.setColor(new Color(0,0,0));
if(nt[0][td[iy][ix]] != -1){
og.setColor(new Color(0,0,255));
og.setFont(new Font("Century",Font.BOLD,16));
og.drawString(""+ua[td[iy][ix]],340-ix*40,195-iy*40);
og.setColor(new Color(0,0,0));
og.setFont(f);
og.drawString(""+nt[0][td[iy][ix]],350-ix*40,215-iy*40);
}else{
fw = fm.stringWidth(ua[td[iy][ix]]);
og.setColor(new Color(0,0,0));
og.setFont(f);
og.drawString(""+ua[td[iy][ix]],340-ix*40+((40-fw)/2),215-iy*40);
}
}
}
}
for(int ix = 0 ; ix < 10 ; ix ++){
for(int iy = 0 ; iy < 2 ; iy ++){
if(nt[iy][ix] != -1){
og.setColor(new Color(228,228,255));
og.fill3DRect(21+40*ix,281+iy*40,36,36,true);
og.setColor(new Color(24,24,102));
og.setFont(f);
og.drawString(""+nt[iy][ix],30+40*ix,312+iy*40);
}
}
}
for(int i = 0 ; i < 10 ; i ++){
og.setColor(new Color(0,0,0));
og.setFont(f);
fw = fm.stringWidth(ua[i]);
og.drawString(""+ua[i],20+i*40+((40-fw)/2),275);
}
ch = 1;
for(int i = 0 ; i < 10 ; i ++){
if((ua[i] != "") && (nt[0][i] == -1)){
ch = 0;
}
}
ps = 0 ; as = 0;
if(ch == 1){
for(int i = 0 ; i < 8 ; i ++){
for(int j = 1 ; j < 5 ; j ++){
if(td[j][i] != -1){
ps = ps + nt[0][td[j][i]]*(int)Math.pow(10,(double)i);
}
}
if(td[0][i] != -1){
as = as + nt[0][td[0][i]]*(int)Math.pow(10,(double)i);
}
}
}
if((ps == as) && (ps != 0)){
og.setColor(new Color(0,0,255));
}else{
og.setColor(new Color(255,0,0));
}
og.drawLine(70,180,370,180);
og.drawLine(70,181,370,181);
og.drawRect(60,20,320,200);
og.drawRect(61,21,318,198);
og.drawLine(70,150,100,150);
og.drawLine(70,151,100,151);
og.drawLine(85,135,85,165);
og.drawLine(86,135,86,165);
if(fg == 1){
og.setColor(new Color(255,0,0));
og.drawRect(sx*40+21,sy*40+281,36,36);
}
og.setColor(new Color(228,228,250));
og.fill3DRect(65,25,60,30,true);
og.setColor(new Color(0,0,153));
og.setFont(new Font("Century",Font.ITALIC,24));
og.drawString("No."+(pn+1),70,49);
g.drawImage(os,0,0,this );
}
public void R_set(){
for(int i = 0 ; i < 10 ; i ++){
for(int j = 0 ; j < 2 ; j ++){
nt[j][i] = bnt[j][i];
}
ua[i] = bua[pn][i];
}
for(int i = 0 ; i < 8 ; i ++){
for(int j = 0 ; j < 5 ; j ++){
td[j][i] = btd[pn][j][i];
}
}
return;
}
public void start(){
if(th == null){
th = new Thread(this);
th.start();
}
}
public void stop(){
th = null;
}
public void run(){
while (th != null){
try {
Thread.sleep(30);
}
catch (InterruptedException e){ }
}
}
public void update( Graphics g ){
paint( g ) ;
}
}
