Arrange Map Code
from collections import deque
import itertools
def get_shortest_path(grid, N):
start = None
end = None
for i in range(N):
for j in range(N):
if grid[i][j] == 'S':
start = (i, j)
elif grid[i][j] == 'D':
end = (i, j)
queue = deque([(start, 0)])
visited = {start}
while queue:
(x, y), dist = queue.popleft()
if grid[x][y] == 'D':
return dist
for nx, ny in [(x+1, y), (x-1, y), (x, y+1), (x, y-1)]:
if 0 <= nx < N and 0 <= ny < N and (nx, ny) not in visited and grid[nx][ny] != 'T':
visited.add((nx, ny))
queue.append(((nx, ny), dist + 1))
return float('inf')
def get_sheets(grid, N, M):
sheets = []
for i in range(0, N, M):
for j in range(0, N, M):
sheet = []
for x in range(M):
row = []
for y in range(M):
row.append(grid[i+x][j+y])
sheet.append(row)
sheets.append(sheet)
return sheets
def make_grid(arrangement, sheets, N, M):
grid = [["" for _ in range(N)] for _ in range(N)]
num_sheets = N // M
for idx, sheet_idx in enumerate(arrangement):
sheet = sheets[sheet_idx]
base_i = (idx // num_sheets) * M
base_j = (idx % num_sheets) * M
for i in range(M):
for j in range(M):
grid[base_i + i][base_j + j] = sheet[i][j]
return grid
def solve():
N, M = map(int, input().split())
original_grid = []
for _ in range(N):
original_grid.append(list(input().strip()))
sheets = get_sheets(original_grid, N, M)
num_sheets = (N // M) ** 2
s_sheet = d_sheet = None
for i, sheet in enumerate(sheets):
for row in sheet:
if 'S' in row:
s_sheet = i
if 'D' in row:
d_sheet = i
min_dist = float('inf')
nums = list(range(num_sheets))
nums.remove(s_sheet)
nums.remove(d_sheet)
for middle_perm in itertools.permutations(nums):
arrangement = [s_sheet] + list(middle_perm) + [d_sheet]
grid = make_grid(arrangement, sheets, N, M)
min_dist = min(min_dist, get_shortest_path(grid, N))
return min_dist
if name == "main":
print(solve())
Arrange Map Code โ โ โ
Full Passed , Remove Plagrism Guys
from collections import deque
import itertools
def get_shortest_path(grid, N):
start = None
end = None
for i in range(N):
for j in range(N):
if grid[i][j] == 'S':
start = (i, j)
elif grid[i][j] == 'D':
end = (i, j)
queue = deque([(start, 0)])
visited = {start}
while queue:
(x, y), dist = queue.popleft()
if grid[x][y] == 'D':
return dist
for nx, ny in [(x+1, y), (x-1, y), (x, y+1), (x, y-1)]:
if 0 <= nx < N and 0 <= ny < N and (nx, ny) not in visited and grid[nx][ny] != 'T':
visited.add((nx, ny))
queue.append(((nx, ny), dist + 1))
return float('inf')
def get_sheets(grid, N, M):
sheets = []
for i in range(0, N, M):
for j in range(0, N, M):
sheet = []
for x in range(M):
row = []
for y in range(M):
row.append(grid[i+x][j+y])
sheet.append(row)
sheets.append(sheet)
return sheets
def make_grid(arrangement, sheets, N, M):
grid = [["" for _ in range(N)] for _ in range(N)]
num_sheets = N // M
for idx, sheet_idx in enumerate(arrangement):
sheet = sheets[sheet_idx]
base_i = (idx // num_sheets) * M
base_j = (idx % num_sheets) * M
for i in range(M):
for j in range(M):
grid[base_i + i][base_j + j] = sheet[i][j]
return grid
def solve():
N, M = map(int, input().split())
original_grid = []
for _ in range(N):
original_grid.append(list(input().strip()))
sheets = get_sheets(original_grid, N, M)
num_sheets = (N // M) ** 2
s_sheet = d_sheet = None
for i, sheet in enumerate(sheets):
for row in sheet:
if 'S' in row:
s_sheet = i
if 'D' in row:
d_sheet = i
min_dist = float('inf')
nums = list(range(num_sheets))
nums.remove(s_sheet)
nums.remove(d_sheet)
for middle_perm in itertools.permutations(nums):
arrangement = [s_sheet] + list(middle_perm) + [d_sheet]
grid = make_grid(arrangement, sheets, N, M)
min_dist = min(min_dist, get_shortest_path(grid, N))
return min_dist
if name == "main":
print(solve())
Arrange Map Code โ โ โ
Full Passed , Remove Plagrism Guys
Form Alternating String code in Java8
All test cases passed ๐ฅ
All test cases passed ๐ฅ
Shanon Circuits code in java 8 โ
def first_meat_orders(num_of_orders, orders, size):
result = []
for i in range(0, num_of_orders-size+1):
screen_orders = orders[i:i+size]
meat_order_found = False
for order in screen_orders:
if order < 0: # Checking for meat-based pizza order
result.append(order)
meat_order_found = True
break
if not meat_order_found:
result.append(0)
meat_order_found = False
return result
result = []
for i in range(0, num_of_orders-size+1):
screen_orders = orders[i:i+size]
meat_order_found = False
for order in screen_orders:
if order < 0: # Checking for meat-based pizza order
result.append(order)
meat_order_found = True
break
if not meat_order_found:
result.append(0)
meat_order_found = False
return result
Forwarded from OffCampus Jobs | OnCampus Jobs | Daily Jobs Updates | Lastest Jobs | All Jobs | CSE Jobs | Fresher Jobs โฅ (Dushyant)
Hiring C programmer (Remote)
Micro Hiring!
For 2024 grads
Preferred Qualification: M.Tech
https://jobs.micro1.ai/post/4c49729f-c07c-4e05-bded-90c4e7199543
Micro Hiring!
For 2024 grads
Preferred Qualification: M.Tech
https://jobs.micro1.ai/post/4c49729f-c07c-4e05-bded-90c4e7199543
micro1 Job Portal
C Programmer | Apply on Job
Required Skills: Cplex technology, C Programming, C
Forwarded from OffCampus Jobs | OnCampus Jobs | Daily Jobs Updates | Lastest Jobs | All Jobs | CSE Jobs | Fresher Jobs โฅ (Dushyant)
Company Name : IBM
Batch : 2023/2022/2021 passouts
Role : Software Engineer 1
Link : https://careers.ibm.com/job/21327981/software-engineer-1-bangalore-in/
Batch : 2023/2022/2021 passouts
Role : Software Engineer 1
Link : https://careers.ibm.com/job/21327981/software-engineer-1-bangalore-in/
Forwarded from OffCampus Jobs | OnCampus Jobs | Daily Jobs Updates | Lastest Jobs | All Jobs | CSE Jobs | Fresher Jobs โฅ (Dushyant)
๐Opening in AI/ML Domain
Devrev(AI): https://boards.greenhouse.io/devrev/jobs/5248554004
Decan(ML): https://app.dover.com/apply/Deccan%20AI/e67320d5-5160-4f8c-abc5-3c6251bf103d?rs=42706078
Devrev(AI): https://boards.greenhouse.io/devrev/jobs/5248554004
Decan(ML): https://app.dover.com/apply/Deccan%20AI/e67320d5-5160-4f8c-abc5-3c6251bf103d?rs=42706078
job-boards.greenhouse.io
DevRev
<blockquote>
<p>Please apply only to the role and location that best fits you. Only your <strong><em>first application</em></strong> will be considered.</p>
</blockquote>
<p>Please apply only to the role and location that best fits you. Only your <strong><em>first application</em></strong> will be considered.</p>
</blockquote>
DESERT QUEEN CODE
C++
#include <bits/stdc++.h>
using namespace std;
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
bool isValid(int x, int y, int n, const vector<vector<char>>& grid)
{
return x >= 0 && x < n && y >= 0 && y < n && grid[x][y] != 'M';
}
int fMW(int n, const vector<vector<char>>& grid, pair<int, int> start, pair<int, int> end)
{
vector<vector<int>> EXAMASSISTANCE(n, vector<int>(n, INT_MAX));
queue<pair<int, int>> q;
q.push(start);
EXAMASSISTANCE[start.first][start.second] = 0;
while (!q.empty())
{
auto [x, y] = q.front();
q.pop();
for (int d = 0; d < 4; d++)
{
int nx = x + dir[d][0];
int ny = y + dir[d][1];
if (isValid(nx, ny, n, grid))
{
int cost = (grid[x][y] == 'T' && grid[nx][ny] == 'T') ? 0 : 1;
if (EXAMASSISTANCE[x][y] + cost < EXAMASSISTANCE[nx][ny])
{
EXAMASSISTANCE[nx][ny] = EXAMASSISTANCE[x][y] + cost;
q.push({nx, ny});
}
}
}
}
return EXAMASSISTANCE[end.first][end.second];
}
int main()
{
int n;
cin >> n;
vector<vector<char>> grid(n, vector<char>(n));
pair<int, int> start, end;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> grid[i][j];
if (grid[i][j] == 'S') start = {i, j};
if (grid[i][j] == 'E') end = {i, j};
}
}
int result = fMW(n, grid, start, end);
cout << result << endl;
return 0;
}
DESERT QUEEN
C++
โ๏ธ โ๏ธ โ๏ธ โ๏ธ
C++
#include <bits/stdc++.h>
using namespace std;
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
bool isValid(int x, int y, int n, const vector<vector<char>>& grid)
{
return x >= 0 && x < n && y >= 0 && y < n && grid[x][y] != 'M';
}
int fMW(int n, const vector<vector<char>>& grid, pair<int, int> start, pair<int, int> end)
{
vector<vector<int>> EXAMASSISTANCE(n, vector<int>(n, INT_MAX));
queue<pair<int, int>> q;
q.push(start);
EXAMASSISTANCE[start.first][start.second] = 0;
while (!q.empty())
{
auto [x, y] = q.front();
q.pop();
for (int d = 0; d < 4; d++)
{
int nx = x + dir[d][0];
int ny = y + dir[d][1];
if (isValid(nx, ny, n, grid))
{
int cost = (grid[x][y] == 'T' && grid[nx][ny] == 'T') ? 0 : 1;
if (EXAMASSISTANCE[x][y] + cost < EXAMASSISTANCE[nx][ny])
{
EXAMASSISTANCE[nx][ny] = EXAMASSISTANCE[x][y] + cost;
q.push({nx, ny});
}
}
}
}
return EXAMASSISTANCE[end.first][end.second];
}
int main()
{
int n;
cin >> n;
vector<vector<char>> grid(n, vector<char>(n));
pair<int, int> start, end;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> grid[i][j];
if (grid[i][j] == 'S') start = {i, j};
if (grid[i][j] == 'E') end = {i, j};
}
}
int result = fMW(n, grid, start, end);
cout << result << endl;
return 0;
}
DESERT QUEEN
C++
โ๏ธ โ๏ธ โ๏ธ โ๏ธ
LOOP MASTER
JAVA
import java.util.*;
public class loopMaster {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
List<String> EXAMASSISTANCE = new ArrayList<>();
for (int i = 0; i < n; i++) {
EXAMASSISTANCE.add(sc.nextLine().trim());
}
processCommands(EXAMASSISTANCE);
}
private static void processCommands(List<String> EXAMASSISTANCE) {
Stack<Integer> loopCounts = new Stack<>();
Stack<Integer> currIter = new Stack<>();
StringBuilder output = new StringBuilder();
int index = 0;
while (index < EXAMASSISTANCE.size()) {
String command = EXAMASSISTANCE.get(index);
if (command.startsWith("for")) {
int times = Integer.parseInt(command.split(" ")[1]);
loopCounts.push(times);
currIter.push(0);
} else if (command.equals("do")) {
} else if (command.equals("done")) {
int current = currIter.pop() + 1;
int max = loopCounts.pop();
if (current < max) {
loopCounts.push(max);
currIter.push(current);
index = findLoopStart(EXAMASSISTANCE, index);
continue;
}
} else if (command.startsWith("break")) {
int breakAt = Integer.parseInt(command.split(" ")[1]);
if (currIter.peek() + 1 == breakAt) {
loopCounts.pop();
currIter.pop();
index = findLoopEnd(EXAMASSISTANCE, index);
}
} else if (command.startsWith("continue")) {
int continueAt = Integer.parseInt(command.split(" ")[1]);
if (currIter.peek() + 1 == continueAt) {
int max = loopCounts.peek();
int current = currIter.pop() + 1;
if (current < max) {
currIter.push(current);
index = findLoopStart(EXAMASSISTANCE, index);
}
continue;
}
} else if (command.startsWith("print")) {
String message = command.substring(command.indexOf("\"") + 1, command.lastIndexOf("\""));
output.append(message).append("\n");
}
index++;
}
System.out.print(output.toString());
}
private static int findLoopStart(List<String> EXAMASSISTANCE, int ci) {
int nestedLoops = 0;
for (int i = ci - 1; i >= 0; i--) {
if (EXAMASSISTANCE.get(i).equals("done")) {
nestedLoops++;
} else if (EXAMASSISTANCE.get(i).equals("do")) {
if (nestedLoops == 0) {
return i;
}
nestedLoops--;
}
}
return 0;
}
private static int findLoopEnd(List<String> EXAMASSISTANCE, int ci) {
int nestedLoops = 0;
for (int i = ci + 1; i < EXAMASSISTANCE.size(); i++) {
if (EXAMASSISTANCE.get(i).equals("do")) {
nestedLoops++;
} else if (EXAMASSISTANCE.get(i).equals("done")) {
if (nestedLoops == 0) {
return i;
}
nestedLoops--;
}
}
return EXAMASSISTANCE.size();
}
}
LOOP MASTER CODE
JAVA
โ๏ธ โ๏ธ โ๏ธ โ๏ธ
JAVA
import java.util.*;
public class loopMaster {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
List<String> EXAMASSISTANCE = new ArrayList<>();
for (int i = 0; i < n; i++) {
EXAMASSISTANCE.add(sc.nextLine().trim());
}
processCommands(EXAMASSISTANCE);
}
private static void processCommands(List<String> EXAMASSISTANCE) {
Stack<Integer> loopCounts = new Stack<>();
Stack<Integer> currIter = new Stack<>();
StringBuilder output = new StringBuilder();
int index = 0;
while (index < EXAMASSISTANCE.size()) {
String command = EXAMASSISTANCE.get(index);
if (command.startsWith("for")) {
int times = Integer.parseInt(command.split(" ")[1]);
loopCounts.push(times);
currIter.push(0);
} else if (command.equals("do")) {
} else if (command.equals("done")) {
int current = currIter.pop() + 1;
int max = loopCounts.pop();
if (current < max) {
loopCounts.push(max);
currIter.push(current);
index = findLoopStart(EXAMASSISTANCE, index);
continue;
}
} else if (command.startsWith("break")) {
int breakAt = Integer.parseInt(command.split(" ")[1]);
if (currIter.peek() + 1 == breakAt) {
loopCounts.pop();
currIter.pop();
index = findLoopEnd(EXAMASSISTANCE, index);
}
} else if (command.startsWith("continue")) {
int continueAt = Integer.parseInt(command.split(" ")[1]);
if (currIter.peek() + 1 == continueAt) {
int max = loopCounts.peek();
int current = currIter.pop() + 1;
if (current < max) {
currIter.push(current);
index = findLoopStart(EXAMASSISTANCE, index);
}
continue;
}
} else if (command.startsWith("print")) {
String message = command.substring(command.indexOf("\"") + 1, command.lastIndexOf("\""));
output.append(message).append("\n");
}
index++;
}
System.out.print(output.toString());
}
private static int findLoopStart(List<String> EXAMASSISTANCE, int ci) {
int nestedLoops = 0;
for (int i = ci - 1; i >= 0; i--) {
if (EXAMASSISTANCE.get(i).equals("done")) {
nestedLoops++;
} else if (EXAMASSISTANCE.get(i).equals("do")) {
if (nestedLoops == 0) {
return i;
}
nestedLoops--;
}
}
return 0;
}
private static int findLoopEnd(List<String> EXAMASSISTANCE, int ci) {
int nestedLoops = 0;
for (int i = ci + 1; i < EXAMASSISTANCE.size(); i++) {
if (EXAMASSISTANCE.get(i).equals("do")) {
nestedLoops++;
} else if (EXAMASSISTANCE.get(i).equals("done")) {
if (nestedLoops == 0) {
return i;
}
nestedLoops--;
}
}
return EXAMASSISTANCE.size();
}
}
LOOP MASTER CODE
JAVA
โ๏ธ โ๏ธ โ๏ธ โ๏ธ
TOGGLE CHALLENGE CODE
JAVA
import java.util.*;
public class Toggle{
public static List<Integer> getPossibleDigits(Map<Integer, String> validDigits, String faultyDigit) {
List<Integer> potentialDigits = new ArrayList<>();
for (Map.Entry<Integer, String> entry : validDigits.entrySet()) {
int mismatches = 0;
String pattern = entry.getValue();
for (int i = 0; i < faultyDigit.length(); i++) {
if (faultyDigit.charAt(i) != pattern.charAt(i)) {
mismatches++;
}
}
if (mismatches <= 1) {
potentialDigits.add(entry.getKey());
}
}
return potentialDigits;
}
public static void solve() {
Scanner scanner = new Scanner(System.in);
List<String> segmentDisplay = new ArrayList<>();
for (int i = 0; i < 3; i++) {
segmentDisplay.add(scanner.nextLine().strip());
}
List<String> EXAMASSISTANCE = new ArrayList<>();
for (int i = 0; i < 3; i++) {
EXAMASSISTANCE.add(scanner.nextLine().strip());
}
Map<Integer, String> digitPatterns = new HashMap<>();
for (int digit = 0; digit < 10; digit++) {
StringBuilder pattern = new StringBuilder();
for (int row = 0; row < 3; row++) {
pattern.append(segmentDisplay.get(row).substring(digit * 3, (digit + 1) * 3));
}
digitPatterns.put(digit, pattern.toString());
}
List<List<Integer>> possibleNumbers = new ArrayList<>();
for (int i = 0; i < EXAMASSISTANCE.get(0).length() / 3; i++) {
StringBuilder faultyDigit = new StringBuilder();
for (int row = 0; row < 3; row++) {
faultyDigit.append(EXAMASSISTANCE.get(row).substring(i * 3, (i + 1) * 3));
}
List<Integer> matchingDigits = getPossibleDigits(digitPatterns, faultyDigit.toString());
if (matchingDigits.isEmpty()) {
System.out.print("Invalid");
return;
}
possibleNumbers.add(matchingDigits);
}
int totalSum = 0;
for (List<Integer> combination : getCombinations(possibleNumbers)) {
StringBuilder number = new StringBuilder();
for (int digit : combination) {
number.append(digit);
}
totalSum += Integer.parseInt(number.toString());
}
System.out.print(totalSum);
}
public static List<List<Integer>> getCombinations(List<List<Integer>> possibleNumbers) {
List<List<Integer>> result = new ArrayList<>();
getCombinationsHelper(possibleNumbers, 0, new ArrayList<>(), result);
return result;
}
private static void getCombinationsHelper(List<List<Integer>> possibleNumbers, int index, List<Integer> currentCombination, List<List<Integer>> result) {
if (index == possibleNumbers.size()) {
result.add(new ArrayList<>(currentCombination));
return;
}
for (int digit : possibleNumbers.get(index)) {
currentCombination.add(digit);
getCombinationsHelper(possibleNumbers, index + 1, currentCombination, result);
currentCombination.remove(currentCombination.size() - 1);
}
}
public static void main(String[] args) {
solve();
}
}
TOGGLE CHALLENGE CODE IN
JAVA
โ๏ธ โ๏ธ โ๏ธ โ๏ธ
JAVA
import java.util.*;
public class Toggle{
public static List<Integer> getPossibleDigits(Map<Integer, String> validDigits, String faultyDigit) {
List<Integer> potentialDigits = new ArrayList<>();
for (Map.Entry<Integer, String> entry : validDigits.entrySet()) {
int mismatches = 0;
String pattern = entry.getValue();
for (int i = 0; i < faultyDigit.length(); i++) {
if (faultyDigit.charAt(i) != pattern.charAt(i)) {
mismatches++;
}
}
if (mismatches <= 1) {
potentialDigits.add(entry.getKey());
}
}
return potentialDigits;
}
public static void solve() {
Scanner scanner = new Scanner(System.in);
List<String> segmentDisplay = new ArrayList<>();
for (int i = 0; i < 3; i++) {
segmentDisplay.add(scanner.nextLine().strip());
}
List<String> EXAMASSISTANCE = new ArrayList<>();
for (int i = 0; i < 3; i++) {
EXAMASSISTANCE.add(scanner.nextLine().strip());
}
Map<Integer, String> digitPatterns = new HashMap<>();
for (int digit = 0; digit < 10; digit++) {
StringBuilder pattern = new StringBuilder();
for (int row = 0; row < 3; row++) {
pattern.append(segmentDisplay.get(row).substring(digit * 3, (digit + 1) * 3));
}
digitPatterns.put(digit, pattern.toString());
}
List<List<Integer>> possibleNumbers = new ArrayList<>();
for (int i = 0; i < EXAMASSISTANCE.get(0).length() / 3; i++) {
StringBuilder faultyDigit = new StringBuilder();
for (int row = 0; row < 3; row++) {
faultyDigit.append(EXAMASSISTANCE.get(row).substring(i * 3, (i + 1) * 3));
}
List<Integer> matchingDigits = getPossibleDigits(digitPatterns, faultyDigit.toString());
if (matchingDigits.isEmpty()) {
System.out.print("Invalid");
return;
}
possibleNumbers.add(matchingDigits);
}
int totalSum = 0;
for (List<Integer> combination : getCombinations(possibleNumbers)) {
StringBuilder number = new StringBuilder();
for (int digit : combination) {
number.append(digit);
}
totalSum += Integer.parseInt(number.toString());
}
System.out.print(totalSum);
}
public static List<List<Integer>> getCombinations(List<List<Integer>> possibleNumbers) {
List<List<Integer>> result = new ArrayList<>();
getCombinationsHelper(possibleNumbers, 0, new ArrayList<>(), result);
return result;
}
private static void getCombinationsHelper(List<List<Integer>> possibleNumbers, int index, List<Integer> currentCombination, List<List<Integer>> result) {
if (index == possibleNumbers.size()) {
result.add(new ArrayList<>(currentCombination));
return;
}
for (int digit : possibleNumbers.get(index)) {
currentCombination.add(digit);
getCombinationsHelper(possibleNumbers, index + 1, currentCombination, result);
currentCombination.remove(currentCombination.size() - 1);
}
}
public static void main(String[] args) {
solve();
}
}
TOGGLE CHALLENGE CODE IN
JAVA
โ๏ธ โ๏ธ โ๏ธ โ๏ธ
Plague 2050
PYTHON
from collections import deque
def infected_neighbors_count(grid, a, b):
n = len(grid)
count = 0
directions = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
for i in range(len(directions)):
dx, dy = directions[i]
nx, ny = a + dx, b + dy
if 0 <= nx < n and 0 <= ny < n and grid[nx][ny] == 1:
count += 1
return count
def infection_process(grid):
n = len(grid)
new_grid = [[grid[i][j] for j in range(n)] for i in range(n)]
for i in range(n):
for j in range(n):
neighbors = infected_neighbors_count(grid, i, j)
if grid[i][j] == 0 and neighbors == 3:
new_grid[i][j] = 1
elif grid[i][j] == 1 and (neighbors < 2 or neighbors > 3):
new_grid[i][j] = 0
return new_grid
def find_path(size, initial_grid):
grid = [[1 if cell == '1' else 0 for cell in row] for row in initial_grid]
start_x, start_y, end_x, end_y = -1, -1, -1, -1
def set_positions():
nonlocal start_x, start_y, end_x, end_y
for i in range(size):
for j in range(size):
if initial_grid[i][j] == 's':
start_x, start_y = i, j
grid[i][j] = 0
if initial_grid[i][j] == 'd':
end_x, end_y = i, j
grid[i][j] = 0
set_positions()
queue = deque([(start_x, start_y, grid, 0)])
seen_states = set()
while queue:
x, y, current_grid, days = queue.popleft()
if (x, y) == (end_x, end_y):
return days
state = (x, y, tuple(map(tuple, current_grid)))
if state in seen_states:
continue
seen_states.add(state)
next_grid = infection_process(current_grid)
moves = [(0, 0), (-1, 0), (1, 0), (0, -1), (0, 1)]
for dx, dy in moves:
nx, ny = x + dx, y + dy
if 0 <= nx < size and 0 <= ny < size and next_grid[nx][ny] == 0:
queue.append((nx, ny, next_grid, days + 1))
return -1
if name == "main":
n = int(input())
pollution_map = [input().strip() for _ in range(n)]
print(find_path(n, pollution_map) + 1)
PLAGUE 2050
Python
โ๏ธ โ๏ธ โ๏ธ โ๏ธ
PYTHON
from collections import deque
def infected_neighbors_count(grid, a, b):
n = len(grid)
count = 0
directions = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
for i in range(len(directions)):
dx, dy = directions[i]
nx, ny = a + dx, b + dy
if 0 <= nx < n and 0 <= ny < n and grid[nx][ny] == 1:
count += 1
return count
def infection_process(grid):
n = len(grid)
new_grid = [[grid[i][j] for j in range(n)] for i in range(n)]
for i in range(n):
for j in range(n):
neighbors = infected_neighbors_count(grid, i, j)
if grid[i][j] == 0 and neighbors == 3:
new_grid[i][j] = 1
elif grid[i][j] == 1 and (neighbors < 2 or neighbors > 3):
new_grid[i][j] = 0
return new_grid
def find_path(size, initial_grid):
grid = [[1 if cell == '1' else 0 for cell in row] for row in initial_grid]
start_x, start_y, end_x, end_y = -1, -1, -1, -1
def set_positions():
nonlocal start_x, start_y, end_x, end_y
for i in range(size):
for j in range(size):
if initial_grid[i][j] == 's':
start_x, start_y = i, j
grid[i][j] = 0
if initial_grid[i][j] == 'd':
end_x, end_y = i, j
grid[i][j] = 0
set_positions()
queue = deque([(start_x, start_y, grid, 0)])
seen_states = set()
while queue:
x, y, current_grid, days = queue.popleft()
if (x, y) == (end_x, end_y):
return days
state = (x, y, tuple(map(tuple, current_grid)))
if state in seen_states:
continue
seen_states.add(state)
next_grid = infection_process(current_grid)
moves = [(0, 0), (-1, 0), (1, 0), (0, -1), (0, 1)]
for dx, dy in moves:
nx, ny = x + dx, y + dy
if 0 <= nx < size and 0 <= ny < size and next_grid[nx][ny] == 0:
queue.append((nx, ny, next_grid, days + 1))
return -1
if name == "main":
n = int(input())
pollution_map = [input().strip() for _ in range(n)]
print(find_path(n, pollution_map) + 1)
PLAGUE 2050
Python
โ๏ธ โ๏ธ โ๏ธ โ๏ธ
MAXIMUM ROTATION
PYTHON
def rl(layer, pos, dir, ol):
n = len(layer)
rot = [None] * n
if dir == "clockwise":
for i in range(n):
rot[(i + pos) % n] = layer[i]
else:
for i in range(n):
rot[(i - pos) % n] = layer[i]
for i in range(n):
if ol:
rot[i] = chr(((ord(rot[i]) - ord('A') - 1) % 26) + ord('A'))
else:
rot[i] = chr(((ord(rot[i]) - ord('A') + 1) % 26) + ord('A'))
return rot
def aq(pl, row, col, size):
layers = []
for layer in range(size // 2):
cl = []
for j in range(col + layer, col + size - layer):
cl.append(pl[row + layer][j])
for i in range(row + layer + 1, row + size - layer - 1):
cl.append(pl[i][col + size - layer - 1])
for j in range(col + size - layer - 1, col + layer - 1, -1):
cl.append(pl[row + size - layer - 1][j])
for i in range(row + size - layer - 2, row + layer, -1):
cl.append(pl[i][col + layer])
layers.append(cl)
for lidx, layer in enumerate(layers):
ol = (lidx + 1) % 2 == 1
dir = "counterclockwise" if ol else "clockwise"
pos = lidx + 1
rotated_layer = rl(layer, pos, dir, ol)
idx = 0
for j in range(col + lidx, col + size - lidx):
pl[row + lidx][j] = rotated_layer[idx]
idx += 1
for i in range(row + lidx + 1, row + size - lidx - 1):
pl[i][col + size - lidx - 1] = rotated_layer[idx]
idx += 1
for j in range(col + size - lidx - 1, col + lidx - 1, -1):
pl[row + size - lidx - 1][j] = rotated_layer[idx]
idx += 1
for i in range(row + size - lidx - 2, row + lidx, -1):
pl[i][col + lidx] = rotated_layer[idx]
idx += 1
def MAX_ROTATION(n, pl, queries):
for row, col, size in queries:
aq(pl, row, col, size)
result = ''.join(''.join(row) for row in pl)
return result
n = int(input())
pl = [list(input().strip().split()) for _ in range(n)]
q = int(input().strip())
queries = [tuple(map(int, input().strip().split())) for _ in range(q)]
result = MAX_ROTATION(n, pl, queries)
print(result, end="")
MAXIMUM ROTATION
PYTHON
โ๏ธ โ๏ธ โ๏ธ โ๏ธ
PYTHON
def rl(layer, pos, dir, ol):
n = len(layer)
rot = [None] * n
if dir == "clockwise":
for i in range(n):
rot[(i + pos) % n] = layer[i]
else:
for i in range(n):
rot[(i - pos) % n] = layer[i]
for i in range(n):
if ol:
rot[i] = chr(((ord(rot[i]) - ord('A') - 1) % 26) + ord('A'))
else:
rot[i] = chr(((ord(rot[i]) - ord('A') + 1) % 26) + ord('A'))
return rot
def aq(pl, row, col, size):
layers = []
for layer in range(size // 2):
cl = []
for j in range(col + layer, col + size - layer):
cl.append(pl[row + layer][j])
for i in range(row + layer + 1, row + size - layer - 1):
cl.append(pl[i][col + size - layer - 1])
for j in range(col + size - layer - 1, col + layer - 1, -1):
cl.append(pl[row + size - layer - 1][j])
for i in range(row + size - layer - 2, row + layer, -1):
cl.append(pl[i][col + layer])
layers.append(cl)
for lidx, layer in enumerate(layers):
ol = (lidx + 1) % 2 == 1
dir = "counterclockwise" if ol else "clockwise"
pos = lidx + 1
rotated_layer = rl(layer, pos, dir, ol)
idx = 0
for j in range(col + lidx, col + size - lidx):
pl[row + lidx][j] = rotated_layer[idx]
idx += 1
for i in range(row + lidx + 1, row + size - lidx - 1):
pl[i][col + size - lidx - 1] = rotated_layer[idx]
idx += 1
for j in range(col + size - lidx - 1, col + lidx - 1, -1):
pl[row + size - lidx - 1][j] = rotated_layer[idx]
idx += 1
for i in range(row + size - lidx - 2, row + lidx, -1):
pl[i][col + lidx] = rotated_layer[idx]
idx += 1
def MAX_ROTATION(n, pl, queries):
for row, col, size in queries:
aq(pl, row, col, size)
result = ''.join(''.join(row) for row in pl)
return result
n = int(input())
pl = [list(input().strip().split()) for _ in range(n)]
q = int(input().strip())
queries = [tuple(map(int, input().strip().split())) for _ in range(q)]
result = MAX_ROTATION(n, pl, queries)
print(result, end="")
MAXIMUM ROTATION
PYTHON
โ๏ธ โ๏ธ โ๏ธ โ๏ธ