Last active
July 2, 2024 22:11
-
-
Save mshafiee/64a5d660c079cca29e06dd8552be7360 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Magic Square Generator</title> | |
<style> | |
table { | |
border-collapse: collapse; | |
margin: 20px 0; | |
} | |
table, th, td { | |
border: 1px solid black; | |
} | |
th, td { | |
padding: 10px; | |
text-align: center; | |
} | |
</style> | |
</head> | |
<body> | |
<h1>Magic Square Generator</h1> | |
<label for="magicalNumber">Enter magical number:</label> | |
<input type="number" id="magicalNumber" required> | |
<br> | |
<label for="orderType">Enter order type:</label> | |
<input type="radio" id="fire" name="orderType" value="fire"> | |
<label for="fire">Fire</label> | |
<input type="radio" id="earth" name="orderType" value="earth"> | |
<label for="earth">Earth</label> | |
<br> | |
<button onclick="generateMagicSquare()">Generate</button> | |
<button onclick="clearResults()">Clear</button> | |
<div id="result"></div> | |
<script> | |
function generateMagicSquare() { | |
const magicalNumber = parseInt(document.getElementById('magicalNumber').value); | |
const orderType = document.querySelector('input[name="orderType"]:checked').value; | |
if (!magicalNumber || (orderType !== 'fire' && orderType !== 'earth')) { | |
alert("Please enter a valid magical number and select order type ('fire' or 'earth')."); | |
return; | |
} | |
const { table, quotient, remainder, cellAdjusted } = createTable(magicalNumber, orderType); | |
displayTable(table); | |
let resultText = `Quotient (first cell): ${quotient}<br>`; | |
if (remainder > 0) { | |
resultText += `Remaining number: ${remainder}<br>`; | |
resultText += `Cell ${cellAdjusted} increased by 1<br>`; | |
} | |
const isMagicSquare = checkMagicSquare(table, magicalNumber); | |
resultText += isMagicSquare ? | |
`The table is a magic square with a magical number of ${magicalNumber}.` : | |
`The table is not a magic square with a magical number of ${magicalNumber}.`; | |
document.getElementById('result').innerHTML += resultText; | |
} | |
function clearResults() { | |
document.getElementById('result').innerHTML = ''; | |
} | |
function createTable(magicalNumber, orderType) { | |
const quotient = Math.floor((magicalNumber - 30) / 4); | |
const remainder = (magicalNumber - 30) % 4; | |
const table = Array.from({ length: 16 }, (_, i) => quotient + i); | |
let cellAdjusted = null; | |
if (remainder === 1) { | |
for (let i = 12; i < 16; i++) table[i]++; | |
cellAdjusted = 13; | |
} else if (remainder === 2) { | |
for (let i = 8; i < 16; i++) table[i]++; | |
cellAdjusted = 9; | |
} else if (remainder === 3) { | |
for (let i = 4; i < 16; i++) table[i]++; | |
cellAdjusted = 5; | |
} | |
const fireOrder = [8, 11, 14, 1, 13, 2, 7, 12, 3, 16, 9, 6, 10, 5, 4, 15]; | |
const earthOrder = [5, 4, 15, 10, 16, 9, 6, 3, 2, 7, 12, 13, 11, 14, 1, 8]; | |
const order = orderType === 'fire' ? fireOrder : earthOrder; | |
const tableOrdered = Array.from({ length: 16 }, (_, i) => table[order[i] - 1]); | |
const table2d = Array.from({ length: 4 }, (_, i) => tableOrdered.slice(i * 4, i * 4 + 4)); | |
return { table: table2d, quotient, remainder, cellAdjusted }; | |
} | |
function displayTable(table) { | |
const tableElement = document.createElement('table'); | |
table.forEach(row => { | |
const tr = document.createElement('tr'); | |
row.forEach(cell => { | |
const td = document.createElement('td'); | |
td.textContent = cell; | |
tr.appendChild(td); | |
}); | |
tableElement.appendChild(tr); | |
}); | |
document.getElementById('result').appendChild(tableElement); | |
} | |
function checkMagicSquare(table, magicalNumber) { | |
let allEqual = true; | |
for (let i = 0; i < 4; i++) { | |
const rowSum = table[i].reduce((acc, val) => acc + val, 0); | |
if (rowSum !== magicalNumber) { | |
allEqual = false; | |
console.log(`Row ${i + 1} does not match: ${table[i]} (sum: ${rowSum})`); | |
} | |
} | |
for (let i = 0; i < 4; i++) { | |
const colSum = table.reduce((acc, row) => acc + row[i], 0); | |
if (colSum !== magicalNumber) { | |
allEqual = false; | |
const colValues = table.map(row => row[i]); | |
console.log(`Column ${i + 1} does not match: ${colValues} (sum: ${colSum})`); | |
} | |
} | |
const diag1Sum = table.reduce((acc, row, i) => acc + row[i], 0); | |
const diag2Sum = table.reduce((acc, row, i) => acc + row[3 - i], 0); | |
if (diag1Sum !== magicalNumber) { | |
allEqual = false; | |
const diag1Values = table.map((row, i) => row[i]); | |
console.log(`Main diagonal does not match: ${diag1Values} (sum: ${diag1Sum})`); | |
} | |
if (diag2Sum !== magicalNumber) { | |
allEqual = false; | |
const diag2Values = table.map((row, i) => row[3 - i]); | |
console.log(`Secondary diagonal does not match: ${diag2Values} (sum: ${diag2Sum})`); | |
} | |
return allEqual; | |
} | |
</script> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def create_table(magical_number, order_type): | |
quotient = (magical_number - 30) // 4 | |
remainder = (magical_number - 30) % 4 | |
# Create the initial table with the correct order | |
table = [quotient + i for i in range(16)] | |
# Adjust specific cells based on the remainder | |
cell_adjusted = None | |
if remainder == 1: | |
for i in range(12, 16): | |
table[i] += 1 # Increment cells starting from the 13th cell | |
cell_adjusted = 13 | |
elif remainder == 2: | |
for i in range(8, 16): | |
table[i] += 1 # Increment cells starting from the 9th cell | |
cell_adjusted = 9 | |
elif remainder == 3: | |
for i in range(4, 16): | |
table[i] += 1 # Increment cells starting from the 5th cell | |
cell_adjusted = 5 | |
# Print each cell number and value before ordering | |
for i in range(16): | |
suffix = "th" | |
if (i + 1) % 10 == 1 and (i + 1) != 11: | |
suffix = "st" | |
elif (i + 1) % 10 == 2 and (i + 1) != 12: | |
suffix = "nd" | |
elif (i + 1) % 10 == 3 and (i + 1) != 13: | |
suffix = "rd" | |
print(f"{i + 1}{suffix}: {table[i]}") | |
# Define the orders | |
fire_order = [8, 11, 14, 1, | |
13, 2, 7, 12, | |
3, 16, 9, 6, | |
10, 5, 4, 15] | |
earth_order = [5, 4, 15, 10, | |
16, 9, 6, 3, | |
2, 7, 12, 13, | |
11, 14, 1, 8] | |
# Select the appropriate order based on user input | |
if order_type.lower() == 'fire': | |
order = fire_order | |
elif order_type.lower() == 'earth': | |
order = earth_order | |
else: | |
raise ValueError("Invalid order type. Choose 'fire' or 'earth'.") | |
# Order the table according to the selected pattern | |
table_ordered = [0] * 16 | |
for i, pos in enumerate(order): | |
table_ordered[i] = table[pos - 1] | |
# Convert the ordered flat list into a 4x4 2D list | |
table_2d = [table_ordered[i:i + 4] for i in range(0, 16, 4)] | |
return table_2d, quotient, remainder, cell_adjusted | |
def print_table(table): | |
# Find the maximum length of the numbers in the table | |
max_length = max(len(str(cell)) for row in table for cell in row) | |
cell_width = max_length + 2 # Add padding for better readability | |
border = "+" + "+".join("-" * cell_width for _ in range(4)) + "+" | |
print(border) | |
for row in table: | |
print("| " + " | ".join(f"{cell:>{max_length}}" for cell in row) + " |") | |
print(border) | |
def check_magic_square(table, magical_number): | |
size = len(table) | |
all_equal = True | |
# Check rows | |
for i in range(size): | |
row_sum = sum(table[i]) | |
if row_sum != magical_number: | |
all_equal = False | |
print(f"Row {i+1} does not match: {table[i]} (sum: {row_sum})") | |
# Check columns | |
for i in range(size): | |
col_sum = sum(row[i] for row in table) | |
if col_sum != magical_number: | |
all_equal = False | |
col_values = [row[i] for row in table] | |
print(f"Column {i+1} does not match: {col_values} (sum: {col_sum})") | |
# Check diagonals | |
diag1_sum = sum(table[i][i] for i in range(size)) | |
diag2_sum = sum(table[i][size-1-i] for i in range(size)) | |
if diag1_sum != magical_number: | |
all_equal = False | |
diag1_values = [table[i][i] for i in range(size)] | |
print(f"Main diagonal does not match: {diag1_values} (sum: {diag1_sum})") | |
if diag2_sum != magical_number: | |
all_equal = False | |
diag2_values = [table[i][size-1-i] for i in range(size)] | |
print(f"Secondary diagonal does not match: {diag2_values} (sum: {diag2_sum})") | |
return all_equal | |
# Get the magical number and order type from the user | |
magical_number = int(input("Enter the magical number: ")) | |
order_type = input("Enter the order type ('fire' or 'earth'): ") | |
# Create the table | |
table, quotient, remainder, cell_adjusted = create_table(magical_number, order_type) | |
# Print the table | |
print_table(table) | |
# Print the quotient, remaining number, and the adjusted cell | |
print(f"Quotient (1st cell): {quotient}") | |
if remainder > 0: | |
print(f"Remaining number: {remainder}") | |
print(f"Cell {cell_adjusted} was incremented by +1") | |
# Check if it's a magic square and print mismatches | |
if check_magic_square(table, magical_number): | |
print(f"The table is a magic square with the magical number {magical_number}.") | |
else: | |
print(f"The table is NOT a magic square with the magical number {magical_number}.") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def create_table(magical_number, order_type): | |
quotient = (magical_number - 30) // 4 | |
remainder = (magical_number - 30) % 4 | |
# Create the initial table with the correct order | |
table = [quotient + i for i in range(16)] | |
# Adjust specific cells based on the remainder | |
cell_adjusted = None | |
if remainder == 1: | |
for i in range(12, 16): | |
table[i] += 1 # Increment cells starting from the 13th cell | |
cell_adjusted = 13 | |
elif remainder == 2: | |
for i in range(8, 16): | |
table[i] += 1 # Increment cells starting from the 9th cell | |
cell_adjusted = 9 | |
elif remainder == 3: | |
for i in range(4, 16): | |
table[i] += 1 # Increment cells starting from the 5th cell | |
cell_adjusted = 5 | |
# Print each cell number and value before ordering | |
for i in range(16): | |
suffix = "th" | |
if (i + 1) % 10 == 1 and (i + 1) != 11: | |
suffix = "st" | |
elif (i + 1) % 10 == 2 and (i + 1) != 12: | |
suffix = "nd" | |
elif (i + 1) % 10 == 3 and (i + 1) != 13: | |
suffix = "rd" | |
print(f"{i + 1}{suffix}: {table[i]}") | |
# Define the orders | |
fire_order = [8, 11, 14, 1, | |
13, 2, 7, 12, | |
3, 16, 9, 6, | |
10, 5, 4, 15] | |
earth_order = [5, 4, 15, 10, | |
16, 9, 6, 3, | |
2, 7, 12, 13, | |
11, 14, 1, 8] | |
# Select the appropriate order based on user input | |
if order_type.lower() == 'fire': | |
order = fire_order | |
elif order_type.lower() == 'earth': | |
order = earth_order | |
else: | |
raise ValueError("نوع ترتیب نامعتبر است. 'fire' یا 'earth' را انتخاب کنید.") | |
# Order the table according to the selected pattern | |
table_ordered = [0] * 16 | |
for i, pos in enumerate(order): | |
table_ordered[i] = table[pos - 1] | |
# Convert the ordered flat list into a 4x4 2D list | |
table_2d = [table_ordered[i:i + 4] for i in range(0, 16, 4)] | |
return table_2d, quotient, remainder, cell_adjusted | |
def print_table(table): | |
# Find the maximum length of the numbers in the table | |
max_length = max(len(str(cell)) for row in table for cell in row) | |
cell_width = max_length + 2 # Add padding for better readability | |
border = "+" + "+".join("-" * cell_width for _ in range(4)) + "+" | |
print(border) | |
for row in table: | |
print("| " + " | ".join(f"{cell:>{max_length}}" for cell in row) + " |") | |
print(border) | |
def check_magic_square(table, magical_number): | |
size = len(table) | |
all_equal = True | |
# Check rows | |
for i in range(size): | |
row_sum = sum(table[i]) | |
if row_sum != magical_number: | |
all_equal = False | |
print(f"سطر {i+1} مطابقت ندارد: {table[i]} (مجموع: {row_sum})") | |
# Check columns | |
for i in range(size): | |
col_sum = sum(row[i] for row in table) | |
if col_sum != magical_number: | |
all_equal = False | |
col_values = [row[i] for row in table] | |
print(f"ستون {i+1} مطابقت ندارد: {col_values} (مجموع: {col_sum})") | |
# Check diagonals | |
diag1_sum = sum(table[i][i] for i in range(size)) | |
diag2_sum = sum(table[i][size-1-i] for i in range(size)) | |
if diag1_sum != magical_number: | |
all_equal = False | |
diag1_values = [table[i][i] for i in range(size)] | |
print(f"قطر اصلی مطابقت ندارد: {diag1_values} (مجموع: {diag1_sum})") | |
if diag2_sum != magical_number: | |
all_equal = False | |
diag2_values = [table[i][size-1-i] for i in range(size)] | |
print(f"قطر فرعی مطابقت ندارد: {diag2_values} (مجموع: {diag2_sum})") | |
return all_equal | |
# Get the magical number and order type from the user | |
magical_number = int(input("عدد وفق را وارد کنید: ")) | |
order_type = input("نوع ترتیب را وارد کنید ('fire' یا 'earth'): ") | |
# Create the table | |
table, quotient, remainder, cell_adjusted = create_table(magical_number, order_type) | |
# Print the table | |
print_table(table) | |
# Print the quotient, remaining number, and the adjusted cell | |
print(f"خارج قسمت (اولین خانه): {quotient}") | |
if remainder > 0: | |
print(f"عدد باقیمانده: {remainder}") | |
print(f"خانه {cell_adjusted} با مقدار یک واحد افزایش یافت") | |
# Check if it's a magic square and print mismatches | |
if check_magic_square(table, magical_number): | |
print(f"جدول یک مربع وفق با عدد وفق {magical_number} است.") | |
else: | |
print(f"جدول یک مربع وفق با عدد وفق {magical_number} نیست.") |
Author
mshafiee
commented
Jun 5, 2024
•
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment