GET Anatomy of melancholy / Sudo Null IT News FREE

Knowledge is might.

Francis Francis Bacon.

... in much sapience there is some sadness;
and whoever multiplies knowledge, multiplies sorrow.

Book of Ecclesiastes.


Games survive their possess lives. They arise from nowhere, develop, give rise to modern games, are forgotten by everyone and, sometimes, come back from oblivion. There are galore examples of games that have been defeated in this work on of survival. These are the single variations of Shogi that have survived just thanks to the reverent posture of the people of Japan to their cultural heritage. A game party like Taikyoku shogi could drag on for months (if not age). But these Heian- era chess dinosaursare not the most outstanding representatives of the "fossil" world of board games.

I want to talk about a truly amazing game. The threats in it are non open, and the goals are not trivial. You can winnings in many ways, merely acting is not at all easy. Information technology cannot be attributed either to the family of Checkers or to the chess family. Its source is foggy. For the average secular, this game is about as exciting as composing magic squares . It fully justifies one of its names - only philosophers sack sport it .

For the get-go time, Rithmomachia , also known every bit the "Battle of the Numbers" or "The Crippled of the Philosophers", was described around 1030 aside a monk called Asilo. Paternity, apparently unfounded, is attributedПлатону, а правила игры основаны на арифметической теории Боэция. Впоследствии, правила игры были незначительно изменены другим монахом, по имени Hermannus Contractus, добавившим примечания, посвященные теории музыки. Продолжительное время Ритмомахия использовалась в качестве учебного пособия, при обучении студентов математике. Интеллектуалы того времени играли в Ритмомахию для удовольствия (одно время она была даже более популярна чем Шахматы), Роберт Бёртон упоминал её в "Анатомии меланхолии", а Томас Мор считал эту игру хорошим досугом для обитателей своей "Утопии". Then, abruptly, it was over. The interests of maths and Rhythmachia diverged and the game was forgotten. Course, this does non mean that we cannot remember it.

Rules of the game

Two players are playing Rhythm Machia connected a rectangular 8x16 square board. The moves are made in turn. Each move moves one piece. As a result of the move, one or more pieces of the opponent can be taken (removed from the board). The undermentioned types of shapes are defined:

  • A circle
  • Triangle
  • Square
  • Pyramid

Ignoring the numerical marks on the figures (I will utter about them below), you can see that two types of moves are allowed. In the first case, the figure moves in a straight line and can be stopped by any other figure of speech (its own Oregon the foe) that is in the way. Thus, the Circle moves (one cell diagonally), as well A the Triangle (rigorously 2 cells along the orthogonal) and the Direct (strictly three cells along the rectangular). Other possibility is to "jump" the pieces onto the target square, similar to the move of the Dub in Chess. So the Triangle or the Square can walk. Any proceed should represent performed only on an empty mobile phone.

A unique figure is the Pyramid. In reality this is non a figure, but a set of figures. Each piece in the set (Circle, Triangle or Square) allows the Pyramid to perform the corresponding type of move. The figure above shows the possible moves of the Pyramids of Egypt in the "maximum configuration". As you might guess, past the end of the game, "completeness" can be severely violated (by the way, the Pyramid from Rhythmachia is the merely figure I know that sack be "killed in parts").

I will dwell on the methods of "humorous". In Rhythmachia there are quaternary of them:

  • Capture by siege
  • Gaining control by equality
  • Capture by ambush
  • Capture by eruption

The nearly radical is the siege of the figure. The pattern leave be removed if subsequently the incoming move it is blocked in all bias or unrelated directions. If the figure is located at the edge of the panel or in the recession, you will have to block fewer directions. This is the simplest (merely not the only) way to take the Pyramids of Egypt all of a sudden - as a altogether. The siege is the single way that does not use the numerical values ​​of the figures.

Some other way is to submit a figure with a matching nonverbal value. If, after complemental the move, on the champaign where the piece could move the next move (if this discipline was empty, of line), the opposing's piece is located, with the same numerical esteem, it will constitute taken. It should be noted that this method acting of combat may be asymmetric. So (in the figure above), after White's motility, the Circle, with a numerical treasure of 16, can take a dishonorable Triangle with the same value, but the Triangle, in its turn, cannot ut this, since it goes to other cells. Simultaneously, pure and black triangles with numeral values ​​of 25 beat each other symmetrically (then which pattern will be shot is determined by the order of the move).

An improved version of the previous is the following method acting. This time, "out of ambush", two figures are attacking. If the summation, difference of opinion, product or quotient of their numerical values ​​coincides with the numerical value on the opponent's figure, the physical body is removed. This is the near frequently used feature of the battle of figures in the game, but to see all such threats, in a close to difficult status, can be quite difficult.

The latter method allows you to beat figures at a long aloofness. If the result of the work or the private numerical value of the chassis and the distance to the hostile's figure (orthogonal) coincides with the numerical prize of the opponent's figure, the soma is removed. Other figures located in the charge of the struggle coiffure not impede the scourge. When hard the distance, the start and end positions are taken into account. This is a symmetrical method acting of combat (since it does not depend on the rules for waving figures). The chronological sequence of the move determines which of the figures will be taken.

Information technology remains to talk nigh how these rules enforce to the Pyramids. With this, everything is simple - in any calculation for fetching figures, the Pyramid tail act either arsenic an nonparasitic fles (its numerical measure coincides with the sum of the numerical values ​​of all its components), or as some of its parts. Similarly, the Pyramid can be taken as a undivided (by its entire value), surgery in parts (all of its components on an individual basi is vulnerable). Given the rules for moving the Pyramid, which I mentioned higher up, this makes the Pyramid the strongest (and most vulnerable) enter.

The initial arrangement of figures is associated with another significant lineament of the game. Although the set of figures is the assonant, the numeric values ​​vary. Also, the "complete set" of the pyramids is different (shown unofficially of the board, for each of the players). This makes the game lopsided. Tactics and strategies for the black instrumentalist are not suitable for white (and contrariwise). This makes the game more interesting.

Glorious victories

The rules described supra are enough to start playing Rhythmachy, but if the goal of the secret plan was to simply bewitch all the opponent's pieces, the game would non be so interesting. Yes, you can win in this way, but this is not the only (and non the best) way to win! I really like games, the purpose of which is not a straightforward "killing" of foe figures. So in Chess, to win, it is not at whol necessary to "eat" all the pieces, it is enough to check the King! In some versions of Hasami Shogi , the goal of the spunky is even more unthought-of (to win, you need to build a line of 5 of your chips "in a row"). Rhythmachy does not disappoint therein regard either. Here is a list of ways to come through this game (in increasing order of their "fame"):

  • DE Corpore ("away physical structure"): Get a given (or more) list of enemy pieces (usually 15)
  • De Bonis ("aside goods"): Take the opponent's pieces with a given (or large) total economic value (usually 1315 for white and 984 for black)
  • De Lite ("by lawsuit"): Take enemy figures with a given (Oregon mountainous) total value, provided that the number of digits connected the captured figures does not outperform a given
  • De Honore ("by accolade"): Take enemy pieces with a given (Beaver State large) entire value, provided that the number of captured pieces does not outperform a bestowed
  • First State Honore Liteque ("away honor and lawsuit"): Postulate enemy figures with a given (or large) aggregate value, provided that the number of captured figures does not exceed the nominal and the numerate of digits on the captured figures does non exceed the specified
  • Capital of Seychelles Magna ("majuscule victory"): Do troika pieces (on foe territory) in arithmetic patterned advance
  • Victoria Major ("greater triumph"): Position four figures (connected the territory of the foe) so that they throw cardinal (just no more) groups of trey figures placed in distinguishable types of progression ( arithmetic , geometric or harmonic )
  • Victoria Excellentissima ("most excellent triumph"): Position (on the district of the foeman) four pieces so that there are all three types of progression

Here you can distinguish two essentially diametrical types of goals of the game. Common Victories are associated with the capture of enemy figures (with the possible limitation of the number of captured figures, in lodg to protect against self-assertive play). Right Victories are considered a more eligible conclusion and are related with the restoration of a positive "harmony" on the soil of the enemy (which does not exclude the possibility of the battle of enemy figures).

The examples supra illustrate that enemy figures can (and should) be involved. In the for the first time case, an arithmetic progression is constructed (16, 36, 56). The second instance combines geometric (4, 12, 36) and quality (4, 6, 12) progressions. In the third shell, all three types of progression are nowadays (you yourself can obtain them). In caseful there are difficulties with verbal counting, tables of all accomplishable solutions in Rhythmachy have been built (however, Rhythmachy is unlikely to equal of interest to people with problems with verbal counting).

Potential options

During its heyday, Rhythmachy has already undergone umpteen changes. Subsequent renovations did not improve the plac. At that place are many differences in the description of the rules of this biz. Some sources give alternative options for the initial arrangement of pieces (I even came across an option that describes the game on an 8 x 14 board):

There are options with simplified rules for moving pieces. According to these rules, figures move in a directly line (orthogonal and stroke) by a given number of cells. Any figure, in the way of social movement, Michigan moving. Thither are no jumps, same a Knight's move in Chess. The pyramid, A usual, combines the moves of the figures present in its set.

Additionally, there is an option with the usual rules for the cause of figures, in which a special Pyramid run is added to 3 cells diagonally. Much a move is possible provided that non nonpareil of the figures originally enclosed in the Pyramid is taken. With the safety of the first put across of figures of the Pyramid, another option is associated. It is allowed to use the total value of the Pyramid, but on condition that none of its figures has not yet been "eaten". There are simpler options in which the Pyramid is completely removed if any of its components is attacked.

Some of the options are germane to changes in the rules for taking figures. So, in one of the options for taking a piece " by Siege" (осада), необходимо блокировать все направления её «естественного» перемещения. При этом, не обязательно располагать свои фигуры вплотную к блокируемой (примеры ниже иллюстрируют концепцию). Это довольно интересное правило.

Есть вариант, в котором взятие "away Ambush" (засада) осуществляется подобно играм «зажимного» типа (при этом, правила перемещения фигур игнорируются):

Имеется большое количество расхождений в определениях "Glorious Victories". Часто, в условия таких побед, включается предварительное уничтожение Пирамиды противника. Также, существует условие завершения игры, ограничивающееся взятием Пирамиды. Вариантов этой игры много. Ознакомление с нюансами правил, перед началом игры, в любом случае, будет совсем не лишним.

Inside information for the speculative

The implementation of the game naturally divided into various stages. The easiest agency was to go through wriggly shapes. This is where I started. Here's what the Squares movement looks like:

Wriggling Squares

              : leap-n ( 'leap-dir 'dislodge-dir consider ? -- ) 	IF 		BEGIN 			Terminated EXECUTE IF 				on-board? IF 					1- DUP 0> IF 						Treasonably 					Other 						2DROP TRUE TRUE 					ENDIF 				ELSE 					2DROP FALSE TRUE 				ENDIF 			ELSE 				2DROP FALSE TRUE 			ENDIF 		UNTIL 		IF 			EXECUTE IF 				on-board? abandon? AND IF 					from 					here DUP last-position ! 					affect 					capture-altogether 					add-move 				ENDIF 			ENDIF 		ELSE 			Drop off 		ENDIF 	ELSE 		2DROP DROP 	ENDIF ; : shift-n ( 'shift-dir count ? -- ) 	IF 		BEGIN 			Concluded EXECUTE IF 				on-board? empty? AND IF 					1- DUP 0> IF 						FALSE 					ELSE 						2DROP TRUE True up 					ENDIF 				ELSE 					2DROP FALSE Unfeigned 				ENDIF 			ELSE 				2DROP FALSE TRUE 			ENDIF 		UNTIL 		IF 			from 			here DUP last-position ! 			go out 			capture-all 			tally-move 		ENDIF 	ELSE 		2DROP 	ENDIF ; : s-move-n ( -- ) ['] Northernmost 3 TRUE agitate-n ; : s-move-s ( -- ) ['] Southerly 3 TRUE shift-n ; : s-travel-w ( -- ) ['] West  3 TRUE shift-n ; : s-move-e ( -- ) ['] Eastward  3 TRUE shift-n ; : s-move-nw ( -- ) ['] Northwest ['] North 2 Lawful leap-n ; : s-move-atomic number 10 ( -- ) ['] Northeast ['] North 2 Honest leap-n ; : s-move-sw ( -- ) ['] Southwest ['] South 2 TRUE leap-n ; : s-move-se ( -- ) ['] Southeast ['] South 2 TRUE leap-n ; : s-move-wn ( -- ) ['] Northwest ['] Mae West  2 Confessedly spring-n ; : s-move-ws ( -- ) ['] Southwest ['] West  2 TRUE leap-n ; : s-move-en ( -- ) ['] Northeast ['] Easterly  2 TRUE leap-n ; : s-move-es ( -- ) ['] Southeast ['] East  2 Avowedly leap-n ; {moves s-moves 	{be active} s-motivate-n 	{move} s-move-s 	{go off} s-act up-w 	{move} s-impress-e 	{travel} s-move-nw 	{move} s-move-ne 	{move} s-move-sw 	{move} s-move-southeastward 	{move} s-move-wn 	{act upon} s-movement-ws 	{move} s-move-en 	{move} s-go on-atomic number 99 moves}                          

Some difficulty arose with the Pyramids, since their set of moves is driven by what pieces are included in them at the moment. I had to describe whol possible moves for them, and when making a affect, check for the presence of the corresponding figure in the set:

Moving Pyramids

              : is-correct-type? ( piece-eccentric -- ? ) 	not-empty? IF 		piece-type PYRAMID > IF 			here SWAP a1 to 			BEGIN 				friend-p IF 					DUP is-piece-type? IF 						Sink TRUE TRUE 					Other 						Simulated 					ENDIF 				Other 					DROP FALSE TRUE 				ENDIF 			UNTIL 			SWAP to 		ELSE 			DROP Faithlessly 		ENDIF 	Other 		DROP FALSE 	ENDIF ; : praseodymium-move-NE ( -- ) ['] Northeast ROUND is-correct-type? leap-0 ; : pr-proceed-se ( -- ) ['] Southeast ROUND is-sort out-type? jump-0 ; : public relations-strike-northwest ( -- ) ['] Northwest ROUND is-correct-typewrite? leap-0 ; : pr-move-sw ( -- ) ['] Southwest ROUND is-correct-eccentric? leap-0 ; {moves p-moves 	{move} pr-move-ne 	{move} pr-move-se 	{move} pr-move-nw 	{move} pr-locomote-sw 	... moves}                          

The implementation of the battle of figures turned into a existent "race for survival." It was requisite to implement four all different (and very non-trivial) methods of catch. At the same time, I wished-for to demarcation line the number of field views in order to minimize the command processing overhead time of calculations (the move is calculated disgracefully long already). As a result, I settled on the mind of ​​pre-filling several arrays, with the following checks of the conditions of the combat of figures:

Battle methods

              MAXV []		offensive-values[] MAXS []		rife-positions[] MAXS []		current-values[] MAXS []		eruption-values[] : fill-current ( pos -- ) 	1 flow-count ! 	DUP 0 flow-positions[] ! 	DUP piece-character-at PYRAMID > IF 		a1 to 0 		BEGIN 			enemy-p IF 				not-empty? IF 					piece piece-prise 					current-count @ MAXS < IF 						here current-count @ current-positions[] ! 						DUP  current-numerate @ current-values[] ! 						current-count ++ 					ENDIF 					+ 				ENDIF 				FALSE 			ELSE 				True up 			ENDIF 		UNTIL 	Other 		DUP piece-at slice-value 	ENDIF 	0 current-values[] ! 	to ; : fetch-eruption-values ( n -- ) 	0 sum-esteem ! 	PYRAMID is-piece-type? IF 		here a1 to 		BEGIN 			friend-p IF 				not-stripped? eruption-count @ MAXE < AND IF 					OVER piece objet d'art-value  					DUP sum-value @ + summate-rate ! 					* 					eruption-count @ volcanic eruption-values[] ! 					eruption-count ++ 				ENDIF				          				Treasonably 			Other 				TRUE 			ENDIF 		UNTIL 		to 		heart and soul-value @ 	ELSE 		piece piece-value 	ENDIF 	eruption-count @ MAXE < IF 		* 		eruption-count @ clap-values[] ! 		eruption-count ++ 	ELSE 		2DROP 	ENDIF ; : get-assaultive-values ( slice-type -- ) 	0 tot-value    ! 	Fictive sum-flag ! 	PYRAMID is-tack together-character? IF 		here a1 to 		Begin 			ally-p IF 				not-empty? attacking-calculate @ MAXV < AND IF 					set up piece-value 					sum-treasure @ + sum-value ! 					OVER is-piece-type? IF 						TRUE sum-masthead ! 						musical composition piece-value 						attacking-count @ attacking-values[] ! 						offensive-calculate ++ 					ELSE 					ENDIF 				ENDIF				          				FALSE 			ELSE 				TRUE 			ENDIF 		UNTIL 		to DROP 		sum-ease up @ attacking-weigh @ MAXV < AND IF 			amount of money-value @ 			attacking-count @ attacking-values[] ! 			attacking-count ++ 		ENDIF 	ELSE 		is-piece-type? offensive-count @ MAXV < AND IF 			piece piece-value 			assaultive-count @ attacking-values[] ! 			attacking-count ++ 		ENDIF 	ENDIF ; : hitch-siege-od ( 'dir -- ) 	EXECUTE IF 		predict-move 		on-board? NOT protagonist? Beaver State IF 			beleaguering-counter -- 		ENDIF 		on-board? friend? AND IF 			2 get-eruption-values 		ENDIF 		to 	Other 		siege-counter -- 	ENDIF ; : check-siege-Doctor of Divinity ( 'dir -- ) 	Carry out IF 		predict-move 		along-board? NOT friend? OR IF 			siege-anticipate -- 		ENDIF 		along-board? friend? AND IF 			Ring get-attacking-values 			ROUND check-equality-piece 		ENDIF 		to 	ELSE 		siege-counter -- 	ENDIF ; : check-siege ( pos -- ) 	4 siege-counter ! 	DUP to ['] Northward check-siege-od 	DUP to ['] South-central check-siege-od 	DUP to ['] West  tick-siege-od 	DUP to ['] East  retard-military blockade-od 	besieging-replication @ 0= IF 		TRUE is-captured? ! 	ENDIF 	4 military blockade-buffet ! 	DUP to ['] N check-siege-dd 	DUP to ['] Southeast check-siege-Doctor of Divinity 	DUP to ['] Northwest break-siege-dd 	DUP to ['] Southwest check-siege-Doctor of Divinity 	siege-counter @ 0= IF 		TRUE is-captured? ! 	ENDIF 	to ; : control-equality-DD ( 'second-dir look 'first-dir -- ) 	EXECUTE connected-board? AND IF 		BEGIN 			1- DUP 0< IF 				TRUE			 			ELSE 				Terminated Carry out connected-board? AND IF 					betoken-be active 					friend? IF 						OVER count-to-piece-case 						DUP get-offensive-values 						check-equality-objet d'art 					ENDIF 					to 	                                FALSE 				ELSE 					TRUE 				ENDIF 			ENDIF 		UNTIL 		2DROP 	Other 		2DROP 	ENDIF ; : moderate-par-od ( 'second-dir count down 'commencement-dir -- ) 	EXECUTE on-board? AND empty? AND IF 		Begin 			1- DUP 0< IF 				TRUE			 			ELSE 				OVER EXECUTE on-board? AND IF 					predict-move 					admirer? IF 						OVER count-to-factor stupefy-eructation-values 						OVER count-to-piece-type 						DUP get-attacking-values 						check-equality-piece 						TRUE 					ELSE 						non-empty? 					ENDIF 					Swop to 				Other 					TRUE 				ENDIF 			ENDIF 		UNTIL 		2DROP 	ELSE 		2DROP 	ENDIF ; : check-equality ( pos -- ) 	DUP to ['] Northerly 2 ['] Northeastern     check-equality-od 	DUP to ['] North 2 ['] Northwest check out-equality-dd 	DUP to ['] North 2 ['] Northeast check-equivalence-dd 	DUP to ['] South 2 ['] South     check-equality-od 	DUP to ['] South 2 ['] Southwest suss out-par-dd 	DUP to ['] South 2 ['] Southeast gibe-equality-dd 	DUP to ['] West  2 ['] West      cheque-equality-od 	DUP to ['] West  2 ['] Northwest check-equation-dd 	DUP to ['] West  2 ['] Southwest check-equality-dd 	DUP to ['] East  2 ['] East      check-equality-od 	DUP to ['] East  2 ['] Northeast check-equality-dd 	DUP to ['] Due east  2 ['] Southeast check-par-dd 	to ; : check-trap-prod ( time value -- ? ) 	value-1 @ value-2 @ * OVER = IF 		DROP TRUE 	ELSE 		DUP value-1 @ * value-2 @ = IF 			Discharge TRUE 		ELSE 			value-2 @ * value-1 @ = IF 				TRUE 			ELSE 				FALSE 			ENDIF 		ENDIF 	ENDIF ; : check-ambush-cond ( value -- ? ) 	value-1 @ economic value-2 @ + OVER = IF 		DROP Reliable 	ELSE 		DUP valuate-1 @ + value-2 @ = IF 			DROP TRUE 		ELSE 			DUP valuate-2 @ + appreciate-1 @ = IF 				DROP TRUE 			ELSE 				check-waylay-prod 			ENDIF 		ENDIF 	ENDIF ; : check-ambush-pair ( -- ) 	current-calculate @ 	BEGIN 		1- 		DUP current-positions[] @ 0< NOT IF 			DUP current-values[] @ watch-ambush-cond IF 				DUP 0> IF 					DUP current-positions[] @  					DUP foe-at? IF 						DUP ChangePieces 						capture-at 					ELSE 						DROP 					ENDIF 					-1 OVER current-positions[] ! 				ELSE 					TRUE is-captured? ! 				ENDIF 			ENDIF 		ENDIF 		DUP 0> NOT 	UNTIL 	DROP ; : check-scupper ( -- ) 	attacking-count @ 	BEGIN 		1- 		attacking-count @ 		Set about 			1- 			2DUP < IF 				2DUP  				attacking-values[] @ value-1 ! 				attacking-values[] @ value-2 ! 				check-lying in wait-pair 			ENDIF 			DUP 0> Non 		UNTIL 		DROP 		DUP 0> NOT 	UNTIL 	DROP ; : fill-outbreak-values ( 'dir pos n -- ) 	value-1 ! to 1 	BEGIN 		1+ Terminated EXECUTE IF 			predict-move 			OVER value-1 @ > on-board? friend? AND AND IF 				OVER get-eruption-values 			ENDIF 			to 			FALSE 		Other 			Dead on target 		ENDIF 	UNTIL 	2DROP ; : check-clap-couple ( -- ) 	current-count @ 	BEGIN 		1- 		DUP live-positions[] @ 0< NOT IF 			DUP current-values[] @ time value-1 @ = IF 				DUP 0> IF 					DUP current-positions[] @  					DUP foe-at? IF 						DUP ChangePieces 						seizure-at 					Other 						DROP 					ENDIF 					-1 Complete current-positions[] ! 				ELSE 					TRUE is-captured? ! 				ENDIF 			ENDIF 		ENDIF 		DUP 0> Non 	UNTIL 	DROP ; : assure-eruption-values ( -- ) 	extravasation-count @ 	Get down 		1- 		DUP eruption-values[] @ value-1 ! 		check-eruption-pair 		DUP 0> NOT 	UNTIL 	DROP ; : check-eruption ( pos -- ) 	['] North OVER 4 fill-eruption-values 	['] South OVER 4 fill-eruption-values 	['] Westernmost  OVER 4 fill-eruption-values 	['] Eastern United States  OVER 4 fill up-eruption-values 	to 	check-eruption-values ; : capture-all ( -- ) 	Here ROWS COLS * 	Commence 		1- 		DUP on-control board-at? OVER foeman-at? AND IF 			0 attacking-count  ! 			0 volcanic eruption-count   ! 			Invalid is-captured? ! 			DUP fill-flow 			DUP tab-siege  			is-captured? @ NOT IF 				DUP check-equality 			ENDIF 			is-captured? @ NOT IF 				check-ambush 			ENDIF 			is-captured? @ NOT IF 				DUP check-eruption 			ENDIF 			is-captured? @ IF 				capture-piece 			ENDIF 		ENDIF 		DUP 0> Non 	UNTIL 	DROP to ;                          

The capture of figures in the Pyramid, as well as the movement, had to be handled in a special way:

Taking figures

              : capture-piece ( -- ) 	on-line-count @ 	BEGIN 		1- DUP 0> IF 			DUP flow-positions[] @ 			DUP 0< NOT IF 				DUP opposition-at? IF 					DUP ChangePieces 					capture-at 				ELSE 					DROP 				ENDIF 			Other 				DROP 			ENDIF 			FALSE 		ELSE 			DUP current-positions[] @ 			DUP foe-at? IF 				DUP ChangePieces 				charm-at 			ELSE 				DROP 			ENDIF 			TRUE 		ENDIF 	UNTIL 	DROP ;                          

Already in the process of debugging, I realized that all checks are performed at the time earlier the move. I had to compose a small routine that simulates the motility of a piece (this is not a identical complete recalculation of the position on the board, but I managed to get past with a bit line):

Position change

              : predict-move ( -- pos ) 	here  	DUP from = IF 		utmost-position @ to 	ELSE 		DUP last-position @ = IF 			from to 		ENDIF 	ENDIF ;                          

Against the background of all these horrors, checking the conditions for conclusion the gritty seemed a superficial task. There was more or less Maxim magic, just there is nothing that I'm afraid to show my parents:

Completion check

              15	CONSTANT	WINC 1315	Unremitting	WINW 984	Incessant	WINB : WhitePieces++ ( -- ) WhitePieces ++ ; : BlackPieces++ ( -- ) BlackPieces ++ ; : WhiteValues++ ( -- ) WhiteValues ++ ; : BlackValues++ ( -- ) BlackValues ++ ; : ChangePieces ( pos -- ) 	DUP composition-at piece-value SWAP 	player-at White = IF 		COMPILE WhitePieces++ 		BEGIN 			1- 			COMPILE WhiteValues++ 			DUP 0> NOT 		UNTIL 		DROP 	ELSE 		COMPILE BlackPieces++ 		BEGIN 			1- 			COMPILE BlackValues++ 			DUP 0> NOT 		UNTIL 		DROP 	ENDIF ; : OnIsGameOver ( -- gameResult ) 	#UnknownScore 	current-player White = IF 		WhitePieces @ WINC >= IF 			Send packing 			#LossScore 		ENDIF 		WhiteValues @ WINW >= IF 			DROP 			#LossScore 		ENDIF 	ENDIF 	current-histrion Black = IF 		BlackPieces @ WINC >= IF 			DROP 			#LossScore 		ENDIF 		BlackValues @ WINB >= IF 			DROP 			#LossScore 		ENDIF 	ENDIF ;                          

From this moment, the programme could already play (though it did it rather passively). The fact is that, in the absence of an evaluation function (and a custom implementation of AI), Maxim tries to perform a complete thorough search, to the endmost position. Information technology is comprehensible that the remainder of the game is far beyond the view of the possible depth of search, American Samoa a result of which the moves found do not differ in detail meaningfulness. Generally, it remains to bestow AI teeth:

Valuation function

              : OnEvaluate ( -- seduce ) 	current-player material-balance ;                          

Here we used the very convenient material-balance function (provided by Maxim), which uses the weight values ​​given to the figures (the same values ​​were put-upon to implement the Rhythmachy rules):

Description of figures

              {pieces 	{assemble}		R0	{moves} r-moves	0   {value} 	{patch}		R1	{moves} r-moves	1   {value} 	{piece}		R2	{moves} r-moves	2   {apprais} 	{piece}		R3	{moves} r-moves	3   {value} 	{piece}		R4	{moves} r-moves	4   {value} 	{piece}		R5	{moves} r-moves	5   {value} 	{piece}		R6	{moves} r-moves	6   {assess} 	{piece}		R7	{moves} r-moves	7   {value} 	{put together}		R8	{moves} r-moves	8   {value} 	{piece}		R9	{moves} r-moves	9   {respect} 	{piece}		R16	{moves} r-moves	16  {value} 	{small-arm}		R25	{moves} r-moves	25  {value} 	{musical composition}		R36	{moves} r-moves	36  {value} 	{piece}		R49	{moves} r-moves	49  {value} 	{piece}		R64	{moves} r-moves	64  {value} 	{piece}		R81	{moves} r-moves	81  {value} 	{piece}		T0	{moves} t-moves	0   {value} 	{objet d'art}		T6	{moves} t-moves	6   {value} 	{part}		T9	{moves} t-moves	9   {value} 	{piece}		T12	{moves} t-moves	12  {value} 	{piece}		T16	{moves} t-moves	16  {esteem} 	{piece}		T20	{moves} t-moves	20  {value} 	{piece}		T25	{moves} t-moves	25  {value} 	{bit}		T30	{moves} t-moves	30  {value} 	{piece}		T36	{moves} t-moves	36  {value} 	{piece}		T42	{moves} t-moves	42  {value} 	{piece}		T49	{moves} t-moves	49  {value} 	{piece}		T56	{moves} t-moves	56  {value} 	{piece}		T64	{moves} t-moves	64  {esteem} 	{piece}		T72	{moves} t-moves	72  {value} 	{piece}		T81	{moves} t-moves	81  {value} 	{piece of music}		T90	{moves} t-moves	90  {valuate} 	{piece}		T100	{moves} t-moves	100 {evaluate} 	{piece}		S0	{moves} s-moves	0   {value} 	{piece}		S15	{moves} s-moves	15  {apprais} 	{piece}		S25	{moves} s-moves	25  {evaluate} 	{piece}		S28	{moves} s-moves	28  {value} 	{piece}		S36	{moves} s-moves	36  {value} 	{piece}		S45	{moves} s-moves	45  {apprais} 	{piece}		S49	{moves} s-moves	49  {treasure} 	{piece}		S64	{moves} s-moves	64  {value} 	{set up}		S66	{moves} s-moves	66  {value} 	{piece}		S81	{moves} s-moves	81  {value} 	{piece}		S120	{moves} s-moves	120 {value} 	{while}		S121	{moves} s-moves	121 {esteem} 	{art object}		S153	{moves} s-moves	153 {appreciate} 	{piece}		S169	{moves} s-moves	169 {value} 	{piece}		S225	{moves} s-moves	225 {value} 	{nibble}		S289	{moves} s-moves	289 {value} 	{piece}		S361	{moves} s-moves	361 {value} 	{piece}		P0	{moves} p-moves	0   {value} 	{patch}		P91	{moves} p-moves	91  {value} 	{piece}		P190	{moves} p-moves	190 {value} pieces}                          

This implementation lacks a lot (for deterrent example, checking for game completion by Glorious Victories ). I will test to add the missing functionality in the early. The current version of the source code can always be found here .

What is the resultant role?

Rhythmachy interested me, early of all, with its complexity. Course, there were no thoughts to follow up it on ZRF . I had to lord Maxim , for this! Presently, there is a easy implementation that does not support Beautiful Victories . Also, there is no firm belief that I constitute all the errors in the codification (1000 lines in ForthScript - this is sincere). This is a beta version, simply overall IT works:

You Crataegus laevigata notice that the spirited ends very apace. It in truth is. Just in case both players play aggressively, reported to the terms of Common Victories (and without limiting the amoun of pieces taken), the modal continuance of a game is ~ 10 moves. Simultaneously, the first player has a serious vantage:

          Accumulative results following halt 13 of 100: Role player 1 "Eval", wins = 13. Player 2 "Eval", wins = 0. Draws = 0                  

IT's odd that if lonesome one of the players is aggressive, the game drags on to more than 300 moves (an aggressive player almost e'er wins).

          Cumulative results next halting 22 of 100: Player 1 "Rithmomachy", wins = 1. Participant 2 "Eval", wins = 21. Draws = 0                  

It's hard for a mortal with a computer to play. Fifty-fifty with the foreground of the figures under battle, it nates be difficult to figure out which exceptional piece to make a get in arrange to take (although it is also suggested not to fill in your own figures). Nowadays, this game is unlikely to be popular, but one cannot be taken away from it. She is great at developing her oral numeration skills.

DOWNLOAD HERE

GET Anatomy of melancholy / Sudo Null IT News FREE

Posted by: wilsonconfor45.blogspot.com

0 Response to "GET Anatomy of melancholy / Sudo Null IT News FREE"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel