It contains two file:
shape(north,2443 + 2434 + 3424 + 3442 + 3433 + 4243 + 4423 + 4234 + 4432 + 4324 + 4342 + 4333)or, if you are clever :
shape(north, any 4432 + any 4333 - 3343 - 3334 - 2344 - 3244)With dpp, you will just write :
shape{north, 4M(3+3+2+)}nice isn't it ??
The only thing it misses regarding text-parsing is the hability to handle sexp (in a more general case, I don't recommend having sex-p with a computer ;-). The bad news is that I had to change the parenthesis () into braces {}, because I wanted to use () for other purposes inside the shape-func. The only other difference is that shape doesn't recognize the word 'any' anymore.
(I confess I may have kept the old syntax and invent a new word like dist{}. If people complain about this, I may change it... I just wanted to keep HVS-soul alive in my files...)
The new general syntax is :
shape{COMPASS, shp1 + shp2 + ... + shpM - shm1 - ... - shmN}See below for the atomic (shp or shm) shapes...
Example: shape{north, 5+xx5+} : at least 5/5 in the blacks, »shape(north,5xx5 + 5xx6 + 6xx5 + 5xx7 + 6xx6 + 7xx5 + 5008 + 6007 + 7006 + 8005)
Example: shape{north, 2-xxx} : at most 2 spades, »shape(north,0xxx + 1xxx + 2xxx)
Example: shape{north, x[3-5]x[13]} : (3 to 5) hearts, and one or 3 clubs »shape(north,x3x1 + x4x1 + x3x3 + x5x1 + x4x3 + x5x3)
Note that shape{north, 3-xxx} is equivalent to shape{north,[0-3]xxx} You can write compound ranges if you want : shape{north, [013-68]xxx} means: 0,1,3,4,5,6 or 8 spades.
shape{north, (4432)} : any 4432 hand. »shape(north,any 4432)
what's best is that the () operator can operate on restricted groups of cards :
Example: shape{north, 5s(431)} : 5 spades, the others suits being (431). »shape(north,5134 + 5314 + 5143 + 5341 + 5413 + 5431)
What you have to do is :
Examples :
shape{north, 5M(xxx)} »shape(north,x5xx + 5xxx)
shape{north, 5+M3+c(31)} »shape(north,1534 + 3514 + 1633
+ 3613 + 5134 + 5314 + 6133 + 6313)
Example : shape{north, 5M5m(xx)} »shape(north,x5x5 + 5xx5 + x55x + 5x5x)
The conditions use the letters (s,h,d,c) as variables for the suit lengths, and the usual C-operators (*,+,-,/,>,<,==,!,?, and so on) Note that the ',' stands for the 'and-logical' operator. You can use 'or' for the 'or-logical' operator.
Example: shape{north, 4+s4+h(xx):d>c,h+s==10} »shape(north,6421 + 6430 + 5521 + 5530 + 4621 + 4630)
On the other hand, if you :
Quoting Hans van Staveren :
This program is hereby put in the public domain. Do with it whatever you want, but I would like you not to redistribute it in modified form without mentioning the fact of modification. I will accept bug reports and modification requests, without any obligation of course, but fixing bugs someone else put in is beyond me.Have Fun!When you report bugs please mention the version number in the source files, and preferably send context diffs if you changed anything. I might put in your fixes, and ask Henk to distribute a new version someday.
François Dellacherie
Paris, FRANCE