Magic

Generate magic squares for any odd side length:

#!/usr/bin/env python3
import sys
def magic_constant(n):
    return n * (n * n + 1) // 2
def magic_square(n):
    square = [[0] * n for _ in range(n)]
    num = 1
    i, j = 0, n // 2
    while num <= n * n:
        square[i][j] = num
        num += 1
        new_i = (i - 1) % n
        new_j = (j + 1) % n
        if square[new_i][new_j]:
            i = (i + 1) % n
        else:
            i, j = new_i, new_j
    return square
n = int(sys.argv[1]) if len(sys.argv) > 1 else 3
square = magic_square(n)
width = len(str(n * n))
print(f"Magic constant for n={n}: {magic_constant(n)}\n")
for row in square:
    print(" ".join(f"{x:>{width}}" for x in row))

Posted in Uncategorized | Leave a comment

Lastfri

Print a list of last Fridays every month for the given year

#!/usr/bin/python3
import sys
from calendar import monthrange
from datetime import date, timedelta
def last_fridays(year):
    for month in range(1, 13):
        last_day = date(year, month, monthrange(year, month)[1])
        yield last_day - timedelta(days=(last_day.weekday() - 4) % 7)
for friday in last_fridays(int(sys.argv[1])):
    print(friday.isoformat())

Posted in Uncategorized | Leave a comment

Perfect

Perfect

#include <stdio.h>

int main(void)
{
    for (unsigned int p = 2; p <= 23; p++) {
        unsigned long long m = (1ULL << p) - 1;

        int prime = 1;

        for (unsigned long long i = 2; i * i <= m; i++) {
            if (m % i == 0) {
                prime = 0;
                break;
            }
        }

        if (prime)
            printf("%llu\n", (1ULL << (p - 1)) * m);
    }
}

Posted in Uncategorized | Leave a comment

Antiprime

Print a list of antiprimes (highly composite numbers) with bc

#! /usr/bin/bc
define factors(n) {
    auto c, i
    for(i=1;i<=n;i++) {
        if(n%i==0) c+=1
    }
    return c
}
max = 0
n = 1
for(c=19; c > 0;) {
    f = factors(n)
    if(f > max) {
        print n," "
        max = f
        c -= 1
    }
    n += 1
}
print "\n"
quit

Posted in Uncategorized | Leave a comment

Awk Comb

Combinations of r elements chosen from a pool of n elements

BEGIN {
        for (i=1; i <= r; i++) {
                A[i] = i
                if (i < r ) printf i OFS
                else print i}
        while (A[1] < n - r + 1) {
                for (i = r; i >= 1; i--) {
                        if (A[i] < n - r + i) {
                                A[i]++
                                p = i
                                break}}
                for (i = p + 1; i <= r; i++) A[i] = A[i - 1] + 1
                for (i=1; i <= r; i++) {
                        if (i < r) printf A[i] OFS
                        else print A[i]}}
        exit}

Posted in Uncategorized | Leave a comment

Hex

Hex

#!/usr/bin/python3
import sys
with open(sys.argv[1], "rb") as f:
    data = f.read()
for offset in range(0, len(data), 16):
    b = data[offset:offset + 16]
    left = " ".join(f"{x:02x}" for x in b[:8])
    right = " ".join(f"{x:02x}" for x in b[8:])
    hexpart = f"{left:<23}  {right:<23}"
    text = "".join(chr(x) if 32 <= x <= 126 else "." for x in b)
    print(f"{offset:08x}  {hexpart}  |{text}|")

Posted in Uncategorized | Leave a comment

Euler

scale=90
for (e = n = f = 1; f != 0; f /= ++n) e += f
e

Posted in Uncategorized | Leave a comment

Palprimes

Palindromic primes

20 FOR N=2 TO 100000
30 I=N
35 J=0
40 J=J*10+I-INT(I/10)*10
43 I=INT(I/10)
47 IF I>0 THEN 40
50 IF J<>N THEN 80
52 IF N=2 THEN 75
60 FOR I=2 TO SQR(N)
65 IF N-INT(N/I)*I=0 THEN 80
70 NEXT I
75 PRINT N;" ";
80 NEXT N
85 PRINT

Posted in Uncategorized | Leave a comment

Palindate

Palindate

#! /bin/bash
is_palyndrom_date() { date -d "$1" 1>/dev/null 2>&1 && echo "$1" ; }
for _H in {2..9}; do
 for _I in {0..9}; do
  for _J in {0..99}; do
   is_palyndrom_date ${_H}${_I}`printf "%02d%s" ${_J}`-`printf "%02d%s" ${_J} |
rev`-`printf "%02d%s" ${_H}${_I} | rev`
  done
 done
done

Posted in Uncategorized | Leave a comment

Deal

Shuffle and deal four hands of five cards each with #Python

#!/usr/bin/python3
import random
deck = [
'🂡','🂢','🂣','🂤','🂥','🂦','🂧','🂨','🂩','🂪','🂫','🂭','🂮',
'🂱','🂲','🂳','🂴','🂵','🂶','🂷','🂸','🂹','🂺','🂻','🂽','🂾',
'🃁','🃂','🃃','🃄','🃅','🃆','🃇','🃈','🃉','🃊','🃋','🃍','🃎',
'🃑','🃒','🃓','🃔','🃕','🃖','🃗','🃘','🃙','🃚','🃛','🃝','🃞'
]
random.shuffle(deck)
for i in range(0, 20, 5):
    print(" ".join(deck[i:i+5]))

Posted in Uncategorized | Leave a comment