1 Commits
Author SHA1 Message Date
Saba_frm 3dea372996 develop 2026-04-21 23:07:41 +03:30
3 changed files with 221 additions and 23 deletions
+1 -3
View File
@@ -8,7 +8,5 @@
</list> </list>
</option> </option>
</component> </component>
<component name="ProjectRootManager" version="2" project-jdk-name="25" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_25" project-jdk-name="25" project-jdk-type="JavaSDK" />
<output url="file://$PROJECT_DIR$/out" />
</component>
</project> </project>
+126 -9
View File
@@ -19,14 +19,31 @@ public class BonusExercises {
- Can't have underscores - Can't have underscores
- Each segment (between dots) must follow same hyphen rules - Each segment (between dots) must follow same hyphen rules
*/ */
public boolean validateEmail(String email) { public boolean validateEmail(String email) {
String regex = ""; // todo // Regex توضیح:
// ^ : شروع رشته
// [^.] : نباید با نقطه شروع شود
// [^@.]+ : کاراکترهای مجاز در local-part (به جز نقطه و @)
// (?:\\.[^@.]+)* : صفر یا بیشتر گروه (نقطه + کاراکترهای مجاز) - برای نقاط میانی
// [^.] : نباید با نقطه تمام شود
// @ : باید دقیقاً یک @ باشد
// [^@.]+ : کاراکترهای مجاز در دامنه (به جز نقطه و @)
// (?:\\.[^@.]+)* : صفر یا بیشتر گروه (نقطه + کاراکترهای مجاز) - برای نقاط میانی
// [^@.-]+ : بخش آخر دامنه (بدون نقطه، @، یا خط تیره)
// $ : پایان رشته
String regex = "^[^.][^@.]*(?:\\.[^@.]+)*@[^@.]+\\.[^@.]+$";
Pattern pattern = Pattern.compile(regex); Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(email); Matcher matcher = pattern.matcher(email);
return matcher.matches(); return matcher.matches();
} }
/* /*
This method should find and return the first date in a string. This method should find and return the first date in a string.
@@ -39,8 +56,29 @@ public class BonusExercises {
If no match for a date is found in the string, return null. If no match for a date is found in the string, return null.
*/ */
public String findDate(String string) { public String findDate(String string) {
// todo // Regex توضیح:
return null; // (?: ... ) : گروه غیر حافظ (non-capturing group)
// \d{1,2} : یک یا دو رقم (برای روز و ماه)
// \d{4} : چهار رقم (برای سال)
// [/.-] : کاراکتر جداکننده می‌تواند / یا . یا - باشد
//
// تاریخ‌های MM/DD/YYYY یا DD/MM/YYYY:
// (\d{1,2}[/.-]\d{1,2}[/.-]\d{4})
//
// تاریخ‌های YYYY-MM-DD یا YYYY/MM/DD:
// (\d{4}[/.-]\d{1,2}[/.-]\d{1,2})
// اولویت با فرمت YYYY داده شده تا اگر YYYY/MM/DD هم داشتیم، آن را اول پیدا کند.
String regex = "(\\d{4}[/.-]\\d{1,2}[/.-]\\d{1,2})|(\\d{1,2}[/.-]\\d{1,2}[/.-]\\d{4})";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
if (matcher.find())
{
return matcher.group(0); // گروه 0 کل متن مطابق با regex است
} else {
return null;
}
} }
/* /*
@@ -53,24 +91,103 @@ public class BonusExercises {
- at least one number and at least a special char "!@#$%^&*" - at least one number and at least a special char "!@#$%^&*"
- has no white-space in it - has no white-space in it
*/ */
public int findValidPasswords(String string) { public int findValidPasswords(String string) {
// todo // Regex توضیح:
return -1; // ^ : شروع رشته
// (?=.*[a-z]) : پیش‌شرط: حداقل یک حرف کوچک (lookahead)
// (?=.*[A-Z]) : پیش‌شرط: حداقل یک حرف بزرگ (lookahead)
// (?=.*\\d) : پیش‌شرط: حداقل یک عدد (lookahead)
// (?=.*[!@#$%^&*]) : پیش‌شرط: حداقل یک کاراکتر خاص (lookahead)
// [^\\s]{8,} : کاراکترهای غیر از فاصله، حداقل 8 بار تکرار شود
// $ : پایان رشته
String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*])[^\\s]{8,}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
int count = 0;
// matcher.find() را در حلقه استفاده می‌کنیم تا تمام پسوردهای معتبر در رشته را پیدا کنیم
String passwordRegex = "[^\\s]+";
Pattern passwordPattern = Pattern.compile(passwordRegex);
Matcher passwordMatcher = passwordPattern.matcher(string);
while(passwordMatcher.find()) {
String potentialPassword = passwordMatcher.group(0);
if (pattern.matcher(potentialPassword).matches())
{ // چک می‌کنیم که آیا این پسورد کاندید، معتبر است یا نه
count++;
}
}
return count;
} }
/* /*
you should return a list of *words* which are palindromic you should return a list of *words* which are palindromic
by word we mean at least 3 letters with no whitespace in it by word we mean at least 3 letters with no whitespace in it
note: your implementation should be case-insensitive, e.g. Aba -> is palindrome note: your implementation should be case-insensitive, e.g. Aba -> is palindrome
*/ */
public List<String> findPalindromes(String string) {
public List<String> findPalindromes(String string)
{
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
// todo String[] words = string.split("\\W+");
for (String word : words)
{
// شرط اول: کلمه حداقل 3 حرف داشته باشد
if (word.length() >= 3) {
// شرط دوم: case-insensitive بودن
String lowerCaseWord = word.toLowerCase();
String reversedWord = new StringBuilder(lowerCaseWord).reverse().toString();
// چک می‌کنیم که آیا کلمه معکوس شده با کلمه اصلی (بدون در نظر گرفتن case) برابر است
if (lowerCaseWord.equals(reversedWord))
{
list.add(word); // اگر پالیندروم بود، کلمه اصلی را به لیست اضافه کن
}
}
}
return list; return list;
} }
public static void main(String[] args) { public static void main(String[] args)
// you can test your code here {
BonusExercises be = new BonusExercises();
// تست validateEmail
System.out.println("Email Validation:");
System.out.println("test@example.com: " + be.validateEmail("test@example.com")); // true
System.out.println("test.user@domain.co.uk: " + be.validateEmail("test.user@domain.co.uk")); // true (بسته به regex)
System.out.println("invalid-email: " + be.validateEmail("invalid-email")); // false
System.out.println("@domain.com: " + be.validateEmail("@domain.com")); // false
System.out.println("test@.com: " + be.validateEmail("test@.com")); // false
System.out.println("\nFind Date:");
// تست findDate
System.out.println("12/09/2023: " + be.findDate("The date is 12/09/2023.")); // 12/09/2023
System.out.println("2024-07-15: " + be.findDate("Meeting scheduled for 2024-07-15.")); // 2024-07-15
System.out.println("2025/01/01: " + be.findDate("New year starts 2025/01/01.")); // 2025/01/01
System.out.println("No date here: " + be.findDate("Just some text.")); // null
System.out.println("\nFind Valid Passwords:");
// تست findValidPasswords
System.out.println("Password123!: " + be.findValidPasswords("Password123!")); // 1
System.out.println("password123!: " + be.findValidPasswords("password123!")); // 0 (no uppercase)
System.out.println("PASSWORD123!: " + be.findValidPasswords("PASSWORD123!")); // 0 (no lowercase)
System.out.println("PasswordAbc!: " + be.findValidPasswords("PasswordAbc!")); // 0 (no number)
System.out.println("Password123: " + be.findValidPasswords("Password123")); // 0 (no special char)
System.out.println("Pass 123!: " + be.findValidPasswords("Pass 123!")); // 0 (whitespace)
System.out.println("ComplexP@sswOrd123 A-stronger-password_too99#: " + be.findValidPasswords("ComplexP@sswOrd123 A-stronger-password_too99#")); // 2
System.out.println("\nFind Palindromes:");
// تست findPalindromes
System.out.println("madam racecar level: " + be.findPalindromes("madam racecar level"));
System.out.println("Aba, Civic, Noon: " + be.findPalindromes("Aba, Civic, Noon"));
System.out.println("hello world: " + be.findPalindromes("hello world"));
} }
} }
+94 -11
View File
@@ -1,3 +1,6 @@
import java.util.List;
import java.util.ArrayList;
public class MainExercises public class MainExercises
{ {
/* /*
@@ -18,15 +21,27 @@ public class MainExercises
the output has to be a two-dimensional array of characters, so don't just print the triangle! the output has to be a two-dimensional array of characters, so don't just print the triangle!
*/ */
public char[][] generateTriangle(int n) { public char[][] generateTriangle(int n)
{
// todo char[][] triangle = new char[n][];
return null;
for (int i = 0; i < n; i++)
{
triangle[i] = new char[i + 1];
for (int j = 0; j <= i; j++)
{
if (i == n - 1 || j == 0 || j == i)
triangle[i][j] = '*';
else
triangle[i][j] = ' ';
}
}
return triangle;
} }
/* /*
SPIRAL TRAVERSAL OF A RECTANGULAR MATRIX SPIRAL TRAVERSAL OF A RECTANGULAR MATRIX
@@ -57,11 +72,58 @@ public class MainExercises
- Number of rows: matrix.length - Number of rows: matrix.length
- Number of columns: matrix[0].length (if rectangular) - Number of columns: matrix[0].length (if rectangular)
*/ */
public int[] spiralTraversal(int[][] matrix) { public int[] spiralTraversal(int[][] matrix)
// todo {
return null;
int rows = matrix.length;
int cols = matrix[0].length;
int[] result = new int[rows * cols];
int index = 0;
int top = 0;
int bottom = rows - 1;
int left = 0;
int right = cols - 1;
while (top <= bottom && left <= right)
{
for (int i = left; i <= right; i++)
{
result[index++] = matrix[top][i];
}
top++;
for (int i = top; i <= bottom; i++)
{
result[index++] = matrix[i][right];
}
right--;
if (top <= bottom)
{
for (int i = right; i >= left; i--)
{
result[index++] = matrix[bottom][i];
}
bottom--;
}
if (left <= right)
{
for (int i = bottom; i >= top; i--)
{
result[index++] = matrix[i][left];
}
left++;
}
}
return result;
} }
/* /*
integer partitioning is a combinatorics problem in discreet maths integer partitioning is a combinatorics problem in discreet maths
the problem is to generate sum numbers which their summation is the input number the problem is to generate sum numbers which their summation is the input number
@@ -90,11 +152,32 @@ public class MainExercises
body to use them instead of arrays. body to use them instead of arrays.
*/ */
public int[][] intPartitions(int n) {
// todo public int[][] intPartitions(int n)
return null; {
List<int[]> result = new ArrayList<>();
build(n, n, new ArrayList<>(), result);
return result.toArray(new int[0][]);
} }
private void build(int remain, int max, List<Integer> curr, List<int[]> out)
{
if (remain == 0)
{
int[] arr = new int[curr.size()];
for (int i = 0; i < arr.length; i++) arr[i] = curr.get(i);
out.add(arr);
return;
}
for (int i = Math.min(remain, max); i >= 1; i--)
{
curr.add(i);
build(remain - i, i, curr, out);
curr.remove(curr.size() - 1);
}
}
public static void main() public static void main()
{ {