Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions Exercises.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Exercises {

/*
there is an array of positive integers as input of function and another integer for the target value
all the algorithm should do is to find those two integers in array which their multiplication is the target
then it should return an array of their indices
e.g. {1, 2, 3, 4} with target of 8 -> {1, 3}

note: you should return the indices in ascending order and every array's solution is unique
*/
public int[] productIndices(int[] values, int target) {
for (int i = 0; i < values.length; i++) {
for (int j = i + 1; j < values.length; j++) {
if (values[i] * values[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}

/*
given a matrix of random integers, you should do spiral traversal in it
e.g. if the matrix is as shown below:
1 2 3
4 5 6
7 8 9
then the spiral traversal of that is:
{1, 2, 3, 6, 9, 8, 7, 4, 5}

so you should walk in that matrix in a curl and then add the numbers in order you've seen them in a 1D array
*/
public int[] spiralTraversal(int[][] values, int rows, int cols) {
int[] result = new int[rows * cols];
int index = 0;
int top = 0, bottom = rows - 1, left = 0, right = cols - 1;

while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
result[index++] = values[top][i];
}
top++;

for (int i = top; i <= bottom; i++) {
result[index++] = values[i][right];
}
right--;

if (top <= bottom) {
for (int i = right; i >= left; i--) {
result[index++] = values[bottom][i];
}
bottom--;
}

if (left <= right) {
for (int i = bottom; i >= top; i--) {
result[index++] = values[i][left];
}
left++;
}
}

return result;
}

/*
integer partitioning is a combinatorics problem in discreet maths
the problem is to generate sum numbers which their summation is the input number

e.g. 1 -> all partitions of integer 3 are:
3
2, 1
1, 1, 1

e.g. 2 -> for number 4 goes as:
4
3, 1
2, 2
2, 1, 1
1, 1, 1, 1

note: as you can see in examples, we want to generate distinct summations, which means 1, 2 and 2, 1 are no different
you should generate all partitions of the input number and

hint: you can measure the size and order of arrays by finding the pattern of partitions and their number
trust me, that one's fun and easy :)

if you're familiar with lists and arraylists, you can also edit method's body to use them instead of array
*/
public int[][] intPartitions(int n) {
ArrayList<int[]> partitionsList = new ArrayList<>();
int[] p = new int[n];
int k = 0;
p[k] = n;

while (true) {
int[] currentPartition = new int[k + 1];
System.arraycopy(p, 0, currentPartition, 0, k + 1);
partitionsList.add(currentPartition);

int a = 0;
while (k >= 0 && p[k] == 1) {
a += p[k];
k--;
}

if (k < 0) {
int[][] result = new int[partitionsList.size()][];
for (int i = 0; i < partitionsList.size(); i++) {
result[i] = partitionsList.get(i);
}
return result;
}

p[k]--;
a++;

while (a > p[k]) {
p[k + 1] = p[k];
a = a - p[k];
k++;
}

p[k + 1] = a;
k++;
}
}

public static void main(String[] args) {
Scanner c = new Scanner(System.in);
int[] a = new int[4];
for (int i = 0; i < 4; i++) {
a[i] = c.nextInt();
}
int b = c.nextInt();
Exercises e = new Exercises();
int[] indices = e.productIndices(a, b);
if (indices != null) {
for (int i = 0; i < indices.length; i++) {
System.out.print(indices[i] + " ");
}
System.out.println();
} else {
System.out.println("No such pair found.");
}
int rows = c.nextInt();
int cols = c.nextInt();
int[][] m = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i][j] = c.nextInt();
}
}
int[] s = e.spiralTraversal(m, rows, cols);
for (int i = 0; i < s.length; i++) {
System.out.print(s[i] + " ");
}
System.out.println();

int n = c.nextInt();
int[][] partitions = e.intPartitions(n);
for (int[] partition : partitions) {
for (int i = 0; i < partition.length; i++) {
System.out.print(partition[i] + " ");
}
System.out.println();
}
}
}
// good


, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions Exercises.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Exercises {

/*
there is an array of positive integers as input of function and another integer for the target value
all the algorithm should do is to find those two integers in array which their multiplication is the target
then it should return an array of their indices
e.g. {1, 2, 3, 4} with target of 8 -> {1, 3}

note: you should return the indices in ascending order and every array's solution is unique
*/
public int[] productIndices(int[] values, int target) {
for (int i = 0; i < values.length; i++) {
for (int j = i + 1; j < values.length; j++) {
if (values[i] * values[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}

/*
given a matrix of random integers, you should do spiral traversal in it
e.g. if the matrix is as shown below:
1 2 3
4 5 6
7 8 9
then the spiral traversal of that is:
{1, 2, 3, 6, 9, 8, 7, 4, 5}

so you should walk in that matrix in a curl and then add the numbers in order you've seen them in a 1D array
*/
public int[] spiralTraversal(int[][] values, int rows, int cols) {
int[] result = new int[rows * cols];
int index = 0;
int top = 0, bottom = rows - 1, left = 0, right = cols - 1;

while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
result[index++] = values[top][i];
}
top++;

for (int i = top; i <= bottom; i++) {
result[index++] = values[i][right];
}
right--;

if (top <= bottom) {
for (int i = right; i >= left; i--) {
result[index++] = values[bottom][i];
}
bottom--;
}

if (left <= right) {
for (int i = bottom; i >= top; i--) {
result[index++] = values[i][left];
}
left++;
}
}

return result;
}

/*
integer partitioning is a combinatorics problem in discreet maths
the problem is to generate sum numbers which their summation is the input number

e.g. 1 -> all partitions of integer 3 are:
3
2, 1
1, 1, 1

e.g. 2 -> for number 4 goes as:
4
3, 1
2, 2
2, 1, 1
1, 1, 1, 1

note: as you can see in examples, we want to generate distinct summations, which means 1, 2 and 2, 1 are no different
you should generate all partitions of the input number and

hint: you can measure the size and order of arrays by finding the pattern of partitions and their number
trust me, that one's fun and easy :)

if you're familiar with lists and arraylists, you can also edit method's body to use them instead of array
*/
public int[][] intPartitions(int n) {
ArrayList<int[]> partitionsList = new ArrayList<>();
int[] p = new int[n];
int k = 0;
p[k] = n;

while (true) {
int[] currentPartition = new int[k + 1];
System.arraycopy(p, 0, currentPartition, 0, k + 1);
partitionsList.add(currentPartition);

int a = 0;
while (k >= 0 && p[k] == 1) {
a += p[k];
k--;
}

if (k < 0) {
int[][] result = new int[partitionsList.size()][];
for (int i = 0; i < partitionsList.size(); i++) {
result[i] = partitionsList.get(i);
}
return result;
}

p[k]--;
a++;

while (a > p[k]) {
p[k + 1] = p[k];
a = a - p[k];
k++;
}

p[k + 1] = a;
k++;
}
}

public static void main(String[] args) {
Scanner c = new Scanner(System.in);
int[] a = new int[4];
for (int i = 0; i < 4; i++) {
a[i] = c.nextInt();
}
int b = c.nextInt();
Exercises e = new Exercises();
int[] indices = e.productIndices(a, b);
if (indices != null) {
for (int i = 0; i < indices.length; i++) {
System.out.print(indices[i] + " ");
}
System.out.println();
} else {
System.out.println("No such pair found.");
}
int rows = c.nextInt();
int cols = c.nextInt();
int[][] m = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i][j] = c.nextInt();
}
}
int[] s = e.spiralTraversal(m, rows, cols);
for (int i = 0; i < s.length; i++) {
System.out.print(s[i] + " ");
}
System.out.println();

int n = c.nextInt();
int[][] partitions = e.intPartitions(n);
for (int[] partition : partitions) {
for (int i = 0; i < partition.length; i++) {
System.out.print(partition[i] + " ");
}
System.out.println();
}
}
}
// good


, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions Exercises.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Exercises {

/*
there is an array of positive integers as input of function and another integer for the target value
all the algorithm should do is to find those two integers in array which their multiplication is the target
then it should return an array of their indices
e.g. {1, 2, 3, 4} with target of 8 -> {1, 3}

note: you should return the indices in ascending order and every array's solution is unique
*/
public int[] productIndices(int[] values, int target) {
for (int i = 0; i < values.length; i++) {
for (int j = i + 1; j < values.length; j++) {
if (values[i] * values[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}

/*
given a matrix of random integers, you should do spiral traversal in it
e.g. if the matrix is as shown below:
1 2 3
4 5 6
7 8 9
then the spiral traversal of that is:
{1, 2, 3, 6, 9, 8, 7, 4, 5}

so you should walk in that matrix in a curl and then add the numbers in order you've seen them in a 1D array
*/
public int[] spiralTraversal(int[][] values, int rows, int cols) {
int[] result = new int[rows * cols];
int index = 0;
int top = 0, bottom = rows - 1, left = 0, right = cols - 1;

while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
result[index++] = values[top][i];
}
top++;

for (int i = top; i <= bottom; i++) {
result[index++] = values[i][right];
}
right--;

if (top <= bottom) {
for (int i = right; i >= left; i--) {
result[index++] = values[bottom][i];
}
bottom--;
}

if (left <= right) {
for (int i = bottom; i >= top; i--) {
result[index++] = values[i][left];
}
left++;
}
}

return result;
}

/*
integer partitioning is a combinatorics problem in discreet maths
the problem is to generate sum numbers which their summation is the input number

e.g. 1 -> all partitions of integer 3 are:
3
2, 1
1, 1, 1

e.g. 2 -> for number 4 goes as:
4
3, 1
2, 2
2, 1, 1
1, 1, 1, 1

note: as you can see in examples, we want to generate distinct summations, which means 1, 2 and 2, 1 are no different
you should generate all partitions of the input number and

hint: you can measure the size and order of arrays by finding the pattern of partitions and their number
trust me, that one's fun and easy :)

if you're familiar with lists and arraylists, you can also edit method's body to use them instead of array
*/
public int[][] intPartitions(int n) {
ArrayList<int[]> partitionsList = new ArrayList<>();
int[] p = new int[n];
int k = 0;
p[k] = n;

while (true) {
int[] currentPartition = new int[k + 1];
System.arraycopy(p, 0, currentPartition, 0, k + 1);
partitionsList.add(currentPartition);

int a = 0;
while (k >= 0 && p[k] == 1) {
a += p[k];
k--;
}

if (k < 0) {
int[][] result = new int[partitionsList.size()][];
for (int i = 0; i < partitionsList.size(); i++) {
result[i] = partitionsList.get(i);
}
return result;
}

p[k]--;
a++;

while (a > p[k]) {
p[k + 1] = p[k];
a = a - p[k];
k++;
}

p[k + 1] = a;
k++;
}
}

public static void main(String[] args) {
Scanner c = new Scanner(System.in);
int[] a = new int[4];
for (int i = 0; i < 4; i++) {
a[i] = c.nextInt();
}
int b = c.nextInt();
Exercises e = new Exercises();
int[] indices = e.productIndices(a, b);
if (indices != null) {
for (int i = 0; i < indices.length; i++) {
System.out.print(indices[i] + " ");
}
System.out.println();
} else {
System.out.println("No such pair found.");
}
int rows = c.nextInt();
int cols = c.nextInt();
int[][] m = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i][j] = c.nextInt();
}
}
int[] s = e.spiralTraversal(m, rows, cols);
for (int i = 0; i < s.length; i++) {
System.out.print(s[i] + " ");
}
System.out.println();

int n = c.nextInt();
int[][] partitions = e.intPartitions(n);
for (int[] partition : partitions) {
for (int i = 0; i < partition.length; i++) {
System.out.print(partition[i] + " ");
}
System.out.println();
}
}
}
// good


, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions Exercises.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Exercises {

/*
there is an array of positive integers as input of function and another integer for the target value
all the algorithm should do is to find those two integers in array which their multiplication is the target
then it should return an array of their indices
e.g. {1, 2, 3, 4} with target of 8 -> {1, 3}

note: you should return the indices in ascending order and every array's solution is unique
*/
public int[] productIndices(int[] values, int target) {
for (int i = 0; i < values.length; i++) {
for (int j = i + 1; j < values.length; j++) {
if (values[i] * values[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}

/*
given a matrix of random integers, you should do spiral traversal in it
e.g. if the matrix is as shown below:
1 2 3
4 5 6
7 8 9
then the spiral traversal of that is:
{1, 2, 3, 6, 9, 8, 7, 4, 5}

so you should walk in that matrix in a curl and then add the numbers in order you've seen them in a 1D array
*/
public int[] spiralTraversal(int[][] values, int rows, int cols) {
int[] result = new int[rows * cols];
int index = 0;
int top = 0, bottom = rows - 1, left = 0, right = cols - 1;

while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
result[index++] = values[top][i];
}
top++;

for (int i = top; i <= bottom; i++) {
result[index++] = values[i][right];
}
right--;

if (top <= bottom) {
for (int i = right; i >= left; i--) {
result[index++] = values[bottom][i];
}
bottom--;
}

if (left <= right) {
for (int i = bottom; i >= top; i--) {
result[index++] = values[i][left];
}
left++;
}
}

return result;
}

/*
integer partitioning is a combinatorics problem in discreet maths
the problem is to generate sum numbers which their summation is the input number

e.g. 1 -> all partitions of integer 3 are:
3
2, 1
1, 1, 1

e.g. 2 -> for number 4 goes as:
4
3, 1
2, 2
2, 1, 1
1, 1, 1, 1

note: as you can see in examples, we want to generate distinct summations, which means 1, 2 and 2, 1 are no different
you should generate all partitions of the input number and

hint: you can measure the size and order of arrays by finding the pattern of partitions and their number
trust me, that one's fun and easy :)

if you're familiar with lists and arraylists, you can also edit method's body to use them instead of array
*/
public int[][] intPartitions(int n) {
ArrayList<int[]> partitionsList = new ArrayList<>();
int[] p = new int[n];
int k = 0;
p[k] = n;

while (true) {
int[] currentPartition = new int[k + 1];
System.arraycopy(p, 0, currentPartition, 0, k + 1);
partitionsList.add(currentPartition);

int a = 0;
while (k >= 0 && p[k] == 1) {
a += p[k];
k--;
}

if (k < 0) {
int[][] result = new int[partitionsList.size()][];
for (int i = 0; i < partitionsList.size(); i++) {
result[i] = partitionsList.get(i);
}
return result;
}

p[k]--;
a++;

while (a > p[k]) {
p[k + 1] = p[k];
a = a - p[k];
k++;
}

p[k + 1] = a;
k++;
}
}

public static void main(String[] args) {
Scanner c = new Scanner(System.in);
int[] a = new int[4];
for (int i = 0; i < 4; i++) {
a[i] = c.nextInt();
}
int b = c.nextInt();
Exercises e = new Exercises();
int[] indices = e.productIndices(a, b);
if (indices != null) {
for (int i = 0; i < indices.length; i++) {
System.out.print(indices[i] + " ");
}
System.out.println();
} else {
System.out.println("No such pair found.");
}
int rows = c.nextInt();
int cols = c.nextInt();
int[][] m = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i][j] = c.nextInt();
}
}
int[] s = e.spiralTraversal(m, rows, cols);
for (int i = 0; i < s.length; i++) {
System.out.print(s[i] + " ");
}
System.out.println();

int n = c.nextInt();
int[][] partitions = e.intPartitions(n);
for (int[] partition : partitions) {
for (int i = 0; i < partition.length; i++) {
System.out.print(partition[i] + " ");
}
System.out.println();
}
}
}
// good


, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions Exercises.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Exercises {

/*
there is an array of positive integers as input of function and another integer for the target value
all the algorithm should do is to find those two integers in array which their multiplication is the target
then it should return an array of their indices
e.g. {1, 2, 3, 4} with target of 8 -> {1, 3}

note: you should return the indices in ascending order and every array's solution is unique
*/
public int[] productIndices(int[] values, int target) {
for (int i = 0; i < values.length; i++) {
for (int j = i + 1; j < values.length; j++) {
if (values[i] * values[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}

/*
given a matrix of random integers, you should do spiral traversal in it
e.g. if the matrix is as shown below:
1 2 3
4 5 6
7 8 9
then the spiral traversal of that is:
{1, 2, 3, 6, 9, 8, 7, 4, 5}

so you should walk in that matrix in a curl and then add the numbers in order you've seen them in a 1D array
*/
public int[] spiralTraversal(int[][] values, int rows, int cols) {
int[] result = new int[rows * cols];
int index = 0;
int top = 0, bottom = rows - 1, left = 0, right = cols - 1;

while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
result[index++] = values[top][i];
}
top++;

for (int i = top; i <= bottom; i++) {
result[index++] = values[i][right];
}
right--;

if (top <= bottom) {
for (int i = right; i >= left; i--) {
result[index++] = values[bottom][i];
}
bottom--;
}

if (left <= right) {
for (int i = bottom; i >= top; i--) {
result[index++] = values[i][left];
}
left++;
}
}

return result;
}

/*
integer partitioning is a combinatorics problem in discreet maths
the problem is to generate sum numbers which their summation is the input number

e.g. 1 -> all partitions of integer 3 are:
3
2, 1
1, 1, 1

e.g. 2 -> for number 4 goes as:
4
3, 1
2, 2
2, 1, 1
1, 1, 1, 1

note: as you can see in examples, we want to generate distinct summations, which means 1, 2 and 2, 1 are no different
you should generate all partitions of the input number and

hint: you can measure the size and order of arrays by finding the pattern of partitions and their number
trust me, that one's fun and easy :)

if you're familiar with lists and arraylists, you can also edit method's body to use them instead of array
*/
public int[][] intPartitions(int n) {
ArrayList<int[]> partitionsList = new ArrayList<>();
int[] p = new int[n];
int k = 0;
p[k] = n;

while (true) {
int[] currentPartition = new int[k + 1];
System.arraycopy(p, 0, currentPartition, 0, k + 1);
partitionsList.add(currentPartition);

int a = 0;
while (k >= 0 && p[k] == 1) {
a += p[k];
k--;
}

if (k < 0) {
int[][] result = new int[partitionsList.size()][];
for (int i = 0; i < partitionsList.size(); i++) {
result[i] = partitionsList.get(i);
}
return result;
}

p[k]--;
a++;

while (a > p[k]) {
p[k + 1] = p[k];
a = a - p[k];
k++;
}

p[k + 1] = a;
k++;
}
}

public static void main(String[] args) {
Scanner c = new Scanner(System.in);
int[] a = new int[4];
for (int i = 0; i < 4; i++) {
a[i] = c.nextInt();
}
int b = c.nextInt();
Exercises e = new Exercises();
int[] indices = e.productIndices(a, b);
if (indices != null) {
for (int i = 0; i < indices.length; i++) {
System.out.print(indices[i] + " ");
}
System.out.println();
} else {
System.out.println("No such pair found.");
}
int rows = c.nextInt();
int cols = c.nextInt();
int[][] m = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i][j] = c.nextInt();
}
}
int[] s = e.spiralTraversal(m, rows, cols);
for (int i = 0; i < s.length; i++) {
System.out.print(s[i] + " ");
}
System.out.println();

int n = c.nextInt();
int[][] partitions = e.intPartitions(n);
for (int[] partition : partitions) {
for (int i = 0; i < partition.length; i++) {
System.out.print(partition[i] + " ");
}
System.out.println();
}
}
}
// good


, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions Exercises.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Exercises {

/*
there is an array of positive integers as input of function and another integer for the target value
all the algorithm should do is to find those two integers in array which their multiplication is the target
then it should return an array of their indices
e.g. {1, 2, 3, 4} with target of 8 -> {1, 3}

note: you should return the indices in ascending order and every array's solution is unique
*/
public int[] productIndices(int[] values, int target) {
for (int i = 0; i < values.length; i++) {
for (int j = i + 1; j < values.length; j++) {
if (values[i] * values[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}

/*
given a matrix of random integers, you should do spiral traversal in it
e.g. if the matrix is as shown below:
1 2 3
4 5 6
7 8 9
then the spiral traversal of that is:
{1, 2, 3, 6, 9, 8, 7, 4, 5}

so you should walk in that matrix in a curl and then add the numbers in order you've seen them in a 1D array
*/
public int[] spiralTraversal(int[][] values, int rows, int cols) {
int[] result = new int[rows * cols];
int index = 0;
int top = 0, bottom = rows - 1, left = 0, right = cols - 1;

while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
result[index++] = values[top][i];
}
top++;

for (int i = top; i <= bottom; i++) {
result[index++] = values[i][right];
}
right--;

if (top <= bottom) {
for (int i = right; i >= left; i--) {
result[index++] = values[bottom][i];
}
bottom--;
}

if (left <= right) {
for (int i = bottom; i >= top; i--) {
result[index++] = values[i][left];
}
left++;
}
}

return result;
}

/*
integer partitioning is a combinatorics problem in discreet maths
the problem is to generate sum numbers which their summation is the input number

e.g. 1 -> all partitions of integer 3 are:
3
2, 1
1, 1, 1

e.g. 2 -> for number 4 goes as:
4
3, 1
2, 2
2, 1, 1
1, 1, 1, 1

note: as you can see in examples, we want to generate distinct summations, which means 1, 2 and 2, 1 are no different
you should generate all partitions of the input number and

hint: you can measure the size and order of arrays by finding the pattern of partitions and their number
trust me, that one's fun and easy :)

if you're familiar with lists and arraylists, you can also edit method's body to use them instead of array
*/
public int[][] intPartitions(int n) {
ArrayList<int[]> partitionsList = new ArrayList<>();
int[] p = new int[n];
int k = 0;
p[k] = n;

while (true) {
int[] currentPartition = new int[k + 1];
System.arraycopy(p, 0, currentPartition, 0, k + 1);
partitionsList.add(currentPartition);

int a = 0;
while (k >= 0 && p[k] == 1) {
a += p[k];
k--;
}

if (k < 0) {
int[][] result = new int[partitionsList.size()][];
for (int i = 0; i < partitionsList.size(); i++) {
result[i] = partitionsList.get(i);
}
return result;
}

p[k]--;
a++;

while (a > p[k]) {
p[k + 1] = p[k];
a = a - p[k];
k++;
}

p[k + 1] = a;
k++;
}
}

public static void main(String[] args) {
Scanner c = new Scanner(System.in);
int[] a = new int[4];
for (int i = 0; i < 4; i++) {
a[i] = c.nextInt();
}
int b = c.nextInt();
Exercises e = new Exercises();
int[] indices = e.productIndices(a, b);
if (indices != null) {
for (int i = 0; i < indices.length; i++) {
System.out.print(indices[i] + " ");
}
System.out.println();
} else {
System.out.println("No such pair found.");
}
int rows = c.nextInt();
int cols = c.nextInt();
int[][] m = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i][j] = c.nextInt();
}
}
int[] s = e.spiralTraversal(m, rows, cols);
for (int i = 0; i < s.length; i++) {
System.out.print(s[i] + " ");
}
System.out.println();

int n = c.nextInt();
int[][] partitions = e.intPartitions(n);
for (int[] partition : partitions) {
for (int i = 0; i < partition.length; i++) {
System.out.print(partition[i] + " ");
}
System.out.println();
}
}
}
// good


, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions Exercises.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Exercises {

/*
there is an array of positive integers as input of function and another integer for the target value
all the algorithm should do is to find those two integers in array which their multiplication is the target
then it should return an array of their indices
e.g. {1, 2, 3, 4} with target of 8 -> {1, 3}

note: you should return the indices in ascending order and every array's solution is unique
*/
public int[] productIndices(int[] values, int target) {
for (int i = 0; i < values.length; i++) {
for (int j = i + 1; j < values.length; j++) {
if (values[i] * values[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}

/*
given a matrix of random integers, you should do spiral traversal in it
e.g. if the matrix is as shown below:
1 2 3
4 5 6
7 8 9
then the spiral traversal of that is:
{1, 2, 3, 6, 9, 8, 7, 4, 5}

so you should walk in that matrix in a curl and then add the numbers in order you've seen them in a 1D array
*/
public int[] spiralTraversal(int[][] values, int rows, int cols) {
int[] result = new int[rows * cols];
int index = 0;
int top = 0, bottom = rows - 1, left = 0, right = cols - 1;

while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
result[index++] = values[top][i];
}
top++;

for (int i = top; i <= bottom; i++) {
result[index++] = values[i][right];
}
right--;

if (top <= bottom) {
for (int i = right; i >= left; i--) {
result[index++] = values[bottom][i];
}
bottom--;
}

if (left <= right) {
for (int i = bottom; i >= top; i--) {
result[index++] = values[i][left];
}
left++;
}
}

return result;
}

/*
integer partitioning is a combinatorics problem in discreet maths
the problem is to generate sum numbers which their summation is the input number

e.g. 1 -> all partitions of integer 3 are:
3
2, 1
1, 1, 1

e.g. 2 -> for number 4 goes as:
4
3, 1
2, 2
2, 1, 1
1, 1, 1, 1

note: as you can see in examples, we want to generate distinct summations, which means 1, 2 and 2, 1 are no different
you should generate all partitions of the input number and

hint: you can measure the size and order of arrays by finding the pattern of partitions and their number
trust me, that one's fun and easy :)

if you're familiar with lists and arraylists, you can also edit method's body to use them instead of array
*/
public int[][] intPartitions(int n) {
ArrayList<int[]> partitionsList = new ArrayList<>();
int[] p = new int[n];
int k = 0;
p[k] = n;

while (true) {
int[] currentPartition = new int[k + 1];
System.arraycopy(p, 0, currentPartition, 0, k + 1);
partitionsList.add(currentPartition);

int a = 0;
while (k >= 0 && p[k] == 1) {
a += p[k];
k--;
}

if (k < 0) {
int[][] result = new int[partitionsList.size()][];
for (int i = 0; i < partitionsList.size(); i++) {
result[i] = partitionsList.get(i);
}
return result;
}

p[k]--;
a++;

while (a > p[k]) {
p[k + 1] = p[k];
a = a - p[k];
k++;
}

p[k + 1] = a;
k++;
}
}

public static void main(String[] args) {
Scanner c = new Scanner(System.in);
int[] a = new int[4];
for (int i = 0; i < 4; i++) {
a[i] = c.nextInt();
}
int b = c.nextInt();
Exercises e = new Exercises();
int[] indices = e.productIndices(a, b);
if (indices != null) {
for (int i = 0; i < indices.length; i++) {
System.out.print(indices[i] + " ");
}
System.out.println();
} else {
System.out.println("No such pair found.");
}
int rows = c.nextInt();
int cols = c.nextInt();
int[][] m = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i][j] = c.nextInt();
}
}
int[] s = e.spiralTraversal(m, rows, cols);
for (int i = 0; i < s.length; i++) {
System.out.print(s[i] + " ");
}
System.out.println();

int n = c.nextInt();
int[][] partitions = e.intPartitions(n);
for (int[] partition : partitions) {
for (int i = 0; i < partition.length; i++) {
System.out.print(partition[i] + " ");
}
System.out.println();
}
}
}
// good


, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 176 additions & 0 deletions Exercises.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Exercises {

/*
there is an array of positive integers as input of function and another integer for the target value
all the algorithm should do is to find those two integers in array which their multiplication is the target
then it should return an array of their indices
e.g. {1, 2, 3, 4} with target of 8 -> {1, 3}

note: you should return the indices in ascending order and every array's solution is unique
*/
public int[] productIndices(int[] values, int target) {
for (int i = 0; i < values.length; i++) {
for (int j = i + 1; j < values.length; j++) {
if (values[i] * values[j] == target) {
return new int[]{i, j};
}
}
}
return null;
}

/*
given a matrix of random integers, you should do spiral traversal in it
e.g. if the matrix is as shown below:
1 2 3
4 5 6
7 8 9
then the spiral traversal of that is:
{1, 2, 3, 6, 9, 8, 7, 4, 5}

so you should walk in that matrix in a curl and then add the numbers in order you've seen them in a 1D array
*/
public int[] spiralTraversal(int[][] values, int rows, int cols) {
int[] result = new int[rows * cols];
int index = 0;
int top = 0, bottom = rows - 1, left = 0, right = cols - 1;

while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
result[index++] = values[top][i];
}
top++;

for (int i = top; i <= bottom; i++) {
result[index++] = values[i][right];
}
right--;

if (top <= bottom) {
for (int i = right; i >= left; i--) {
result[index++] = values[bottom][i];
}
bottom--;
}

if (left <= right) {
for (int i = bottom; i >= top; i--) {
result[index++] = values[i][left];
}
left++;
}
}

return result;
}

/*
integer partitioning is a combinatorics problem in discreet maths
the problem is to generate sum numbers which their summation is the input number

e.g. 1 -> all partitions of integer 3 are:
3
2, 1
1, 1, 1

e.g. 2 -> for number 4 goes as:
4
3, 1
2, 2
2, 1, 1
1, 1, 1, 1

note: as you can see in examples, we want to generate distinct summations, which means 1, 2 and 2, 1 are no different
you should generate all partitions of the input number and

hint: you can measure the size and order of arrays by finding the pattern of partitions and their number
trust me, that one's fun and easy :)

if you're familiar with lists and arraylists, you can also edit method's body to use them instead of array
*/
public int[][] intPartitions(int n) {
ArrayList<int[]> partitionsList = new ArrayList<>();
int[] p = new int[n];
int k = 0;
p[k] = n;

while (true) {
int[] currentPartition = new int[k + 1];
System.arraycopy(p, 0, currentPartition, 0, k + 1);
partitionsList.add(currentPartition);

int a = 0;
while (k >= 0 && p[k] == 1) {
a += p[k];
k--;
}

if (k < 0) {
int[][] result = new int[partitionsList.size()][];
for (int i = 0; i < partitionsList.size(); i++) {
result[i] = partitionsList.get(i);
}
return result;
}

p[k]--;
a++;

while (a > p[k]) {
p[k + 1] = p[k];
a = a - p[k];
k++;
}

p[k + 1] = a;
k++;
}
}

public static void main(String[] args) {
Scanner c = new Scanner(System.in);
int[] a = new int[4];
for (int i = 0; i < 4; i++) {
a[i] = c.nextInt();
}
int b = c.nextInt();
Exercises e = new Exercises();
int[] indices = e.productIndices(a, b);
if (indices != null) {
for (int i = 0; i < indices.length; i++) {
System.out.print(indices[i] + " ");
}
System.out.println();
} else {
System.out.println("No such pair found.");
}
int rows = c.nextInt();
int cols = c.nextInt();
int[][] m = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
m[i][j] = c.nextInt();
}
}
int[] s = e.spiralTraversal(m, rows, cols);
for (int i = 0; i < s.length; i++) {
System.out.print(s[i] + " ");
}
System.out.println();

int n = c.nextInt();
int[][] partitions = e.intPartitions(n);
for (int[] partition : partitions) {
for (int i = 0; i < partition.length; i++) {
System.out.print(partition[i] + " ");
}
System.out.println();
}
}
}
// good