about summary refs log tree commit diff stats
path: root/awk/nqueens.awk
blob: 1baef8ee9b563c495edcb9aa6285256d4c4de0e6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# run with: 
#  awk -f nqueens.awk
# mawk -f nqueens.awk
# etc.

# Check if a position is safe for a queen
function is_safe(board, row, col, N) {
    for (i = 1; i < row; i++) {
        # Check if there is a queen in the same column or diagonals as the current position
        if (board[i] == col || board[i] - i == col - row || board[i] + i == col + row) {
            return 0  # Oh no! Not safe! There is a queen attacking the current position
        }
    }
    return 1  # Safe! No queens
}

# Print the board configuration
function print_board(board, N) {
    for (i = 1; i <= N; i++) {
        for (j = 1; j <= N; j++) {
            if (board[i] == j) {
                printf "Q "
            } else {
                printf ". "
            }
        }
        printf "\n"
    }
    printf "\n"
}

function solve(board, row, N) {
    if (row > N) {
        # Display the state of the board when a solution is found
        print_board(board, N)
        return
    }

    for (col = 1; col <= N; col++) {
        if (is_safe(board, row, col, N)) {
            board[row] = col
            solve(board, row + 1, N)
        }
    }
}

BEGIN {
    N = 10  # Sets the size of the board
    solve(board, 7, N)
}
t; 2010-05-03 13:36:20 +0200 committer hut <hut@lavabit.com> 2010-05-03 23:58:07 +0200 Makefile: cleaned up, added automatic uninstall' href='/akspecs/ranger/commit/Makefile?h=v1.7.1&id=b0a216f59a7770f5ce35f4a56b5055c51ceec284'>b0a216f5 ^
0c2c782d ^

30ae2137 ^
b0a216f5 ^


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
             
               

                   

                       
                   
                  

                                                                         
 

                                                            
 











                                                      

                                                        


                                                                    
                                                                          
                                             
 




























                                                                                  


                            
                                      
                                                                       
 


                                                        






                                                  
         
                                                      
 
     
                        
                             

         
                                                                                                    


                                                             
NAME = ranger
VERSION = 1.0.4
PYTHON ?= python
DOCDIR ?= doc/pydoc
PREFIX ?= /usr
MANPREFIX ?= /share/man
PYTHONOPTIMIZE ?= 2
CWD = $(shell pwd)
PYTHON_SITE_DEST ?= $(shell $(PYTHON) -c 'import sys; sys.stdout.write( \
	[p for p in sys.path if "site" in p][0])' 2> /dev/null)

default: test compile
	@echo 'Run `make options` for a list of all options'

options: help
	@echo
	@echo 'Options:'
	@echo 'PYTHON = $(PYTHON)'
	@echo 'PYTHONOPTIMIZE = $(PYTHONOPTIMIZE)'
	@echo 'PYTHON_SITE_DEST = $(PYTHON_SITE_DEST)'
	@echo 'PREFIX = $(PREFIX)'
	@echo 'MANPREFIX = $(MANPREFIX)'
	@echo 'DOCDIR = $(DOCDIR)'

help:
	@echo 'make: Compile $(NAME)'
	@echo 'make doc: Create the pydoc documentation'
	@echo 'make install: Install ranger'
	@echo 'make clean: Remove the compiled files (*.pyc, *.pyo)'
	@echo 'make cleandoc: Remove the pydoc documentation'
	@echo 'make uninstall: Uninstall ranger'
	@echo 'make snapshot: Create a tar.gz of the current git revision'
	@echo 'make test: Run all unittests.'

all: test compile install

install:
	@if [ '$(PYTHON_SITE_DEST)' == '' ]; then \
		echo -n 'Cannot find a suitable destination for the files.'; \
		echo '  Please install $(NAME) manually.'; \
		false; \
	fi
	@echo "Installing $(NAME) version $(VERSION)..."
	@mkdir -p $(PREFIX)/bin
	cp -f ranger.py $(PREFIX)/bin/ranger
	@mkdir -p $(PYTHON_SITE_DEST)
	cp -fruT ranger $(PYTHON_SITE_DEST)/ranger
	@chmod 755 $(PREFIX)/bin/ranger
	@chmod -R +rX $(PYTHON_SITE_DEST)/ranger
	@mkdir -p $(PREFIX)$(MANPREFIX)/man1
	cp -f doc/ranger.1 $(PREFIX)$(MANPREFIX)/man1/ranger.1
	@chmod 644 $(PREFIX)$(MANPREFIX)/man1/ranger.1

uninstall:
	rm -f $(PREFIX)/bin/ranger
	rm -f '$(PREFIX)$(MANPREFIX)/man1/ranger.1'
	@if [ '$(PYTHON_SITE_DEST)' == '' ]; then \
		echo 'Cannot find a possible location of rangers library files'; \
		false; \
	fi
	rm -rf '$(PYTHON_SITE_DEST)/ranger/*'
	@echo 'NOTE: By default, configuration files are stored at "~/.ranger".'
	@echo 'This script will not delete those.'

compile: clean
	@echo 'Compiling...'
	python -m compileall -q ranger
	PYTHONOPTIMIZE=$(PYTHONOPTIMIZE) python -m compileall -q ranger

clean:
	find . -regex .\*.py[co]\$$ -exec rm -f -- {} \;

doc: cleandoc
	mkdir -p $(DOCDIR)
	cd $(DOCDIR); \
		$(PYTHON) -c 'import pydoc, sys; \
		sys.path[0] = "$(CWD)"; \
		pydoc.writedocs("$(CWD)")'

cleandoc:
	test -d $(DOCDIR) && rm -f -- $(DOCDIR)/*.html

test:
	./all_tests.py 1
	./all_benchmarks.py 1

snapshot:
	git archive HEAD | gzip > $(NAME)-$(VERSION)-$(shell git rev-parse HEAD | cut -b 1-8).tar.gz

.PHONY: default options all compile clean doc cleandoc test \
	install uninstall snapshot