Zitat von Scotty im Beitrag #40Dictionaries are somewhat out of my business. For sake of usability I prefer a clean list without langA_variantA,langA_variantB,langB... what speaks for integration. But obviously we come to a point where dictionaries make sense. And we should implement a special mode for Math in the next version.
If equations with fractional tiles are also integrated into math.dic, then there will be 10 million equations. Or 20 million equations if equations with tiles of both editions are mixed up. Do you think that a dictionary with tens of millions of equations is really feasible enough? Other human players using it whenever playing against computer opponents as players should be asked to disable the categories which are part of other edition, so as not to make the computer moves slow down even in a 15×15 size of Scrabble board.
Can you please tell me whether computer moves are very slow in your system with my current version 1.0.6 of math.dic that contains over 5.6 million equations? Especially during the end game, in a 15×15 size of Scrabble board and in a 21×21 size of Scrabble board? May be that your desktop system with a faster CPU should perform much better than my laptop system with a slower CPU.
What algorithm is the computer using for searching for the best possible move to play and for all available moves to play? Does it look for tiles in rack one by one iteratively or recursively? If a play connects one or more tiles already present on board, then does it look only for words or equation that satisfy the letter or character at the given position? When a new game is started, then is it possible to remove all the loaded words in the memory (but not from the dictionary from which initially all the loaded words had been read) that are not part of the tile set at least when using no blank tiles? Blank tiles should not use a letter or character from the tile set of the other edition.
This is to improve the performance of computer players as opponents even in a 15×15 size of Scrabble board whenever other human players using integrated Maths dictionary containing equations of two different editions of Maths Scrabble do not disable the categories which are part of other edition, whenever playing against computer opponents as players.
I did not create dictionaries for these yet to play against computer players as opponents, just checked out by playing both sides by myself whether tile distribution would really be decent enough in playing these Maths Scrabble variants, in any size of Scrabble board, 2D or 3D.
I have made YouTube videos for at least 10 different diverse tile sets in Scrabble board with Scrabble3D application, out of which only 3 of them are languages, all of them using different writing scripts:
1.English Super Scrabble
2. 21×21 Tamil Scrabble
3. A-Math game style of Maths Scrabble
4. Equate game style of 21×21 Number Scrabble with fractional tiles
5. English phonetic Scrabble
6. Russian Scrabble
7. Scrabble with Roman numerals
8. Scrabble with chess moves
9. Scrabble with perfect squares
10. Scrabble with date
Scotty, you have not considered equate.dic for SourceForge page, but do you have any feedback about it? Do you like it? Do you think that it can be improved in any way? Can a tile set between 100 tiles and 130 tiles that is suitable for play with a 15×15 Scrabble board be used in the dictionary instead of a tile set of 200 tiles that is suitable for play with a 21×21 Scrabble board? Note that Equate edition of Maths Scrabble game with fractional tiles is played in a 19×19 Scrabble board with 190 tiles. 1 point: = ×22, 1 ×7, 2 ×6 2 points: 0 ×5, 3 ×5, 4 ×5 3 points: 5 ×5, 6 ×5, 8 ×4, × ×7, ÷ ×7 4 points: 7 ×4, 9 ×4, + ×4, − ×4 5 points: ¹/₂ ×2, ¹/₄ ×1, ³/₄ ×1 6 points: ¹/₃ ×1, ²/₃ ×1 7 points: ¹/₆ ×1, ⁵/₆ ×1 8 points: ¹/₅ ×1, ²/₅ ×1, ³/₅ ×1, ⁴/₅ ×1, ¹/₈ ×1, ³/₈ ×1, ⁵/₈ ×1, ⁷/₈ ×1 9 points: ¹/₁₀ ×1, ³/₁₀ ×1, ⁷/₁₀ ×1, ⁹/₁₀ ×1, ¹/₁₂ ×1, ⁵/₁₂ ×1, ⁷/₁₂ ×1, ¹¹/₁₂ ×1 10 points: ¹/₇ ×1, ²/₇ ×1, ³/₇ ×1, ⁴/₇ ×1, ⁵/₇ ×1, ⁶/₇ ×1, ¹/₉ ×1, ²/₉ ×1, ⁴/₉ ×1, ⁵/₉ ×1, ⁷/₉ ×1, ⁸/₉ ×1 Or do you think that fractional tiles can be merged into math.dic as a single Maths dictionary? Note that my latest created version 1.0.6 of math.dic already contains over 5.6 million equations. If more equations are added into it (even for equations with three numbers on one side and with one number on other side or for equations with two numbers on one side and with two numbers on other side), then playing against computer players as opponents will slow down even for a 15×15 Scrabble board. I don't think that it is possible to play with 10 million equations in dictionary when operators in both categories are kept separate or 20 million equations in dictionary when operators in both categories are also merged. Don't you? Actually, in physically available versions of Maths Scrabble, there are at least two different commercial editions, Equate game with number tiles, fractional tiles and operators and A-Math game with only number tiles and operators. Each of them use a different tile set.
In my humble opinion, the most optimal way to implement Maths Scrabble in computer program is to do parsing to check equations for syntax validity and semantic correctness and also to make computer players as opponents to search for and play with the best moves in lesser amount of time. I think that Scrabble3D application right now makes use of a trie data structure to store each valid move in any given dictionary whenever that particular dictionary is loaded into Scrabble3D application and after that all of the words in that specific dictionary are sorted in order of ASCII characters. Isn't it?
Is there any group of people whoever are interested in Maths Scrabble in social media like Facebook, Twitter, WhatsApp messenger, Telegram, etc. in which I can join? Or can one be created? How can that group in social media be made popular among interested people all over the world? This is one place but no one is active here. Maths Scrabble is not popular unlike Scrabble in different languages despite Maths Scrabble being open for all people in the world and not for speakers of a particular language. It is good to also have a World Maths Scrabble players association that conducts Maths Scrabble tournaments in a city every 6 months. No one plays Maths Scrabble online with other human players these days in game server of Scrabble3D application. Most of them play only French, German and Hungarian and not even English.
I need to do more testing of my latest created version 1.0.6 of math.dic with other human players. If anyone reading this forum is interested in trying games of Maths Scrabble with me, then please reach out to me here. I can see many dozen views of my attached images of Maths Scrabble, both with fractional tiles and without fractional tiles, in my previous posts in this thread in this forum. But other than Scotty and Bussinchen, I haven't seen anyone responded to me here by means of their own created accounts.
I removed the unfit tiles ∞, < and > because there is no meaningful equation containing ∞ and < and > will not restrict possibilities but instead they will allow human players or computer players to form wild mathematical equations at their own wishes. If a Maths dictionary can be created that also includes < and > with just unary operators or binary operators on one side and numbers on other side, then that dictionary will contain 10¹³ equations. Modulo operator is a somewhat wild operator, but not as much as compared to < and >. I did not include it in my dictionary. If equations with modulo operator are also included in the Maths dictionary, then there will be 10¹⁰ equations in that Maths dictionary, just with that Maths dictionary containing all equations with modulo operator of length upto 11.
Although I reduced the point values of most of the tiles such that there are a few tiles with point value ≥ 5, similar to that of conventional English Scrabble, the number of tiles need not be just limited to 100 but it can be also 110, 120 or 130. In the YouTube video of A-Math game style of Maths Scrabble that has been made by me that I have attached along with this post of mine in this thread in this forum, I used this tile distribution of 120 tiles, with point values of tiles best suited for playing against computer players as opponents, letting it know what tiles it should take seriously to play into the Scrabble board as early as possible and what not to: 2 blank tiles (scoring 0 points) 1 point: = ×20, 1 ×9, 2 ×8 2 points: 0 ×7, 3 ×8, 4 ×8 3 points: 5 ×8, 6 ×8, 8 ×7, + ×3, − ×3 4 points: 7 ×7, 9 ×7, × ×3, ÷ ×3 5 points: √ ×1 6 points: ² ×1, ^ ×1 7 points: ∛ ×1 8 points: ³ ×1, ! ×1 9 points: ∜ ×1 10 points: ⁴ ×1, . ×1 Equations with all of these tiles are available in my latest created version 1.0.6 of math.dic. There is also more ratio of numbers in this 120 tile version so as to make myself and computer players as opponents to play more equations with larger numbers as is the focus of my latest created version 1.0.6 of math.dic than equations with more operators. This will also give more chances for myself and computer players as opponents to form more bingos with just an unary operator or a binary operator on one side and a number on other side and more such chances will mathematically and naturally occur in the first few moves of the game with 15×15 Scrabble board when most of the 15×15 Maths Scrabble board is empty. In larger size of 2D boards and in smaller or larger size of 3D boards, such chances can happen during any time in the middle of the played game of Maths Scrabble.
Out of the 10 YouTube videos that have been made by me that I have attached along with this post of mine in this thread in this forum, 3 of them use 21×21 board with 200 tiles and 7 of them use 15×15 board with 120 tiles. Anyone who has any opinion about their own tile distribution for Maths Scrabble can share it here. I think of removing fourth power and fourth root from the tile set and instead have more tiles with square root and decimal point.
For playing games of Maths Scrabble against other human players, in which dictionary is not important and if a valid equation that is not present in the Maths dictionary is played, then it can be accepted by all of other human players whoever are involved in the played game by using a poll, it is possible to play equations with 2 or 3 square roots in the same equation. Equations with a square root, a cube root or a fourth root and an unary operator or a binary operator on the same side can also be played. I have not included such equations in my latest created version 1.0.6 of math.dic because the Maths dictionary will become very large otherwise.
Even a single blank tile, not necessarily two blank tiles, allows plenty of possibilities for bingos in Maths Scrabble. But, can a bingo be made also if the blank tile is selected as a decimal point? Sometimes, bingos with addition operation and subtraction operation need not have any solutions with three 3 digit numbers. Most of the time, bingos with exponentiation operation will only have all trivial solutions, in which either base is either 0 or 1, or exponent is 1.
What is the best equation that can be played here? Is there any equation that can be played on the leftmost column that touches the triple word score on the top left corner square? This is just asking for the best equation that can be played simply and not looking out for a bingo equation at all.
Scotty, please update the Maths dictionary in SourceForge page to my latest version 1.0.6 whenever you are free. I added some 146274 equations that I found missing from the Maths dictionary by rigorous testing of Maths dictionary with Scrabble3D application. My latest version 1.0.6 of Maths dictionary contains 5611396 equations right now. math.dic: https://drive.google.com/file/d/1gDYyHzy...iew?usp=sharing I added some 145800 exponentiation equations with decimal numbers with 4 significant decimal digits that are strictly greater than 1 and base being 0 and 1 and exponent being 1. I also added some 474 exponentiation equations formed out of square, cube and tesseract tiles with the base being 0 (upto power that is being 4444), 1 (upto power that is being 4444) and 2 (upto power that is being 24).
Zitat von Raman im Beitrag #33I created the English dictionary with NWL2020 dictionary for North America and CSW2019 dictionary for the rest of the world, as played in the latest Scrabble tournaments all around the world, instead of TWL2006 dictionary and CSW2007 dictionary respectively in the SourceForge page. english.dic: https://drive.google.com/file/d/1BY40j9x...iew?usp=sharing I also have the English dictionary with NWL2018 dictionary and CSW2019 dictionary. american.dic: https://drive.google.com/file/d/1Y4W1PsL...iew?usp=sharing NWL2020 dictionary, as played in the latest Scrabble tournaments in Canada and United States of America was released only 5 months ago. It just removes 259 offensive words from NWL2018 dictionary.
Please note that english.dic is the latest updated version of the English dictionary combining the NWL2020 dictionary for North America and CSW2019 dictionary for the rest of the world, as played in the latest Scrabble tournaments all around the world. I posted american.dic only for historical purposes and for the interest of other players whoever, if any players, might be interested in downloading and playing with the old NWL2018 dictionary for North America. american.dic is an outdated version of the English dictionary and it is not to be considered for the purpose of uploading it to the SourceForge page.
On Monday, 8 June 2020, exactly one year back from today, I played my first game of Maths Scrabble with another human player in Scrabble3D online game server. It was against Mrs. Ishika of Bangalore Scrabble club, who has a similar board game at home bought and last used about 8 years back from last year. Or about 9 years back from this year.
You can call it for testing purposes. I also played a game of 21×21 English Scrabble with Marisha Sharma of Delhi Scrabble club a couple of weeks back from that day in Scrabble3D online game server. 21×21 English Scrabble is available for pay for $15 per year at http://thepixiepit.co.uk/. Scrabble3D is much more enhanced than that. Games can be played in 2D boards upto 48×48 and even in 3D boards. Letter distribution, points for each letter, dictionary words, number of tiles in each of player's racks and number of blanks used in game can be customized as per player's wishes. Small percentage of all tiles can also be tiles which are randomly picked up by the computer from the letter set.
Maths Scrabble should be open for all people in the world and not for speakers of a particular language.
Publically disclosable selected conversation between both of us in WhatsApp messenger:
Ishika: You should have taken off seventh root, factorial, infinity, lesser than, greater than. Me: What mathematical equations have infinity? And plenty of possibilities with lesser than and greater than. Ishika: Anything divided by zero is infinity. I mean remove them. I have a seventh root tile in my rack. Me: Lesser than and greater than will not restrict possibilities. It will allow players to form wild mathematical equations at their own wishes. Ishika: This does not look like 100 tiles. We must not restrict the number of tiles but must restrict the complex symbols for beginners. By the way, I can play only one game today. Me: I added a fourth root tile in the letter set but not a seventh root tile. Please share a screenshot of your Scrabble board and your Scrabble tiles with me. I will check out whether it is a fourth root tile or really a seventh root tile. Ishika: Me: You only have ordinary square root tile in your rack and not a seventh root tile. Ishika: Oh, it is seven points for the tile! Got it. Now, it is your turn. I have played 4=4×1 long back. What did you play? Me: I did not receive any move from you. Click on the 'Next Player' button which is the third button from the left just below the menu bar and pass on your turn to the next player. Alternatively, you can also press Ctrl + N as a keyboard shortcut. Ishika: Sorry, just getting used to it. Next time I will do much better as I will be used to it.
This was the Scrabble board position at the end of that played game. My opponent first played 5=8×0+5 at the bottom row for 96 points, then extended that to 25=8×0+5+20 for 123 points and later on extended that to 1×√625=8×0+5+20 for 174 points and finally won me 614 - 341. Forming such long mathematical equations is just typical of Maths Scrabble among human players. Although I must add that my opponent got both blanks luckily in that played game of Maths Scrabble. If I played 87−34=53 instead of 78−43=35, such high scoring mathematical equation would not have been possible for my opponent to play or may be a different mathematical equation could have been extended on both sides.
Me: I hoped you enjoyed the game. How can you make Maths Scrabble popular as conventional 15×15 English Scrabble? Ishika: You can find minded communities on social media such as Facebook and Twitter. Me: Would you be interested in sharing our played game with Bangalore Scrabble club? If it was related to conventional English Scrabble, then I could share it by myself. It would just not be nice for me alone to keep talking about unconventional Scrabble and others keeping on talking about conventional 15×15 English Scrabble in Bangalore Scrabble club WhatsApp messenger group. Ishika: Do you have a screenshot of our played game with you? I have one with a pop up message that hides part of the Scrabble board, although it is mostly over empty space and very few tiles are sitting below it. Me: You can learn how to take a screenshot of our played network game by yourself. Log in to the Scrabble3D online game server and go to File from the menu bar and load remote game. Alternatively, you can also press Ctrl + O as a keyboard shortcut. Played network games will be stored on the Scrabble3D online game server for 14 days. This is the maximum time that you would be able to access them. After that, they will be archived. Ordinary players will not be able to access or unarchive archived games from the Scrabble3D online game server. Only the Scrabble3D administrators will be able to do that.
Later on, I revised the point values for all the tiles in Maths Scrabble and reduced them for Maths Scrabble to be played furthermore optimally. It is a more mixed version of Scotty's version of Maths Scrabble tile distribution in post 3 in this thread and Jouni Tolonen's latest version 1.0.4 of Maths Scrabble tile distribution that has been uploaded to the SourceForge page. Similar to conventional 15×15 English Scrabble, I edited the point values for all the tiles such that there are only a few number of tiles with point value ≥ 5. In this process, I reduced the point value of √ tile from 7 points to 5 points.
On Saturday, 24 April 2020, I really played a game of Maths Scrabble with 21×21 board with all of types of such complex symbols, just for fun. It was played with 2 human players and I played both the sides by myself with 12 tiles in each of player's racks instead of just 10 simply as having more number of tiles in each of player's racks is furthermore optimal enough to form longer numbers that are perfect powers of integers that are ≥ 2 that are necessary to push those complex symbols away into the Scrabble board that can be beautifully presented to other people instead of 0 and 1 which are perfect powers of themselves and so they are very short and very unappealing for the Scrabble board to be beautifully presented to other people and as other human players who are actively in contact with me are not that interested to play Maths Scrabble with me, online or offline. I did not play against the computer players as computer players would not understand such complex symbols until programmed and such mathematical equations are added up into the Maths Scrabble dictionary, which should not be too much of work either. By the way, it is also very difficult to instruct the computer players to plan pushing away such complex symbols into the 21×21 Scrabble board optimally by knowing which tiles to retain in the Scrabble racks and by knowing which tiles to push away into the Scrabble board depending upon the complex symbols that have arrived in the Scrabble racks and to plan playing by space rather than by score when using 250 tiles and accommodating them very densely in a 21×21 Scrabble board.
This was the Scrabble board position at the end of that played game.
Five more Maths Scrabble puzzles. Sometimes, multiplication or division with 0 or powering with 0 or 1 as base or 0 as exponent may be the frowned upon but the only powerful bingo that will be available to play as the highest scoring move spanning 2 of the premium word score squares.
Zitat von Scotty im Beitrag #31What dictionaries would you share on SF.net?
Well, yesterday was Sunday and so I finally had the time to work upon the dictionaries to make them better suited for SourceForge pages, than the ones used for playing against other human players or computer players online or offline in my local computer's Scrabble3D application.
Equate game is played on a 19×19 Scrabble board with 190 tiles. I made my version more interesting with 200 tiles and can be played in 21×21 Scrabble board (with same density as 100 tiles in 15×15 Scrabble board) or in 19×19 Scrabble board (with very dense occupying of tiles). https://www.boardgamegeek.com/image/1817520/equate I revised the tile distribution, removed reducible fraction tiles, removed fraction tiles with value ≥ 1 and added all other missing irreducible fraction tiles with denominators ≤ 12 and values strictly between 0 and 1. There are tiles like 3² in the advanced pack of Equate game. These tiles would not be nice to be combined with other digit tiles to the right and these tiles can never combine with other digit tiles to the left. 9 is much better to use in this case. My created dictionary contains none of such tiles, with emphasis heavily being only upon irreducible fraction tiles with denominators ≤ 12 and values strictly between 0 and 1. For example, 19×3=57. 9 cannot be replaced by 3² here. Dictionaries that can be updated: Here is my improved version of Maths dictionary. If you like it, then you can update the SourceForge Maths dictionary with my version. math.dic: https://drive.google.com/file/d/1gDYyHzy...iew?usp=sharing My created Maths dictionary already contains 5465122 equations and no equations involving three numbers on one side or a binary operator and a unary operator on one side. If you want, then you can take the union of all equations in the Maths dictionary that is prepared my be and the Maths dictionary that is prepared by Jouni Tolonen. But be warned, that the Maths dictionary that is prepared by Jouni Tolonen contains some wrong equations like 18-9=7 and 18+5=13. 0^0 is indeterminate but it contains 0^0=1. Usually minus sign cannot be placed before 0 but it contains 0=-0-0. In the Maths Scrabble game played on the board on the left side, it was possible to accommodate 129 out of 130 tiles. It is a good tile distribution for Maths Scrabble with 130 tiles. Only one = tile was left over at the end. I played it by myself for 2 players planning for spacing over scoring and packing them up densely. 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'. Modulo operator is a somewhat wild operator that allows a player to use all the number tiles at once and if possible also forming a bingo if there are 8 number tiles out of 10 tiles in player's rack and one modulo operator tile and one = tile, if not allowing players to form wild mathematical equations at their own wishes as is the case for < tile and > tile. My created Maths dictionary does not contain any equation with modulo operator, but if it is included in human player games played online or offline since it will not be understandable by computer players, % tile can be added to the letter set and mod will be shown in the tile instead of %. In Scrabble3D application, even if a word is not present in that specific language dictionary, then it is always playable, if the player accepts it while playing against computer players and no other human players and all other human players accept it by means of a poll while playing against one or more other human players with zero or more computer players.
I have a better version of English phonetic Scrabble dictionary, with added pre-defined letter set containing no digraph tiles, with added words containing 7 of the digraphs aɪ, eɪ, ɔɪ, aʊ, oʊ, tʃ, dʒ with or without forming those letter pairs from two separate tiles. english_phonetic.dic: https://drive.google.com/file/d/193beQHO...iew?usp=sharing
I created the English dictionary with NWL2020 dictionary for North America and CSW2019 dictionary for the rest of the world, as played in the latest Scrabble tournaments all around the world, instead of TWL2006 dictionary and CSW2007 dictionary respectively in the SourceForge page. english.dic: https://drive.google.com/file/d/1BY40j9x...iew?usp=sharing I also have the English dictionary with NWL2018 dictionary and CSW2019 dictionary. american.dic: https://drive.google.com/file/d/1Y4W1PsL...iew?usp=sharing NWL2020 dictionary, as played in the latest Scrabble tournaments in Canada and United States of America was released only 5 months ago. It just removes 259 offensive words from NWL2018 dictionary.
Other fancy dictionaries that I have created, that may be of interest to other people. If you like any of them, you can consider uploading them to SourceForge: Scrabble with Roman numerals: roman.dic: https://drive.google.com/file/d/1rihB3hF...iew?usp=sharing
Zitat von Scotty im Beitrag #31First, you have to configure the movie export, see http://scrabble.sourceforge.net/wiki/ind...uration:Network. I'm using "/usr/bin/ffmpeg" and "-r 2". When done you can export a clip of all moves via File > Screenshot using the file type filter MPEG1 Video.
For a smooth YouTube video of a 45×45 size of Maths Scrabble board which is showing move by move progression, it would be impressive to just have the Scrabble board without white space to the left and to the right and without the tiles at the bottom of the Scrabble board, at least without the tiles obscuring part of the Scrabble board at the bottom. Unlike manually saved screenshots move by move, if automatic move by move screenshots are captured with FFMPEG, then will the white space to the left and to the right of the Scrabble board disappear? Will the tiles not be at the bottom of the Scrabble board, at least the tiles not obscuring part of the Scrabble board at the bottom?
1 point: a ×4, b ×4, c ×4, d ×4, e ×4, f ×4, g ×4, h ×4, 1 ×4, 2 ×4, 3 ×4, 4 ×4, 5 ×4, 6 ×4, 7 ×4, 8 ×4 2 points: K ×5, Q ×5, R ×5, B ×5, N ×5 3 points: x ×7 4 points: + ×3 5 points: # ×1
For a bizarre attempt of Scrabble with chess moves, 7 tiles in each of player's racks is optimal as in conventional English Scrabble. The chess dictionary contains 29274 different chess moves, which is a little more than 28946 in the version 1.0.4 of the Maths dictionary that had been prepared by Jouni Tolonen.
What if 9=9 was the only equation in the Maths dictionary? How long could it stretch in a custom size of Scrabble board? I played it by myself for 2 players in a 15×15 board as I did not want the computer players to botch the ends with a dead end as by the dictionary stretching in all directions would essentially yield the same scores if there were no premium squares.
1 point: = ×50 2 points: x ×50
I was inspired on this dictionary by 8=8 equation extending 3 times in the end game when I was playing a game of Maths Scrabble. Here I replaced 8 or 9 with 'x', to be not specific about the digit used. I played it with 10 tiles in each of player's racks but it can be lower, so as to maintain at least one 'x' tile and one '=' tile in the rack always. Otherwise player has to lose a turn by swapping tiles. x=x is the only word in the Zigzag dictionary. Even if a player has multiple 'x' and multiple '=' in the rack, longer words containing multiple 'x' and multiple '=' are not allowed in a single turn.
[Header] Version=100000 Author=Raman Viswanathan <raman22feb1988@gmail.com> StandardCategory=Equalities Licence=GNU General Public License, v3 Release=30.05.21 Comment=For best use have 10 letters on rack Letters=⁼,x Values=1,2 Counts=50,50 Key= [Replace] [Categories] [Words] x⁼x=
Zitat von Scotty im Beitrag #31First, you have to configure the movie export, see http://scrabble.sourceforge.net/wiki/ind...uration:Network. I'm using "/usr/bin/ffmpeg" and "-r 2". When done you can export a clip of all moves via File > Screenshot using the file type filter MPEG1 Video.
Thank you for the information about movie export.
Zitat von Scotty im Beitrag #31What dictionaries would you share on SF.net?
I think that I can work more and revise the categories in my new dictionaries to make it better suited for SourceForge, than the one used for playing against other human players or computer players online or offline in my local computer's Scrabble3D application. For example that the new categories could give more emphasis to number of allowed words to determine speed of computer for play depending upon the size of the Scrabble board in 2D or 3D, instead of the old categories that are defined traditionally. Eventhough it is worthwhile of noting that loading of a dictionary of over 5 million words should not be any problem of taking of too much of time at the starting of the Scrabble3D application whenever all of the words are in the sorted order in the dictionary according to the ASCII or Unicode character sequences. I have a deadline on May 31. I will get back to you on this next week, that is June 1 or June 2.
Beautiful bingos in maths Scrabble with decimal numbers and factorials, with or without using one or more blank tiles. Bingos in maths Scrabble with multiplication and division operators. While bingos in maths Scrabble with addition and subtraction operators are more commonplace, with or without using decimal numbers. There can be more than one solution for bingo in most of the maths Scrabble puzzles, eventhough some may not be the play of highest scoring equation. Also, it is worthwhile to try out for bingos of length 12 and greater. Also, it is worthwhile to try out for bingos in Scrabble boards of sizes that are larger than 15×15. In the start of played game or for a few moves after that, there will be more space and more chances of having exactly one operator and exactly one '=' in rack to form more bingos. Human players and computer players with my maths dictionary containing more and longer mathematical equations with longer numbers usually tend to push away as many number tiles as they can during the first few moves so as to stagnate with more operator tiles and '=' tiles in their player's racks in the latter stages of the Scrabble game so as to have with lesser chances of forming bingos with maths Scrabble during the middle game and during the end game. In my humble opinion, for maths Scrabble without fractional tiles and equate game style of maths Scrabble with fractional tiles, it would always be optimal to have 10 tiles in rack and more ratio of numbers to operators and '=' for larger 2D and smaller or larger 3D boards with more number of tiles that are used in the played game.
In 2 of my test games that are played against the computer, I used 2 tiles in each of the player's racks at any one time. But, it can be larger than that also. Or it can be 1 also, but Scrabble3D application does not allow 1. It starts with a minimum of 2 tiles in each of the player's racks at any one time.
I also removed all scoring squares except for the double word score in the central square at the start of the game, which is compulsory to have for Scrabble3D application to start any game although it need not be unique or at the central square of the Scrabble board. The double word score at the central square is crucial to give the starting player a balanced bias of Scrabble score eventhough the length of the starting integer would be 1 or 2 and it would score 2 points or 4 points respectively. In the computer details settings in the computer engine section of options tab in settings submenu in configuration menu of Scrabble3D application, for playing against the computer with the Sudoku dictionary without any issues for the first few moves, 'exchange tiles if score or number of tiles is lesser than' value should be reduced from 10 points and length should be reduced from 5 tiles to their minimum possible values of 0 points and 3 tiles respectively to avoid one or more computer players from swapping their own tiles during the first few moves.
While playing against the computer, it is impossible to ensure same digit along a horizontal row or vertical column when separated by a space or within each of the 9 squares in the Sudoku grid. In the Sudoku dictionary, all that I would be able to define are all integers from 1 digit to 9 digits without any zeros and without any repeated digits.
Please note that this sudoku.py Python program of mine automatically sorts all Sudoku dictionary words based upon ASCII and Unicode characters by itself.
There are a total of 986409 integers in Sudoku dictionary. Please note that (9C1 × 1!) + (9C2 × 2!) + (9C3 × 3!) + (9C4 × 4!) + (9C5 × 5!) + (9C6 × 6!) + (9C7 × 7!) + (9C8 × 8!) + (9C9 × 9!) = 986409.
from itertools import permutations print '[Header]' print 'Version=100000' print 'Author=Raman Viswanathan <raman22feb1988@gmail.com>' print 'StandardCategory=Sudoku numbers' print 'Licence=GNU General Public License, v3' print 'Release=20.05.21' print 'Comment=Sudoku assembly game' print 'Letters=1,2,3,4,5,6,7,8,9' print 'Values=1,1,1,1,1,1,1,1,1' print 'Counts=9,9,9,9,9,9,9,9,9' print 'Key=' print '[Replace]' print '[Categories]' print '[Words]' l = [] for i in range(1, 10000000): s = str(i) t = set(s) if len(s) == len(t) and '0' not in t: l.append(s) x = '123456789' for j in range(9): y = x[:j] + x[j + 1:] z = permutations(y) for item in list(z): l.append(''.join(item)) p = permutations(x) for thing in list(p): l.append(''.join(thing)) l.sort() for element in l: print element + '='
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'.
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.
Exotic dictionary - Scrabble with names of chemical elements and their symbols
1 point:I ×12, U ×11, N ×8, E ×7, R ×7, O ×6, A ×5, T ×5, L ×4, S ×3 2 points:D ×3, G ×2 3 points:M ×11, C ×3, B ×2, P ×2 4 points:H ×2, F ×1, V ×1, W ×1, Y ×1 5 points:K ×1 8 points:X ×1 10 points:Z ×1
I played it with 20 tiles in rack at a time. I was inspired with it by Bernie McMahon's Facebook post on 'Quicksilver theme Scrabble board' to Scrabble Snippetz Facebook group and Pixie Pit Scrabble Players Facebook group. This should work out well enough because since all two letter symbols of chemical elements are included in the dictionary (but not any of the one letter symbols of chemical elements), most of the rarely used letters that are stagnated in the player's racks at the end of the played game should have some place in the Scrabble board to be pushed away as symbols of chemical elements and not as names of chemical elements. Players should plan the end game in such a way that they push away the rarely used letters that are not part of any two letter symbol of any chemical element at the earliest and not keeping them in their racks till the very end of the played games with this dictionary.
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.