diff --git a/Array/LongStrWithoutRepeat.js b/Array/LongStrWithoutRepeat.js
similarity index 100%
rename from Array/LongStrWithoutRepeat.js
rename to Array/LongStrWithoutRepeat.js
diff --git a/DailyCode/basic todos with localstorage/index.js b/DailyCode/basic todos with localstorage/index.js
index 0cd7f58..8f48da2 100644
--- a/DailyCode/basic todos with localstorage/index.js
+++ b/DailyCode/basic todos with localstorage/index.js
@@ -1,90 +1,90 @@
-
-// console.log("Welcome to notes app. This is app.js");
-showNotes();
-
-// If user adds a note, add it to the localStorage
-let addBtn = document.getElementById("addBtn");
-addBtn.addEventListener("click", function(e) {
- let addTitle = document.getElementById('addTitle');
- let addTxt = document.getElementById("addTxt");
- let notes = localStorage.getItem("notes");
- if (notes == null) {
- notesObj = [];
- } else {
- notesObj = JSON.parse(notes);
- }
- let myObj = {
- title: addTitle.value,
- text: addTxt.value
- }
- notesObj.push(myObj);
- localStorage.setItem("notes", JSON.stringify(notesObj));
- addTxt.value = "";
- addTitle.value = "";
- showNotes();
-});
-
-
-
-
-
-
-// Function to show elements from localStorage
-function showNotes() {
- let notes = localStorage.getItem("notes");
- if (notes == null) {
- notesObj = [];
- } else {
- notesObj = JSON.parse(notes);
- }
- let html = "";
- notesObj.forEach(function(element, index) {
- html += `
-
-
-
${element.title.toUpperCase()}
-
${element.text}
-
-
-
`;
- });
- let notesElm = document.getElementById("notes");
- if (notesObj.length != 0) {
- notesElm.innerHTML = html;
- } else {
- notesElm.innerHTML = `Nothing to show! Use "Add a Note" section above to add notes.`;
- }
-}
-
-// Function to delete a note
-function deleteNote(index) {
-
- let notes = localStorage.getItem("notes");
- if (notes == null) {
- notesObj = [];
- } else {
- notesObj = JSON.parse(notes);
- }
-
- notesObj.splice(index, 1);
- localStorage.setItem("notes", JSON.stringify(notesObj));
- showNotes();
-}
-
-
-let search = document.getElementById('searchTxt');
-search.addEventListener("input", function(){
-
- let inputVal = search.value.toLowerCase();
- let noteCards = document.getElementsByClassName('noteCard');
- Array.from(noteCards).forEach(function(element){
- let cardTxt = element.getElementsByTagName("p")[0].innerText;
- if(cardTxt.includes(inputVal)){
- element.style.display = "block";
- }
- else{
- element.style.display = "none";
- }
-
- })
-})
+
+// console.log("Welcome to notes app. This is app.js");
+showNotes();
+
+// If user adds a note, add it to the localStorage
+let addBtn = document.getElementById("addBtn");
+addBtn.addEventListener("click", function(e) {
+ let addTitle = document.getElementById('addTitle');
+ let addTxt = document.getElementById("addTxt");
+ let notes = localStorage.getItem("notes");
+ if (notes == null) {
+ notesObj = [];
+ } else {
+ notesObj = JSON.parse(notes);
+ }
+ let myObj = {
+ title: addTitle.value,
+ text: addTxt.value
+ }
+ notesObj.push(myObj);
+ localStorage.setItem("notes", JSON.stringify(notesObj));
+ addTxt.value = "";
+ addTitle.value = "";
+ showNotes();
+});
+
+
+
+
+
+
+// Function to show elements from localStorage
+function showNotes() {
+ let notes = localStorage.getItem("notes");
+ if (notes == null) {
+ notesObj = [];
+ } else {
+ notesObj = JSON.parse(notes);
+ }
+ let html = "";
+ notesObj.forEach(function(element, index) {
+ html += `
+
+
+
${element.title.toUpperCase()}
+
${element.text}
+
+
+
`;
+ });
+ let notesElm = document.getElementById("notes");
+ if (notesObj.length != 0) {
+ notesElm.innerHTML = html;
+ } else {
+ notesElm.innerHTML = `Nothing to show! Use "Add a Note" section above to add notes.`;
+ }
+}
+
+// Function to delete a note
+function deleteNote(index) {
+
+ let notes = localStorage.getItem("notes");
+ if (notes == null) {
+ notesObj = [];
+ } else {
+ notesObj = JSON.parse(notes);
+ }
+
+ notesObj.splice(index, 1);
+ localStorage.setItem("notes", JSON.stringify(notesObj));
+ showNotes();
+}
+
+
+let search = document.getElementById('searchTxt');
+search.addEventListener("input", function(){
+
+ let inputVal = search.value.toLowerCase();
+ let noteCards = document.getElementsByClassName('noteCard');
+ Array.from(noteCards).forEach(function(element){
+ let cardTxt = element.getElementsByTagName("p")[0].innerText;
+ if(cardTxt.includes(inputVal)){
+ element.style.display = "block";
+ }
+ else{
+ element.style.display = "none";
+ }
+
+ })
+})
diff --git a/DailyCode/basic todos with localstorage/notes.html b/DailyCode/basic todos with localstorage/notes.html
index 82faa54..bc0b7f4 100644
--- a/DailyCode/basic todos with localstorage/notes.html
+++ b/DailyCode/basic todos with localstorage/notes.html
@@ -1,70 +1,70 @@
-
-
-
-
-
-
-
- Notes App
-
-
-
-
-
-
-
-
-
-
Welcome To Magic Notes
-
-
-
Title
-
-
-
-
Add a note
-
-
-
-
-
-
-
-
Your Notes
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ Notes App
+
+
+
+
+
+
+
+
+
+
Welcome To Magic Notes
+
+
+
Title
+
+
+
+
Add a note
+
+
+
+
+
+
+
+
Your Notes
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DynamicProgramming/Minimum path sum in Triangular Grid.cpp b/DynamicProgramming/Minimum path sum in Triangular Grid.cpp
index c0a5451..709ce59 100644
--- a/DynamicProgramming/Minimum path sum in Triangular Grid.cpp
+++ b/DynamicProgramming/Minimum path sum in Triangular Grid.cpp
@@ -1,19 +1,19 @@
-int f(int i, int j, int &n, vector> &t, vector> &dp){
- if(i >= n)
- return 0;
- if(dp[i][j] != -1)
- return dp[i][j];
- return dp[i][j] = t[i][j] + min(f(i+1, j, n, t, dp), f(i+1, j+1, n, t, dp));
-}
-int minimumPathSum(vector>& triangle, int n){
- vector dp(n, 0);
- for(int i=0; i=0; --i){
- for(int j=0; j<=i; ++j){
- dp[j] = triangle[i][j] + min(dp[j], dp[j+1]);
- }
- }
- return dp[0];
+int f(int i, int j, int &n, vector> &t, vector> &dp){
+ if(i >= n)
+ return 0;
+ if(dp[i][j] != -1)
+ return dp[i][j];
+ return dp[i][j] = t[i][j] + min(f(i+1, j, n, t, dp), f(i+1, j+1, n, t, dp));
+}
+int minimumPathSum(vector>& triangle, int n){
+ vector dp(n, 0);
+ for(int i=0; i=0; --i){
+ for(int j=0; j<=i; ++j){
+ dp[j] = triangle[i][j] + min(dp[j], dp[j+1]);
+ }
+ }
+ return dp[0];
}
\ No newline at end of file
diff --git a/GAMES/Memory Block Game/ReadMe.md b/GAMES/Memory Block Game/ReadMe.md
new file mode 100644
index 0000000..1e704ec
--- /dev/null
+++ b/GAMES/Memory Block Game/ReadMe.md
@@ -0,0 +1,7 @@
+# Memory Block Game
+
+A simple web based memory block game. You will be briefly showed all the blocks. Every block has its copy. Block will be activated if you choose two same blocks in consecutive turns otherwise blocks will disappear. Your task is to activate all blocks with minimum turns.
+
+# Controls
+
+Only Left Mouse Button
\ No newline at end of file
diff --git a/GAMES/Memory Block Game/app.js b/GAMES/Memory Block Game/app.js
new file mode 100644
index 0000000..d4f5aea
--- /dev/null
+++ b/GAMES/Memory Block Game/app.js
@@ -0,0 +1,74 @@
+const game = document.querySelector(".game-container")
+const newGameButton = document.querySelector(".new")
+const block = document.querySelector(".game-block")
+const movesText = document.querySelector(".moves")
+
+const picArray = ["alien", "control", "planet", "robot", "satellite", "shuttle", "ufo", "weapon", "alien", "control", "planet", "robot", "satellite", "shuttle", "ufo", "weapon"]
+var selected = []
+var moves = 0
+
+function shuffle(array) {
+ for (var i = array.length - 1; i > 0; i--) {
+ var j = Math.floor(Math.random() * (i + 1));
+ var temp = array[i];
+ array[i] = array[j];
+ array[j] = temp;
+ }
+ return array
+}
+
+function newGame() {
+ moves = 0
+ movesText.textContent = `Total Moves : ${moves}`
+
+ game.innerHTML = ``
+ const arr = shuffle(picArray)
+ for (let i = 0; i < 16; i++) {
+ game.innerHTML += `
+

+
`
+ }
+}
+
+function select(object) {
+ var f1 = 0
+ var f2 = 0
+ for (let i = 0; i < object.classList.length; i++) {
+ if (object.classList[i] == "not") {
+ f1 = 1
+ break
+ }
+ }
+ for (let i = 0; i < object.classList.length; i++) {
+ if (object.classList[i] == "off") {
+ f2 = 1
+ break
+ }
+ }
+ if (f1 == 0 || f2 == 0) {
+ return
+ }
+ else {
+ moves++;
+ movesText.textContent = `Total Moves : ${moves}`
+ object.classList.remove("off")
+ object.classList.add("on")
+ selected.push(object)
+ if (selected.length == 2) {
+ if (selected[0].getAttribute("data-object") == selected[1].getAttribute("data-object")) {
+ selected[0].classList.remove("not")
+ selected[1].classList.remove("not")
+ }
+ else {
+ selected[0].classList.remove("on")
+ selected[0].classList.add("off")
+ selected[1].classList.remove("on")
+ selected[1].classList.add("off")
+ }
+ selected = []
+ }
+ }
+}
+
+newGame()
+newGameButton.addEventListener("click", newGame)
diff --git a/GAMES/Memory Block Game/assets/alien.png b/GAMES/Memory Block Game/assets/alien.png
new file mode 100644
index 0000000..63ed9b8
Binary files /dev/null and b/GAMES/Memory Block Game/assets/alien.png differ
diff --git a/GAMES/Memory Block Game/assets/control.png b/GAMES/Memory Block Game/assets/control.png
new file mode 100644
index 0000000..dd4efa7
Binary files /dev/null and b/GAMES/Memory Block Game/assets/control.png differ
diff --git a/GAMES/Memory Block Game/assets/planet.png b/GAMES/Memory Block Game/assets/planet.png
new file mode 100644
index 0000000..642a058
Binary files /dev/null and b/GAMES/Memory Block Game/assets/planet.png differ
diff --git a/GAMES/Memory Block Game/assets/robot.png b/GAMES/Memory Block Game/assets/robot.png
new file mode 100644
index 0000000..2f8e2a8
Binary files /dev/null and b/GAMES/Memory Block Game/assets/robot.png differ
diff --git a/GAMES/Memory Block Game/assets/satellite.png b/GAMES/Memory Block Game/assets/satellite.png
new file mode 100644
index 0000000..3b0f354
Binary files /dev/null and b/GAMES/Memory Block Game/assets/satellite.png differ
diff --git a/GAMES/Memory Block Game/assets/shuttle.png b/GAMES/Memory Block Game/assets/shuttle.png
new file mode 100644
index 0000000..1f35f4d
Binary files /dev/null and b/GAMES/Memory Block Game/assets/shuttle.png differ
diff --git a/GAMES/Memory Block Game/assets/ufo.png b/GAMES/Memory Block Game/assets/ufo.png
new file mode 100644
index 0000000..b0c2437
Binary files /dev/null and b/GAMES/Memory Block Game/assets/ufo.png differ
diff --git a/GAMES/Memory Block Game/assets/weapon.png b/GAMES/Memory Block Game/assets/weapon.png
new file mode 100644
index 0000000..c96ffd8
Binary files /dev/null and b/GAMES/Memory Block Game/assets/weapon.png differ
diff --git a/GAMES/Memory Block Game/index.html b/GAMES/Memory Block Game/index.html
new file mode 100644
index 0000000..ee2eef7
--- /dev/null
+++ b/GAMES/Memory Block Game/index.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+ Memory Block Game
+
+
+
+
+
+
+
Memory Block Game
+ Total Moves : 0
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GAMES/Memory Block Game/style.css b/GAMES/Memory Block Game/style.css
new file mode 100644
index 0000000..8e72e82
--- /dev/null
+++ b/GAMES/Memory Block Game/style.css
@@ -0,0 +1,21 @@
+.game-container{
+ padding: 50px;
+ border-radius: 20px;
+}
+.off img{
+ animation: fadeOut 2s forwards;
+}
+.on img{
+ animation: fadeIn 2s forwards;
+}
+
+
+@keyframes fadeOut {
+ 0% {opacity: 1;display: block;}
+ 100% {opacity: 0;display: none;}
+}
+
+@keyframes fadeIn {
+ 0% {opacity: 0;display: none;}
+ 100% {opacity: 1;display: block;}
+}
\ No newline at end of file
diff --git a/Search/A-Star-GUI/AStarGUI.py b/Search/A-Star-GUI/AStarGUI.py
index e88843f..0f4d4b9 100644
--- a/Search/A-Star-GUI/AStarGUI.py
+++ b/Search/A-Star-GUI/AStarGUI.py
@@ -1,277 +1,277 @@
-# A * Pathfinding Algorithm 🌟
-
-# Implemented with pygame, this script will find the shortest distance between two nodes using A * Algorithm 🎮
-
-# Instructions / Keys Functionalities:
-# -Left Click to add start and end nodes
-# -Right Click to remove the nodes
-# -Space Bar to start finding the shortest distance
-# -'C' to clear and reset the grid
-
-# Requirements:
-# pip install pygame
-
-# By Susnata Goswami(https://github.com/proghead00)
-
-import pygame
-import math
-from queue import PriorityQueue
-
-WIDTH = 800
-WIN = pygame.display.set_mode((WIDTH, WIDTH)) # dimension to make it a square
-pygame.display.set_caption("A* Path Finding Algorithm")
-
-RED = (235, 77, 75)
-GREEN = (186, 220, 88)
-BLUE = (48, 51, 107)
-YELLOW = (249, 202, 36)
-WHITE = (255, 255, 255)
-BLACK = (53, 59, 72)
-PURPLE = (130, 88, 159)
-ORANGE = (225, 95, 65)
-GREY = (128, 128, 128)
-TURQUOISE = (10, 189, 227)
-
-
-class Spot:
- def __init__(self, row, col, width, total_rows):
- self.row = row
- self.col = col
- self.x = row * width
- self.y = col * width
- self.color = WHITE
- self.neighbors = []
- self.width = width
- self.total_rows = total_rows
-
- def get_pos(self):
- return self.row, self.col
-
- def is_closed(self):
- return self.color == RED
-
- def is_open(self):
- return self.color == GREEN
-
- def is_barrier(self):
- return self.color == BLACK
-
- def is_start(self):
- return self.color == ORANGE
-
- def is_end(self):
- return self.color == TURQUOISE
-
- def reset(self):
- self.color = WHITE
-
- def make_start(self):
- self.color = ORANGE
-
- def make_closed(self):
- self.color = RED
-
- def make_open(self):
- self.color = GREEN
-
- def make_barrier(self):
- self.color = BLACK
-
- def make_end(self):
- self.color = TURQUOISE
-
- def make_path(self):
- self.color = PURPLE
-
- def draw(self, win):
- pygame.draw.rect(
- win, self.color, (self.x, self.y, self.width, self.width))
-
- def update_neighbors(self, grid):
- self.neighbors = []
- # DOWN
- if self.row < self.total_rows - 1 and not grid[self.row + 1][self.col].is_barrier():
- self.neighbors.append(grid[self.row + 1][self.col])
-
- if self.row > 0 and not grid[self.row - 1][self.col].is_barrier(): # UP
- self.neighbors.append(grid[self.row - 1][self.col])
-
- # RIGHT
- if self.col < self.total_rows - 1 and not grid[self.row][self.col + 1].is_barrier():
- self.neighbors.append(grid[self.row][self.col + 1])
-
- if self.col > 0 and not grid[self.row][self.col - 1].is_barrier(): # LEFT
- self.neighbors.append(grid[self.row][self.col - 1])
-
- def __lt__(self, other):
- return False
-
-
-def h(p1, p2):
- x1, y1 = p1
- x2, y2 = p2
- return abs(x1 - x2) + abs(y1 - y2) # finding absolute distance
-
-
-def reconstruct_path(came_from, current, draw):
- while current in came_from:
- current = came_from[current]
- current.make_path()
- draw()
-
-
-def algorithm(draw, grid, start, end):
- count = 0
- open_set = PriorityQueue()
- open_set.put((0, count, start))
- came_from = {}
- # keeps track of current shortest distance from start node to this node
- g_score = {spot: float("inf") for row in grid for spot in row}
- g_score[start] = 0
- # keeps track of predicted distance from this node to end node
- f_score = {spot: float("inf") for row in grid for spot in row}
- f_score[start] = h(start.get_pos(), end.get_pos())
-
- open_set_hash = {start}
-
- while not open_set.empty():
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
-
- current = open_set.get()[2]
- open_set_hash.remove(current)
-
- if current == end:
- reconstruct_path(came_from, end, draw)
- end.make_end()
- return True
-
- for neighbor in current.neighbors:
- temp_g_score = g_score[current] + 1
-
- if temp_g_score < g_score[neighbor]:
- came_from[neighbor] = current
- g_score[neighbor] = temp_g_score
- f_score[neighbor] = temp_g_score + \
- h(neighbor.get_pos(), end.get_pos())
- if neighbor not in open_set_hash:
- count += 1
- open_set.put((f_score[neighbor], count, neighbor))
- open_set_hash.add(neighbor)
- neighbor.make_open()
-
- draw()
-
- if current != start:
- current.make_closed()
-
- return False
-
-
-def make_grid(rows, width):
- grid = []
- gap = width // rows # integer division: gap b/w each of these rows
- for i in range(rows):
- grid.append([])
- for j in range(rows):
- spot = Spot(i, j, gap, rows)
- grid[i].append(spot)
-
- return grid
-
-
-def draw_grid(win, rows, width):
- gap = width // rows
- for i in range(rows):
- pygame.draw.line(win, GREY, (0, i * gap),
- (width, i * gap)) # horizontal line
- for j in range(rows):
- pygame.draw.line(win, GREY, (j * gap, 0),
- (j * gap, width)) # vertical lines
-
-
-def draw(win, grid, rows, width):
- win.fill(WHITE)
-
- for row in grid:
- for spot in row:
- spot.draw(win)
-
- draw_grid(win, rows, width)
- pygame.display.update()
-
-# getting mouse postiion
-
-
-def get_clicked_pos(pos, rows, width):
- gap = width // rows
- y, x = pos
-
- row = y // gap
- col = x // gap
-
- return row, col
-
-
-def main(win, width):
- ROWS = 50
- grid = make_grid(ROWS, width)
-
- start = None
- end = None
-
- run = True
- while run:
- draw(win, grid, ROWS, width)
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- run = False
-
- if pygame.mouse.get_pressed()[0]: # LEFT MOUSE BUTTON: 0
- pos = pygame.mouse.get_pos()
- # actual spot in 2D list where mouse is clicked
- row, col = get_clicked_pos(pos, ROWS, width)
- spot = grid[row][col]
-
- # if start and end aren't done
- if not start and spot != end:
- start = spot
- start.make_start()
-
- # to avoid overlapping of start and end node
- elif not end and spot != start:
- end = spot
- end.make_end()
-
- elif spot != end and spot != start:
- spot.make_barrier()
-
- elif pygame.mouse.get_pressed()[2]: # RIGHT MOUSE BUTTON: 2
- pos = pygame.mouse.get_pos()
- row, col = get_clicked_pos(pos, ROWS, width)
- spot = grid[row][col]
- spot.reset()
- if spot == start:
- start = None
- elif spot == end:
- end = None
-
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_SPACE and start and end:
- for row in grid:
- for spot in row:
- spot.update_neighbors(grid)
-
- algorithm(lambda: draw(win, grid, ROWS, width),
- grid, start, end)
-
- if event.key == pygame.K_c:
- start = None
- end = None
- grid = make_grid(ROWS, width)
-
- pygame.quit()
-
-
-main(WIN, WIDTH)
+# A * Pathfinding Algorithm 🌟
+
+# Implemented with pygame, this script will find the shortest distance between two nodes using A * Algorithm 🎮
+
+# Instructions / Keys Functionalities:
+# -Left Click to add start and end nodes
+# -Right Click to remove the nodes
+# -Space Bar to start finding the shortest distance
+# -'C' to clear and reset the grid
+
+# Requirements:
+# pip install pygame
+
+# By Susnata Goswami(https://github.com/proghead00)
+
+import pygame
+import math
+from queue import PriorityQueue
+
+WIDTH = 800
+WIN = pygame.display.set_mode((WIDTH, WIDTH)) # dimension to make it a square
+pygame.display.set_caption("A* Path Finding Algorithm")
+
+RED = (235, 77, 75)
+GREEN = (186, 220, 88)
+BLUE = (48, 51, 107)
+YELLOW = (249, 202, 36)
+WHITE = (255, 255, 255)
+BLACK = (53, 59, 72)
+PURPLE = (130, 88, 159)
+ORANGE = (225, 95, 65)
+GREY = (128, 128, 128)
+TURQUOISE = (10, 189, 227)
+
+
+class Spot:
+ def __init__(self, row, col, width, total_rows):
+ self.row = row
+ self.col = col
+ self.x = row * width
+ self.y = col * width
+ self.color = WHITE
+ self.neighbors = []
+ self.width = width
+ self.total_rows = total_rows
+
+ def get_pos(self):
+ return self.row, self.col
+
+ def is_closed(self):
+ return self.color == RED
+
+ def is_open(self):
+ return self.color == GREEN
+
+ def is_barrier(self):
+ return self.color == BLACK
+
+ def is_start(self):
+ return self.color == ORANGE
+
+ def is_end(self):
+ return self.color == TURQUOISE
+
+ def reset(self):
+ self.color = WHITE
+
+ def make_start(self):
+ self.color = ORANGE
+
+ def make_closed(self):
+ self.color = RED
+
+ def make_open(self):
+ self.color = GREEN
+
+ def make_barrier(self):
+ self.color = BLACK
+
+ def make_end(self):
+ self.color = TURQUOISE
+
+ def make_path(self):
+ self.color = PURPLE
+
+ def draw(self, win):
+ pygame.draw.rect(
+ win, self.color, (self.x, self.y, self.width, self.width))
+
+ def update_neighbors(self, grid):
+ self.neighbors = []
+ # DOWN
+ if self.row < self.total_rows - 1 and not grid[self.row + 1][self.col].is_barrier():
+ self.neighbors.append(grid[self.row + 1][self.col])
+
+ if self.row > 0 and not grid[self.row - 1][self.col].is_barrier(): # UP
+ self.neighbors.append(grid[self.row - 1][self.col])
+
+ # RIGHT
+ if self.col < self.total_rows - 1 and not grid[self.row][self.col + 1].is_barrier():
+ self.neighbors.append(grid[self.row][self.col + 1])
+
+ if self.col > 0 and not grid[self.row][self.col - 1].is_barrier(): # LEFT
+ self.neighbors.append(grid[self.row][self.col - 1])
+
+ def __lt__(self, other):
+ return False
+
+
+def h(p1, p2):
+ x1, y1 = p1
+ x2, y2 = p2
+ return abs(x1 - x2) + abs(y1 - y2) # finding absolute distance
+
+
+def reconstruct_path(came_from, current, draw):
+ while current in came_from:
+ current = came_from[current]
+ current.make_path()
+ draw()
+
+
+def algorithm(draw, grid, start, end):
+ count = 0
+ open_set = PriorityQueue()
+ open_set.put((0, count, start))
+ came_from = {}
+ # keeps track of current shortest distance from start node to this node
+ g_score = {spot: float("inf") for row in grid for spot in row}
+ g_score[start] = 0
+ # keeps track of predicted distance from this node to end node
+ f_score = {spot: float("inf") for row in grid for spot in row}
+ f_score[start] = h(start.get_pos(), end.get_pos())
+
+ open_set_hash = {start}
+
+ while not open_set.empty():
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ pygame.quit()
+
+ current = open_set.get()[2]
+ open_set_hash.remove(current)
+
+ if current == end:
+ reconstruct_path(came_from, end, draw)
+ end.make_end()
+ return True
+
+ for neighbor in current.neighbors:
+ temp_g_score = g_score[current] + 1
+
+ if temp_g_score < g_score[neighbor]:
+ came_from[neighbor] = current
+ g_score[neighbor] = temp_g_score
+ f_score[neighbor] = temp_g_score + \
+ h(neighbor.get_pos(), end.get_pos())
+ if neighbor not in open_set_hash:
+ count += 1
+ open_set.put((f_score[neighbor], count, neighbor))
+ open_set_hash.add(neighbor)
+ neighbor.make_open()
+
+ draw()
+
+ if current != start:
+ current.make_closed()
+
+ return False
+
+
+def make_grid(rows, width):
+ grid = []
+ gap = width // rows # integer division: gap b/w each of these rows
+ for i in range(rows):
+ grid.append([])
+ for j in range(rows):
+ spot = Spot(i, j, gap, rows)
+ grid[i].append(spot)
+
+ return grid
+
+
+def draw_grid(win, rows, width):
+ gap = width // rows
+ for i in range(rows):
+ pygame.draw.line(win, GREY, (0, i * gap),
+ (width, i * gap)) # horizontal line
+ for j in range(rows):
+ pygame.draw.line(win, GREY, (j * gap, 0),
+ (j * gap, width)) # vertical lines
+
+
+def draw(win, grid, rows, width):
+ win.fill(WHITE)
+
+ for row in grid:
+ for spot in row:
+ spot.draw(win)
+
+ draw_grid(win, rows, width)
+ pygame.display.update()
+
+# getting mouse postiion
+
+
+def get_clicked_pos(pos, rows, width):
+ gap = width // rows
+ y, x = pos
+
+ row = y // gap
+ col = x // gap
+
+ return row, col
+
+
+def main(win, width):
+ ROWS = 50
+ grid = make_grid(ROWS, width)
+
+ start = None
+ end = None
+
+ run = True
+ while run:
+ draw(win, grid, ROWS, width)
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ run = False
+
+ if pygame.mouse.get_pressed()[0]: # LEFT MOUSE BUTTON: 0
+ pos = pygame.mouse.get_pos()
+ # actual spot in 2D list where mouse is clicked
+ row, col = get_clicked_pos(pos, ROWS, width)
+ spot = grid[row][col]
+
+ # if start and end aren't done
+ if not start and spot != end:
+ start = spot
+ start.make_start()
+
+ # to avoid overlapping of start and end node
+ elif not end and spot != start:
+ end = spot
+ end.make_end()
+
+ elif spot != end and spot != start:
+ spot.make_barrier()
+
+ elif pygame.mouse.get_pressed()[2]: # RIGHT MOUSE BUTTON: 2
+ pos = pygame.mouse.get_pos()
+ row, col = get_clicked_pos(pos, ROWS, width)
+ spot = grid[row][col]
+ spot.reset()
+ if spot == start:
+ start = None
+ elif spot == end:
+ end = None
+
+ if event.type == pygame.KEYDOWN:
+ if event.key == pygame.K_SPACE and start and end:
+ for row in grid:
+ for spot in row:
+ spot.update_neighbors(grid)
+
+ algorithm(lambda: draw(win, grid, ROWS, width),
+ grid, start, end)
+
+ if event.key == pygame.K_c:
+ start = None
+ end = None
+ grid = make_grid(ROWS, width)
+
+ pygame.quit()
+
+
+main(WIN, WIDTH)
diff --git a/Sorts/shellsort.js b/Sorts/shellsort.js
index c640822..4d833db 100644
--- a/Sorts/shellsort.js
+++ b/Sorts/shellsort.js
@@ -1,23 +1,23 @@
-shellSort = (array,gaps) => {
- for (var g = 0; g < gaps.length; g++) {
- var gap = gaps[g]
- for (var i = gap; i < array.length; i++) {
- var temp = array[i]
- for (var j = i; j >= gap && array[j - gap] > temp; j -= gap) {
- array[j] = array[j - gap]
- }
- array[j] = temp
- }
- }
- return array
-}
-
-var array = [5,2,8,4,1,3,7,9,2,9,6]
-var gaps = [66,31,14,5,1]
-shellSort(array, gaps)
-//(11)Â [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 9]
-
-
-
-
-
+shellSort = (array,gaps) => {
+ for (var g = 0; g < gaps.length; g++) {
+ var gap = gaps[g]
+ for (var i = gap; i < array.length; i++) {
+ var temp = array[i]
+ for (var j = i; j >= gap && array[j - gap] > temp; j -= gap) {
+ array[j] = array[j - gap]
+ }
+ array[j] = temp
+ }
+ }
+ return array
+}
+
+var array = [5,2,8,4,1,3,7,9,2,9,6]
+var gaps = [66,31,14,5,1]
+shellSort(array, gaps)
+//(11)Â [1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 9]
+
+
+
+
+
diff --git a/simple_calci/index.html b/simple_calci/index.html
index 877e17d..01be3d8 100644
--- a/simple_calci/index.html
+++ b/simple_calci/index.html
@@ -1,26 +1,26 @@
-
-
-
-
-
-
- Calculator
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Result:
-
-
-
-
+
+
+
+
+
+
+ Calculator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Result:
+
+
+
+
diff --git a/simple_calci/index.js b/simple_calci/index.js
index 08203ce..b23d709 100644
--- a/simple_calci/index.js
+++ b/simple_calci/index.js
@@ -1,27 +1,27 @@
-
-let result= document.getElementById("result")
-
-function add()
-{
- let num1 = document.getElementById("num1").value
- let num2 = document.getElementById("num2").value
-result.textContent = parseInt(num1) + parseInt(num2)
-}
-function subtract()
-{
- let num1 = document.getElementById("num1").value
- let num2 = document.getElementById("num2").value
-result.textContent = parseInt(num1) - parseInt(num2)
-}
-function divide()
-{
- let num1 = document.getElementById("num1").value
- let num2 = document.getElementById("num2").value
-result.textContent = parseInt(num1) / parseInt(num2)
-}
-function multiply()
-{
- let num1 = document.getElementById("num1").value
- let num2 = document.getElementById("num2").value
-result.textContent = parseInt(num1) * parseInt(num2)
-}
+
+let result= document.getElementById("result")
+
+function add()
+{
+ let num1 = document.getElementById("num1").value
+ let num2 = document.getElementById("num2").value
+result.textContent = parseInt(num1) + parseInt(num2)
+}
+function subtract()
+{
+ let num1 = document.getElementById("num1").value
+ let num2 = document.getElementById("num2").value
+result.textContent = parseInt(num1) - parseInt(num2)
+}
+function divide()
+{
+ let num1 = document.getElementById("num1").value
+ let num2 = document.getElementById("num2").value
+result.textContent = parseInt(num1) / parseInt(num2)
+}
+function multiply()
+{
+ let num1 = document.getElementById("num1").value
+ let num2 = document.getElementById("num2").value
+result.textContent = parseInt(num1) * parseInt(num2)
+}
diff --git a/simple_calci/s.css b/simple_calci/s.css
index 918e3e1..cf65098 100644
--- a/simple_calci/s.css
+++ b/simple_calci/s.css
@@ -1,31 +1,31 @@
-*{ margin: 0;
-padding: 0;}
-
-div{
- background-color: rgba(140, 187, 225, 0.604);
- border: 5px solid rgba(1, 1, 46, 0.866);
- width: 500px;
- height: 250px;
-
-
- text-align: center;
- margin: auto;
- margin-top: 100px;
-
- padding-top: 100px;
-
-}
-button{
- padding: 3px;
- border-radius: 5px;
-}
-input{
- border-radius: 5px;
- width: 70px;
- height: 30px;
- padding: 5px;
- font-size: 20px;
-}
-span{
- font-size: 30px;
+*{ margin: 0;
+padding: 0;}
+
+div{
+ background-color: rgba(140, 187, 225, 0.604);
+ border: 5px solid rgba(1, 1, 46, 0.866);
+ width: 500px;
+ height: 250px;
+
+
+ text-align: center;
+ margin: auto;
+ margin-top: 100px;
+
+ padding-top: 100px;
+
+}
+button{
+ padding: 3px;
+ border-radius: 5px;
+}
+input{
+ border-radius: 5px;
+ width: 70px;
+ height: 30px;
+ padding: 5px;
+ font-size: 20px;
+}
+span{
+ font-size: 30px;
}
\ No newline at end of file