diff --git a/P10.java b/P10.java
new file mode 100644
index 0000000..eb56b62
--- /dev/null
+++ b/P10.java
@@ -0,0 +1,85 @@
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.*;
+
+public class P10 extends JFrame {
+ private JTextArea textArea;
+ private JFileChooser fileChooser;
+
+ public P10() {
+ setTitle("Swing Text Editor");
+ setSize(800, 600);
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ setLocationRelativeTo(null);
+
+ textArea = new JTextArea();
+ JScrollPane scrollPane = new JScrollPane(textArea);
+ add(scrollPane, BorderLayout.CENTER);
+
+ fileChooser = new JFileChooser();
+
+ JMenuBar menuBar = new JMenuBar();
+ JMenu fileMenu = new JMenu("File");
+ JMenuItem openMenuItem = new JMenuItem("Open");
+ JMenuItem saveMenuItem = new JMenuItem("Save");
+ JMenuItem exitMenuItem = new JMenuItem("Exit");
+
+ openMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ int returnVal = fileChooser.showOpenDialog(P10.this);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ File file = fileChooser.getSelectedFile();
+ try {
+ BufferedReader reader = new BufferedReader(new FileReader(file));
+ textArea.read(reader, null);
+ reader.close();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ });
+
+ saveMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ int returnVal = fileChooser.showSaveDialog(P10.this);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ File file = fileChooser.getSelectedFile();
+ try {
+ BufferedWriter writer = new BufferedWriter(new FileWriter(file));
+ textArea.write(writer);
+ writer.close();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ });
+
+ exitMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ System.exit(0);
+ }
+ });
+
+ fileMenu.add(openMenuItem);
+ fileMenu.add(saveMenuItem);
+ fileMenu.add(exitMenuItem);
+ menuBar.add(fileMenu);
+ setJMenuBar(menuBar);
+ }
+
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ P10 editor = new P10();
+ editor.setVisible(true);
+ }
+ });
+ }
+}
diff --git a/P11.java b/P11.java
new file mode 100644
index 0000000..18096ba
--- /dev/null
+++ b/P11.java
@@ -0,0 +1,31 @@
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class P11 extends HttpServlet {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ Cookie[] cookies = request.getCookies();
+
+ boolean isNewVisitor = true;
+ int visitCount = 1;
+
+ if (cookies != null) {
+ for (Cookie cookie : cookies) {
+ if (cookie.getName().equals("visitCount")) {
+ isNewVisitor = false;
+ visitCount = Integer.parseInt(cookie.getValue());
+ visitCount++;
+ break;
+ }
+ }
+ }
+
+ Cookie visitCountCookie = new Cookie("visitCount", String.valueOf(visitCount));
+ visitCountCookie.setMaxAge(24 * 60 * 60);
+ response.addCookie(visitCountCookie);
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
+}
diff --git a/P12.java b/P12.java
new file mode 100644
index 0000000..cf913be
--- /dev/null
+++ b/P12.java
@@ -0,0 +1,43 @@
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+public class P12 {
+ private String name;
+ private int age;
+ private PropertyChangeSupport propertyChangeSupport;
+
+ public P12() {
+ propertyChangeSupport = new PropertyChangeSupport(this);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ String oldName = this.name;
+ this.name = name;
+ propertyChangeSupport.firePropertyChange("name", oldName, name);
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ if (age < 0) {
+ throw new IllegalArgumentException("Age cannot be negative");
+ }
+ int oldAge = this.age;
+ this.age = age;
+ propertyChangeSupport.firePropertyChange("age", oldAge, age);
+ }
+
+ public void addPropertyChangeListener(PropertyChangeListener listener) {
+ propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+
+ public void removePropertyChangeListener(PropertyChangeListener listener) {
+ propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+}
diff --git a/P13.html b/P13.html
new file mode 100644
index 0000000..90067a7
--- /dev/null
+++ b/P13.html
@@ -0,0 +1,9 @@
+
+
+ Tic Tac Toe
+
+
+
+
+
diff --git a/P13.java b/P13.java
new file mode 100644
index 0000000..51112a3
--- /dev/null
+++ b/P13.java
@@ -0,0 +1,99 @@
+import java.applet.*;
+import java.awt.*;
+import java.awt.event.*;
+
+public class P13 extends Applet {
+ private Button[] buttons;
+ private Label statusLabel;
+ private int currentPlayer;
+
+ public void init() {
+ setLayout(new BorderLayout());
+
+ buttons = new Button[9];
+ for (int i = 0; i < 9; i++) {
+ buttons[i] = new Button("");
+ buttons[i].addActionListener(new ButtonClickListener());
+ }
+
+ statusLabel = new Label("Player 1's turn");
+ statusLabel.setAlignment(Label.CENTER);
+
+ Panel buttonPanel = new Panel(new GridLayout(3, 3));
+ for (int i = 0; i < 9; i++) {
+ buttonPanel.add(buttons[i]);
+ }
+
+ add(buttonPanel, BorderLayout.CENTER);
+ add(statusLabel, BorderLayout.SOUTH);
+ currentPlayer = 1;
+ }
+
+ private class ButtonClickListener implements ActionListener {
+ public void actionPerformed(ActionEvent e) {
+ Button clickedButton = (Button) e.getSource();
+ int buttonIndex = -1;
+
+ for (int i = 0; i < 9; i++) {
+ if (buttons[i] == clickedButton) {
+ buttonIndex = i;
+ break;
+ }
+ }
+
+ if (!clickedButton.getLabel().equals("") || isGameOver()) {
+ return;
+ }
+
+ if (currentPlayer == 1) {
+ clickedButton.setLabel("X");
+ currentPlayer = 2;
+ statusLabel.setText("Player 2's turn");
+ } else {
+ clickedButton.setLabel("O");
+ currentPlayer = 1;
+ statusLabel.setText("Player 1's turn");
+ }
+
+ if (isGameOver()) {
+ if (currentPlayer == 1) {
+ statusLabel.setText("Player 2 wins!");
+ } else {
+ statusLabel.setText("Player 1 wins!");
+ }
+ } else if (isBoardFull()) {
+ statusLabel.setText("It's a draw!");
+ }
+ }
+ }
+
+ private boolean isGameOver() {
+ String[] symbols = { "X", "O" };
+ int[][] winCombinations = {
+ { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 },
+ { 0, 3, 6 }, { 1, 4, 7 }, { 2, 5, 8 },
+ { 0, 4, 8 }, { 2, 4, 6 }
+ };
+
+ for (int[] combination : winCombinations) {
+ String symbol = buttons[combination[0]].getLabel();
+ if (!symbol.equals("") &&
+ symbol.equals(buttons[combination[1]].getLabel()) &&
+ symbol.equals(buttons[combination[2]].getLabel())) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private boolean isBoardFull() {
+ for (Button button : buttons) {
+ if (button.getLabel().equals("")) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/P14.html b/P14.html
new file mode 100644
index 0000000..1e0e41b
--- /dev/null
+++ b/P14.html
@@ -0,0 +1,9 @@
+
+
+ Moving Banner
+
+
+
+
+
diff --git a/P14.java b/P14.java
new file mode 100644
index 0000000..c25e81c
--- /dev/null
+++ b/P14.java
@@ -0,0 +1,49 @@
+import java.applet.Applet;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics;
+
+public class P14 extends Applet implements Runnable {
+ private String bannerText;
+ private int xCoordinate;
+ private Thread thread;
+
+ public void init() {
+ bannerText = "Goofy ahh banner!";
+ xCoordinate = getWidth();
+
+ setBackground(Color.WHITE);
+ setForeground(Color.BLACK);
+ setFont(new Font("Arial", Font.BOLD, 20));
+ }
+
+ public void start() {
+ if (thread == null) {
+ thread = new Thread(this);
+ thread.start();
+ }
+ }
+
+ public void run() {
+ while (true) {
+ xCoordinate -= 5;
+
+ if (xCoordinate + 200 < 0) {
+ xCoordinate = getWidth();
+ }
+
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ repaint();
+ }
+ }
+
+ public void paint(Graphics g) {
+ g.clearRect(0, 0, getWidth(), getHeight());
+ g.drawString(bannerText, xCoordinate, 50);
+ }
+}
diff --git a/P15.in b/P15.in
new file mode 100644
index 0000000..55c6c57
--- /dev/null
+++ b/P15.in
@@ -0,0 +1,3 @@
+alo, i am
+a decapitated corpse
+speaking, good morning
diff --git a/P15.java b/P15.java
new file mode 100644
index 0000000..2b9a196
--- /dev/null
+++ b/P15.java
@@ -0,0 +1,46 @@
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
+public class P15 {
+ public static void main(String[] args) {
+ String filename = "P15.in";
+
+ int letterCount = 0;
+ int vowelCount = 0;
+ int wordCount = 0;
+
+ try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
+ int cint;
+ boolean eating = true;
+
+ while ((cint = br.read()) != -1) {
+ char c = (char) cint;
+
+ if (Character.isLetter(c)) {
+ eating = false;
+ letterCount++;
+
+ if (isVowel(Character.toLowerCase(c))) {
+ vowelCount++;
+ }
+ } else {
+ if (!eating) {
+ eating = true;
+ wordCount++;
+ }
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("Letter count: " + letterCount);
+ System.out.println("Vowel count: " + vowelCount);
+ System.out.println("Word count: " + wordCount);
+ }
+
+ private static boolean isVowel(char c) {
+ return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
+ }
+}
diff --git a/P6.in b/P6.in
new file mode 100644
index 0000000..55c6c57
--- /dev/null
+++ b/P6.in
@@ -0,0 +1,3 @@
+alo, i am
+a decapitated corpse
+speaking, good morning
diff --git a/P6.java b/P6.java
new file mode 100644
index 0000000..a3e6a4e
--- /dev/null
+++ b/P6.java
@@ -0,0 +1,20 @@
+import java.io.*;
+
+public class P6 {
+ public static void main(String[] args) throws IOException {
+ String filePath = "P6.in";
+
+ StringBuilder content = new StringBuilder();
+
+ try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ content.append(line.toUpperCase()).append("\n");
+ }
+ }
+
+ try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
+ writer.write(content.toString());
+ }
+ }
+}
diff --git a/P7.in b/P7.in
new file mode 100644
index 0000000..1157734
--- /dev/null
+++ b/P7.in
@@ -0,0 +1,6 @@
+carbon
+coffee
+kojima
+lester
+mole
+studios
diff --git a/P7.java b/P7.java
new file mode 100644
index 0000000..3d54ef1
--- /dev/null
+++ b/P7.java
@@ -0,0 +1,25 @@
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class P7 {
+ public static void main(String[] args) throws IOException {
+ String filePath = "P7.in";
+
+ List lines = new ArrayList<>();
+
+ try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
+ String line;
+ while ((line = reader.readLine()) != null)
+ lines.add(line + '\n');
+ }
+
+ Collections.sort(lines); //sort
+
+ try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {
+ for (String line: lines)
+ writer.write(line);
+ }
+ }
+}
diff --git a/P8.html b/P8.html
new file mode 100644
index 0000000..6a4bd37
--- /dev/null
+++ b/P8.html
@@ -0,0 +1,9 @@
+
+
+ Analog Clock
+
+
+
+
+
diff --git a/P8.java b/P8.java
new file mode 100644
index 0000000..57be798
--- /dev/null
+++ b/P8.java
@@ -0,0 +1,84 @@
+import java.applet.Applet;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.util.Calendar;
+
+public class P8 extends Applet implements Runnable {
+ Thread t = null;
+ boolean threadSuspended;
+ int hours = 0, minutes = 0, seconds = 0;
+
+ public void init() {
+ setBackground(Color.white);
+ }
+
+ public void start() {
+ if (threadSuspended) {
+ threadSuspended = false;
+ synchronized (this) {
+ notify();
+ }
+ }
+
+ if (t == null) {
+ t = new Thread(this);
+ threadSuspended = false;
+ t.start();
+ }
+ }
+
+ public void stop() {
+ threadSuspended = true;
+ }
+
+ public void run() {
+ try {
+ while (true) {
+ Calendar cal = Calendar.getInstance();
+ hours = cal.get(Calendar.HOUR_OF_DAY) % 12;
+ if (hours == 0)
+ hours += 1;
+ minutes = cal.get(Calendar.MINUTE);
+ seconds = cal.get(Calendar.SECOND);
+
+ repaint();
+ Thread.sleep(1000);
+ if (threadSuspended) {
+ synchronized (this) {
+ while (threadSuspended)
+ wait();
+ }
+ }
+ }
+ } catch (InterruptedException e) {
+ System.out.println("Process interrupted");
+ }
+ }
+
+ void drawHand(double angle, int radius, Graphics g) {
+ angle -= 0.5 * Math.PI;
+ int x = (int) (radius * Math.cos(angle));
+ int y = (int) (radius * Math.sin(angle));
+ g.drawLine(getWidth() / 2, getHeight() / 2, getWidth() / 2 + x, getHeight() / 2 + y);
+ }
+
+ public void paint(Graphics g) {
+ int radius = Math.min(getWidth(), getHeight()) / 2 - 10;
+ g.setColor(Color.blue);
+ g.drawOval(getWidth() / 2 - radius, getHeight() / 2 - radius, 2 * radius, 2 * radius);
+
+ g.setColor(Color.black);
+ g.fillOval(getWidth() / 2 - 5, getHeight() / 2 - 5, 10, 10);
+
+ double hourAngle = (hours + minutes / 60.0) * (2 * Math.PI / 12) - 0.5 * Math.PI;
+ double minuteAngle = (minutes + seconds / 60.0) * (2 * Math.PI / 60) - 0.5 * Math.PI;
+ double secondAngle = (seconds * 2 * Math.PI / 60) - 0.5 * Math.PI;
+
+ g.setColor(Color.black);
+ drawHand(hourAngle, radius / 2, g);
+ g.setColor(Color.gray);
+ drawHand(minuteAngle, (int) (0.8 * radius), g);
+ g.setColor(Color.red);
+ drawHand(secondAngle, (int) (0.9 * radius), g);
+ }
+}
diff --git a/P9.java b/P9.java
new file mode 100644
index 0000000..15f07e5
--- /dev/null
+++ b/P9.java
@@ -0,0 +1,154 @@
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class P9 extends JFrame {
+ private JTextField displayField;
+
+ public P9() {
+ setTitle("Scientific Calculator");
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ setResizable(true);
+
+ displayField = new JTextField();
+ displayField.setPreferredSize(new Dimension(300, 30));
+ displayField.setEditable(false);
+
+ JPanel buttonPanel = new JPanel(new GridLayout(6, 4, 10, 10));
+
+ String[] buttonLabels = {
+ "7", "8", "9", "/",
+ "4", "5", "6", "*",
+ "1", "2", "3", "-",
+ "0", ".", "=", "+",
+ "sin", "cos", "tan", "sqrt",
+ "e", "^", "pi", "clr"
+ };
+
+ for (String label : buttonLabels) {
+ JButton button = new JButton(label);
+ button.addActionListener(new ButtonClickListener());
+ buttonPanel.add(button);
+ }
+
+ setLayout(new FlowLayout());
+ add(displayField);
+ add(buttonPanel);
+
+ pack();
+ setLocationRelativeTo(null);
+ setVisible(true);
+ }
+
+ private class ButtonClickListener implements ActionListener {
+ public void actionPerformed(ActionEvent event) {
+ String command = event.getActionCommand();
+ String expression = displayField.getText();
+ if ("=".equals(command)) {
+ calculate();
+ } else if ("clr".equals(command)) {
+ displayField.setText("");
+ } else if ("sin".equals(command)) {
+ displayField.setText(String.valueOf(Math.sin(Double.parseDouble(expression))));
+ } else if ("cos".equals(command)) {
+ displayField.setText(String.valueOf(Math.cos(Double.parseDouble(expression))));
+ } else if ("tan".equals(command)) {
+ displayField.setText(String.valueOf(Math.tan(Double.parseDouble(expression))));
+ } else if ("sqrt".equals(command)) {
+ displayField.setText(String.valueOf(Math.sqrt(Double.parseDouble(expression))));
+ } else {
+ displayField.setText(displayField.getText() + command);
+ }
+ }
+
+ private void calculate() {
+ String expression = displayField.getText();
+ try {
+ double result = evaluateExpression(expression);
+ displayField.setText(String.valueOf(result));
+ } catch (NumberFormatException e) {
+ displayField.setText("Error");
+ }
+ }
+
+ private double evaluateExpression(String expression) {
+ return new Object() {
+ int pos = -1, ch;
+
+ void nextChar() {
+ ch = (++pos < expression.length()) ? expression.charAt(pos) : -1;
+ }
+
+ boolean eat(int charToEat) {
+ while (ch == ' ') nextChar();
+ if (ch == charToEat) {
+ nextChar();
+ return true;
+ }
+
+ return false;
+ }
+
+ double parse() {
+ nextChar();
+ double x = parseExpression();
+ if (pos < expression.length()) throw new RuntimeException("Unexpected character: " + (char) ch);
+ return x;
+ }
+
+ double parseExpression() {
+ double x = parseTerm();
+ while(true) {
+ if (eat('+')) x += parseTerm();
+ else if (eat('-')) x -= parseTerm();
+ else return x;
+ }
+ }
+
+ double parseTerm() {
+ double x = parseFactor();
+ while (true) {
+ if (eat('*')) x *= parseFactor();
+ else if (eat('/')) x /= parseFactor();
+ else return x;
+ }
+ }
+
+ double parseFactor() {
+ if (eat('+')) return parseFactor();
+ if (eat('-')) return -parseFactor();
+
+ double x;
+ int startPos = this.pos;
+ if (eat('(')) {
+ x = parseExpression();
+ eat(')');
+ } else if ((ch >= '0' && ch <= '9') || ch == '.') {
+ while ((ch >= '0' && ch <= '9') || ch == '.') nextChar();
+ x = Double.parseDouble(expression.substring(startPos, this.pos));
+ } else if (eat('e')) {
+ x = Math.E;
+ } else if (eat('p')) {
+ eat('i');
+ x = Math.PI;
+ } else {
+ throw new RuntimeException("Unexpected character: " + (char) ch);
+ }
+
+ if (eat('^')) x = Math.pow(x, parseFactor());
+
+ return x;
+ }
+ }.parse();
+ }
+ }
+
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ new P9();
+ }
+ });
+ }
+}