import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class f_four extends Applet implements Runnable{
Thread th = null;
Image os;
Graphics og;
String mf[] = {"{","{","|","|","~","","i","j","","I"};
String form[] = {"S","S","S","S","","","","","",""};
String fo[] = new String[10];
String ca[] = new String[10];
String cb[] = new String[10];
String sf[] = new String[8];
int msw[] = new int[10];
int asw[] = new int[30];
Font f1 = new Font("",Font.BOLD,30);
Font f2 = new Font("",Font.BOLD,20);
FontMetrics fm;
int cs,sq=-1,aa;
int px;
int k1=-1,k2=-1;
public void init(){
os = createImage(360,260);
og = os.getGraphics();
d_set();
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
if((e.getY()>105)&&(e.getY()<135)){
cs = (e.getX() - 15)/30;
}else if((e.getY()>30)&&(e.getY()<60)){
px = (e.getX() - 30)/30;
if(msw[px] == 0){
for(int rt = 0;rt<10-cs-1;rt ++){
fo[10-rt-1] = fo[10-rt-2];
}
fo[cs] = mf[px];
msw[px] = 1;
cs ++;
}
}else if((e.getY()>75)&&(e.getY()<95)){
if((e.getX()>90)&&(e.getX()<150)){
d_set();
}else if((e.getX()>210)&&(e.getX()<270)){
for(int c1 = 0;c1 < 10;c1 ++){
ca[c1] = "";cb[c1] = "";cb[c1] = fo[c1];
}
k1 = -1;k2 = -1;
for(int ch = 0;ch < 10;ch ++){
if(cb[ch] == "i")k1 = ch;
if(cb[ch] == "j")k2 = ch;
}
if((k1 >= 0)&&(k2 > 0)&&(k1 < k2)){
for(int c1 = k1+1;c1 < k2;c1 ++){
ca[c1-k1-1] = cb[c1];
}
calc();
if(ca[1] == ""){
cb[k1] = ca[0];
for(int c1 = k1+1;c1 < 10;c1 ++){
if((c1-k1+k2)<10){
cb[c1] = cb[c1-k1+k2];
}else{
cb[c1] = "";
}
}
}
}
for(int c1 = 0;c1 < 10;c1 ++){
ca[c1] = cb[c1];
}
calc();
if(ca[1] ==""){
if((Integer.parseInt(ca[0])>0)&&(Integer.parseInt(ca[0])<31))asw[Integer.parseInt(ca[0])-1] = 1;
sq = Integer.parseInt(ca[0])-1;
}else{
sq = -1;
}
}
}
repaint();
}
}
);
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,360,260);
og.setFont(f1);
fm = getFontMetrics(f1);
for(int dr = 0;dr < 10;dr ++){
if(msw[dr] == 0){
og.setColor(Color.lightGray);
}else{
og.setColor(Color.gray);
}
og.fill3DRect(30*dr+30,30,30,30,true);
og.setColor(Color.black);
og.drawString(fo[dr],30*dr+30+(30-fm.stringWidth(fo[dr]))/2,135);
og.drawString(mf[dr],30*dr+30+(30-fm.stringWidth(mf[dr]))/2,56);
}
og.setFont(f2);
fm = getFontMetrics(f2);
for(int dr = 0;dr < 30;dr ++){
if(asw[dr] == 0){
og.setColor(Color.lightGray);
}else{
og.setColor(Color.blue);
}
og.drawString(""+(dr+1),30*(dr%10)+30+(30-fm.stringWidth(Integer.toString(dr+1)))/2,176+(dr/10)*30);
}
og.setColor(Color.blue);
og.drawRoundRect(90,75,60,20,5,5);
if((sq >= 0)&&(sq < 30))og.drawRoundRect(sq%10*30+30,sq/10*30+153,30,30,10,10);
og.setColor(Color.black);
og.drawString("reset",90+(60-fm.stringWidth("reset"))/2,92);
og.drawString("check",210+(60-fm.stringWidth("check"))/2,92);
og.setColor(Color.gray);
og.drawLine(cs*30+30,110,cs*30+30,140);
og.setColor(Color.red);
og.drawRoundRect(210,75,60,20,5,5);
aa = 1;
for(int c1 = 0;c1 < 30;c1 ++){
aa = aa * asw[c1];
}
if(aa == 1){
og.setFont(new Font("",Font.BOLD,60));
og.setColor(Color.black);
og.drawString("complete!!",50,220);
og.setColor(Color.red);
og.drawString("complete!!",45,215);
}
g.drawImage(os,0,0,this);
}
public void d_set(){
for(int dr = 0;dr < 10;dr ++){
fo[dr] = form[dr];
msw[dr] = 0;
}
cs = 0;
}
public void calc(){
for(int c1 = 0;c1 < 9;c1 ++){
if((ca[c1] == "S")&&(ca[c1+1]) == "S"){
if((c1 < 8)&&(ca[c1+2] == "S")){
if((c1 < 7)&&(ca[c1+3] == "S")){
ca[c1] = "SSSS";
for(int c2 = c1+1;c2 < 10;c2 ++)ca[c2] = "";
}else{
cs = c1;
ca[cs] = "SSS";
for(int c2 = cs+1;c2 < 8;c2 ++){
ca[c2] = ca[c2+2];
}
ca[8] = "";ca[9] = "";
}
}else{
cs = c1;
ca[cs] = "SS";
for(int c2 = cs+1;c2 < 9;c2 ++){
ca[c2] = ca[c2+1];
}
ca[9] = "";
}
}
}
for(int c1 = 0;c1 < 9;c1 ++){
if(ca[c1] == ""){
if((ca[c1+1] == "S")||(Integer.parseInt(ca[c1+1]) == 16)){
cs = c1;
if(ca[c1+1] == "S")ca[cs] = "Q";
if(Integer.parseInt(ca[c1+1]) == 16)ca[cs] = "S";
for(int c2 = cs+1;c2 < 9;c2 ++){
ca[c2] = ca[c2+1];
}
ca[9] = "";
}
}
}
for(int c1 = 0;c1 < 10;c1 ++){
if(ca[c1] == "I"){
if((c1 > 0)&&(ca[c1-1] == "S")){
cs = c1-1;
ca[cs] = "QS";
for(int c2 = cs+1;c2 < 9;c2 ++){
ca[c2] = ca[c2+1];
}
ca[9] = "";
}
}
}
for(int c1 = 0;c1 < 10;c1 ++){
if((ca[c1] == "~")||(ca[c1] == "")){
if((c1 > 0)&&(c1 < 9)){
if((ca[c1-1] != "{")&&(ca[c1-1] != "|")&&(ca[c1-1] != "~")&&(ca[c1-1] != "")&&(ca[c1+1] != "{")&&(ca[c1+1] != "|")&&(ca[c1+1] != "~")&&(ca[c1+1] != "")){
cs = c1 - 1;
if(ca[c1] == "~"){
ca[cs] = Integer.toString(Integer.parseInt(ca[cs])*Integer.parseInt(ca[cs+2]));
for(int c2 = cs+1;c2 < 8;c2 ++){
ca[c2] = ca[c2+2];
}
ca[8]="";ca[9] = "";
c1 --;
}else{
if(Integer.parseInt(ca[cs])%Integer.parseInt(ca[cs+2]) == 0){
ca[cs] = Integer.toString(Integer.parseInt(ca[cs])/Integer.parseInt(ca[cs+2]));
for(int c2 = cs+1;c2 < 8;c2 ++){
ca[c2] = ca[c2+2];
}
ca[8]="";ca[9] = "";
c1 --;
}
}
}
}
}
}
for(int c1 = 0;c1 < 10;c1 ++){
if((ca[c1] == "{")||(ca[c1] == "|")){
if((c1 > 0)&&(c1 < 9)){
if((ca[c1-1] != "{")&&(ca[c1-1] != "|")&&(ca[c1+1] != "{")&&(ca[c1+1] != "|")){
cs = c1 - 1;
if(ca[c1] == "{"){
ca[cs] = Integer.toString(Integer.parseInt(ca[cs])+Integer.parseInt(ca[cs+2]));
for(int c2 = cs+1;c2 < 8;c2 ++){
ca[c2] = ca[c2+2];
}
ca[8]="";ca[9] = "";
c1 --;
}else{
ca[cs] = Integer.toString(Integer.parseInt(ca[cs])-Integer.parseInt(ca[cs+2]));
for(int c2 = cs+1;c2 < 8;c2 ++){
ca[c2] = ca[c2+2];
}
ca[8]="";ca[9] = "";
c1 --;
}
}
}
}
}
}
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(100);
}
catch (InterruptedException e){
}
}
}
public void update( Graphics g ){
paint( g ) ;
}
}
