DESCRIPTION:
Solves a 'Countdown' arithmetic problem (in english) or 'Le Compte Est Bon'
(in french).
The target must be fitted arithmetically with the argument list and the
operators +, -, *, / (and optionally exponant). See Help() function below
for all options.
PRINCIPLE:
Solves [target] from [a1, a2, a3, a4, a5, a6].
Solves [67] from [15, 8, 50, 4, 5, 21].
One possible answer could be :
5 * 15 = 75
75 - 8 = [67]
SYNTAX:
CEB a1 a2 a3 a4 a5 a6 [target] [options]
AMIGA PORT:
You probably all knows the TV game on which you need solves arithmetically
a number from six random numbers. This program, CEB, written by Gilles
BANNAY, is a resolver for this game. It was last updated in 2012.
It was originally compiled for GCC compiler (intel-linux), using :
gcc -march=i686 -O2 -fomit-frame-pointer -oceb ceb.c
I compiled it on Amiga with the SAS/C Compiler 6.59 (m68k-amiga),
without any modification.
sc ceb.c TO ceb_ANY LINK CPU=ANY MATH=STANDARD CHKABORT NOICONS STRIPDEBUG
OPT OPTGO
sc ceb.c TO ceb_020 LINK CPU=68020 MATH=STANDARD CHKABORT NOICONS STRIPDEBUG
OPT OPTGO
sc ceb.c TO ceb_040 LINK CPU=68040 MATH=STANDARD CHKABORT NOICONS STRIPDEBUG
OPT OPTGO
sc ceb.c TO ceb_060 LINK CPU=68060 MATH=STANDARD CHKABORT NOICONS STRIPDEBUG
OPT OPTGO
ENGLISH VERSION:
Executable MD5 Size
ceb_en_ANY 9ffe2fa2c27dcce0185886c42aacfc11 27936 bytes
ceb_en_020 06fe97e8480260865708cc83a024af0d 27672 bytes
ceb_en_040 df1758e1bd951956ba2bf9ec5ed8b021 27660 bytes
ceb_en_060 b7547d83a0212cec3f4b1ed42ceff89e 27684 bytes
FRENCH VERSION:
Executable MD5 Size
ceb_fr_ANY 05a78fd08cd74888af63fb5fff46e212 27980 bytes
ceb_fr_020 bac3b367f5611dea794c7e1a3622353a 27716 bytes
ceb_fr_040 6046a476413aaf6f55b0871b730ea656 27704 bytes
ceb_fr_060 f82b87ec44f52838b8f39944a8b860a0 27728 bytes
HISTORY:
V 1.00 (GBY) 11-Mar-1998 Mod: creation
V 1.01 (GBY) 02-Mai-1998 Add: Linux portage
V 1.10 (GBY) 03-Mai-1998 Fix: display issue when lines<5
V 1.20 (GBY) 05-Mai-1998 Opt: rewrite EssaiOp() for speed
Add: BorlandC 4.5 portage
Add: verbose in multi-line format (-v option)
V 1.30 (GBY) 01-Sep-2000 Opt: add some tests in EssaiOp()
Opt: don't explore 2*2 after 2+2
V 1.31 (GBY) 01-Sep-2000 Add: excluding mode ('-x[P]' option)
V 1.40 (GBY) 02-Sep-2000 Mod: rewrite code
V 1.41 (GBY) 02-Sep-2000 Opt: using SWAP
V 1.42 (GBY) 06-Sep-2000 Add: variable arguments number ('-a[N]' option)
V 1.43 (GBY) 07-Sep-2000 Add: diagnostic mode ('-d' option)
V 1.44 (GBY) 08-Sep-2000 Add: using mode ('-u[N]' option)
Fix: special case for -u0 et -u1
Add: optimize mode ('-o' option)
V 1.45 (GBY) 15-Sep-2000 Add: mapping mode for statistics
V 1.50 (GBY) 23-Jan-2001 Mod: 16 bits compiler portage
Mod: max arguments number = 64.
V 1.51 (GBY) 23-May-2006 Add: operators selection (-s[+*-/] option)
V 1.52 (GBY) 01-Mar-2007 Add: exponant operator selection (-s[+*-/e] option)
V 1.53 (GBY) 16-Mar-2007 Add: verbose in one-line format (-v1 option)
Add: test overflow.
V 1.54 (GBY) 18-Mar-2007 Add: associativity
V 1.60 (GBY) 19-Mar-2007 Fix: -s option (- without + or / without *)
V 1.61 (GBY) 09-Avr-2011 Add: -g option global
V 1.62 (GBY) 11-Avr-2011 Fix: bugfix end variable init
V 1.63 (GBY) 30-Avr-2011 Add: -w option (with)
V 1.64 (GBY) 01-May-2011 Mod: merge 1.62 & 1.63 version for performance
Fix: Operation with 0^0=1 is allowed.
V 1.65 (GBY) 14-Sep-2012 Add: -f option (fractionnal)
V 1.66 (GBY) 29-Sep-2012 Opt: power_frac() uses nthroot() in place of exp &
log
V 1.67 (GBY) 22-Oct-2012 Opt: Elag tree with 'first' parameter
HELP ENGLISH:
CEB a1 a2 a3 a4 a5 a6 [target] [options]
Solves a 'Countdown' or a 'Compte Est Bon' problem.
The target must be fitted arithmetically with the six
arguments 'a1'..'a6' and the operators +, -, *, /, ^.
a1..a6 six numerical positive arguments.
[target] target number to fit.
When 'target' is not present CEB returns a
statistics for the targets from 0 to 999.
[options] Permits to define some default parameters:
-aN set the number of arguments to N (default is 6)
-bP set the begin limit for statistics (default is 0)
-d prints debug information
-eP set the end limit for statistics (default is 999)
-f fractionnal numbers allowed
-g global mode
-o optimizes the number of arguments used
-s[+*-/e] set the allowed operators list (default is +*-/)
-uP using P arguments or less (default is N)
-v displays the solution (multi-lines format)
-v1 displays the solution (one-line format)
-wP with P arguments or more (default is 1)
-xP search up to Pth unfit target (no default)
HELP FRENCH:
CEB a1 a2 a3 a4 a5 a6 [cible] [options]
Permet de resoudre un probleme du type 'Le Compte Est Bon'.
La cible doit etre atteinte arithmetiquement avec les six
nombres 'a1'..'a6' et les operateurs +, *, -, /, ^
a1..a6 Six arguments numeriques positifs.
[cible] Nombre positif a atteindre.
Si 'cible' n'est pas precisee, retourne pour les
cibles de 0 a 999 une statistique des solutions.
[options] Permet de modifier certaines valeurs par defaut:
-aN fixe a N le nombre d'arguments (6 par defaut)
-bP fixe a P la borne min pour stat (0 par defaut)
-d mode debug
-eP fixe a P la borne max pour stat (999 par defaut)
-f nombres fractionnaires autorises
-g mode global
-o recherche avec nombre d'arguments minimum
-s[+*-/e] liste des operateurs autorises (+*-/ par defaut)
-uP avec au plus P arguments utilises (N par defaut)
-v affiche la solution (en multi-lignes)
-v1 affiche la solution (en une ligne)
-wP avec au moins P arguments utilises (1 par defaut)
-xP recherche jusqu'au Pieme recalcitrant.
EXAMPLES:
Below are some examples, among others. There are lots of options, so
better try by yourself, that's part of the fun :)
Beware with some combinations that would be unlogical, i noticed
some cases that produce very very long calcs, or abnormally long.
1.
What you certainly want to see for a very first try is the following example.
It ask how to solves the target [342] by using the [+, -, /, *] arithmetic
operators and by using the numbers [15, 49, 8, 50, 4, 5].
> ceb 15 49 8 50 4 5 342 -v
4 + 50 = 54
5 * 54 = 270
49 + 15 = 64
8 + 64 = 72
270 + 72 = 342
2.
Given 6 initial numbers, but no target number, CEB returns statistics
for the targets from 0 to 999. Here, for example, 838, 953, and 955
are invalid targets. All other targets from 0 to 999 have a solution.
> ceb 15 49 4 50 8 4
unfit = 838 953 955
Success = 99.70%, 3 unfit in 0-999.
3.
Some other set of numbers, which have a solution for any
number from 0 to 999.
> ceb 15 49 8 50 4 5
unfit =
Success = 100.00%, 0 unfit in 0-999.
4.
Same as previous, and let's see if it have at least one solution for
the target number 342.
> ceb 15 49 4 50 8 4 342
Solved !
5.
Same as previous, with the solution, in one-line format.
> ceb 15 49 8 50 4 5 342 -v1
((5 * (4 + 50)) + (8 + (49 + 15))) = 342
6.
The solution found is not necessarily the best one.
It's only the 'first' one the algorithm finds.
But you can ask explicitely for the shortest solution with -o.
> ceb 15 49 8 50 4 5 342 -v1 -o
((8 * 49) - 50) = 342
7.
Or the opposite, to ask the longest solution, using -wP.
> ceb_en_060 15 49 8 50 4 5 342 -v -w6
4 + 50 = 54
5 * 54 = 270
49 + 15 = 64
8 + 64 = 72
270 + 72 = 342
8.
To use less or more than 6 initial numbers, use the -aN parameter.
> ceb 15 49 8 50 342 -a4 -v1 -o
((8 * 49) - 50) = 342
9.
To force use only some arithmetic operators, use the -s parameter.
This of course will changes the possible solutions.
> ceb 15 49 8 50 4 5 131 -v1 -o -s+-
(5 + (4 + (50 + (8 + (49 + 15))))) = 131
> ceb 15 49 8 50 4 5 131 -v1 -o -s-*
((4 * (49 - 15)) - 5) = 131
> ceb 50 60 70 80 2 3 9 -v1 -o -s+-*/
(2 + (70 / (60 - 50))) = 9
> ceb 50 60 70 80 2 3 9 -v1 -o -s+-*/e
(3 ^ 2) = 9
> ceb 50 60 70 80 3 3 27 -v1 -o -s+-*/e
(3 ^ 3) = 27
|