Zitat von xyz im Beitrag #8Could it be done automatically: change the letterset math symbol amount to zero if the corresponding category is not checked? Perhaps this is unnecessary.
It does not make much of sense to change the letter distribution table count of a math symbol to 0 if a category is unchecked, but the other way does make sense. If a math symbol is manually changed to 0 in the letter distribution table, then the players can manually decide upon what other tile can be replaced instead of that math symbol, while maintaining the total count of all tiles, including jokers and randoms to a round number, say a multiple of 100 depending upon the size of the board, 2D or 3D. It would be good to maintain an overall balance percentage between tiles of numbers and tiles of (operators and =). In the ratio of 3:2 for 100 tiles (15×15 2D boards) to 2:1 for 1000 tiles (45×45 2D boards and 15×15×15 3D boards). This would be to always ensure balance and flexibility of number tiles and non-number tiles for smaller tile sets in smaller 2D boards and to encourage players to form mathematical equations that contain with longer numbers for larger tile sets in larger 2D boards and 3D boards, smaller or larger.
Zitat von Scotty im Beitrag #3I guess we need a little bit more flexibility to play smoothly.
One way to have more flexibility is to increase number of pieces in the rack between 9 to 12, depending upon the player's tastes, size of the letter set (number of squares or cubes in 2D or 3D scrabble board respectively) and whether players have to be encouraged to form mathematical equations that contain with longer numbers.
Zitat von Scotty im Beitrag #5Using more pieces on the rack provides more flexibility, of course. But what's about 1+1+1+1=4, or 5/2=2.5, 1<2, 7/3~2 etc.
The other way to have more flexibility is to have multiple racks, just like Sorkalam Tamil Scrabble game, one entirely for numbers (size would be 7 or 8), another entirely for operators and another entirely for = (size would be 1). May be that players should not be allowed to form mathematical equations that contain with more than 1 single =? I personally do not prefer that, but it would depend upon each of player's tastes. This set up will always ensure to form a mathematical equation to be played in Scrabble board most of the time and less of swapping of tiles and passing of turn at the end of the played game whenever there are not enough tiles that are left over in the bag to swap tiles, due to imbalance and lack of flexibility between number tiles and non-number tiles.
For Scrabble with mathematical equations to be played interesting and enjoyed by players whoever would be playing it, a number tile should contain at most 1 single digit in it. Some kits that would be available from shops might contain tiles that would contain multiple digit numbers and that would discourage players from forming equations with longer numbers. Some of the things might be part of trade secret to fool customers whoever would be buying them, attracted by their pack and look and feel, for example that English Upwords larger size pack for ₹400 is 8×8 board with 64 tiles but that of smaller size pack, travel pack, for ₹225 is 10×10 board with 100 tiles.
ு and ூ are missing from Sorkalam Tamil Scrabble game and entire game is played by everyone just like a handicap, avoiding words that contain them. They are part of core Tamil and they are frequently used. They can only be played with blanks, and that is at most 1 blank is allowed for each player per turn. Words containing 2 ு letters can be only be played if one of ு letter is already there on board as a blank tile and that another of ு letter would also only be played with blank tile. Words containing 3 ு letters are impossible to be played. The cost of Sorkalam Tamil Scrabble game in Amazon is ₹1200. If everyone else does like what I did in my own 2014 make, printing out Scrabble board and Scrabble tiles on chart paper, pasting them on cardboard and cutting them with scissors, the entire process will merely cost only around less than ₹200 (first I did it for 21×21 English Scrabble seeing that it would be so much of cost to buy the real kit from abroad, then I did it for Tamil Scrabble and later on I did it for Scrabble with mathematical equations). That way, people can pick up their own letter distribution, points for tiles and printed extra tiles to ensure different letter distributions in different games. Still more and more people are interested in buying Sorkalam game from Amazon that does not even have the complete letter set (no ு and ூ vowel combos that are printed on transparent tiles which are part of core Tamil and those that are also frequently used). Wooden tiles are just a sign of attraction for people to buy them and that people psychologically prefer more to play with wooden tiles than ones made out of that from cardboard and chart paper, isn't it?
This way that anyone could also run business and earn money by making and selling wooden tiles for Scrabble with mathematical equations, English phonetic Scrabble, etc. that might not be readily available in shops. Scrabble with mathematical equations is open to people all around the world and not limited to speakers of a specific language. Administrators of this Scrabble3D forum could also make profit by this type of way, may be to raise money to finance the Premium Tariff for this Scrabble3D forum for every year if it would not be possible for Bussinchen to pay money out of her own packet every year from Saturday 1 August 2020 onwards. Abhijit Shilotri of Karnataka State Scrabble Association (Bangalore Scrabble Club) owns Ahaa Furniture Store (https://www.ahaa.in/) and he can be able to make anything out of wood, Scrabble board, Scrabble tiles and Scrabble rack.
This set of letter distribution for Maths Scrabble would be furthermore interesting and provides furthermore diverse set of mathematical operators and points for tiles of Scrabble with mathematical equations than the tile distribution given in Wikipedia page for Scrabble letter distributions. The one that is loaded in free Maths dictionary that comes along with Scrabble3D application makes use of different 117 tile set than the one given in Wikipedia page for Scrabble letter distributions, but makes use of manually unusuable mathematical operators like ∞, < and > and they are only present in few meaningless mathematical equations in the free Maths dictionary that comes along with Scrabble3D application.
Zitat von Scotty im Beitrag Unfixed bugs in Scrabble3D application.Sure, ideally you get in contact with the original author. Otherwise I would take your "much better version" opinion without hesitation if there is another user's word. In case of math.dic it's not too difficult to check myself.
8 types of possibilities can be considered for each of type of mathematical equation as follows: A+B=C, B+A=C, C-A=B, C-B=A, C=A+B, C=B+A, B=C-A, A=C-B. D×E=F, E×D=F, F÷D=E, F÷E=D, F=D×E, F=E×D, E=F÷D, D=F÷E.
Having more numbers will encourage players to form mathematical equations with longer numbers, but that:
If the ratio of numbers to operators and = in letter set is too small, then as the game progresses, all numbers can be easily pushed away in one move but operators and = accumulate in player's rack discouraging players to play mathematical equations with longer numbers. If the ratio of numbers to operators and = in letter set is too large, then at the beginning moves there might not be good balance of numbers and operators and = in player's racks to make good and valid play.
So whenever designing a letter set for Scrabble with mathematical equations, these things have to be taken into mind.
I am talking about this for large letter sets for larger 2D boards and smaller 3D boards which other people might not be patient enough and interested enough to play for that long, either short time games played at a stretch or long time games played over a span of lasting for several days. I don't think that most of other people would be patient enough and interested enough in playing games with Scrabble boards beyond that Classic Scrabble 15×15 2D board and Super Scrabble 21×21 2D board.
I have created designs for board layouts for larger 2D boards and smaller 3D boards which I might only make use of. Different people will come out with their own designs for board layouts and nothing may be perfectly accepted standard right now and may be that would be so in the future also.
Points for some of the difficult to play tiles could be higher, to give computer signal to take those tiles seriously and not to stagnate many of such tiles in its rack by giving priority to high scoring words formed by making use of next tier of high scoring tiles. This might not necessarily apply for playing with other human players, online or offline, along with other computer players as opponents or not because especially experienced human players tend to play wisely enough, by knowing which of tiles are difficult to play in what situations and that would be depending upon any of type of Scrabble board position also.
This would be suitable for Tamil Scrabble especially when playing with digraph tiles and trigraph tiles for representing with each of 1 single Tamil letter, where there are a lot of letters which have a few words that contain them with. For Scrabble with mathematical equations, things like decimal point could be formed only with longer equations only when such suitable tiles for using it form beautifully upon player's rack especially with lower number of tiles in rack and it is furthermore difficult to play when board gets filled up as game progresses with fewer and fewer enough vacant spaces for playing it. The possibility of short words is completely ruled out in Scrabble with mathematical equations and so it is very difficult to push all tiles by players at end of played game, especially in 2D boards rather than, instead of 3D boards without ending games by all players passing with some number of tiles stagnated in each of player's rack. Shortest mathematical equations of length of 3 include 0=0, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8 and 9=9 and there is no limit for longer ones. There are more and more mathematical equations possible as length of mathematical equations increases up.
Number of points in the scale from 1 to 10 would be assigned for at least for 1 single letter. It does not matter how frequently or how rarely that letter would be made use of for in the letter set of for larger 2D boards and smaller 3D boards.
More tiles of smaller digits with lower points for them would be good enough because they are much easier to play than bigger digits or not necessarily, but that they would much more frequently occur in leading digits. I personally do not prefer leading zeros or trailing zeros after decimal point.
And that more tiles for even digits with lower points for them would be good enough because they occur much more frequently at unit's place for multiplication and division than odd digits. Odd × Odd = Odd, Odd × Even = Even, Even × Odd = Even and Even × Even = Even. Similarly that would be also for digits 5 and 0 on an other hand viewpoint and that on an other perspective viewpoint. I personally do not prefer leading minus before a zero.
I actually thought that it would be much better of in a 1 single post in 'Maths Scrabble implemented' thread in 'More languages' forum in 'International' group in this forum, and especially if it were for this 1 single post, puzzles to be included here only for spotting a bingo and not for spotting a best move that connects 2 premium word score squares and not that connects 2 premium letter score squares and if puzzles are to be entirely from my own played games only and not from any other sources of other people, for example, Scrabble club WhatsApp group whoever would be primarily and only be focused upon entirely just English Scrabble only simply.
Find a bingo in this board position. Find a bingo in this board position. Find a bingo in this board position. Find a bingo in this board position. Find a bingo in this board position. And that just simply that this is a compilation of 5 different puzzles from my own played games that have been posted at all of types of places in this forum and that would be primarily and only in 'Unfixed bugs in Scrabble3D application' thread in 'Bugreports & Suggestions' forum in 'English' group in this forum. By the way that why is it 'Bugreports & Suggestions' and not 'Bug reports & Suggestions'?
(Just fibbing) Make wooden tiles for Maths Scrabble and sell them for profit to raise money to finance the Premium Tariff for this Scrabble3D forum. Note: It will be much cheaper if they are printed on chart paper, pasted on cardboard sheet and cut with scissors. But that wooden tiles will be attractive to most people who would psychologically prefer playing with them. Just that it is worthwhile to compare the rates of wooden tiles with that of tiles made out of cardboard sheet and chart paper.
Scotty: Seeing post 3 in this thread, I just want to ask whether it was you who updated Wikipedia page for Scrabble letter distributions for Maths Scrabble. If so, will you be interested to update it to a more spicy version, so that people might consider that as some standard for someone or some company to begin mass production of such Maths Scrabble tiles for them to be considered for any rated tournaments if they were to be held somewhere several years later on? https://en.wikipedia.org/wiki/Scrabble_l...tributions#Math
Zitat von Raman im Beitrag #16This set of letter distribution for Maths Scrabble would be furthermore interesting and provides furthermore diverse set of mathematical operators and points for tiles of Scrabble with mathematical equations than the tile distribution given in Wikipedia page for Scrabble letter distributions. The one that is loaded in free Maths dictionary that comes along with Scrabble3D application makes use of different 117 tile set than the one given in Wikipedia page for Scrabble letter distributions, but makes use of manually unusuable mathematical operators like ∞, < and > and they are only present in few meaningless mathematical equations in the free Maths dictionary that comes along with Scrabble3D application.
Math sets use these 100 tiles:
2 blank tiles (scoring 0 points) 1 point: ⁼ ×18, 1 ×8, 2 ×7 2 points: 0 ×6, 3 ×6, 4 ×6 3 points: 5 ×6, 6 ×6, 8 ×5, + ×3, − ×3 4 points: 7 ×5, 9 ×5, × ×3, ÷ ×3 5 points: √ ×2 6 points: ² ×1 7 points: ³ ×1 8 points: ∛ ×1 9 points: ^ ×1 10 points: ! ×1, . ×1 To play, you have to put in a true equation on the board.
Zitat von Raman im Beitrag Unfixed bugs in Scrabble3D application.So, I have made use of 61% of tiles as digits compared to 58% for yours (Wikipedia's). It encourages players to form maths equations with longer numbers. Does it make sense on a small 15×15 board? To balance, number of operators should be as much the same as number of = at least. I used 18 = with 19 operators, but you (Wikipedia) have made use of 20 = and 22 operators. Does it not cause problems in played game, whatever with furthermore number to stagnate at the end? Because short words does not exist in number Scrabble, it is very difficult to completely finish off with all of remaining tiles at the end of the played game. For rest of them assured if every digit in pairs such that equalities category can be made use of, or if some maths equation occurs with n×0=0, 0=0×n, 0=0^n or n^0=1 such that hooks can be attached onto them just simply, all of those maths equations does not exist as words within Maths language dictionary math.dic at all, within into upon upto.
What-If-Only variant is well suited for number scrabble within adjustable number of tiles within rack. Number scrabble smaller board size, 2D or 3D played with 10 tiles in rack. Number scrabble larger board size, 2D or 3D played with 12 tiles in rack.
Also that in IPA English, ɝ letter is missing in it, may be that ɝ ×3 would be good enough and ŋ ×1 may be updated to ŋ ×2 to bring the total to 110 tiles and seeing the frequency of occurrence of ŋ letter in CMU pronouncing dictionary, I think that it would be wise enough to have 2 tiles for it instead of 1 for 15×15 Scrabble board that is played with (approximately) about 100 tiles. https://en.wikipedia.org/wiki/Scrabble_l...ons#IPA_English
I just came across Equate game from the Wikipedia page on Scrabble letter distributions for Maths Scrabble. It is played on 19×19 board with 150 tiles. https://en.wikipedia.org/wiki/Equate_(game) Everyone will have their own tastes of board layout and tiles distribution. https://www.conceptualmathmedia.com/ Look at this: https://www.boardgamegeek.com/image/1817520/equate Fractional tiles like ½, ⅓, ⅔, ¼, ¾, etc. are used in that Equate board played game but no tiles like √, ², ³, ∛, ^, !, ., mod, ⁴ and ∜. It is possible to include mathematical equations with fractions in maths dictionary and simulate it in Scrabble3D application, unlike Sorkalam Tamil Scrabble game in which overlapping of at most 1 single glass tile (for representing with hooks that are added on to any of consonant letters) on top of each wooden tile (for representing with pure vowel letters and for representing with pure consonant letters) is not supported.
https://www.boardgamegeek.com/image/1817520/equate To play, you have to put in a true equation on the board. Words such as those like 73, 3 ²/₄, 739 ²/₆ and 42 on Equate board and 54 and 46 on tile images on board and not that are played with actual tiles on Equate board does not make sense over thereby.
Zitat von Raman im Beitrag #21Scotty: Seeing post 3 in this thread, I just want to ask whether it was you who updated Wikipedia page for Scrabble letter distributions for Maths Scrabble.
No, I didn't. Check the history to find out that OliverGalvin edited the page for Math and Tamil.
Zitat von Scotty im Beitrag #23No, I didn't. Check the history to find out that OliverGalvin edited the page for Math and Tamil.
If I understand correctly, then Alexlatham96 edited the page for Math and Tamil. OliverGalvin just fixed a broken reference link at the bottom of the page to this forum yesterday.
By the way, I do not personally like having fractional tiles. Decimal tiles which can serve only terminating fractions and not non-terminating repeating ones serve better for this purpose. There are lots of different fractional tiles possible for them to fit into Scrabble (Equate) board properly to form a valid mathematical equation. Everyone will have their own tastes of board layout and tiles distribution.
Post 3 in this thread gives a distribution for 100 tiles for Maths Scrabble, without any blank tiles used at all. 3 blank tiles was an arbitrary number that was used by Alexlatham96 in Wikipedia page. Seeing the similarity in Maths Scrabble tile distributions in post 3 in this thread in this forum and Wikipedia page, I assume that Alexlatham96 only took that data for Wikipedia page from post 3 in this thread in this forum. Math Scrabble was updated to its latest version in Scrabble3D application on 12 March 2014 and Maths Section in Wikipedia article was created by Alexlatham96 on 2 May 2017. Link to Equate (game) in Maths section in Wikipedia article was added by OliverGalvin on 30 July 2020. I got hold of Scrabble3D application from the Wikipedia page on Scrabble tile distributions for different languages. When it said about Maths Scrabble I got the link from it, which I had been longing to play it for a long period of time and trying out with an experience upon it.
Anyway that, in my own humble opinion that, for best results Maths Scrabble is to be played with separate racks for each of the players for digits, operators and =. Some kits available from shop make use of numbers ≥ 10, and that discourages forming equations with longer numbers.
By the way, this is the tile distribution for Maths Scrabble according to the latest version of Maths dictionary that is uploaded to the sourceforge page for the Scrabble3D application. This information is not posted earlier on into this thread for Alexlatham96 to take that data from over hereby to adopt it in Maths section in Wikipedia article. I only kept on posting my own different versions of researched and optimal letter sets for Maths Scrabble earlier on into this thread for other people's reference and analysis purposes only.
Letter
Count
Points
⁼
18
0
0
6
3
1
10
1
2
8
2
3
7
4
4
7
3
5
7
3
6
7
4
7
6
5
8
6
4
9
6
4
−
4
6
×
4
6
÷
3
7
+
4
6
.
3
8
!
1
10
^
1
9
²
1
10
³
1
10
√
3
7
∜
1
10
∞
1
10
>
1
10
<
1
10
Total
117
437
∞, >, < are not good to be present in the letter set for Maths Scrabble. What mathematical equations have ∞? And lot of possibilities with < and >. < and > will not restrict possibilities. It will allow players to form wild mathematical equations with random high scoring points at player's wish.
I just tried to simulate and play with Equate game style of Maths Scrabble in Scrabble3D application. https://www.boardgamegeek.com/image/1817520/equate Not exactly with the same tile set as in Equate game, but my modified version of it, with reducible fractional tiles removed and with keeping only fractional tiles which are strictly between 0 and 1 (0 and 1 both exclusive).
The following 220 tiles might fit well for a 21×21 board in order to optimally play with 10 tiles in the rack at any one given period of time. Because there are a diverse variety of fractional tiles used, this variant of Maths Scrabble is played only with 4 fundamental mathematical operations of addition, subtraction, multiplication and division. 1 point: ⁼ ×40, 1 ×30, 2 ×29 2 points: 0 ×28, 3 ×28, 4 ×28 3 points: 5 ×28, 6 ×28, 8 ×27, × ×10, ÷ ×10 4 points: 7 ×27, 9 ×27, + ×10, − ×10 5 points: ¹/₂ ×4, ¹/₄ ×2, ³/₄ ×2 6 points: ¹/₃ ×2, ²/₃ ×2 7 points: ¹/₆ ×2, ⁵/₆ ×2 8 points: ¹/₅ ×1, ²/₅ ×1, ³/₅ ×1, ⁴/₅ ×1, ¹/₈ ×1, ³/₈ ×1, ⁵/₈ ×1, ⁷/₈ ×1 9 points: ¹/₁₀ ×1, ³/₁₀ ×1, ⁷/₁₀ ×1, ⁹/₁₀ ×1 10 points: ¹/₇ ×1, ²/₇ ×1, ³/₇ ×1, ⁴/₇ ×1, ⁵/₇ ×1, ⁶/₇ ×1, ¹/₉ ×1, ²/₉ ×1, ⁴/₉ ×1, ⁵/₉ ×1, ⁷/₉ ×1, ⁸/₉ ×1 Note that × and ÷ are assigned lesser points than + and − because × and ÷ can wildly combine with fractions of all denominators, whereas + and − can only strictly combine with fractions of the same denominators and their proper divisors.
num = [1, 1, 2, 1, 3, 1, 2, 3, 4, 1, 5, 1, 2, 3, 4, 5, 6, 1, 3, 5, 7, 1, 2, 4, 5, 7, 8, 1, 3, 7, 9, 1, 5, 7, 11, 0] den = [2, 3, 3, 4, 4, 5, 5, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 12, 12, 12, 12, 1] sym = ['#', '$', '&', '(', ')', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '%', ':', '^', '.', '!'] conj = [0, 2, 1, 4, 3, 8, 7, 6, 5, 10, 9, 16, 15, 14, 13, 12, 11, 20, 19, 18, 17, 26, 25, 24, 23, 22, 21, 30, 29, 28, 27, 34, 33, 32, 31, 35] m = ["\xe2\x81\xb0", "\xc2\xb9", "\xc2\xb2", "\xc2\xb3", "\xe2\x81\xb4", "\xe2\x81\xb5", "\xe2\x81\xb6", "\xe2\x81\xb7", "\xe2\x81\xb8", "\xe2\x81\xb9"] n = ["\xe2\x82\x80", "\xe2\x82\x81", "\xe2\x82\x82", "\xe2\x82\x83", "\xe2\x82\x84", "\xe2\x82\x85", "\xe2\x82\x86", "\xe2\x82\x87", "\xe2\x82\x88", "\xe2\x82\x89"] d = {} for j in range(len(sym) - 1): d[(num[j], den[j])] = sym[j] def superscript(s): a = "" for c in s: a += m[ord(c) - 48] return a def subscript(t): b = "" for d in t: b += n[ord(d) - 48] return b def gcd(p, q): while q > 0: (p, q) = (q, p % q) return p def string(nu, de): result = '' if nu >= de or nu == 0: result += str(nu / de) if nu % de > 0: result += d[(nu % de, de)] return result def terms(nu, de): result = 0 if nu >= de or nu == 0: result += len(str(nu / de)) if nu % de > 0: result += 1 return result print '[Header]' print 'Version=100000' print 'Author=Raman Viswanathan <raman22feb1988@gmail.com>' print 'StandardCategory=Equalities' print 'Licence=GNU General Public License, v3' print 'Release=20.10.20' print 'Comment=Equate game style of Scrabble with mathematical equations' print 'Letters=@,0,1,2,3,4,5,6,7,8,9,-,*,/,+,#,$,&,(,),A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,%,:,^,.' print 'Values=1,2,1,1,2,2,3,3,4,3,4,4,3,3,4,5,6,6,5,5,8,8,8,8,7,7,10,10,10,10,10,10,8,8,8,8,10,10,10,10,10,10,9,9,9,9,9,9,9,9' print 'Counts=36,9,11,10,9,9,9,9,8,8,8,9,9,9,9,4,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0' print 'Key=' print '[Replace]' print '-=\xe2\x88\x92' print '*=\xc3\x97' print '/=\xc3\xb7' print '@=\xe2\x81\xbc' for i in range(len(sym) - 1): print sym[i] + '=' + superscript(str(num[i])) + '/' + subscript(str(den[i])) print '[Categories]' print '1=Addition' print '2=Subtraction' print '3=Multiplication' print '4=Division' print '[Words]' for k in range(10000): print str(k) + '@' + str(k) + '=' for k in range(100): for l in range(len(sym) - 1): print (str(k), '') [k == 0] + d[(num[l], den[l])] + '@' + (str(k), '') [k == 0] + d[(num[l], den[l])] + '=' for k in range(10): for l in range(len(sym) - 1): for o in range(10): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11 or y % z == 0: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(100): for l in range(len(sym) - 1, len(sym)): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(len(sym) - 1, len(sym)): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(conj[l], conj[l] + 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(1000): for o in range(1000): y = k + o if len(str(k)) + len(str(o)) + len(str(y)) <= 7: print str(k) + '+' + str(o) + '@' + str(y) + '=;1' print str(y) + '@' + str(k) + '+' + str(o) + '=;1' print str(y) + '-' + str(k) + '@' + str(o) + '=;2' print str(o) + '@' + str(y) + '-' + str(k) + '=;2' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(100): for l in range(len(sym) - 1, len(sym)): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' if k > 0: print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(len(sym) - 1, len(sym)): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(1, 100): for l in range(len(sym) - 1, len(sym)): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) == 7: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' if k > 0: print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(100): for l in range(len(sym) - 1): for o in range(1, 100): for r in range(len(sym) - 1, len(sym)): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) == 7: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(1, 1000): for o in range(1, 1000): y = k * o if len(str(k)) + len(str(o)) + len(str(y)) <= 8: print str(k) + '*' + str(o) + '@' + str(y) + '=;3' print str(y) + '@' + str(k) + '*' + str(o) + '=;3' print str(y) + '/' + str(k) + '@' + str(o) + '=;4' print str(o) + '@' + str(y) + '/' + str(k) + '=;4' print '0*0@0=;3' print '0@0*0=;3' for k in range(1, 10000): print '0*' + str(k) + '@0=;3' print '0@0*' + str(k) + '=;3' print str(k) + '*0@0=;3' print '0@' + str(k) + '*0=;3' print '0/' + str(k) + '@0=;4' print '0@0/' + str(k) + '=;4' for l in range(len(sym) - 1): k = range(0, 1000, den[l]) for r in range(len(k)): y = k[r] * num[l] / den[l] z = k[r] if z >= 100: print sym[l] + '*' + str(z) + '@' + str(y) + '=;3' print str(z) + '*' + sym[l] + '@' + str(y) + '=;3' print str(y) + '@' + sym[l] + '*' + str(z) + '=;3' print str(y) + '@' + str(z) + '*' + sym[l] + '=;3' print str(y) + '/' + str(z) + '@' + sym[l] + '=;4' print str(y) + '/' + sym[l] + '@' + str(z) + '=;4' print sym[l] + '@' + str(y) + '/' + str(z) + '=;4' print str(z) + '@' + str(y) + '/' + sym[l] + '=;4'
Compare my tile set with the actual tile set of the Equate game which is played on a 19×19 board with 190 tiles:
Letter
Count
Points
⁼
40
0
0
3
1
1
3
1
2
9
1
3
9
1
4
9
1
5
9
1
6
9
2
7
9
2
8
9
2
9
9
2
−
11
2
×
11
3
÷
11
5
+
11
1
¹/₂
4
4
²/₂
1
2
⁵/₂
1
5
¹/₃
2
8
²/₃
2
8
³/₃
1
2
¹/₄
2
6
²/₄
2
5
³/₄
2
6
⁴/₄
1
2
⁷/₄
1
7
¹/₆
1
10
²/₆
1
9
³/₆
1
5
⁴/₆
1
9
⁵/₆
1
12
⁶/₆
1
2
Blank
3
0
Total
190
382
Why ⁵/₂ exists without ³/₂ and ⁷/₄ without ⁵/₄? What is the point of having multiple equivalent reducible fractions such as those like ¹/₂, ²/₄ and ³/₆? ¹/₃ and ²/₆? ²/₃ and ⁴/₆? 2¹/₂ and ⁵/₂? 1³/₄ and ⁷/₄? What is the point of having multiple equivalent reducible fractions which all reduce to 1, such as those like ²/₂, ³/₃, ⁴/₄ and ⁶/₆? Why 0 and 1 tiles are only 3 each in number, which are more likely to be more frequently used than the rest of the digits, whereas all other digits namely 2, 3, 4, 5, 6, 7, 8 and 9 tiles are 9 each in number? Although that I do not desire to make use of leading zeros or trailing zeros after the decimal point.
On Wednesday, 23 September 2020, Alexlatham96 updated the Maths Scrabble letter distribution in the Wikipedia page to the one present in math.dic in Scrabble3D application that had been contributed by Jouni Tolonen.
My proposal of the Maths Scrabble letter distribution article for the Wikipedia page:
Math sets use these 100 tiles:
2 blank tiles (scoring 0 points) 1 point: ⁼ ×18, 1 ×8, 2 ×7 2 points: 0 ×6, 3 ×6, 4 ×6 3 points: 5 ×6, 6 ×6, 8 ×5, + ×3, − ×3 4 points: 7 ×5, 9 ×5, × ×3, ÷ ×3 5 points: √ ×2 6 points: ² ×1 7 points: ³ ×1 8 points: ! ×1 9 points: ^ ×1 10 points: . ×1, ∜ ×1 Math Scrabble is played with 10 tiles in the rack at a time. To play, you have to put in a true equation on the board.
An alternative by Equate game has this distribution of 200 tiles:
Here after, I am going to call the former Maths Scrabble tile set as classical Maths Scrabble.
I have revised the classical Maths Scrabble letter set to provide a balance between post 3 by Scotty in this thread and the one that is present in math.dic in Scrabble3D application that had been contributed by Jouni Tolonen. This is to remove the useless symbols such as those like ∞, < and > and overall lower the points for all tiles to match with the one that is similar to English Scrabble. At the same time having at least one tile with any given face value between 1 and 10 (1 and 10 both inclusive). At least if not to have a better classical Maths dictionary for the Scrabble3D application, the tile set for math.dic can be updated for above to provide the most optimal experience. A better classical Maths dictionary will matter only for the computer players as opponents (only offline and not online) and not for the human players as opponents (either offline or online). My tile set also increases the count of digits and decreases the count of symbols. This is done to encourage players to form longer mathematical equations with longer numbers. Some kits that are available from shops will contain tiles with numbers that are ≥ 10 and this will discourage players from forming longer mathematical equations with longer numbers.
I modified the original tile set of the Equate game to make it more thrilling by discarding all tiles of reducible fractions and by considering only those fractional tiles whose values are strictly between 0 and 1 (0 and 1 both exclusive). In short, there should be exactly φ(N) distinct fractional tiles with the denominator N, that are strictly between 0 and 1 (0 and 1 both exclusive). That is, those values of denominator that are ≥ 1, ≤ N - 1 and co-prime to N. I also removed the flaw of having just 3 tiles each for the digits 0 and 1 and 9 tiles each for the rest of the digits, namely, 2, 3, 4, 5, 6, 7, 8 and 9.
Why having heavy flaws like this and selling? Are these part of trade tactics to fool all the customers who buy those kits? Even if there are some flaws in the tile set and board design and outside packing looks good, the customers will blindly buy those kits and play them. If they become popular, then they will organize tournaments with such tile sets becoming as a standard? I am saying this also because of the fact that Upwords large pack is a 8×8 board with 64 tiles for ₹400, whereas Upwords small travel pack is a 10×10 board with 100 tiles for ₹225. Similarly that in Sorkalam Tamil Scrabble pack, 2 of the Tamil vowel combinations on transparent tiles, at most one of them to be placed on other consonants on wooden tiles are missing, namely ு and ூ, still many customers would be fools to buy those kits just simply because the outside packing looks good. And that they do not mind playing with those missing 2 letters as a handicap and they write great reviews about the overall product and design of the game to be played. The cost of Sorkalam game in Amazon is ₹1200. If everyone else does like what I did in my own 2014 make, printing out Scrabble board and Scrabble tiles on chart paper, pasting them on cardboard and cutting them with scissors, the entire process will merely cost only around less than ₹200 (first I did it for 21×21 English Scrabble seeing that it would be so much of cost to buy the real kit from abroad, then I did it for Tamil Scrabble and later on I did it for Scrabble with mathematical equations). That way, people can pick up their own letter distribution, points for tiles and printed extra tiles to ensure different letter distributions in different games. Still more and more people are interested in buying Sorkalam game from Amazon that does not even have the complete letter set (no ு and ூ vowel combos that are printed on transparent tiles which are part of core Tamil and those that are also frequently used). Wooden tiles are just a sign of attraction for people to buy them and that people psychologically prefer more to play with wooden tiles than ones made out of that from cardboard and chart paper, isn't it?
For 21×21 board with 200 tiles, for classical Maths Scrabble, lesser number of ⁼ tiles would be sufficient, say 34, and more number of digit tiles and lesser number of symbol tiles can be put into the bag than when compared to that of Equate game style. This is because longer mathematical equations with longer numbers can be comfortably played in classical Maths Scrabble and players can be encouraged to do so with. But in Equate game style, diverse variety of distinct fractional tiles prevents players from forming longer mathematical equations with longer numbers. So that more shorter equations will be formed and more number of ⁼ tiles would be needed, say 36.
--
I will come up with my proposed Tamil Scrabble letter distribution article for the Wikipedia page soon. Please give me some more time to prepare with it.
I am also thinking about Scrabble with logical equations. In that case, we can only have two numbers 0 and 1 and no longer logical equations with longer numbers, even when making use of different variety of 7 distinct logical operators such as those like and, or, not, nand, nor, xor and xnor. Although that more than one logical operator can be allowed on any one single side of any logical equation. I think that it would be more thrilling to play that with some variable names, say A, B, C and D. In that case that logical equations such as those like A + A̅B = A + B, AB + A̅B + AB̅ + A̅B̅ = 1, etc. are all supposed to be valid logical equations only.
And also that it would be good to give a thought whether it works out if any of types of variables are introduced either into classical Maths Scrabble or into Equate game style of Maths Scrabble.
The tile set that I have used for the equate.dic dictionary file, Equate game style of Maths Scrabble, that can be generated from the equate.py Python script as a source code, by executing that with Python 2.7, in my previous post 25 in this thread makes use of these 200 tiles without having any blank tiles: 1 point: ⁼ ×36, 1 ×29, 2 ×28 2 points: 0 ×27, 3 ×27, 4 ×27 3 points: 5 ×27, 6 ×27, 8 ×26, × ×9, ÷ ×9 4 points: 7 ×26, 9 ×26, + ×9, − ×9 5 points: ¹/₂ ×4, ¹/₄ ×2, ³/₄ ×2 6 points: ¹/₃ ×2, ²/₃ ×2 7 points: ¹/₆ ×1, ⁵/₆ ×1 8 points: ¹/₅ ×1, ²/₅ ×1, ³/₅ ×1, ⁴/₅ ×1, ¹/₈ ×1, ³/₈ ×1, ⁵/₈ ×1, ⁷/₈ ×1 9 points: ¹/₁₀ ×1, ³/₁₀ ×1, ⁷/₁₀ ×1, ⁹/₁₀ ×1 10 points: ¹/₇ ×1, ²/₇ ×1, ³/₇ ×1, ⁴/₇ ×1, ⁵/₇ ×1, ⁶/₇ ×1, ¹/₉ ×1, ²/₉ ×1, ⁴/₉ ×1, ⁵/₉ ×1, ⁷/₉ ×1, ⁸/₉ ×1 It is a gentle balance between 220 tiles in my previous post 25 in this thread and 200 tiles having any blank tiles in my current post 26 in this thread for my proposal of the Maths Scrabble letter distribution article for the Wikipedia page.
In Scrabble3D application, it is essentially worthless to play with any blank tiles for larger 2D boards or (smaller or larger) 3D boards with computer players as opponents (only offline and never online), because it will slow down the performance of computer players as opponents (only offline and never online). Because there are lots of possibilities that are supported for them, especially with dictionaries that contain larger number of words and in dictionaries that have large number of distinct letters in the letter set.
Playing with more number of rack does not necessarily slow down the performance of computer players as opponents (only offline and never online) because Scrabble3D application seems to make use of trie data structure for storing and looking up all of types of dictionary words. And that it does not look up for all of types of permutations in all of types of starting and ending Scrabble board squares or cubes in 2D Scrabble board or 3D Scrabble board in all of types of axes at any one single given period of time.
Scotty: I prepared a much better version of Maths dictionary. Please let me know whether you will be interested in it or let me know whether it will be useful to other people. I considered only equations with two numbers on one side and one number on other side for binary operators and one number on both sides for unary operators. I gave extensive treatment to decimals with equations containing upto 3 of them. I also considered equations with cube root and fourth power, but not modulo because there are too many short equations with modulo and if I include them, then it will cause Scrabble3D application to take even more time to load the Maths dictionary every time. These symbols are not present in Maths dictionary that was prepared by Jouni Tolonen. It contains 5254685 equations that will take Scrabble3D application at least 2½ hours to load. It cannot be played with computer for Scrabble boards larger than 21×21.
print '[Header]' print 'Version=100005' print 'Author=Raman Viswanathan <raman22feb1988@gmail.com>' print 'StandardCategory=Equalities' print 'Licence=GNU General Public License, v3' print 'Release=10.05.21' print 'Comment=For best use have 10 letters on rack' print 'Letters=E,0,1,2,3,4,5,6,7,8,9,-,*,/,+,.,!,^,S,C,R,F,%,K,T,L,M,N,P,U,V,W,X,Y,Z,G,H' print 'Values=1,2,1,1,2,2,3,3,4,3,4,3,4,4,3,10,8,9,6,7,5,10,5,6,8,12,14,16,18,20,11,13,15,17,19,7,9' print 'Counts=18,6,8,7,6,6,6,6,5,5,5,3,3,3,3,1,1,1,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0' print 'Key=' print '[Replace]' print '-=\xe2\x88\x92' print '*=\xc3\x97' print '/=\xc3\xb7' print 'E=\xe2\x81\xbc' print 'S=\xc2\xb2' print 'C=\xc2\xb3' print 'R=\xe2\x88\x9a' print 'F=\xe2\x88\x9c' print '%=\xe1\xb5\x90\xe1\xb5\x92\xe1\xb5\x88' print 'K=\xe2\x88\x9b' print 'T=\xe2\x81\xb4' print 'L=\xe2\x81\xb5' print 'M=\xe2\x81\xb6' print 'N=\xe2\x81\xb7' print 'P=\xe2\x81\xb8' print 'U=\xe2\x81\xb9' print 'V=\xe2\x81\xb5\xe2\x88\x9a' print 'W=\xe2\x81\xb6\xe2\x88\x9a' print 'X=\xe2\x81\xb7\xe2\x88\x9a' print 'Y=\xe2\x81\xb8\xe2\x88\x9a' print 'Z=\xe2\x81\xb9\xe2\x88\x9a' print 'G=\xc2\xb9' print 'H=\xe2\x81\xb0' print '[Categories]' print '1=Addition' print '2=Subtraction' print '3=Multiplication' print '4=Division' print '5=Exponentiation' print '6=Roots' print '7=Factorial' print '8=Decimals' print '9=Modulo' print '[Words]' for i in range(10000): print str(i) + 'E' + str(i) if i % 10 != 0: print str(float(i) / 10) + 'E' + str(float(i) / 10) print str(float(i) / 100) + 'E' + str(float(i) / 100) print str(float(i) / 1000) + 'E' + str(float(i) / 1000) for i in range(1000): for j in range(i, 10000): k = i + j if len(str(i) + str(j) + str(k)) >= 10: break else: print str(i) + '+' + str(j) + 'E' + str(k) + '=;1' if i != j: print str(j) + '+' + str(i) + 'E' + str(k) + '=;1' print str(k) + 'E' + str(i) + '+' + str(j) + '=;1' if i != j: print str(k) + 'E' + str(j) + '+' + str(i) + '=;1' print str(k) + '-' + str(i) + 'E' + str(j) + '=;2' if i != j: print str(k) + '-' + str(j) + 'E' + str(i) + '=;2' print str(j) + 'E' + str(k) + '-' + str(i) + '=;2' if i != j: print str(i) + 'E' + str(k) + '-' + str(j) + '=;2' if (i % 10 != 0 or j % 10 != 0) and k < 100: x = (float(i) / 10, i / 10) [i % 10 == 0] y = (float(j) / 10, j / 10) [j % 10 == 0] z = (float(k) / 10, k / 10) [k % 10 == 0] print str(x) + '+' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '+' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '+' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '+' + str(x) + '=;8' print str(z) + '-' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '-' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '-' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '-' + str(y) + '=;8' if (i % 100 == 0 or j % 100 == 0 or k % 100 == 0) and (i % 100 != 0 or j % 100 != 0 or k % 100 != 0) and k < 1000: x = (float(i) / 100, i / 100) [i % 100 == 0] y = (float(j) / 100, j / 100) [j % 100 == 0] z = (float(k) / 100, k / 100) [k % 100 == 0] print str(x) + '+' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '+' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '+' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '+' + str(x) + '=;8' print str(z) + '-' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '-' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '-' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '-' + str(y) + '=;8' s = set([]) for i in range(1, 100): for j in range(i, 10000): k = i * j if len(str(i) + str(j) + str(k)) >= 11: break else: print str(i) + '*' + str(j) + 'E' + str(k) + '=;3' if i != j: print str(j) + '*' + str(i) + 'E' + str(k) + '=;3' print str(k) + 'E' + str(i) + '*' + str(j) + '=;3' if i != j: print str(k) + 'E' + str(j) + '*' + str(i) + '=;3' print str(k) + '/' + str(i) + 'E' + str(j) + '=;4' if i != j: print str(k) + '/' + str(j) + 'E' + str(i) + '=;4' print str(j) + 'E' + str(k) + '/' + str(i) + '=;4' if i != j: print str(i) + 'E' + str(k) + '/' + str(j) + '=;4' s.add((i, j)) s.add((j, i)) y = j while True: if y < 1 and (len(str(y)) >= 11 or 'e' in str(y)): break x = i while True: z = x * y if z % 1 == 0: z = int(z) if x < 1 and len(str(x) + str(y) + str(z)) >= 11: break if (x, y) not in s and len(str(x) + str(y) + str(z)) <= 10: print str(x) + '*' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '*' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '*' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '*' + str(x) + '=;8' print str(z) + '/' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '/' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '/' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '/' + str(y) + '=;8' s.add((x, y)) s.add((y, x)) x = (float(x) / 10, x / 10) [x % 10 == 0] y = (float(y) / 10, y / 10) [y % 10 == 0] for i in range(100, 1000, 4): for j in range(100, 1000, 25): y = j while True: if y < 1 and (len(str(y)) >= 11 or 'e' in str(y)): break x = i while True: z = x * y if z % 1 == 0: z = int(z) if x < 1 and len(str(x) + str(y) + str(z)) >= 11: break if (x, y) not in s and len(str(x) + str(y) + str(z)) <= 10: print str(x) + '*' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '*' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '*' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '*' + str(x) + '=;8' print str(z) + '/' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '/' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '/' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '/' + str(y) + '=;8' s.add((x, y)) s.add((y, x)) x = (float(x) / 10, x / 10) [x % 10 == 0] y = (float(y) / 10, y / 10) [y % 10 == 0] for i in range(12, 1000, 4): for j in range(1000, 10000, 25): y = j while True: if y < 1 and (len(str(y)) >= 11 or 'e' in str(y)): break x = i while True: z = x * y if z % 1 == 0: z = int(z) if x < 1 and len(str(x) + str(y) + str(z)) >= 11: break if (x, y) not in s and len(str(x) + str(y) + str(z)) <= 10: print str(x) + '*' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '*' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '*' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '*' + str(x) + '=;8' print str(z) + '/' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '/' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '/' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '/' + str(y) + '=;8' s.add((x, y)) s.add((y, x)) x = (float(x) / 10, x / 10) [x % 10 == 0] y = (float(y) / 10, y / 10) [y % 10 == 0] for i in range(10000): print '0*' + str(i) + 'E0=;3' if i != 0: print str(i) + '*0E0=;3' print '0E0*' + str(i) + '=;3' if i != 0: print '0E' + str(i) + '*0=;3' print '0/' + str(i) + 'E0=;4' if i != 0: print '0E0/' + str(i) + '=;4' if i % 10 != 0: print '0*' + str(float(i) / 10) + 'E0=;8' print str(float(i) / 10) + '*0E0=;8' print '0E0*' + str(float(i) / 10) + '=;8' print '0E' + str(float(i) / 10) + '*0=;8' print '0/' + str(float(i) / 10) + 'E0=;8' print '0E0/' + str(float(i) / 10) + '=;8' print '0*' + str(float(i) / 100) + 'E0=;8' print str(float(i) / 100) + '*0E0=;8' print '0E0*' + str(float(i) / 100) + '=;8' print '0E' + str(float(i) / 100) + '*0=;8' print '0/' + str(float(i) / 100) + 'E0=;8' print '0E0/' + str(float(i) / 100) + '=;8' print '0*' + str(float(i) / 1000) + 'E0=;8' print str(float(i) / 1000) + '*0E0=;8' print '0E0*' + str(float(i) / 1000) + '=;8' print '0E' + str(float(i) / 1000) + '*0=;8' print '0/' + str(float(i) / 1000) + 'E0=;8' print '0E0/' + str(float(i) / 1000) + '=;8' print '0SE0=;5' print '0CE0=;5' print '0TE0=;5' print '0E0S=;5' print '0E0C=;5' print '0E0T=;5' print 'R0E0=;6' print 'K0E0=;6' print 'F0E0=;6' print '0ER0=;6' print '0EK0=;6' print '0EF0=;6' for i in range(1, 1000): print '0^' + str(i) + 'E0=;5' print '0E0^' + str(i) + '=;5' if i % 10 != 0: print '0^' + str(float(i) / 10) + 'E0=;8' print '0E0^' + str(float(i) / 10) + '=;8' print '1^' + str(float(i) / 10) + 'E1=;8' print '1E1^' + str(float(i) / 10) + '=;8' print str(float(i) / 10) + '^0E1=;8' print '1E' + str(float(i) / 10) + '^0=;8' print '0^' + str(float(i) / 100) + 'E0=;8' print '0E0^' + str(float(i) / 100) + '=;8' print '1^' + str(float(i) / 100) + 'E1=;8' print '1E1^' + str(float(i) / 100) + '=;8' print str(float(i) / 100) + '^0E1=;8' print '1E' + str(float(i) / 100) + '^0=;8' print '0^' + str(float(i) / 1000) + 'E0=;8' print '0E0^' + str(float(i) / 1000) + '=;8' print '1^' + str(float(i) / 1000) + 'E1=;8' print '1E1^' + str(float(i) / 1000) + '=;8' print str(float(i) / 1000) + '^0E1=;8' print '1E' + str(float(i) / 1000) + '^0=;8' for i in range(1, 10000): for j in range(10000): k = i ** j if len(str(i) + str(j) + str(k)) >= 11: break print str(i) + '^' + str(j) + 'E' + str(k) + '=;5' print str(k) + 'E' + str(i) + '^' + str(j) + '=;5' if j == 2: print str(i) + 'SE' + str(k) + '=;5' print str(k) + 'E' + str(i) + 'S=;5' print 'R' + str(k) + 'E' + str(i) + '=;6' print str(i) + 'ER' + str(k) + '=;6' elif j == 3: print str(i) + 'CE' + str(k) + '=;5' print str(k) + 'E' + str(i) + 'C=;5' print 'K' + str(k) + 'E' + str(i) + '=;6' print str(i) + 'EK' + str(k) + '=;6' elif j == 4: print str(i) + 'TE' + str(k) + '=;5' print str(k) + 'E' + str(i) + 'T=;5' print 'F' + str(k) + 'E' + str(i) + '=;6' print str(i) + 'EF' + str(k) + '=;6' if i % 10 != 0 and j > 0 and j <= 4: x = float(i) / 10 z = float(k) / (10 ** j) while 'e' not in str(z) and len(str(x) + str(j) + str(z)) <= 10: print str(x) + '^' + str(j) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '^' + str(j) + '=;8' if j == 2: print str(x) + 'SE' + str(z) + '=;8' print str(z) + 'E' + str(x) + 'S=;8' print 'R' + str(z) + 'E' + str(x) + '=;8' print str(x) + 'ER' + str(z) + '=;8' elif j == 3: print str(x) + 'CE' + str(z) + '=;8' print str(z) + 'E' + str(x) + 'C=;8' print 'K' + str(z) + 'E' + str(x) + '=;8' print str(x) + 'EK' + str(z) + '=;8' elif j == 4: print str(x) + 'TE' + str(z) + '=;8' print str(z) + 'E' + str(x) + 'T=;8' print 'F' + str(z) + 'E' + str(x) + '=;8' print str(x) + 'EF' + str(z) + '=;8' x /= 10 z /= (10 ** j) j = 1 for i in range(15): if i > 0: j *= i print str(i) + '!E' + str(j) + '=;7' print str(j) + 'E' + str(i) + '!=;7'
unique.py
1 2 3 4 5 6 7 8 9 10 11 12 13
file = open('C:\\Python27\\math.dic', 'r') for i in range(46): s = file.readline() l = set([]) for line in file: l.add(line[:-1]) file.close() document = open('C:\\Python27\\math.dic', 'r') for i in range(46): t = document.readline() print t[:-1] for item in l: print item
By the way, my Maths dictionary uses keyboard characters to replace all symbols that are not available in the keyboard. So, if there is any problem for dragging and dropping by mouse (as was the case with my own modified and compiled source code in a Windows virtual box running an Ubuntu operating system), then keyboard typing to place on the board will always be an alternative.
On the other hand, I also prepared another version of Maths dictionary. It is in Equate game style. It gives extensive emphasis to different irreducible fractions with denominators less than 10 and those with denominators 12. Only addition, subtraction, multiplication and division are the operators used. Multiplication and division tiles are greater in number here than addition and subtraction tiles so that fractions with different denominators can combine together more easily and so they have lesser number of points here. My Equate game style Maths dictionary contains 781328 equations that will take Scrabble3D application only a few minutes to load. Longer equations are not given emphasis here because fractional tiles will dominate the rack most of the time restricting the players from forming longer equations.
num = [1, 1, 2, 1, 3, 1, 2, 3, 4, 1, 5, 1, 2, 3, 4, 5, 6, 1, 3, 5, 7, 1, 2, 4, 5, 7, 8, 1, 3, 7, 9, 1, 5, 7, 11, 0] den = [2, 3, 3, 4, 4, 5, 5, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 12, 12, 12, 12, 1] sym = ['#', '$', '&', '(', ')', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '%', ':', '^', '.', '!'] conj = [0, 2, 1, 4, 3, 8, 7, 6, 5, 10, 9, 16, 15, 14, 13, 12, 11, 20, 19, 18, 17, 26, 25, 24, 23, 22, 21, 30, 29, 28, 27, 34, 33, 32, 31, 35] m = ["\xe2\x81\xb0", "\xc2\xb9", "\xc2\xb2", "\xc2\xb3", "\xe2\x81\xb4", "\xe2\x81\xb5", "\xe2\x81\xb6", "\xe2\x81\xb7", "\xe2\x81\xb8", "\xe2\x81\xb9"] n = ["\xe2\x82\x80", "\xe2\x82\x81", "\xe2\x82\x82", "\xe2\x82\x83", "\xe2\x82\x84", "\xe2\x82\x85", "\xe2\x82\x86", "\xe2\x82\x87", "\xe2\x82\x88", "\xe2\x82\x89"] d = {} for j in range(len(sym) - 1): d[(num[j], den[j])] = sym[j] def superscript(s): a = "" for c in s: a += m[ord(c) - 48] return a def subscript(t): b = "" for d in t: b += n[ord(d) - 48] return b def gcd(p, q): while q > 0: (p, q) = (q, p % q) return p def string(nu, de): result = '' if nu >= de or nu == 0: result += str(nu / de) if nu % de > 0: result += d[(nu % de, de)] return result def terms(nu, de): result = 0 if nu >= de or nu == 0: result += len(str(nu / de)) if nu % de > 0: result += 1 return result print '[Header]' print 'Version=100000' print 'Author=Raman Viswanathan <raman22feb1988@gmail.com>' print 'StandardCategory=Equalities' print 'Licence=GNU General Public License, v3' print 'Release=24.10.20' print 'Comment=Equate game style of Scrabble with mathematical equations' print 'Letters=@,0,1,2,3,4,5,6,7,8,9,-,*,/,+,#,$,&,(,),A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,%,:,^,.' print 'Values=1,2,1,1,2,2,3,3,4,3,4,4,3,3,4,5,6,6,5,5,8,8,8,8,7,7,10,10,10,10,10,10,8,8,8,8,10,10,10,10,10,10,9,9,9,9,9,9,9,9' print 'Counts=36,8,10,9,8,8,8,8,7,7,7,7,11,11,7,4,2,2,2,2,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1' print 'Key=' print '[Replace]' print '-=\xe2\x88\x92' print '*=\xc3\x97' print '/=\xc3\xb7' print '@=\xe2\x81\xbc' for i in range(len(sym) - 1): print sym[i] + '=' + superscript(str(num[i])) + '/' + subscript(str(den[i])) print '[Categories]' print '1=Addition' print '2=Subtraction' print '3=Multiplication' print '4=Division' print '[Words]' for k in range(10000): print str(k) + '@' + str(k) + '=' for k in range(100): for l in range(len(sym) - 1): print (str(k), '') [k == 0] + d[(num[l], den[l])] + '@' + (str(k), '') [k == 0] + d[(num[l], den[l])] + '=' for k in range(10): for l in range(len(sym) - 1): for o in range(10): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11 or y % z == 0: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(100): for l in range(len(sym) - 1, len(sym)): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(len(sym) - 1, len(sym)): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(conj[l], conj[l] + 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(1000): for o in range(1000): y = k + o if len(str(k)) + len(str(o)) + len(str(y)) <= 7: print str(k) + '+' + str(o) + '@' + str(y) + '=;1' print str(y) + '@' + str(k) + '+' + str(o) + '=;1' print str(y) + '-' + str(k) + '@' + str(o) + '=;2' print str(o) + '@' + str(y) + '-' + str(k) + '=;2' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(100): for l in range(len(sym) - 1, len(sym)): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' if k > 0: print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(len(sym) - 1, len(sym)): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(1, 100): for l in range(len(sym) - 1, len(sym)): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) == 7: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' if k > 0: print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(100): for l in range(len(sym) - 1): for o in range(1, 100): for r in range(len(sym) - 1, len(sym)): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 12 or z == 11: continue if terms(t, u) + terms(v, w) + terms(y, z) == 7: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(1, 1000): for o in range(1, 1000): y = k * o if len(str(k)) + len(str(o)) + len(str(y)) <= 8: print str(k) + '*' + str(o) + '@' + str(y) + '=;3' print str(y) + '@' + str(k) + '*' + str(o) + '=;3' print str(y) + '/' + str(k) + '@' + str(o) + '=;4' print str(o) + '@' + str(y) + '/' + str(k) + '=;4' print '0*0@0=;3' print '0@0*0=;3' for k in range(1, 10000): print '0*' + str(k) + '@0=;3' print '0@0*' + str(k) + '=;3' print str(k) + '*0@0=;3' print '0@' + str(k) + '*0=;3' print '0/' + str(k) + '@0=;4' print '0@0/' + str(k) + '=;4' for l in range(len(sym) - 1): k = range(0, 1000, den[l]) for r in range(len(k)): y = k[r] * num[l] / den[l] z = k[r] if z >= 100: print sym[l] + '*' + str(z) + '@' + str(y) + '=;3' print str(z) + '*' + sym[l] + '@' + str(y) + '=;3' print str(y) + '@' + sym[l] + '*' + str(z) + '=;3' print str(y) + '@' + str(z) + '*' + sym[l] + '=;3' print str(y) + '/' + str(z) + '@' + sym[l] + '=;4' print str(y) + '/' + sym[l] + '@' + str(z) + '=;4' print sym[l] + '@' + str(y) + '/' + str(z) + '=;4' print str(z) + '@' + str(y) + '/' + sym[l] + '=;4'
Maths Scrabble should be open to play for everyone in the world and not speakers of a particular language.
If you modify the dictionary after you loaded it into the program, eg. add a description and revert back, you will be asked if these changes should be saved. Do so to get the correct sorting order which makes the next loading much faster. Unfortunately it encrypts the data and I have to run it with an extra build to keep it readable (if you managed to build, it's the function Save() in udictionary.
And I like it very much. Could be used in school to learn fractional arithmetic.
Yes, as per your advice I sorted my large maths dictionary and loaded it into the program. It took only 1 minute to load the large maths dictionary containing over 5 million equations. I did not modify the dictionary in the Scrabble3D application by using 'Word Search' feature and save it while exiting the Scrabble3D application. This encrypts the dictionary. A simple Python program would sort the dictionary without encrypting by using sort() function assuming that sorting is done strictly based upon ASCII and Unicode values of each character.
unsorted.py
1 2 3 4 5 6 7 8 9 10 11 12 13
file = open('C:\\Python27\\unsorted.dic', 'r') for i in range(46): s = file.readline() print s[:-1] l = [] for line in file: t = line[:-1] (u, v) = t.split('=') l.append((u, v)) file.close() l.sort() for (key, value) in l: print key + '=' + value
To my previous version of maths dictionary in my previous post in this thread, I made a few corrections. I removed invalid equation: 0 ÷ 0 = 0, added addition and subtraction equations with decimals of length 10 and 11 with two of the terms having one same digit after decimal point and one of the terms being an integer, added power equations with exponent having decimals and base being not 0 and 1, added four digit integers for power of 0, added equations of length 12 for unary operators like square root, cube root, fourth root, square, cube and fourth power. I also removed duplicate equations with decimals of length 9 with two of the terms having one single digit after decimal point and one of the terms being an integer, for unique.py to remove duplicate equations from math.dic as an another program and output to unsorted.dic. Now that my updated maths dictionary contains 5465122 equations. Let me know if you will be interested in it.
maths.dic replaces some non-keyboard characters of arithmetic.dic to be suitable for keyboard typing, although the characters displayed on tiles in Scrabble board is not changed. ⁼, −, ×, ÷, ², ³, ⁴, √, ∛, ∜ are replaced by E, -, *, /, S, C, T, R, K, F respectively. E for equals, S for square, C for cube, T for tesseract (fourth power), R for root (square root), K for cube root and F for fourth root.
print '[Header]' print 'Version=100005' print 'Author=Raman Viswanathan <raman22feb1988@gmail.com>' print 'StandardCategory=Equalities' print 'Licence=GNU General Public License, v3' print 'Release=24.05.21' print 'Comment=For best use have 10 letters on rack' print 'Letters=E,0,1,2,3,4,5,6,7,8,9,-,*,/,+,.,!,^,S,C,R,F,%,K,T,L,M,N,P,U,V,W,X,Y,Z,G,H' print 'Values=1,2,1,1,2,2,3,3,4,3,4,3,4,4,3,10,8,9,6,7,5,10,5,6,8,12,14,16,18,20,11,13,15,17,19,7,9' print 'Counts=18,6,8,7,6,6,6,6,5,5,5,3,3,3,3,1,1,1,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0' print 'Key=' print '[Replace]' print '-=\xe2\x88\x92' print '*=\xc3\x97' print '/=\xc3\xb7' print 'E=\xe2\x81\xbc' print 'S=\xc2\xb2' print 'C=\xc2\xb3' print 'R=\xe2\x88\x9a' print 'F=\xe2\x88\x9c' print '%=\xe1\xb5\x90\xe1\xb5\x92\xe1\xb5\x88' print 'K=\xe2\x88\x9b' print 'T=\xe2\x81\xb4' print 'L=\xe2\x81\xb5' print 'M=\xe2\x81\xb6' print 'N=\xe2\x81\xb7' print 'P=\xe2\x81\xb8' print 'U=\xe2\x81\xb9' print 'V=\xe2\x81\xb5\xe2\x88\x9a' print 'W=\xe2\x81\xb6\xe2\x88\x9a' print 'X=\xe2\x81\xb7\xe2\x88\x9a' print 'Y=\xe2\x81\xb8\xe2\x88\x9a' print 'Z=\xe2\x81\xb9\xe2\x88\x9a' print 'G=\xc2\xb9' print 'H=\xe2\x81\xb0' print '[Categories]' print '1=Addition' print '2=Subtraction' print '3=Multiplication' print '4=Division' print '5=Exponentiation' print '6=Roots' print '7=Factorial' print '8=Decimals' print '9=Modulo' print '[Words]' for i in range(10000): print str(i) + 'E' + str(i) + '=' if i % 10 != 0: print str(float(i) / 10) + 'E' + str(float(i) / 10) + '=' print str(float(i) / 100) + 'E' + str(float(i) / 100) + '=' print str(float(i) / 1000) + 'E' + str(float(i) / 1000) + '=' for i in range(1000): for j in range(i, 10000): k = i + j if len(str(i) + str(j) + str(k)) >= 10: break else: print str(i) + '+' + str(j) + 'E' + str(k) + '=;1' if i != j: print str(j) + '+' + str(i) + 'E' + str(k) + '=;1' print str(k) + 'E' + str(i) + '+' + str(j) + '=;1' if i != j: print str(k) + 'E' + str(j) + '+' + str(i) + '=;1' print str(k) + '-' + str(i) + 'E' + str(j) + '=;2' if i != j: print str(k) + '-' + str(j) + 'E' + str(i) + '=;2' print str(j) + 'E' + str(k) + '-' + str(i) + '=;2' if i != j: print str(i) + 'E' + str(k) + '-' + str(j) + '=;2' if (i % 10 != 0 or j % 10 != 0) and k < 1000: x = (float(i) / 10, i / 10) [i % 10 == 0] y = (float(j) / 10, j / 10) [j % 10 == 0] z = (float(k) / 10, k / 10) [k % 10 == 0] if len(str(x) + str(y) + str(z)) <= 9: print str(x) + '+' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '+' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '+' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '+' + str(x) + '=;8' print str(z) + '-' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '-' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '-' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '-' + str(y) + '=;8' if (i % 100 == 0 or j % 100 == 0 or k % 100 == 0) and (i % 100 != 0 or j % 100 != 0 or k % 100 != 0) and k < 1000: if i % 10 != 0 or j % 10 != 0 or k % 10 != 0: x = (float(i) / 100, i / 100) [i % 100 == 0] y = (float(j) / 100, j / 100) [j % 100 == 0] z = (float(k) / 100, k / 100) [k % 100 == 0] print str(x) + '+' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '+' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '+' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '+' + str(x) + '=;8' print str(z) + '-' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '-' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '-' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '-' + str(y) + '=;8' s = set([]) for i in range(1, 100): for j in range(i, 10000): k = i * j if len(str(i) + str(j) + str(k)) >= 11: break else: print str(i) + '*' + str(j) + 'E' + str(k) + '=;3' if i != j: print str(j) + '*' + str(i) + 'E' + str(k) + '=;3' print str(k) + 'E' + str(i) + '*' + str(j) + '=;3' if i != j: print str(k) + 'E' + str(j) + '*' + str(i) + '=;3' print str(k) + '/' + str(i) + 'E' + str(j) + '=;4' if i != j: print str(k) + '/' + str(j) + 'E' + str(i) + '=;4' print str(j) + 'E' + str(k) + '/' + str(i) + '=;4' if i != j: print str(i) + 'E' + str(k) + '/' + str(j) + '=;4' s.add((i, j)) s.add((j, i)) y = j while True: if y < 1 and (len(str(y)) >= 11 or 'e' in str(y)): break x = i while True: z = x * y if z % 1 == 0: z = int(z) if x < 1 and len(str(x) + str(y) + str(z)) >= 11: break if (x, y) not in s and len(str(x) + str(y) + str(z)) <= 10: print str(x) + '*' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '*' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '*' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '*' + str(x) + '=;8' print str(z) + '/' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '/' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '/' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '/' + str(y) + '=;8' s.add((x, y)) s.add((y, x)) x = (float(x) / 10, x / 10) [x % 10 == 0] y = (float(y) / 10, y / 10) [y % 10 == 0] for i in range(100, 1000, 4): for j in range(100, 1000, 25): y = j while True: if y < 1 and (len(str(y)) >= 11 or 'e' in str(y)): break x = i while True: z = x * y if z % 1 == 0: z = int(z) if x < 1 and len(str(x) + str(y) + str(z)) >= 11: break if (x, y) not in s and len(str(x) + str(y) + str(z)) <= 10: print str(x) + '*' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '*' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '*' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '*' + str(x) + '=;8' print str(z) + '/' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '/' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '/' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '/' + str(y) + '=;8' s.add((x, y)) s.add((y, x)) x = (float(x) / 10, x / 10) [x % 10 == 0] y = (float(y) / 10, y / 10) [y % 10 == 0] for i in range(12, 1000, 4): for j in range(1000, 10000, 25): y = j while True: if y < 1 and (len(str(y)) >= 11 or 'e' in str(y)): break x = i while True: z = x * y if z % 1 == 0: z = int(z) if x < 1 and len(str(x) + str(y) + str(z)) >= 11: break if (x, y) not in s and len(str(x) + str(y) + str(z)) <= 10: print str(x) + '*' + str(y) + 'E' + str(z) + '=;8' if x != y: print str(y) + '*' + str(x) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '*' + str(y) + '=;8' if x != y: print str(z) + 'E' + str(y) + '*' + str(x) + '=;8' print str(z) + '/' + str(x) + 'E' + str(y) + '=;8' if x != y: print str(z) + '/' + str(y) + 'E' + str(x) + '=;8' print str(y) + 'E' + str(z) + '/' + str(x) + '=;8' if x != y: print str(x) + 'E' + str(z) + '/' + str(y) + '=;8' s.add((x, y)) s.add((y, x)) x = (float(x) / 10, x / 10) [x % 10 == 0] y = (float(y) / 10, y / 10) [y % 10 == 0] for i in range(10000): print '0*' + str(i) + 'E0=;3' print '0E0*' + str(i) + '=;3' if i != 0: print str(i) + '*0E0=;3' print '0E' + str(i) + '*0=;3' print '0/' + str(i) + 'E0=;4' print '0E0/' + str(i) + '=;4' if i % 10 != 0: print '0*' + str(float(i) / 10) + 'E0=;8' print str(float(i) / 10) + '*0E0=;8' print '0E0*' + str(float(i) / 10) + '=;8' print '0E' + str(float(i) / 10) + '*0=;8' print '0/' + str(float(i) / 10) + 'E0=;8' print '0E0/' + str(float(i) / 10) + '=;8' print '0*' + str(float(i) / 100) + 'E0=;8' print str(float(i) / 100) + '*0E0=;8' print '0E0*' + str(float(i) / 100) + '=;8' print '0E' + str(float(i) / 100) + '*0=;8' print '0/' + str(float(i) / 100) + 'E0=;8' print '0E0/' + str(float(i) / 100) + '=;8' print '0*' + str(float(i) / 1000) + 'E0=;8' print str(float(i) / 1000) + '*0E0=;8' print '0E0*' + str(float(i) / 1000) + '=;8' print '0E' + str(float(i) / 1000) + '*0=;8' print '0/' + str(float(i) / 1000) + 'E0=;8' print '0E0/' + str(float(i) / 1000) + '=;8' print '0SE0=;5' print '0CE0=;5' print '0TE0=;5' print '0E0S=;5' print '0E0C=;5' print '0E0T=;5' print 'R0E0=;6' print 'K0E0=;6' print 'F0E0=;6' print '0ER0=;6' print '0EK0=;6' print '0EF0=;6' for i in range(1, 1000): print '0^' + str(i) + 'E0=;5' print '0E0^' + str(i) + '=;5' if i % 10 != 0: print '0^' + str(float(i) / 10) + 'E0=;8' print '0E0^' + str(float(i) / 10) + '=;8' print '1^' + str(float(i) / 10) + 'E1=;8' print '1E1^' + str(float(i) / 10) + '=;8' print str(float(i) / 10) + '^0E1=;8' print '1E' + str(float(i) / 10) + '^0=;8' print '0^' + str(float(i) / 100) + 'E0=;8' print '0E0^' + str(float(i) / 100) + '=;8' print '1^' + str(float(i) / 100) + 'E1=;8' print '1E1^' + str(float(i) / 100) + '=;8' print str(float(i) / 100) + '^0E1=;8' print '1E' + str(float(i) / 100) + '^0=;8' print '0^' + str(float(i) / 1000) + 'E0=;8' print '0E0^' + str(float(i) / 1000) + '=;8' print '1^' + str(float(i) / 1000) + 'E1=;8' print '1E1^' + str(float(i) / 1000) + '=;8' print str(float(i) / 1000) + '^0E1=;8' print '1E' + str(float(i) / 1000) + '^0=;8' for i in range(1000, 10000): print '0^' + str(i) + 'E0=;5' print '0E0^' + str(i) + '=;5' for i in range(1, 10000): for j in range(10000): k = i ** j if len(str(i) + str(j) + str(k)) >= 12: break if len(str(i) + str(j) + str(k)) <= 10: print str(i) + '^' + str(j) + 'E' + str(k) + '=;5' print str(k) + 'E' + str(i) + '^' + str(j) + '=;5' if j == 2: print str(i) + 'SE' + str(k) + '=;5' print str(k) + 'E' + str(i) + 'S=;5' print 'R' + str(k) + 'E' + str(i) + '=;6' print str(i) + 'ER' + str(k) + '=;6' elif j == 3: print str(i) + 'CE' + str(k) + '=;5' print str(k) + 'E' + str(i) + 'C=;5' print 'K' + str(k) + 'E' + str(i) + '=;6' print str(i) + 'EK' + str(k) + '=;6' elif j == 4: print str(i) + 'TE' + str(k) + '=;5' print str(k) + 'E' + str(i) + 'T=;5' print 'F' + str(k) + 'E' + str(i) + '=;6' print str(i) + 'EF' + str(k) + '=;6' if i % 10 != 0 and j > 0 and j <= 4: x = float(i) / 10 z = float(k) / (10 ** j) while 'e' not in str(z) and len(str(x) + str(j) + str(z)) <= 11: if len(str(x) + str(j) + str(z)) <= 10: print str(x) + '^' + str(j) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '^' + str(j) + '=;8' if j == 2: print str(x) + 'SE' + str(z) + '=;8' print str(z) + 'E' + str(x) + 'S=;8' print 'R' + str(z) + 'E' + str(x) + '=;8' print str(x) + 'ER' + str(z) + '=;8' elif j == 3: print str(x) + 'CE' + str(z) + '=;8' print str(z) + 'E' + str(x) + 'C=;8' print 'K' + str(z) + 'E' + str(x) + '=;8' print str(x) + 'EK' + str(z) + '=;8' elif j == 4: print str(x) + 'TE' + str(z) + '=;8' print str(z) + 'E' + str(x) + 'T=;8' print 'F' + str(z) + 'E' + str(x) + '=;8' print str(x) + 'EF' + str(z) + '=;8' x /= 10 z /= (10 ** j) j = 1 for i in range(15): if i > 0: j *= i print str(i) + '!E' + str(j) + '=;7' print str(j) + 'E' + str(i) + '!=;7' for i in [2, 4, 5, 8, 10]: j = 1 while True: if (i % 2 == 0 and j % 2 == 0) or (i % 5 == 0 and j % 5 == 0): j += 1 continue if len(str(2 ** i) + str(float(j) / float(i)) + str(2 ** j)) >= 11: break k = 2 while True: x = k ** i y = float(j) / float(i) z = k ** j if len(str(x) + str(y) + str(z)) >= 11: break print str(x) + '^' + str(y) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '^' + str(y) + '=;8' if k % 10 != 0: while True: x = float(x) / float(10 ** i) z = float(z) / float(10 ** j) if 'e' in str(x) or 'e' in str(z) or len(str(x) + str(y) + str(z)) >= 11: break print str(x) + '^' + str(y) + 'E' + str(z) + '=;8' print str(z) + 'E' + str(x) + '^' + str(y) + '=;8' k += 1 j += 1
In the first two games above, in maths Scrabble with 100 tiles including two blanks, it was possible to play 99 tiles on the board, with only 1 tile remaining on one of the player's racks. It should be an optimal tile distribution for maths Scrabble. However that using more number of number tiles encourages players to just form longer equations simply with larger numbers.
On the other hand, maths scrabble can also be played in style of Equate game with fractional tiles. I consider all irreducible fractional tiles which are between 0 and 1 and only addition, subtraction, multiplication and division operators. equate.dic contains all irreducible fractional tiles with denominators 2 to 10 and 12 which are between 0 and 1 (781328 equations). equation.dic contains all irreducible fractional tiles with denominators 2 to 20 except 11, 13, 17 and 19 which are between 0 and 1 (1456480 equations). fraction.dic contains all irreducible fractional tiles with denominators 2 to 20 which are between 0 and 1 (2499096 equations).
Note: fractions.dic is unsorted version of fraction.dic Use unsorted.py python program above with file name changed from unsorted.dic to fractions.dic to sort it and output it to fraction.dic
num = [1, 1, 2, 1, 3, 1, 2, 3, 4, 1, 5, 1, 2, 3, 4, 5, 6, 1, 3, 5, 7, 1, 2, 4, 5, 7, 8, 1, 3, 7, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 5, 7, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 3, 5, 9, 11, 13, 1, 2, 4, 7, 8, 11, 13, 14, 1, 3, 5, 7, 9, 11, 13, 15, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 5, 7, 11, 13, 17, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 1, 3, 7, 9, 11, 13, 17, 19, 0] den = [2, 3, 3, 4, 4, 5, 5, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 1] sym = ['#', '$', '&', '(', ')', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\xc2\xa1', '\xc2\xa2', '\xc2\xa3', '\xc2\xa4', '\xc2\xa5', '\xc2\xa6', '\xc2\xa7', '\xc2\xa8', '\xc2\xa9', '\xc2\xaa', '%', ':', '^', '.', '\xc2\xab', '\xc2\xac', '\xc2\xad', '\xc2\xae', '\xc2\xaf', '\xc2\xb0', '\xc2\xb1', '\xc2\xb4', '\xc2\xb5', '\xc2\xb6', '\xc2\xb7', '\xc2\xb8', '\xc2\xba', '\xc2\xbb', '\xc2\xbc', '\xc2\xbd', '\xc2\xbe', '\xc2\xbf', '\xc3\x80', '\xc3\x81', '\xc3\x82', '\xc3\x83', '\xc3\x84', '\xc3\x85', '\xc3\x86', '\xc3\x87', '\xc3\x88', '\xc3\x89', '\xc3\x8a', '\xc3\x8b', '\xc3\x8c', '\xc3\x8d', '\xc3\x8e', '\xc3\x8f', '\xc3\x90', '\xc3\x91', '\xc3\x92', '\xc3\x93', '\xc3\x94', '\xc3\x95', '\xc3\x96', '\xc3\x98', '\xc3\x99', '\xc3\x9a', '\xc3\x9b', '\xc3\x9c', '\xc3\x9d', '\xc3\x9e', '\xc3\x9f', '\xd0\x90', '\xd0\x91', '\xd0\x92', '\xd0\x93', '\xd0\x94', '\xd0\x95', '\xd0\x81', '\xd0\x96', '\xd0\x97', '\xd0\x98', '\xd0\x99', '\xd0\x9a', '\xd0\x9b', '\xd0\x9c', '\xd0\x9d', '\xd0\x9e', '\xd0\x9f', '\xd0\xa0', '\xd0\xa1', '\xd0\xa2', '\xd0\xa3', '\xd0\xa4', '\xd0\xa5', '\xd0\xa6', '\xd0\xa7', '\xd0\xa8', '\xd0\xa9', '\xd0\xaa', '\xd0\xab', '\xd0\xac', '\xd0\xad', '\xd0\xae', '\xd0\xaf', '!'] conj = [0, 2, 1, 4, 3, 8, 7, 6, 5, 10, 9, 16, 15, 14, 13, 12, 11, 20, 19, 18, 17, 26, 25, 24, 23, 22, 21, 30, 29, 28, 27, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 44, 43, 42, 41, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 62, 61, 60, 59, 58, 57, 70, 69, 68, 67, 66, 65, 64, 63, 78, 77, 76, 75, 74, 73, 72, 71, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 100, 99, 98, 97, 96, 95, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 126, 125, 124, 123, 122, 121, 120, 119, 127] m = ["\xe2\x81\xb0", "\xc2\xb9", "\xc2\xb2", "\xc2\xb3", "\xe2\x81\xb4", "\xe2\x81\xb5", "\xe2\x81\xb6", "\xe2\x81\xb7", "\xe2\x81\xb8", "\xe2\x81\xb9"] n = ["\xe2\x82\x80", "\xe2\x82\x81", "\xe2\x82\x82", "\xe2\x82\x83", "\xe2\x82\x84", "\xe2\x82\x85", "\xe2\x82\x86", "\xe2\x82\x87", "\xe2\x82\x88", "\xe2\x82\x89"] d = {} for j in range(len(sym) - 1): d[(num[j], den[j])] = sym[j] def superscript(s): a = "" for c in s: a += m[ord(c) - 48] return a def subscript(t): b = "" for d in t: b += n[ord(d) - 48] return b def gcd(p, q): while q > 0: (p, q) = (q, p % q) return p def string(nu, de): result = '' if nu >= de or nu == 0: result += str(nu / de) if nu % de > 0: result += d[(nu % de, de)] return result def terms(nu, de): result = 0 if nu >= de or nu == 0: result += len(str(nu / de)) if nu % de > 0: result += 1 return result print '[Header]' print 'Version=100000' print 'Author=Raman Viswanathan <raman22feb1988@gmail.com>' print 'StandardCategory=Equalities' print 'Licence=GNU General Public License, v3' print 'Release=23.05.21' print 'Comment=Equate game style of Scrabble with mathematical equations' print 'Letters=@,0,1,2,3,4,5,6,7,8,9,-,*,/,+,#,$,&,(,),A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,\xc2\xa1,\xc2\xa2,\xc2\xa3,\xc2\xa4,\xc2\xa5,\xc2\xa6,\xc2\xa7,\xc2\xa8,\xc2\xa9,\xc2\xaa,%,:,^,.,\xc2\xab,\xc2\xac,\xc2\xad,\xc2\xae,\xc2\xaf,\xc2\xb0,\xc2\xb1,\xc2\xb4,\xc2\xb5,\xc2\xb6,\xc2\xb7,\xc2\xb8,\xc2\xba,\xc2\xbb,\xc2\xbc,\xc2\xbd,\xc2\xbe,\xc2\xbf,\xc3\x80,\xc3\x81,\xc3\x82,\xc3\x83,\xc3\x84,\xc3\x85,\xc3\x86,\xc3\x87,\xc3\x88,\xc3\x89,\xc3\x8a,\xc3\x8b,\xc3\x8c,\xc3\x8d,\xc3\x8e,\xc3\x8f,\xc3\x90,\xc3\x91,\xc3\x92,\xc3\x93,\xc3\x94,\xc3\x95,\xc3\x96,\xc3\x98,\xc3\x99,\xc3\x9a,\xc3\x9b,\xc3\x9c,\xc3\x9d,\xc3\x9e,\xc3\x9f,\xd0\x90,\xd0\x91,\xd0\x92,\xd0\x93,\xd0\x94,\xd0\x95,\xd0\x81,\xd0\x96,\xd0\x97,\xd0\x98,\xd0\x99,\xd0\x9a,\xd0\x9b,\xd0\x9c,\xd0\x9d,\xd0\x9e,\xd0\x9f,\xd0\xa0,\xd0\xa1,\xd0\xa2,\xd0\xa3,\xd0\xa4,\xd0\xa5,\xd0\xa6,\xd0\xa7,\xd0\xa8,\xd0\xa9,\xd0\xaa,\xd0\xab,\xd0\xac,\xd0\xad,\xd0\xae,\xd0\xaf' print 'Values=1,2,1,1,2,2,3,3,4,3,4,4,3,3,4,5,6,6,5,5,8,8,8,8,7,7,11,11,11,11,11,11,8,8,8,8,10,10,10,10,10,10,9,9,9,9,15,15,15,15,15,15,15,15,15,15,10,10,10,10,17,17,17,17,17,17,17,17,17,17,17,17,12,12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,16,16,16,16,16,16,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,18,18,18,18,18,18,18,18' print 'Counts=36,8,10,9,8,8,8,8,7,7,7,7,11,11,7,4,2,2,2,2,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0' print 'Key=' print '[Replace]' print '-=\xe2\x88\x92' print '*=\xc3\x97' print '/=\xc3\xb7' print '@=\xe2\x81\xbc' for i in range(len(sym) - 1): print sym[i] + '=' + superscript(str(num[i])) + '/' + subscript(str(den[i])) print '[Categories]' print '1=Addition' print '2=Subtraction' print '3=Multiplication' print '4=Division' print '[Words]' for k in range(10000): print str(k) + '@' + str(k) + '=' for k in range(100): for l in range(len(sym) - 1): print (str(k), '') [k == 0] + d[(num[l], den[l])] + '@' + (str(k), '') [k == 0] + d[(num[l], den[l])] + '=' for k in range(10): for l in range(len(sym) - 1): for o in range(10): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 20 or y % z == 0: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(100): for l in range(len(sym) - 1, len(sym)): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 20: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(len(sym) - 1, len(sym)): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 20: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(conj[l], conj[l] + 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * w + u * v z = u * w g = gcd(y, z) y /= g z /= g if z > 20: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '+' + string(v, w) + '@' + string(y, z) + '=;1' print string(y, z) + '@' + string(t, u) + '+' + string(v, w) + '=;1' print string(y, z) + '-' + string(t, u) + '@' + string(v, w) + '=;2' print string(v, w) + '@' + string(y, z) + '-' + string(t, u) + '=;2' for k in range(1000): for o in range(1000): y = k + o if len(str(k)) + len(str(o)) + len(str(y)) <= 7: print str(k) + '+' + str(o) + '@' + str(y) + '=;1' print str(y) + '@' + str(k) + '+' + str(o) + '=;1' print str(y) + '-' + str(k) + '@' + str(o) + '=;2' print str(o) + '@' + str(y) + '-' + str(k) + '=;2' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 20: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(100): for l in range(len(sym) - 1, len(sym)): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 20: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' if k > 0: print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(100): for l in range(len(sym) - 1): for o in range(100): for r in range(len(sym) - 1, len(sym)): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 20: continue if terms(t, u) + terms(v, w) + terms(y, z) <= 6: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(1, 100): for l in range(len(sym) - 1, len(sym)): for o in range(100): for r in range(len(sym) - 1): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 20: continue if terms(t, u) + terms(v, w) + terms(y, z) == 7: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' if k > 0: print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(100): for l in range(len(sym) - 1): for o in range(1, 100): for r in range(len(sym) - 1, len(sym)): t = den[l] * k + num[l] u = den[l] v = den[r] * o + num[r] w = den[r] y = t * v z = u * w g = gcd(y, z) y /= g z /= g if z > 20: continue if terms(t, u) + terms(v, w) + terms(y, z) == 7: print string(t, u) + '*' + string(v, w) + '@' + string(y, z) + '=;3' print string(y, z) + '@' + string(t, u) + '*' + string(v, w) + '=;3' print string(y, z) + '/' + string(t, u) + '@' + string(v, w) + '=;4' print string(v, w) + '@' + string(y, z) + '/' + string(t, u) + '=;4' for k in range(1, 1000): for o in range(1, 1000): y = k * o if len(str(k)) + len(str(o)) + len(str(y)) <= 8: print str(k) + '*' + str(o) + '@' + str(y) + '=;3' print str(y) + '@' + str(k) + '*' + str(o) + '=;3' print str(y) + '/' + str(k) + '@' + str(o) + '=;4' print str(o) + '@' + str(y) + '/' + str(k) + '=;4' print '0*0@0=;3' print '0@0*0=;3' for k in range(1, 10000): print '0*' + str(k) + '@0=;3' print '0@0*' + str(k) + '=;3' print str(k) + '*0@0=;3' print '0@' + str(k) + '*0=;3' print '0/' + str(k) + '@0=;4' print '0@0/' + str(k) + '=;4' for l in range(len(sym) - 1): k = range(0, 1000, den[l]) for r in range(len(k)): y = k[r] * num[l] / den[l] z = k[r] if z >= 100: print sym[l] + '*' + str(z) + '@' + str(y) + '=;3' print str(z) + '*' + sym[l] + '@' + str(y) + '=;3' print str(y) + '@' + sym[l] + '*' + str(z) + '=;3' print str(y) + '@' + str(z) + '*' + sym[l] + '=;3' print str(y) + '/' + str(z) + '@' + sym[l] + '=;4' print str(y) + '/' + sym[l] + '@' + str(z) + '=;4' print sym[l] + '@' + str(y) + '/' + str(z) + '=;4' print str(z) + '@' + str(y) + '/' + sym[l] + '=;4'
You can test all of these dictionaries in your own system with human vs human games, human vs computer games or computer vs computer games. The more the number of equations in the dictionary means that more the time the computer takes to play a move and so these dictionaries cannot be used to play with computer for Scrabble boards of sizes that are larger than 21×21.
Also, is there any option in Scrabble3D application to make a video of the Scrabble board in 2D or 3D move by move, similar to what you have done in German Scrabble with 21×21×21 3D board with 2884 tiles: https://www.youtube.com/watch?v=XwoBwI3PZvM? How did you make that video? With Scrabble3D application directly or some other nice video recording application that is suitable for this purpose? If it is not through Scrabble3D application directly, then what is the name of the video recording application that you used for this purpose? Let me also download it, use it, give it a try and upload my nice looking Scrabble boards move by move of maths Scrabble, Equate game style of maths Scrabble, English Scrabble, Tamil Scrabble, English phonetic Scrabble, etc. to YouTube with a link to the Scrabble3D application from those videos and also saying that I would be interested in playing those Scrabble variants in the Scrabble3D application, so that people interested in them will come and play with me and they all will become more and more popular from YouTube which many number of people use everyday than most of the other websites in the Internet.
This maths 45×45 Scrabble board would look beautiful for YouTube if made a video move by move, although it is only 2D board. I played it by myself for all 4 players for 4 days mainly with the aim of making the maths Scrabble board to look beautiful and not with the aim of making high scoring moves, bingo, winning or losing. I was aiming to have all equations with unary and binary operators to the left side of '=' and only a single integer or single decimal number to the right side of '='. I was also aiming to avoid equations like 'single integer = single integer' and 'single decimal number = single decimal number'. I was also aiming to consider carefully with space issues over scoring issues to pack tiles densely.
Rename Maths1150.txt to Maths1150.ssg to load and view this entire maths Scrabble game in your Scrabble3D application. Also, this first Equate game style of maths Scrabble that has been listed below was carefully played by myself for 2 players on a 17×17 Scrabble board in only 2 dimensions to accommodate all irreducible fractional tiles with denominators less than 12 (including 11) that are between 0 and 1. I carefully considered with space issues over scoring issues to pack tiles densely, while avoiding multiplication and division equations involving 0 and equations like 'single integer = single integer' and 'single rational number = single rational number'.