HATETRIS

Play Hate Tetris.

This is bad Tetris. It's hateful Tetris. It's Tetris according to the evil AI from "I Have No Mouth And I Must Scream".

I have to be honest, this is not an entirely original idea. However, RRRR's implementation of the concept of a game of Tetris which always gives you the worst possible pieces leaves much to be desired:

  • the keyboard interface frequently doesn't work
  • the conditions for failure are ambiguous and inconsistent
  • the playing field is only 8 blocks wide as compared to the standard 10
  • the AI is either overly generous, or stupid, and frequently does NOT provide you with the worst possible piece

(UPDATE: there is also Bastet, which can be played online here, but is also far too forgiving.)

HATETRIS was an experiment to rectify those flaws. Also, every coder has to build Tetris at least once in their life. In addition, I also have a passionate hatred of JavaScript, but I felt that that hatred was borne out of ignorance, so this was an attempt to reconnect with that most derided and crippled of languages. The latter failed, but there you go.

Some things you'll spot:

  • Yes, the game is written entirely in JavaScript. You can find the source code here on GitHub. Very few real games are amenable to this, but Tetris, being played on a very wide grid, is one of them. If you want to save the game locally you'll find a few things that are easy to tweak, including the dimensions of the playing field and the height of the bar.

    You can also put custom pieces in the list at the top, including pieces of more or fewer than 4 "bits" (components). Note that at the moment these pieces are sorted so that the least convenient ones are at the top. All things being equal, with no other major differences between possibilities, the AI will give you an S.

  • No, there is no gravity: on the one hand I simply never got around to implementing it and on the other hand I honestly think that gravity is the least of your problems with this particular Tetris clone.

  • The method by which the AI selects the worst possible piece is extremely simple to describe (test all possible locations of all possible pieces, see which of the pieces' best-case scenarios is the worst, then spawn that worst piece), but quite time-consuming to execute, so please forgive me if your browser chugs a little after locking each piece. If you can figure out a way to accelerate the algorithm without diminishing its hate-filled efficiency, do let me know. The algorithm for "weighing" possibilities is to simply maximise the highest point of the "tower" after the piece is landed.

    More complex algorithms could be possible, but aren't strictly necessary. Also, now that replays have been added, I can't change the algorithm without screwing up or invalidating all the replays.

  • Yes, you will get a lot of S pieces. But it doesn't give you solely S pieces - if that were the case, then it would be possible to make lines forever, which is much too easy.

    If you can't figure out how to turn a constant stream of S pieces to your advantage, that's your problem. Rest assured that once you do, other pieces will appear. If you get creative, it is possible to force all 7 different pieces to appear, including even those incredibly useful T pieces.

There is no randomness in the process - the AI is deterministic, so you are all playing the same game. It may be possible to create a strategy to get into a loop and continuously outplay the AI. If so, let me know. If not, my top score is 5 lines.

Update 2010-04-04

I've added some replay functionality. This will allow you to share particularly high-scoring games with other people just by passing a simple string of hexadecimal around, instead of having to laboriously capture video!

2010-04-22

A small update regarding the possibility of HATETRIS II (i.e. the one where the algorithm looks more than 1 piece into the future). I successfully implemented this recursive search, which can theoretically look to unlimited depth. I also added a huge number of optimisations - such as treating the well as a list of binary numbers rather than an array - in order to make it so that new pieces were generated in 0.5 seconds under these conditions, rather than closer to 30 seconds without those optimisations. I also added functionality to add more variety to the pieces.

Unfortunately, this version of the game is still far too easy. I can routinely get 3 lines or more in this mode, without any real planning. It is frighteningly straightforward to devise a situation where even looking two moves ahead there is no way for the AI to prevent you from getting at least one line. Forcing more variety in the pieces, even if the piece chosen is always one of the "equal worst", makes the game a lot easier. And finally, looking three moves ahead is computationally impractical to achieve (in client-side JavaScript, at any rate). I think it should be possible to build a game which permits no lines whatsoever, and I hope to create this, and I'm not intending to release any kind of intermediate solution. More as it happens.

2012-06-12

Contrary to what is stated here, HATETRIS is not related to Hatris.

2015-12-06

Replays are now presented in Base65536, making them just about small enough to be shared via Twitter. Old replays will still work, of course.

2017-11-17

Replays are now presented in Base2048. Thanks to a combination of this and the new increased character limit on Twitter, even the latest high score replay of 31 lines will now fit in a Tweet, which it previously did not. Old hex and Base65536 replays will continue to work.

2021-06-20

I have modified the HATETRIS algorithm to actively prevent loops.

2022-06-12

Multiple loops have now been found! At least, if the loop-prevention logic wasn't there, they would have been found. Here's the full writeup.

High scores

Update 2010-04-04

Atypical's 11-point run is: "ϥقໂɝƐඖДݹஶʈງƷ௨ೲໃܤѢقҾחࢲටฅڗ௨ΡІݪ௨ళȣݹࢴටງ໒௨ஶໃܥ௨റІݮ௨ఴІݥذඡଈݹƍق๓অஒॴแђञඖЅи௨sǶɔۑడПݷޠقԩݹࠉൿຟɓతණງஈশ੬෪অࠑථධٽଫ൝ଆࡨশ૫СܭߜయլݚɶऋഭܭرɤธӃస൯".

2010-04-09

An anonymous guest at the Speed Demos Archive achieved 17 points with this run: "ۑටժݹਐටดݹமsරݪƐජଈݲ௨ණໃφذගדݶಒටܨݹসටѧݹ൭ඤדݜ௧ซະਨதԀໃڻಜʈະसѻගІѠ௧ซະऄமϺเݹߤඨVܭѻඳІʅઅගتףயҔзݢऊටȝधѻೲܨݷಗචЄࡨଫඝܘɚமʈฅ๐ષ෦ฅ൩Ԥ๗ཚޡதԻѣݪॳ౾ແߢࡃశ༩ܣறඤÐњ௬ගƫঋ୦ԟȠॾಭ".

2010-04-11

Same person got 20 lines later in the thread: "ۑටलݹञටฅཧஶʈໃŦ௨ਮܘݶذಗไӔƐකІݶಒටࡍݹصටलݲ௭ඈຯঅஶʈໃഡ௨ੲժݢ௨ཙງ൫ৎටफಏ௧Δαཧऊටฦџ௨ೱܘקஶΟໄ๐ஒقฐݹࢲقܨݹऍ੬ဒھۑశະकஶइഥಏதԻѣݸಣҔଜݸ౻ණໄঅࠁඡܘѣஶsࡎח৭ؾ૭ঔதඞ୩ڽഡలѣݢষܯ໐џஹڏ૭חɢචÐלமΟիॾ౯مຯםமȺЉރ௮ൿങھࠐ7".

2010-04-18

Things Of Interest reader Ivenris is reporting 22: "ಳටܤݹஜƣແࡑ௨ఽໃݚޛඡܦݹরට๐ݹஜуເঅ௧ڈໃݹ௩Οເɕ௧ڠແऔ௨૮Іܢ௨කܘݓ௨౾Іݠ௨කƔݹகقฆݹϢඈՀݹభඨÐݚѻඍɑݚѻಬໃࡠɷళɑݢ௨ڈໃݷ౫ඡІމமҔธࡨஐට൧ۏଛقԟݱ௨മฆݠ௧ΑషݚɷٴฅՉதฃฅݶذڌฅٽࠑ൝ܘނஐؾʑɥࢶلܪݣ௫سଅݸԫצถܤஓඥ۵ݝ".

2010-04-26

The same anonymous guest at the Speed Demos Archive is now claiming an astounding 28: "ۑටݕݹযටະࠇ௧෪ໃܭИටܨݹસට๐ݹஜуໃݶԥڈໃݹ௩Οແऔ௧ฃໂɕ௧ڠແऄ௨ඥܘށ௨ౘЈཧதقഫݪޛೲໄ൫੫ගƬݶԊಋໃݒষܯໃץౚටࢩݹɷගVݪѻචȣݻޛඳଈף௧ڴໃݼѻദݏಏ௩Թໃڽௐقଭނ௩Ϻ༩ݶಈඝଈڍஶs༡ݸ൘Οະऔৡක૭ɒഩಬѣݲষܯະसѻಋଈजƐఽ໐ݪɷٴฅݸౚಀຯஇసضɱŦષට༣ܡஶضʑɠଢമ໘ܣறඡଢڝहథ༣ބஜҕऐ".

2010-05-04

Slashdot.jp user Deasuke has reached 30: "ౚටลݹமȺІݿ௨ගÐݸಳටɱݹশට๐ݹஜуເঅ௧ڈໃݹ௩Οເஜ௨ಗໃܭ௨൝ܘܭۑටຜݹౚඦͲஉݣටմݹԥ൝ໃѢ௨ɊІܥࡂܯໃρಛԀໃݪরටเݹਫටঋݹछقฐݹहටܨݹసقܨݺɷඩܘѧ௦قෆऄதටฅ൫ࠑඨɑݹமΟลຍஐق༱ݚذงໃͷશජХࢭಎටȻݢமҔСݐෂඞවౘஓӺХಏமԗVݏआඖໃϠஐΟවݶѻ౾ແࡑࢲඤÐɥઅඪຯஇಈ౾ຣݪذඪϽऔƐڠÐלஜҕɐזѻڐ༥މభ೯۱ࠇࢳ൯".

2017-06-06

Twitter user @chromeyhex edges out the previous record with 31: "௨ഖƌݯߜࠏІWƑsໃa௨೯ܘݷಳජଈیԪؼʥݺԥඞܘݲࠐڄໂঅமةໃݹ௧ړІٽ௨൞ໃZ௨ಘІܥࠐΣІZߜටȜখذජНݹߛeʛݹߤปເѧ௩ԚໂՉࢸටuа௨સȣݷłقෆঅਏeܘԔצقషݸɢڠຜঀಧҸມѧஐට༪൩ԊಅഫܡथsถԡԦԚໃɥஸقࡈɕɠɈไݸצقషݰਵϺФঅஓػݐɓԞуຯɕझࡈ๐ݞझࢶІݞमปദஈƉؿଭݪஸҩЂ൸ԛمϦGƁҨVھԥචЅշࡂ෮लݷƘණ໘ࠅƘಧНקࢻҨฆӘದԋϝପࠑ੧ͳݲடփරݞਵΚϼɢԒԺٳѦԤࠌξGಘسਯܥஶҋϮτथlϼʔ".

2021-06-13

Things Of Interest commenter knewjade claws down one more line, with 32: "ҋටහঅறปະࠇ௨౾ܘݪ௨කଈݷಒටॽݹࡌقไݹஜϺໃݹ௭قງཧடقະঅஶϺຯђ௧ڐໃѣ௧෮ແঅ௫قเݹஒටະࠇ௨සໃϷ௨യІܧಳണІݡಳඝໃܢ௨ಋໃݹஜҔຜݹयටVݶذඖଈށƐలໂ൫ଚඨʑݠ௨੬ໄחસටVݱಳತІࠇநsໃ۹மsลחࢸචÐܭޛೱໃࡆ௩Ϻງஈहഖຽߢ௫ظଈಏরغȣޅதඦଭϷఐؾІɞடජͻݸಒౘϨݪԤsܦݱ௨৭෩ॾಒ༠ฦZৡටҽऔขಅКɓౚಀໄॷஸ3".

2021-06-15

knewjade breaks their own record with 34: "ҋටහঅறปຯѧ௨దІݪ௨කଈݷಒටॽݹࡌقไݹஜϺໃݹ௭قງཧடقະঅரටຯɥ௨ڐໃΜ௨ಀໃܭذඡໃݶభටໞݹলقโঅறปາർ௧ලໃυ௨ಣໃѣ௨డໃћ௨౾ܘރ௨యІӃளڠໄཧਫඞІף௨ڠຯɕଫඨƔݶԥඐໂɕଫඨʑݢ௨෦ແऔஐقໞݷҋඞܘݹҋකଈљ௧෦ະঅযටУݷಒඩషރ௨ϾາݸƐ೯ІߢইනຽࡁলكʑϠ୷ظଭಠઽගȣͷਵܯງཤ۳इଞܡமɈഉݺѺчฅཫɶญܔમமҒЏהಛɜลݶಒ෮ಊ3".

2021-06-20

knewjade demolishes their own record with 41: "ۑටדݹࡌقลђ௧ٴໃԄ௨ගʑݸసقลݹஶقະಠ௨ปໃϳ௨୮ເ൫நقฆݹવقຯމ௨ټໃџƐඩІݪߤටऒݹ௨ೲໃmذඤȣݶۑඞ༱ݶతටॽݯ௨ೱໃ߂௧ڒໃݏ௨ೱໃݹணටลђ୭ටɳݸѻൿແঅ௮ටجݷ౫ඨऐݫذ൜Іݑ௨ڄແߢ௧Ϻฐݹຕ൞Иݸҋචȣݔ௨Ҙຽߢ௩ɜຯђਬقຽঅࠀϺງঅࡋඞ༱ܭƐപຜݷಒපະज௧इลཧ௧৩ลђذౘЂݹѻڠ༩ݔಲ෮໓ݸ൙൜ІδષؾVܦணؾʑʅষʌฐݪدʌషŒಒడෆƞƎҰවܤஒටДݚলගʑҁஎضVѤతರฆܤகضVɛஜכ".

2021-06-27

knewjade sets what could be their final record for now, a new loop which produces an amazing 45 lines: "ۑටדݹࡌقลђ௧ٴໃԄ௨ගʑݸసقลݹஶقະಠ௨ปໃϳ௨୮ເ൫நقฆݹશقງٽ௧ٯໃܭƐඨƊݸذඖܘݪޛගଈݚࠉටࡍݸಒටƮݹࢳقໞݹ௨ತІԣ௧୳ໃࡁஜقฅٽமҔ๒অષقงஈ௫قງঅ௫قธݸɷගʑݬ௨ญໃܢ௨ಀໃԄ௨ټຽࠇ௨ඝ༱ܦ௨୳ຽࡁઽඤƔݺޛౘІŧ௨ۊຽߢ௧ڄຽߢௐටÐݪޛಎຽज௨ƣງཧࠊقИݺɷටՂݣ௧୳ໄהಳ౾షѣளڠଞݶ൙ඩІנ௩sธݟ௧ڐຕݺࠉඖܘɡ௨ൿະࠇ੫ൿ๒ॿѺ୳༱ףஜΟ୧ݑஊ༠ลॿతගɑϠɷsȜ൨ɷइତڮமॵ۱ɥ३ഊໃסஜҔДݚجط༱औಲΙ1".

2021-08-23

knewjade obliterates their own record with 66 lines: "ۑටדݹࢶටเݹணටະࡆ௨൨ଈݪޛගʑݚɷඤІݶԥටໃیసقฅݹஒڠໃݸףقຈݹࡂɈ໐ݹߜʌເɕஞƣ໑ཧஓقฅཧଶقࠃݶɷඅІѠ௨೯ΞݹࠑටУݸಳඖଭݺޛ೯షݪɷඳܘܭࠑටԟݺɷഢະ૨௩قฦɡ௧sษஈਐڕÐݚذഖTಱஶӶଈԄ௨ටݍݸบඤʝݹ௨ซາݹ௨ಬӿݺޛ෮ໃɣറඨVݵඓʈลঅஜԁܘܭࠁඡІظ௧ญ༱ݚϢ༬ໃɢభගІљࢴق༠ɕॳඦІڭமҔງחࢽටଭݶɷಋໂർமҔෆݶƐಋଈɻ௩ఋෆݶҋ൝ໂɕߤඅϿࡨமjଈŦஜҔଭܭޚ෨ЄࡑरكÐޣ௧ړІδऄكʑঅষݐຽঅκق൝ॿಛΟవߢলؾʡݺޛٴฉஇಛΟฆАஷƣмݪࢳචƬࡨஜӀถݚɶڠݎঀıؾɑݚޚ෨ϿࡑષටɳݱஐගȣלॻಧลஎஜӃϿऔࢳࡄɑஅవలɊঐরظʥѧࢳؼϝח෩൞ɱޕணปࡍף௨੬ՀԴࠑయϼяҋග٠ࠇࡋࡃਥɒಯඖܒॵ".

Here is an explanation (in Japanese) of how they did it.

2022-05-30

David & Felipe, who appear to be academic researchers are reportedly extremely dedicated amateurs with no formal backgrounds in machine learning (???), have blown all previous records away with 86 lines, and a strong possibility of even more: "ۑටݍݹਢටถݹୠʈໃɝƐඡໃޡ௧෪໔ݹमڠາР௨කІݶಒටথݶԥඖІܭɷණЫݹॻටलݸขඤ٠ݶൡඨଈܢࢶقНݶԎقཝथޛ൜షݞಳචͳp௨චʑݔ௧sଫथࡃඖໃק௩Ӽͳɥ௩ӺЛݷಒගƔݸಳඉڋɠ௧ٴໃݹతඨƔݷసغƊݪԤອݕݷಈඨʑݫޛపເɥ௧ڕƊܭ௨ຜʝݷѻงຽࡨமҨДԓரقஞݶౚ൨ܘѳ௨ΟງཧञඡܘѠ௨ࡈتݪޛ੬ຈݸಒඩܘћ௧෮ຽࡪࢸ੬ฅݹ௮ඡଈδஞʈஃ۹ஶԻХ൫୦Ҵໄݶۑƣ༣ɵষڏІښಳಀαɕ๔Ӻາऽ३ಅÐݹ௮ටƬݜذಅÐݹ௮ඨʑɽ௨ඞܘݠ௨ڀໃݯऊඤ٠ɥஐҸฦܭࡃ೯າɕنօƊݷతೲФτଫപໄݸԥ෦෩झளؼܔঅࠔփషקஜҬУܭѽӾ໐ݶɠفΚଡࢳපາथ௨Ɉݍݎதඞ૭ו౫ചତނலҸѥݷಛΟݯङ௩ɈහݺɶසഫމஜԺໃଌৠඥຽঅࢷڀငݶಖسϽऔࢴҸරɪୡഊܐɐதڄฮɣಒ౾ܝஈࢷƤƬھԥÆФРѺ෪രॿಛΟХथޚ༰ฦݺޚܣดݢஓԺІफயƤ٠Ŧߛܯງݶدڄ໐ɾௐڕलކಳ୮ໞݪƏ෪๐ݪޚ෪ถݪےΞͲוϡڐະఫ४Ӷషɜஓم໓ɓಘ١ϽछநسϾ୴ƏࡃͲэಒࡄƬƎଢ৩Ӈ". HATETRIS is really starting to look soft now!

Here is their explanation of how they built on knewjade's work to achieve this.

2022-11-05

David & Felipe altered their heuristic to emphasise building up the left and right sides, and return with a record-shattering 148 lines: "ۑටדݹ௨චƬݹࢳࡄຽऔ௨ێໃص௨ඐໃɝ௨sໂ൫௨൲քࠇ௧۱ɋࠇ௧ڒІݓ௨ೱໃݿ௨ඖໃޡ௧ຖຽಏ௨ൻɱڽ௬චƫɕభඈཛɚಬƣෆޖథӶܘτࢲටଦࢭ௧෮ॽݷɷರໃɱ௨ےະऄਹقДGతΒਥঅࢷhSଙࢷڄຽङਢඤʑނ௨۱ƄदϢೱແࡨ௧ݐНݷ൶قฅɕહڕƔݸసؾƬݹஓ౾ଈঅ১ฐ٠ܭޚ੯ϾदலలลɕஓԺΒݪϢΒϝॲϢਯʣदߝhͲחࠐΖͲसϢಧȣࡁ২ಧǶझಜɈຯझࠒӶଈܥࠐฐࢩݸصڕؼݹऄටݭݡ௨ටփɕ୶ඤƬݏ௧ซາଳحӶଈџƐೲҽς౺ٴຣɠ௨කͲחԊԻҾɚಬɈෆŒಝٱXɜ௧ਯβɪಜɈຣŒԬټໂझવಗຍܥ౬ӷໃѳஹටඍΜமɈଛɕࢳට๐ɝƏٯไҲटuЩߢୡwӀɢతකκदƗٯາॲԞsไѤചӶІںԎಅДݫலӺУݸชඖຽଌ௨ഌƌɱடඝͷݷɠؿͲэدปժKࢻڝÐ൫ԤuХঅԤڄޕݒযڕα൪ຕദഭѧதغଈܥ௰ටǶঐরࡄງٽશටଚݺ௨ನZŧ௨൞Уݹۑൡໃɡலඤتɜ௨ಀມݡஜƢτݛࢷٴෆܦসٴถݺɷΖϝগಛƣതसԦƣෆݪɷಧ෫ݷసقУݞ௧ହ૭ݷతഖതझअڕVұࠐଇХ൫दਲІͷࢳඥܘŦகقЫݪןكƔݪ௧ڒαу௨ڈѳݪɼԿХ൫હڠใȾணقஷʥಛƣະहޛඩݵݷԬٴໃԣ௧ڐເݹஜҔ༩ݹ୬sະઋஹइษݹชೱܘѱ௩ҔȣџଚೱໄюԘنЖݢਐٴ໐ŦஐقЖݶౚටลஈࢶඦଆ૨ࢶൿ໑וചɈоݿୡඉȝࠇࠑ෮ܨݿதԺеɚࢷઆХࠇਵΨФɚࢸێ๐ݚɷਯцߟణڕÐܥ௮ඤÐݒࠐΨХౘௐҹͻђஓڒܘץಒപຊॾชච٠pਏʈדࠇࠑ෮సɓԘԺαяԞఢPथɷਯܒࠇஓҼǶसɷപѬଡɷദҷऔ௬ࡄඍτदඝແߢહڸФɕభණƬ۹ஞق༱ݏऄඨتע௭ؠƬݺɶϮцथɶਯϞɪࢷٴ๐ޖಛƣൟଡࢶටКɕࢲටȡ૨૧චʑџ௩ƣෆŧԖƣฦŒభඤVܮࢷϺໃɡஶɜະࡁஓڄדޞञ൞ɋࡁ௧ټໃࢭஊථ૯ݹవ൝ະࡑذසഩଡɠԹܐॳߝƧЖݒહܧຣŋణڕÐںԪփܘŒಒചຽऔࢳࡄഉѢடචȣԂ౫ൿНݶɜؾЄथϢټฅঅଚඳІѠ౪ٴฅঅࢷپЅஈॼhɑޅதගϼॿౚಗไןƏڐบޙڸකͲюԊಉȥɛலҼݕϠࢳظΚѢ௬ؼНћ௧ϺУݔ௬ࡄՀߢߤٯฐɚ௧ƣҽѢயʈܦݚޚƣНݎࢷ੬ݍށஜغÐɜஜΞͷɢԥڀฒޅமؾϿࡥ൶ӷܔঅಒ೯ຯюԤॴУܮدʉЄࡨࢶ൶ෂܭƏузڽࢽխȣࡂࠑഓ".

2022-11-15

David & Felipe are back with 152: "ౚට෩ݹதටໃݹশටຊ൫ஶ୮ະ౹௨੬ຯঅ௬ࡄຽऔஶʈງཧࢲට༫ࠇ௩ʈງஈଆඨͲݹশටԟܭ௧tʣѡ௨ڐະಏஜʈஞܮޛƣ༣ݪञಌІɚߛhϽऔ૮غȣԣଡݬധߟđӺஷܥযҨPथ௧ΘΒसऎජαƷࢷݬຣљಣɈฅཧߤൻດঅߜੲКɕࢶඨलݎஓҹͲݸ౫ඝϽथۑರໄݷฒගͲཥవඩຯൠ௫ؠНܤஜsลɓԎϷЄࡆஜҔɑםலҸଥॴɷలȡߣࢲටǶ२ఎටप२ࠒӼܘנऄಅзݸ౪ێɱԣ௩ҕƬͷরظЄߢઽ෨ϿఫஜƧҽܯɷಧमখభඞςɞযටଦࢭலӶІݹ௧ΔʑݪƐගͲݹ௬ࡄฅཧরقໞݹ௨پϾ൫ࡃඩໃɡமɈܬܭƐڕଆझமҔށݒਹԊЩౘਸΤҷथɷΚʣࡨࢲඦςݿ௧ΚʣࢬౚචÐݒਵΣα൫વටमसɷඈНџƐೱໃџ௨уഫݿ௨ഢະߢஜҼࠃܯƐೱઈٽસජܘƞࠑడฅהԎΜƊܯϢ੯ΒɤขකНʢಛɈෆœขජНऔऊقബক૮قෆࡩԟɈາও౪ๅໃѠরටบݹࠁටКɕশටԟ۹௬ࡄɱԴরග٠ౘস൞ȣݚƏੜʛݾலՓॽלௐԚɑɝƏ෪ลསతකΚƍతඞΚށଚඤʑәߜಀຯஅۍضȣΜऋضЂяدڐลٽવقಊݠ௩sഫߢஜӷܘܭࠊҨУݎ௧੬ധࡨமҰຽࡆஶʈࠃܭԥญਘݼԥలХഎ௬ؾדށƏڐบހୡ໙ຯझ२ٯÞس௧ਯΚɚߥԀІρԒӶͳɺ௧ړݯथࠑsݭܭɶ෪บڽෂಀΒɣ൲ҹͻݶෂೱΒɣಛʆϿࠇ२ΣϿౘ୦Εͳɛ௩ӀໃݢਚචलݪƗแະ౹ఎඤ٠ܭۑݐຽथИපໂझಛҔဒݶԬڠະऔଵකܘଌৡطແౘਵϻͲяԊړϳݪɷ੭Ɣݪޛуȣɻ௧ਯڋZணඤࠃݿಝكࡍܥࠐฐƔݤ௧ٴະऑభගͲསذ౾ໃࡁࢲقงཤ౻ಧݿݹԬܣແटஜƣଛɔԤʇଏэԪՋPॴɶ੯κGಜƣळॠࢷٴไŦ෩කʧѤభකʣࡥԖƣฦJலԒແଌணටޅݺޛےහܮԤਯΞڽƒƣǶআࠉథฎњஓكÐѡࠐΒૹࠇষsգथƐඩІѤಒರషܭИഞฆܢ୭චVŦશࡄУݪѻ౾ϾॾభචƊسௐҼݎђಳࠏȣݚ০ඨࢩڭࢶගVނ௧ฐलτಛƣҶюѺΟܨޅமغʛɥযකܖࡨહڐດஈࢲڗૹಠਵฐʑɛ௨ಧଜݺۑദǷࡆயقФॾƏڐฅהԎнຽࡑ෩ೲɪ൨ƏзÐɢثචʑ൨ಛƣҷࡑउؾʥܡஶɜฅཧવඥໄɊࢷ୮ȣɺமӽܝɒಛఋѣܡஜΟПܜౚසเܮޖسૹࡨࢲගU൨رʆଈݹஐ3" and a promise of more to come.

2022-11-19

We have a new champion. Tim, using David & Felipe's same basic approach, edges out the record with reports 157: "ۑටܨݹ௨කΚݹ௩Ҕໃɞ௨ཀໃص௨ඪໃןƐචƬݞ௧ࡃІԓࢶقວݷౚඞଈݷκටາѦಛఋฅཥѻమจܢࢼى໐ܭԬસІѧێתྉܥரٯЫߢࠑ൦WǃযظЂɢചӺVτષփЅॿಛࡈДݶԤΔڋɥߜలཟथஸե୲ߣࢸඖςމடեǶদಛ৩໓൫ఈටତݻԥశƬݑஶఋܪݹذඩܘԐ൶ӶܘݚИ೯ܘܢ௧Ɉฆݷοقไଡ௨ඪໃњரքܘן௩قవঅதڄܨݺѻටথݮ௧ดͳɥ௨ಈܘܮޛඪଈקலӷໃऔরජܘњ௨સڋɽமҔɱઝƓقෆࡦౚऋฆұɨضͲཥభටքࡑরشϿଌࢲظμݚƐΝۍʥ३ඪ໐ٽࠑೲฮԑಛࢶϼஆభಧݴখసقУܭѺසຣކಛƣෆݿ௧૨ÐݕࢷΙϦܢଚดȣݣ௧෮ถଡࢳටໃӕసكVʥસقໃנ൶ӷໃɝƏڐฅݹಈගƊݹୠڈງהతඞЉɢభಅບԒԵฐƬঅߜΟරɟட൳۹ŧࢴඡۯ୵ಘكʑpୡॡܖࡨଚtɱΞ௨ڄ༪৯మ੯ЄࡪࢸගVڽಛӺДݶԞԋҿɥਐΒХਕƗڟܖߢலمໃɡஜɜຽࡁமʈଖݫதҹͲݷతගܐখېȺЉܡ௧ܯෆݛےsܢɚஓօթɡԦՋरɞ௫ؼϨלௐեզߢஓԢ໘ݷԠඝϽࡆஶҔଜݶρسʛݚېڒลɆېࠌܐപமϺࠅۏடكЅখԎԋOТƃكʑם௨කڮݹߝɈথݶɠΟ༭જԦҔݕݲ౪ซເजஶƣգदஶӶܕझआಅДʥ२ੜʛߢஓҸНथࡋ൜ܘτసقУݹ੪ٯషɴԊڒຽ൫ࡂڠสݠୠੲЫӘԎΘƬƞਓػܐ൨ಲϺƆঅɚքໃקԈҨѥކభකФॲɷಗЛݺɷਸХਥಕปෆϡעmໃݚԓكÐݒࢷβܪʦƐദಋזذಀໃƞஐธۍɜఊಧХଌસغଉஎѺఉໄщਚසෆҿభಧฦɛலքܢݏসೲфݪɷปะɥ௧ปฦƍۑซฅփஜуКɕࠁගϽଡװʈыРدڠจɢಳธϽ୬đӺЫݪԪಅໃଡ௧ຊງюԥ෮୲অસට෧џञൿ໘ݟવؿڊɕਹಅКɒۑඖϝཧॳසຣݶƋ۱ǷૡېƣහݸɠΠیއฒඩݕಠஜƧഫݶಬҬషڽநقஞݹஓى૭ঀޚຖษחরقѣݫذ೯ະࠇୠΟײঅரمЋפѻڀషܥஶʈలƷߜൿဒX൭ඈໄཧߜඥڋŦਏڗଈԓࢼغʑѧ௮ගƔݪɷలணѧࠑమພקߣۊȣѦ൶ණХऔਏฃරثಛƣПݎߜੜयथӅ೯ໃېذೱݱॾɷೱຯճ௧ϬƊݟஜΠγཤѻಗȣGدɈНݺࢴؼцथޚڀลטԥദลٽॻඖφʅਵȿwୱಲڕʑॳষƣݭށ௧इଜھذలДٽ३ซ໘ݚਡtʐэಭ".

2022-11-23

Tim now claims 170 lines: "௨කଈܢਏwໃܦ௨ටරङयඤʣρԒقธझಛقෆঅଙ۵ʝݷಖටՂݹɬמPࡁୠΔǶঅ௧ΟบঅௐටتٺƑӺෆϡԎظਥथہΟࡉଳđԊRߟɚԊฆɢԊ൞ХߟƐ൞ଭݚआٯPঅࡋ੦ЫɢԖԹʛɤڼמරݎࢷΟݏਕƗࠓϮݚࠑඖͳŦ৯wЫɣƘΟլŒԦطଖӠƃقళझ૪ڠฎɢԞ౾ЫܡહΟເǃअΒʣ२ୠڄȥݣࡃඦͳݻłrςŧ௭քЉѥڴطξτذడฆɪयකЫةષڄجŦਏÆЦаɷඈщখđӺໂঐહƣາǷࢷqΒঅரҨЧयಗԚЦ൫थڠरǃਵญڋԐԭeړܭযԏڽŧԤࠏʣץɿΟషѤИඌҿJ२ΘʛݮಕۻʣћࢸథฦρԖ౾ਦݺߛhͲझಬyϮɳےॠͳݞߜ۱Ȝପ௧ϥαזƃؾʣݞࢷइܪŧࢴצOഠԤΔβJఉΒʣॼஐڠयଙಟԚฎGđԎݎঅԤࠐͳŦୡಜςݢࢴඝʛɢԥsࡉझமನϾǶಟօȢɒƁҸݿɣಳࢶςثಲƥ૯म୦Ҹໄ३௧ƫݒथłقȣүƐలǶঐୠϽЅƸञඌȣݾહڹІJரಅଭݶԥೱܘIಳೲݒГஐആДܢణฯໂଽटة༱JࠐΣଅഠ३శఴǃਸ۳ЩߟɲԊݒআࡌΟƋƷ௧qШদԎؾϞWಧڠեஆđҬࠀஙࠑడPमஐԿݒञஜƜЉʢചמXԓߜಇκ२ୠڠഫʢłԚ༣ކԋػٮʂœօɌঀđҬࠅܭࢲզΒɤƁՋഫGđӶۯGభΖݎசஸӺନङਵΤฮɤങੲฮɤƐڗʣݪࢴطʛɢԦΟҸȶࠐฐӷঅđӺȝदƘฑͲǃஓԚȥςתؾͳѤŋզϮŋ౻୫ȣझࡃɈໞݶԤࢶІڋɶइҽदɶΘPঅɾ੬ಊहࠐΒЫܡߝԻໃݸŋඞЉŦਵ૮ЈХߜഛͷZ௭ҸȥܡߛeઓѦۑ൷ࠂও௧ຜͳƛ౫లߪझஐضΒԓࢸฑςڍƉԚາɖࠑ੬హںಛइǶஙଙluɊߛٴݎसࠐਯϿআࡃeϞςԊԚฎGಗגǶঙझwषԔடӶςɞடడVүłօฎٺಗقॺঅϟظܕञளړଞݹಝڙSঙஐՋЫ୲ஐڕØɓಛуЦନહਯНŦஐҨФझઽಉࡏԐԖeʛथɷΒϡƷಲƣءࡦϩmΒͲđҨວɞষɽyதԖԊҺଙষญฆݢࠐΞςҰƓԊາॠߛࠓVݺ௨౾ДJ௯ږʛٽශ۶Дܥॲઆҷपߥƣ෧œԥڛϦקહΝϿআࠁࠓЂझࠐƗګڽ௧ปതঅ۰ظٻࡥರҽȣKߝҩSƷߜ൶ฮͻலڠǷࡨஓڠцঅߣϸІŦமӺฦƌɲඤς߂தҹϼঔষࢲܓǶযڴНɢԊඥͲǃகشͳʤԤۯЦХಝօժݶłҸฆܭƍةബॿطશЫޖಥեȥƌԭණզॲɿ੧ФȺࢸళȣWƗࡄӶѤמӷЂɢƐ൲ҷॿŋҬҿWƏƗϾझࢴեȤ൩ಲऄܒथࡄҼฮɤ౪੬SɓಣӺЫӃࡂ੯ЅݪԪթරKࢲٯ๐ঀಛӺЫρԤmΒJƓԚȜछવؾͷɥझࠕܓǶಣԚɑԐ౪ࠌܘपઽඦΞঀథඞЫGϩดΒѤಝญٮԡԪمٽݞষhʝZߜsඍœƋԊЦǝࢷeϾଙ௨డݕɥđҨෆઞथइПټԻӀНүಛಅҿIԤڒܚτߛhuƻ४ΒϾɚआΒʣॾƓԿपঙԊ൶ຯଥߤiκއԖӼ༱ɢൻڠܦߣ௧ڌະಠ൶Իգम౫డ൜थԤƓͲɔɠӺฎܥ३ගʣŦߤඐЦ०తsȠ୴ஐծȣXಝحरаஓسڕङझฐΚŒđشСމ൶ՏݐȜࢷmܐଙಗقహއರණନࡩԤࢲʛҲߜڙVېԒןڋʣɤҸฎɥĦضǶ൩ɴฎͳŦஐԊࡊƷಝҨԁԓƑfτঅࠐцϾǃ௯ࠌʝԤԒԊࠃݭ".

2022-11-25

Tim is back with a blistering 232 lines: "௨ರໃݏਐඡڳJ௨੧Ͼȶमࡄไۍ౫ටЦঐࠑړʣݒ௨ຜƬԵԥಛbHעԺΚݚ௧ΔʣݹटӼܐȺझڟΜࡨமӺҿԐಗധȣݣஸҨݔГߜඖʝݮࢷΜʛɣಲڕͳJԎԎЫݎಟגДঀƗuݒФෂකٻݺষڈথڼѢطϼƷࢷΘͳڼԬiβԑಗطκɢԗhЅРࢸಅȜஈமقຽद४قժڊభϪͲঅ௨eЪ୬ԥ੯ʣŦࠑϽЅƷୠΞଥঀɲڒڵʢƋڝɌॾłԎບɥआళϦѧɶrʣŋ౫ඈȣʢƁҸໃZಗػʝࠇଢsժŋɪػΒמߜϾǶ४௧hછυࢸ੦ຽࡁল۱ʣŋԬΕܦݪஸنपஈଡƛێঙযಅຣѦಛऋࡊঅࢷ۱Xѧ௧hʣخԭൠฆƞଆഖЦॿԥడХঅ௧ࡂଭݸƍԚȝઞதҽȢसԖΘȠ൴म۵VݚԪقҸаԒقࠅρԊ۱ͷݚߜਯЪմदගΚϟԚسβɢചզȣʢಛӼЫפƉӼͳJௐళȣɢИඌȠ୵ߤ൶ಉɣಛऋҽܢࢸΖЋɚࢸಛХॿԒమໃݹਙਲЄଡɠقНѤԚԛτɥɲദФझ२qѮщলӷІଡ२ڝҶѤƆӷͼʤđقХࡦԒسΒɢԞΘͳͻਵٯЪѦԋڕͳҮƉҸȣѴԊڠӻझࠑೲරJؠړμʣಝడOƷଢඈǶसळඈգथࢸइփআਵਯβѤɚږͷɥԒҹβWłقɎॺஓقࡆɥஶԻФझಲړເФষiΔचஹڒܕɚ௨ඝړHƐಧХदƗਲȣݢ௨༠ไϡષթեറԘԎໃચجٯະঅஶؿฦݹಬలȥݜߛqДथஞƔٻɣԎԚฦʥࠑΟଦଥહټVںלՌϮݪ३ຜOǃஶեฆɫࢸೲलJ௰ڠपझடడXܥமԿफঅ२ڡϿॲࢷΞЫڽ௧ઽНݸಳడҹߢצړІҮಕػΖॿϝօເদԎӺາঅ૩௬૦ɵਵΚͷݶدࡈuɕ੫Οӽझࠑป୲ߟƅҸլݶđӺǶநஸҨФঅझࡄฐɣϢeٮݞߜකͳδஓօՀܥ௩غϦڐƐhҾȻߛsบɮॲڄȣݛۑڠǷଙࢷΒʣݢஉࠌΔͻୡలݏझসࢶʣŦષඝڋŦࠑೲЧࠆԤΤࠂɣԟԊЫњୠੲເɚਵฐҿݶభΒͷρԭඝګŋԬϦϾƷ௯ਸПݶƥشͳݳࠐڄถנ౪ΟZHɷపVܥॲڒݯपਏଆϼॾԎΕʝथञhڪचߤϪ۱ѥԠػݔॠடԊЦ२ஸӺUम௨ƖΚρ൲ҹϼଡ௧iͳςذඝЦɔԖӼЫρԪեȡॻಟටݮǃτڄݔƷझqκঅطϸΒѧƐڠPप௨hͳݣࠒΞڊॲझʉʛGɶڕʛॲɿడເƷষڠถݮऎళϼ൴௧ࡈໃܡࢷ۱ΜࢭஸڸฮथƓටݧŦਵړܗǃ૩ړϮݎߤಬహӀđמҽHŋ۱ςݾࢸලSঀಣԏϮςԭഖPझ२ڄߧɓಟفઈॡଙٯҽρذϺฐफࢶԚҶɓɾࡄෆݎࢷࠕʥקझฑςƎॺڄಪȠൻҸȜФਵΨຈœŋڛκԓਛԚ༱ڋಗօзঅɠԚНݶđڡτɞࠑಧȤॡࢲಗໃҾಗԺໃڋಗҸСঅਙڕІҰԊեȣݷԊҸȢȺߣiϞԑಗػͲɗࠐවЂƷಧԛȣҰłԻຯљடҰฅФࢲԻഭԤԈԎѬɕൻڄບѧࢷȺβܧலسϾѥಳ೯ϮࡨࡄΒΚɟ௨ΤȣԳԠҩOǃƐඡઓܡࢷ૯դपਵڠࠅѤഘڞϽबߣцІρԘՋФझসಬǶȺসΒβɫಲƞڋɢԊӺЫѵಕҨФඎಣԚȢम౻ൻฅǶਏࢻЫټƅڈฮʢɿ൶ѳԔஒӺɒम௧ڝͶק௨ಘϝƷझuμࡁ௩Ҩपওம൜ςץඒලෆङࢸ൞ХङਵڗۍŧԠҨVҮƐนଘݒࠑ੬ЩࢮষړʣࡥԤݟʥɣඎٹҺǃ३sһमਐ೯ϮτઅತЉɚಲΔPॿ൶ҨݎञಛಅฮJௐԿգஅιفФर౫ඤVںԤqκʢƏΒʣͻɚضϞɢಕಗДσಈಗХदɠطʛܭஶؾδɢԗԻຽझষڵϼଡפڀຯומنໄєࢴචͳʣಗقƊټƐࠓϼञअڠPॺࠐਯЫKமՋܢɚஒݞϼୠஜtǷञಛ൞Һ२সpϠρԎةթங३ඩໂȢষΟǶॾđօݮझࢸࠌϽथடඝړݮಬలܢɥߜړІҮಛشτܭƗwÐע௧વଖҰɰƢڟࡨझڟͷںԬලไρ൶ҴຯɥԎΖଉɔƐhΚݞ௧ࠌШடԦqໂѦԪౘȣݶןقOǃடҨฆŦஐҨӶɒđҰЫڍ४ԻмɤԤڗЪГࢸദ๐υԊԞ෧ΙభලไݞࢸలեடةҨ๐ॿత൞ถڭƢڙϨѤԊలȣېఉhSঘɠطͲǃࢴքзܧࢴطٮࠇƋ۱ǶଢࢴഖһमࡂΣτŧਸࠐϼञ౫ࠐٮҮಣ౾ݒɕࡋࠌШடಣطڋŦ౺ਯЂॾƗpʣυةԒЧߠƃԋUɜரעÐԣࠐਯʣIಝطͳŦਓגෆ३ࠒΙϾझஐӶϮࡨझࡎڊཤಕҭϼƸ১ธÞܯமƖІϞԑӶΒљथsҹथஐԚǶॶࢷpϿथࢷϪʣϝԊՐΒѥಟපෆचߤദVमஶlϽॲআฐϞϡ३۲༪ǃਐ൞ХदஓӺଥझஶՔʛұञΔʣƎߛइलWłӀଞݎஐұϼѧذƓګںةsƄআदړΜࡧಧҸໃ3".

2022-11-26

knewjade has achieved 289 lines: "Ϣටݣݹகقາஈ௧ڐໃןƐඡໃޔ௨൝ଈޅ௨ےະઝ௧Δɱض௧໙ໃͷலӾແࠇஶӽܘఫ௨ੲКɕࢳටତݶಒ౾షɜ௨ڀງ൪ൡචÐϡવටџݲࠑࡁͻђࠒΟvथɷలȢȷޛʈݡݷ౪Ϭȵɻ௨ΒϮधɷඈȡधɷකʣɚࢷٴໃŋظٴໃςɷඤʑݚۑಀܘஈੴɈງٽஜҔଭݰ૮ඡໄཥ൭໙ຯС௨ఢÐݸԎƖଈפێيಭϠहథฮɛஓמܤݒ੬փܘυऄغࡍںڸӶܗॺࠑසະधƐඞʥɢෂටपখชචÐݛޛವ໓ݹ൭ഇܘϠরටඍࠇ२ΟTथɷΒϿࡧభඈȣHಒ༠າझஓڕتࠇதҽϝђਵฯໃऔরࡄวחഡ൜షɥஒזໃŧऎට༫૨୶൜ຽઝવජʣܭԗƣෆœƉӶܘŋԘڡࡍݢࠐසXɱ௧ܯ໑ཥങඖαझಬՋຯǃࢷڠຽङࢳඤتݷ෩ඈෆदޚසຣԔ૭ටզߣउටबमࠒҴ໓ݷಒൠІH౪ੲХఫஐզɭߢஐեܨݒ௩sฦףஶу୫ݬƐ೯ګɽமҕࠃݺɠƣҷߢ௰චVݒਵฐࠃݲ२ΤДݹಛs໑ஈடఽະऔ৭قෆथޚپІɝ௧෦ໃમதචƬݺɷϾଘݷభඈɑѤಒಋܘɢدےෆܮƐ೯షސமsࡋஇభකϡђࡓಅЖݶಣʈܤݲࡃೱແࠇஜӷຽଌชൡІԣॳ൜ܗർభකϝђࠐٯџݶԋنЖݶԋԻଘݷԊהܘھطΨХౘ௧ΣڮђதӺУݸ൭ඖໃԃ௮ؿܘҮభ൲໓ђԦhεђࠑවͲђࠑಋܘԑעӽଈѭ௨ڄɒখಒගƔݶ൭൨ܘڻԒڕʑZ௩фԟܮƐඦγ୬И൝ຯыउජیՕࢳගࡍێణڗНͷ০ගƊѳఔඨPॲИರཉܧउقभߟಲڀໞݣலڄӿҮభలไݿதؼαяԤږͲȷޛܧຣݚߝԾຽࠇୡڕࡍݒࡃళͻђਵϻͲས൭ಇܘנࠑeڌஆభජʥѠࢻقଛɕࢼؾܕஇసضɱࠇଚٴາଳԖҔȣɛ௨ΠͲђਏڴຽ੩સගࠃݿࢷٯໃخஞƣ๒ކభචͶח௨චƬܭޛອฮɝƐуହݔࢲقʋߢஓණɋఫதಅИݺƐషϝɕ௩ॴ༡ܭƐಅьݚИಀໃɪஸҬໄঅझhͲ൫ષقݏࡁ੫ඤʑܭԥඝЧଌ௨ദݍݪ௨ฐलݸಜʈฅས൭౾ܘݸذΔܖ౹ୠфͲחԊඤƊܥࡃಇଈњ௨ϦͳѢ௪ʈลђ୦ҨУݫௐӽЄࠇஶӶܘѤѻಋܘσמڕÐݒ੪සເॹ௧ࡄฎɢಜʈล൫૦ؾʑܦ௧sಀଌસගऐґ௩ΒܘѿதҸࠂখ෩ദȠɆउඦʣҮథӶܗझਏซฐݶಒ౾షעஜॴеܭԤ০דϳࢸගɱس௨ΚХऔขගऐس௨ੜʧށஞsຯখవථϬޔવඈຽࠇࠑ൝ڮяԤවͲяԥٴຣܭɷಅьݣઽටݵݲࢶටьݻۑซลٽமʈลݷذƣߨঅߤݬ༫ࡆமуஒݸۊӷະߢளړΒݹࡂ૫ลђࠑڄݍܧఇ١ຽࠇதڄӿܡउඦαǃ૭ටȝߟಛʈށݷԛԻЖݺࢶචܘɛ௧੧ڪཥෂටȤঐযටଦࠇஶу༩ܭذټຽஈ௬ࡄฅٽࢳටດђԊನͻђࠐϨͲђࠑ೯ະࡁൡඩЂȾ੪୮୭ݚƐࠕЈཤෂඝςŧउقࠀখతඡϟ൫ಈഊໃ೪ࢽؾÐԓࢴՁܘœబڕࡍݒવڕÐݒ੪සເআИගƔܭޛಀະࡨயƣຯझಛقথમవජНћ௨ಇૹߢஐ൦๐ݪɷౚαђਹΘƊݎࢶචƔݚɷගÐݤಬҕऐɛ௨ҍتގ௬فτ०ஜػܖࡑস൶ഫݯસඨ٠ѮஶඨȣτИڌငݲಛҔܪݹעΟโɾ௩Ӿໂ୬Иණໂଡ௨ਯϾђਵซดݪƐಗஃݿ௧ࠏÐކഩඪଆ൫ஜӶແஈߛݐະथޛටܦݪƐඝܘࡆ௩Ҕ༣ݮߛڕʑϳ౫ඌНݹƘඞγஅతඈݏࡑஜҔњݶرҴ໓ݷతඖڊཫƐೲȢदறقӷथऄൿາաௐҹͶཪزsȣυࢲشϽࡦෂദܢѤෂඈഭɚௐغVܥ௬ࡄམݺѻ໙ເझಛఋဂݚذ༨༩ܭԤϬࠃݲಛඡςτরදผݚɶ੦Ϟɡ௫ජЈमதԀܘŋణดࡍݒࢲӺЖݷಛࡄผɯ௩ॴฅཥతටњݶಛуУݚИඪܗॿങචԟس௩ƖͷݺɷฎІɺ௨ੲКɕౚඌໄ൨൙इധऔ௪ƣไɢవඔบڭ৫ඞϝɤ෩ദଖथɷΖݓऔরࡄܤݲఎටգझಜƣไŧऄඤדӃஶॴྉݶబڕܘɝƐڼಊऔઽಛତɱஜΟԝथԥƣНݯષؿງঅࡂڐฉݷഡຊဒŦষڠȣॲதՌΒߠຕੜvथې੬њݢ३ฐऐޅஷsबॲƗڀฉɕԒҹͶཥชฯะɱఎقȜখԤٯຯঐরදลюಘؼЄஇ൭೯ܘݪۑʈݿݓउඝХߢஶӾຊஇۑܧຣԔࢶචƔݔ௫ඦЊɕऄתฐݜஓԹฆɡఔನІɠऊචܘࡥດฐʑࡑआ൜ܖदௐඨʑɥॳആІࡆம૫ɐݻ௮ඩܐɀఇඩܕॸமʈɐюಒཙХࡑࢲඝʝݚޛ೯ІसذۊහݏஐظЈɕࢶචऐљஶӷະ੩दഇໃѬஶʈܤܭѼуෆݛرҕVɥഩಀຜܭਔ ".

Here is their explanation (in Japanese) of how they did it.

2023-03-05

David & Felipe take the record back, with 302 lines: "ۑටדݹࠁටดݹஜҔແऔஶɜໃؠ௨ຊໃب௨ೱଈޞ௨ಛɱܯƐජͳɡஶʈງٽஶɜ๐ݶෂට༪൫ϢపฮݷƂsถपझڕVݒଙซดݬѺڈถɺ௨ΔΜŦञ೯ܓॾಛʉÐԐԥΘÐںԤසະधѺڐຣݶԊඨܕथޚܧຯञ௯ٴຯझಗلܘτযටलऔਚඐฅঅϣԁІͶԊӺѥݸɬӺЛݺԥಗƄࡨஓಀຯஇసطܗƽஒغࠃԐԠ൞ɰঈƐਯЈՕࢲفʣڋෂඞʣںಛsฦɺ௧ΒϿदޛܯະࡑશගࠃݒࠑڒບݷෂಗෆŦಜsࠃŧԘӺДݞஓҸྉݶƏΒڋɚ௧sХಏஜҔฎݷđҸໃԣநقДݶԖҨЦथࢲقզङࢷฐࠃݲಕҨХఫ௧ΤPदޛ൜Іݓ౪Ζଈџ௧෪ໄɕஓաຊཧࢶචɑρతചݿݹħطϾݷభಧȤॿభദງђԤܧາञୠڕÐݚࢶටфݪޚڼະಏఎقฅݶభඌຽࠇࠐΣΜɻதҸलѤ෩ദȠআࢶනܗझષԊХࠇୠΚͲॲɷలȣɛ௧ਯНם௨Εܘޅ௩ɜຽऄଵ൶ຫݚԥమஞݫԥడИŦமԎУށஞΟ༫ࡑຕಧෆঅਢಀະߢణڄฐںԣ٢ЅщࡂڕȣڍಜΟຽঅԢӷЅଣѻۊผܣதනЂझಜʈДݢ௩ҕƬఫஓؠХߢஓՏฅɕ३ƞࠃݲ௯ٯໂसસඤ٠æਫడะʅஐఽപɍఎකНܡࢷฐࡍρԤดࡍԔԤhʧݪɷΒНݜɷళȜǃࢲටǶঐࠑසາझવටଦ൫ୠΔͶཧસඨ٠ѰலҸޅݸౚඖແಏउؿІԐԏقଦఫ௧ΒФݶಒ೯ІݞࠑඐෆܡஜƣǷࡦభණУܯɷ੬լɛௐҹϽౘதڒͳɛ௧ปເ൫ࢶඞܘࡑமɜຽࡆடඦʧZୠΔɱɛ௧੬Лݿ௨ΜÐݼƐ൞Ðݺޛ୮ԟٽఐظͳɡஒكتɼம૬ƔܯƏΒͳɺதӺЛޞ௧ٴЧఫ௯ʈУݚƏsȥGد୮ДݎਵΣΚݾரեȢɔಒ౾షƎ૭ටതଙࢷтϦޠஓفʥɢవలຣŧԗɈलھࢳؼͲॲϢ൨ଈυԐӺசݸԪԊХࡁலҸऐݺѻ೯ܘפಒඨʑݚѻడໃZ௨శໃݷ෩ඦʧѤభඦʥԴ௩Ҕฅٽநؾʑࠇ௧ΚܙђடقลཤసقЫѧةʈໄюԎؾÐܡஜƣ෩ڼభඝϝђԎϺࡍݔ୬ƣฮɛ௧Μͻђ४ϩʛɢಒഊܘѤ۳ڗ૯ॿ෩ඦНࡧಒइໄٽணඨVܢસනແఫமƚࠃݒࡃڕVݒਏซഫںɷ൞ໃࡨຕ൞ÐݮߜඨʑɝƐ౾ໃΜଚඪܘßذಀଆಠ௯ݬถŦಛقॽऔࢶػଈәமɜງݸవഢ༱ݸێلϮݪࡃڀషɛஓҹȣњதضÐԐرҨகݶԊඩଦࠇஓҹɑࠇதҸଦࠇலҼ༠ɕॻඨÐݲࡋٴໃŋԫӶܘܥਫග৴ݺޛೱເঅஓටഉםதԻลяԘ൝ຽࡆமуݕћஓեฦɜதեȣћலեȤஅవකτঈϢలवGƗټຯ२ࡋټາथԖҔ༠ɕϡ૫เމय൜ໄཧਏϺժϳরنเܭИಎໃѡৰටܬɡஜؿЄट௰ඖଈԃߤಌϿࠈਙݐลѥಛΟࠀɒ౫൲ࠁࡨୡഢไݷԚقଠݶłՋݍݼذಅໂআԥඌÐݶಒනໃæञಛݭݜ௧Ƙ૭ॾෂಧȣɢతಧȥݚƐΙεɕࠒҸߨथƐలȥŦతඞЈݹࢳࡄฉɕୠϨʡݜѽуวཧࢴقݿݎୡΒХఫञ੧ХଌસථЅஈࠐٯฎں౪૬ƬݿୡsݏࠇࠐปџݢಕҨХౘୡಅКɒಒ೯ܗझಶƣถङࢸܧເখłӶܘԐתҔتɽயƣຣԓɷඐഉɚடԊ໘ݎࢷܣฦƋԥڐงɔ౪ۆɑљலҹϿߢୡpՀԃࢴؾÐσԊలྋݲਹҨÞδऄඤ٠ɚஐؠॿ۹తడमञࠐ໙ฮσԎҼƬߢञΔȝߢਐ౾ວܡடӷ໔ܥࢷݬݏߢଚsໞݲࠑಅଘݶԎϳʑށƐॴדݷłtͲཥƏฃฦmಣϦܔࡨষƖβɱயʈতআѺٯതसߤܣถŒౠԹϾझ२ΔVρԘ൜ଆࡆஜsफࢫƐසຫݶಒටߧТ௨ΘͲཤసضƬڍলطϽझॻ෮ฮܭԥൿငܮƏڄȥӔ෩ࠔۯƞࡋ໙ถŧߛhϞɺலҹʛGತsതஉࢶඩЅझਐٯຯञࢸලາञࢷeʛљ௨ΒڋGłҔДݸԊಀαɕ௯sໄཥసقժݢࡃൠଆಏৡش૮ࠇࠐปЖݒষpࡍںدڕÐںԤසຯझಗҸॽܯɷಧЦаѻසາञࠐܧເझষٴເॲИ൝ໃɝ௫ටషݳ௨इພݪޛಀເ൫ࠑಧVԃࢴؠଥܭߜڐ༣ܥહɽʛɾதӺѥݪऎඨͲ൨ౚചໄהฒ൞УݓஜɜลɎࢴխไæउنЖܥહΠÐτƁƣयथޚ෨ϾൠଢൿฉɓమԹϿञఆගҽܧߜ൜ܖझ௩sไןƏซງ൫उقݑऔ౻ੜժςෂගʥݺɷഞມݜɶੲҷथɶ੭ʑɝƏܧຣƋಘؠໞݲࠐਯʝݱஞsܤपமƣݎݷಈඈງɔԤڕƬɡஶsଥݺ௧ڛଈऄ௧੬ƫཤےƢϽधɶਯܚɛதҸฅяԊڄզౘஓڒͳɛ௧Βτݡஶఋҷदޛڌศݹ৫ටळঐ০ගऐѿ௨ΔǷࠇ௩Ғଆఫહڐಭޡஶ૫షރஶҒଇݸత൲Цঅ౻డໄђಒಀૹࡑશࡄஷކƐಀ໑ݷవ෮ഫۍతడ༪ঈƐಅДݞਚೱຽࡑযණฆɜ௮غȣʢಕԺະࡆதؾƬঀಗՂଆঅಈೱІಏऊةງཨرسϽ൨ಕචɑɡணච૮टஐචʑಏௐؠИݚϣsନ೪Ѽsଦ൪ಘضȣћ௫كȣæಒ౾Ђ୲யضʝݸƌඖଉཤಒॳІݹஐ3".

Here is the repo with the code they used to perform this search.

Here is their highly engrossing writeup of how the past few weeks of records were obtained by them, Tim and knewjade.

Discussion (252)

2010-04-04 00:54:52 by frymaster:

just to add to your hatred of trying to use javascript, this doesn't work either on ie8 or the ie9 tech preview... works on opera though :) best score so far is 4

2010-04-04 00:55:20 by Thrack:

1 row is my record after several tries. I've heard of hateful Tetris games before but could never find a copy of one. Hate Tetris insists on giving me only S and Z pieces so far. I need to find a way to make one of the other 5 pieces the worst, is there a known way to do this?

2010-04-04 01:00:51 by qntm:

If anybody has any idea why they might be experiencing problems running the JavaScript, let me know if you have any suggested solutions because I hate debugging JavaScript on non-Firebug-capable browsers even more than I hate writing it to begin with.

2010-04-04 02:00:44 by Bauglir:

Well, I've matched five, but I can't seem to progress beyond that. Basically I build 3 two-block wide stacks as high as I can with the starting blocks, and then start connecting them. Tends to force the game to allow me to get a row. Got the best results from building three of the stacks adjacent to each other on the far right, then dropping a piece right next to that.

2010-04-04 02:21:15 by JeremyBowers:

Works perfectly on Google Chrome, probably somewhat faster than Firefox (I don't see much of a pause.) In the crowded field of tetris clones, this may be a genuinely new entrant. You're almost better off never having played it before, standard Tetris involves a lot logic using "well, this piece will come eventually"... NO. No it won't. I managed 7. More may be possible. You can manufacture a scenario where you have one part of the board much lower than the others, and all the pieces but a certain one of the s or z piece would allow you to complete a line there. It will then give you the "wrong" s/z piece pretty much indefinitely, which you can use to plate the rest of the board, imperfectly but adequately to set up a few more lines. Also, I was quite excited that I managed to convince it to spawn a square. I wonder if it's even possible to get a T-piece?

2010-04-04 05:15:42 by Aaron:

The canonical "evil tetris" is probably "bastet" for "bastard tetris".

2010-04-04 06:40:38 by Kazanir:

7 is my best also.

2010-04-04 07:03:59 by cory:

I only played for a couple minutes... did terribly, but managed to convince it to give me a long piece. You know, in the one situation where it doesn't help. I think I'll be content with myself if I can convince it to give me an L piece... nevermind trying to actually get a few rows down.

2010-04-04 09:04:30 by Atypical:

11, here is a video: http://atypical.rafe.name/Atypical%20-%20Hatetris.wmv A friend linked me this game, and about 3 hours later this is the best I could do. I think it is possible to get maybe 13 or 14. I haven't really looked into how the game was coded, I'm just an experienced gamer and quickly found at least one abuse of the AI which is to create that slope from left to right with a hole on the right, from what I can tell the AI has to choose between giving you 1, 2 or 4 lines the entire time. The video is slightly sped up, no godmode here.

2010-04-04 15:02:13 by Aegeus:

The reason most bastet games don't give you the absolute worst pieces is that that gets boring. You end up with nothing but S and Z pieces (though I'm amazed that yours handed out I pieces, and still made them problematic). What would really impress me is one that was subtle enough to convince you it was just the RNG messing with you. For example, one that plays normally, but if there is only one piece that can fit in a situation, it doesn't give it to you, or if there is a piece that you cannot place anywhere without leaving a hole (for example, a box when you have no flat surfaces in your stack), it gives you that piece. That would be a really vicious tetris game, because you wouldn't expect it.

2010-04-04 15:48:38 by Michael:

I also used to hate javascript. The saving grace for the language comes in the form of a couple of frameworks: jquery.com and prototypejs.org (though, I prefer prototype) Takes care of most of the nasty cross-browser bugs and adds a lot of features and syntactical sugar to the mix. Seriously give it a shot, you'll thank me.

2010-04-04 15:52:41 by Michael:

Oh, and you could also try using a min-max search with alpha-beta pruning to achieve some truly evil efficiency.

2010-04-04 16:06:58 by qntm:

It looks to me like minimax is exactly what I'm already doing ("for each piece, calculate the maximum (best case scenario); return the minimum of these maxima") and alpha-beta isn't meaningful when you are already only looking one move ahead.

2010-04-05 01:24:39 by Daedalus:

Sam: I'm assuming he meant minimax, looking ahead several plies. That would be quite impressive, actually, and I doubt it would slow the game down too much to be worth it. Nice CAPTCHA; it weeds out bots and mathematical illiterates! ("the square root of minus one")

2010-04-05 02:48:26 by Atypical:

Has anyone beat 11? =)

2010-04-05 03:01:34 by Atypical:

I tried a few of the other versions of this super hard tetris, I can safely say this one is the hardest I've seen. I think the decision process for what is the worst piece is fairly solid here, if not the best possible (worst possible pieces). But really, the only way to make a tetris game more difficult than something like this (while remaining random-free) is to make the pieces adapt to the player, which would probably have to be done over the course of a few games, but could be done on a per-game basis too. It becomes similar to Chess AI, where the game would have to adapt to not only the current playing field, but future possibilities. Much like writing Chess AI, you'd probably have to hard-code specific situations which lead to AI-abuse, too. Then again I don't know what I'm talking about.

2010-04-05 03:21:39 by Atypical:

Sorry for the multiple posts but I just remembered I wanted to mention that there might be a simple deterministic solution to players abusing the AI: It seems like there is an order of pieces which it analyzes in order to determine which is the worst (starting with S) and when there are a lot of equally bad peices, it will predictably choose one in order (which gives the player too much insight into which piece will come next). If you were to find a way to mix up the pieces when they might be equally bad, while leaving the AI as it is for counteracting useful pieces, it should make it more difficult. Off the top of my head, one method might be to avoid giving you a piece which it has just given you a bunch of in a row when another one might be equally as bad (counting how many of each piece it has given you). Of course, still giving decision priority to the current way of doing things. This might overcomplicate things but it is worth a shot.

2010-04-05 03:26:59 by sunburstbasser:

I did manage to finish off this round with the L piece. Nice replay feature, Sam. So far I haven't gotten the reverse L or the T, in other attempts I've gotten the other pieces. No squares this time. AAAA A08B 2AAA 0BAA AAAA AABA AAAA AAA9 E6AA AAAA A395 9A66 AAAA AC2A 06AA AAAA E2AA AAAA 9EAA AAAA 8222 322A AAA9 9E6A AAAA A742 88A8 9AAA ABAA 5A66 AA7A A6AA AA0C A08A AAAA 8AAA AAAA 7666 6AAA A9EA A6AA A023 2AA7 8CAA A876 99AA AA82 AAAA AA36 AAAA 9A0A 2AAA 8C22 8AAA 9AAA AA9C AAAA 7AAA A9D0 CA1A AA74 3022 2AA9 D5AA AA9D A666 A0C8 8A9A AA8A AAB5 66AA 7A9A 890A A8D5 99A6 DABA A02A A201 F632 8

2010-04-05 04:47:24 by Andrew:

Oh god, my high score is 3. That was awful.

2010-04-05 06:32:58 by slowbroTom:

The only "hard" kind of Tetris I had ever seen before is really fast Tetris. This is totally new to me, and extremely interesting! My first game I thought I was doing well at first, but of course I never got the piece I wanted when I needed it. I got a zero :) Here's my personal best (7) if anyone wants to see it. I really only found one scenario to abuse (and used it three times). 5555 6AAA AAAA AAAA 6AAA AAAA A8AA AAAA AA80 1AAA AAAA AA9D 5AAA AA97 6AAA AAAA D9AA AAAA AB9A AAAA AABA AAAA AAAC 1AAA AAAA B0CA AAAA AAA8 0AAA AAAA AA33 C2AA AA80 6AAA AAA9 5F00 DD4A AAAA AAAA C00A AAAA AAAA AAA8 2AAA AAB0 00AA AAB0 0AAA AAB0 2AAA AAC2 AAAA B2AA AABA AAAA 95DA AAAA AD6A AAAA 956A AAAA A5AA AAA8 0AAA AAD7 5AAA A801 AAAA 95AA AAA6 AAAA AAA7 55AA AB56 AAB5 AAAD AAEA A80D 6AA0 02AA AA02 AAA0 02AA 95AA 5AA0 EAA4 AA30 0AAC 2A

2010-04-05 07:01:10 by Lar:

Has the fact that all the pieces will be created been confirmed in the wild? it seems that there are very very few, and possibly no, cases where a T piece is the least useful.

2010-04-05 07:13:07 by Tom:

I don't know about all pieces, but T pieces are confirmed in: C02A AAAA AAA9 5AAA AAAA AA56 AAAA AAAB 002A AAAA AAC2 AAAA AAAA AAAA AAAA A9AA AAAA AA55 AAAA AAB0 4900 AAAA AAC0 6AAA AAAA AAAA AAA9 6AAA AAAB 55AA AAAA AAAA AB55 AAAA BF55 AAAA D56A AFD5 6A

2010-04-05 07:35:14 by Atypical:

Yes, all pieces, including T and the backwards L.

2010-04-05 07:49:14 by Tom:

All seven pieces in one (low-scoring) game: 56AA AAAA AAA6 AAAA AAAA AA56 AAAA AAC0 2AAA AAAA AB02 6AAA AAAA AAAA AAAA AC02 AAAA AA96 AAAA AAAA AAAA AAA7 56AA AAA8 0FD6 AAAA AAAF 02AA AAAA 95AA AAAA 6AAA AA81 AAAA AA80 AAAA ABF0 0AAA AA95 6AAA AA9A AAAA 2AAA AA80 2AAA A956 AAA9 6AAA AAAA ABC2 AAAA EAAB AABA 8

2010-04-05 15:12:55 by Adam:

I get nothing but S pieces.

2010-04-07 03:48:22 by Thrack:

Nice video update, I was wondering how people were coming up with hexadecimal versions of their games until I played the game again (perhaps an 'updated' icon of some sort should be shown on the main qntm page to make updates obvious?). I thought at first that there was some standard for recording tetris games that I wasn't aware of. Here are two games where I try putting two S blocks on either sides and then fill the space on top with I blocks until it gives me another S block for me to get a row with. Unfortunately I can only get three rows this way before it breaks down but I was able to use follow-up patterns to get five and four points out of them, respectively. This makes my record 5 points. Can anyone get improvements out of this? I couldn't.... 00CA AAAA AAAB 55AA AAAA AAAE AAAA AA5A BAAA AAAA 0ABF 5558 0000 5555 555A AAAA AAD5 AAAA AAAD 6AAA AAAA B000 00AA AAAA B00A AAAA AAAA AAAB 02AB FAAA AAAA AAC6 AAAA AA12 B556 AAAA A9D6 AAAA AC00 00AA AAAB 00AA AAAA C0AA AAAB 0AAA AAAD AAAA AAAB AAAA AA9E A6AA AABA AAAA AD55 6AAA AB6A AA9A BAA8 0002 AAC2 AAAA BEAA AFFF FFFF FA45 B56A AAAC 0AAA ACA8 0AAD 55AA AB5A AAB2 AAA4 4606 AAA0 C2AA B55A AAD6 AAB6 AA0F D555 55AA B00A ACAA 860A AB54 1AD6 9AA3 DAA0 CA8 D55A AAAA AAAD E8C0 AAAA AAAA BF5A AAAA AAAA FC2A AAAA AAAB 000A AAAA AAD5 6AAA AAAA FFD5 AAAA AAA0 C2AA AAAA AD6A AAAA AAC2 AAAA 8AAE AAAA AAAA CAAA AAAA B000 AAAA AB55 AAAA AAD5 AAAA AB00 AAAA AAC0 AAAA AB0A AAAA ADAA AAAA AB5A AAAA ABAA AAAB FBFE FFFB 5AAA AAFF FFAE AAAA AD55 AAAA AC00 AAAA AD6A AAAB 0AAA AAD5 6AAA BEAA AAB0 0AAA AB02 AAAB 2AAA B56A AABF 6AAA AD54 16AA C08A AC2A AD6A 8111 6EBF FFE8 4A36 A

2010-04-07 05:46:10 by Michael:

Daedalus, you've got the idea. In this case, the AI finds the piece that minimizes the player's score, predicts the move that maximizes the player's score, and so on... Also, by score I mean whatever heuristic function you're using to evaluate states. Even if you're only looking 4 or 5 ply deep it gives you a pretty manageable state-space with some good improvements. AB-pruning helps reduce that state-space even more.

2010-04-07 09:18:39 by Tom:

Atypical, I just got a 12. I used your beginning strategy (twice kind of), so you get at least half the credit, probably a lot more. I can't believe the game let me do what I did at the end :S 12: C02A AAAA AAAC 02AA AAAA AC02 AAAA AAC0 2AAA AAC0 2AAA AC2A AAAA AAAC 2AAA AAAA C2AA AAAA EAAA AAAA AEAA AAAA AEAA AAAA D6AA AAAA AAD5 6AAA AAAA AD6A AAAA AA95 AAAA AAAA 6AAA AAAA 56AA AAAA AC2A AAAA A8AA AAAA A6AA AAAA 95AA AAAA A02A AAAA A2AA AAAA 6AAA AAA5 6AAA AAA0 0AAA AAA0 AAAA AAAA AAAA 5AAA AAA3 F02A AAAB 00AA AAC2 AAAA EAAA AD6A AAAD 56AA AAAC 00AA AC02 AAAC 0AAA B0AA AACA AABA AAAD 56AA AAB0 0AAC 2AAD 6AAA A56A AAA6 AAA9 5AAA A2AA A6AA A56A AA00 AAA0 AAAA AA5A AAFC 02A9 5AAB 55AA 6AA6 AB0A FADE C02A 82AA 8 The best I have done without copying Atypical is only 8: C02A AAAA AAAB 00AA AAAA AB00 AAAA AAB0 0AAA AAB0 0AAA AB00 AAAB 00AA B0AA AAAA AAB0 AAAA AAAB 0AAA AAAB 0AAA AAB0 AAAA B0AA ABAA AAAA AABA AAAA AABA AAAA ABAA AAAB AAAA 95AA AAAA AAA5 AAAA AAAA 95AA AAAA AA5A AAAA AA95 AAAA AAA5 AAAA AAB0 0AAB 00AA C2AA AB0A AAEA AAAB AAAA 56AA AAA9 6AAA AA56 AAAA B6AA AAAA AAB6 AAAA AB55 AAA9 6AAA AD56 2AAB 6AAA AC02 AAC2 AAAD 56AA C2AA 6AAA AAAA C02A B0AA D55A A6AA AAAD 6AAA A8

2010-04-07 14:46:16 by Tom:

Your game has gained some attention in the speeddemosarchive.com forums. I posted about my 12 and the odd circumstances of the final line, and tjp7154 offered a likely explanation along with example games, and I think he's right. It's the fourth post of this page: http://speeddemosarchive.com/forum/index.php?topic=11523.15 Apparently, the game does not detect opportunities to make lines if to do so the piece has to be rotated into a small gap. Pieces usually refuse to rotate into small gaps, but if they have already been rotated 180-270 degrees beforehand (and it may only work if the piece enters the gap from the left) then they can.

2010-04-07 16:31:06 by Val:

Does the xkcd guy reads qntm? (http://xkcd.com/724/)

2010-04-07 16:31:37 by Val:

I mean, read

2010-04-07 18:08:01 by Thrack:

"Apparently, the game does not detect opportunities to make lines if to do so the piece has to be rotated into a small gap." I had been wondering if the program checked for that or not but never got a chance to really find out! (I did have an opportunity to rotate an I block into a gap once but then messed it up.) I figured it probably didn't because it would require many more checks, a lot of which would be difficult. Since its a certainty now I'll look for ways to abuse it.

2010-04-07 18:58:41 by qntm:

I've isolated the reason for that bug but solving it may be a little complex. It's *not* a simple pathfinding issue: the algorithm is capable of doing anything that you can do (in fact the AI tests input moves using the same programming interface that you use while playing live and that the replay mechanism uses). The bug is a little more complex than that. I can't fix it right now though. Bear with me.

2010-04-07 19:16:08 by Atypical:

@Tom: Nice job on getting 12. I knew it was possible because in my run everything past 6-7 was improvised and poorly done. I think 14 might be the highest possible score. The abuse that I found seems to yield the most lines with the least height, I have been looking for a way to do it more than once in one game, the way you did. About the rotation bug; I've had friends of mine attempt to revolve entire strategies around sliding a piece into a small space via rotation to no success. The only thing this does allow you to do is use pieces in an order that it would not have given you otherwise, but usually does not give you more than one line. I've been trying to find a new abuse, but the only general rule which seems to apply in every case is to never leave one less block on the end of a line (---------.). That saves a lot of frustration.

2010-04-07 20:41:27 by qntm:

Right. Start a new game and hit "rotate" four times. Note what happens to the piece. Unlike many Tetris games, the rotation process is actually mathematical; each new piece rotates around a "point of origin" which is at the junction point of four squares. The rotation is performed by fiddling with the actual coordinates of each of the four "bits" which make up the piece. Each piece actually has a point of rotation in addition to everything else. The algorithm which tests all the possible positions, actions and final resting places of each possible new piece can do anything you can do: left, right, drop, rotate. The algorithm stores a list of all of these locations and applies all possible transforms to each location in turn in order to generate a complete list. Obviously, each new location thus generated has to be compared with the whole list to make sure it is new. One of my early attempts to make the algorithm faster made it so that it only checked the locations of the four bits, not the central point of rotation. However, in the case of an S or Z piece, the point of rotation is significant. Hitting "rotate" will result in a different piece depending on which way up the piece is. In Tom's 12-point run, the algorithm moved an S piece to the same location as he did, and hit "rotate", but because the piece was the other way up, resistance was encountered and nothing happened. With the piece the other way up, which is what Tom did, the rotation is successful and a line is made. This cut for efficiency doesn't seem to save much time anyway so I've simply removed it. The algorithm now runs as normal but returns a square instead of an S at the critical point. Tom's run becomes an 11-pointer. I apologise to Tom for ruining what was briefly a record run, but I think we can all agree that the run arose from a bug in the program and we are all better for having that bug fixed. Best of luck to all of you going forward!

2010-04-07 22:39:53 by Atypical:

Beating my just wasn't meant to happen.

2010-04-07 22:40:09 by Atypical:

me*

2010-04-08 05:29:10 by Daniel:

A while ago I read about Bastet and thought of a way to improve it: Make it a two-player game. One player (currently the AI) chooses the pieces, while the other (currently the human) plays them. That way you could watch the computer play itself, or have two humans play each other. With the current method, there's only one result if the computer plays itself. I wonder what it is. If you go for the "making it look like an ordinary game of tetris" perhaps you should make it weight the pieces so it drops the same number of each piece on average, but always drops them at the worst moment.

2010-04-08 12:57:50 by Thrack:

I had that idea several days ago Daniel. I would make it (I've made a few small games by now and tetris doesn't seem too hard, in fact I've been considering it anyway for other reasons) but I've got a few other projects going on at the moment. But maybe I'll try it within a couple weeks anyway if I get time.

2010-04-09 07:53:41 by Tom:

Wow :D Congratulations on completing a fix so quickly. Obviously I agree that I only got my last line through an exploit, so I was never a rightful record holder. A guest at SDA achieved a 17, and posted the move sequence a little farther down that same page.

2010-04-09 21:13:37 by Atypical:

The same guest hit 20, very impressive. Not to mention the approach he took looks very counterintuitive at first, placing all the T blocks in such strange positions, but you can't argue with results. Great job!

2010-04-09 21:40:22 by qntm:

Okay, the 20-point run is very, very impressive. I don't know how that person came up with that strategy - which seems to be like the exact negation of every sensible Tetris strategy - but it's far too effective. I think I'm going to have to undo a little optimisation work and create a harder algorithm which looks more than one move ahead to give you bad pieces. I think I'll probably also make it try to give equal quantities of all pieces to make it less easy to predict. Ultimately, since the AI is encoded in public JavaScript, all of this is going to boil down to computing power. The question is how much time you want to spend searching all future possibilities to see what would make for a good strategy. I'm pretty sure it's possible to force you to get no lines, the question is how?

2010-04-09 22:42:46 by John:

I noticed you don't have a license on the code. Do you want people to be able to modify and distribute this game? May I suggest the MIT license?

2010-04-10 01:28:43 by anonymous:

Make a "current replay" that is always visible, and is appended to with each keypress. When pasting a replay that doesn't produce an endgame state, allow the user to continue playing the game. Allow skipping to the end of a replay. This would let people paste their opening strategy for others to continue.

2010-04-10 03:35:21 by Tom:

I bet you will succeed at making Hatetris even tougher :) but I hope you also leave the current version of the game online. It's a lot of fun just the way it is, and it's even more fun to watch the awesome work of players like Atypical and the guest at SDA.

2010-04-10 05:04:41 by Kazanir:

The game is simple and elegant as it stands. Unless someone finds a way to truly infinite-loop the game then it should stand as it is. It's a great game to introduce into an unsuspecting IRC channel.

2010-04-10 18:18:52 by Guest:

Hello, I'm the person that got 20. Sorry about finding such an effective strategy. As the AI is completely deterministic (thank you for this), and there isn't any gravity, this game of Tetris is essentially a puzzle. The strategy may appear slightly nonsensical, but there is a certain logic behind it. Firstly, forcing the AI to only give out certain kinds of pieces. It defaults to S-pieces if there are no significant differences between pieces, or if every piece can make a line (even if it might not be the most obstructive). Other pieces can be forced to spawn endlessly, as long as you can not make a line with them. (One exception, occasionally exactly 1 L or J will spawn.) Once it is possible to make a line (or several) with every piece, the game will spawn nothing but S-pieces, presumably because the AI gives up looking for the worst possible piece.(As an aside, in my opinion, this game needs more Z-pieces and O-pieces, as these are usually also quite obstructive.) Secondly, the AI has absolutely no concept of planning ahead. It does not think e.g. if I give you this piece, can I prevent you from getting a line next piece? Even something as simple as this, I believe, would make the AI much more troublesome. It also does not see if you are using the current (forced) piece to build up a solid stack of pieces. It will just give you the same piece over and over again until it is commanded to stop (i.e. you can make a line with said piece). This, however, would take much more complex AI to prevent (probably). Thirdly, as a person, I can plan ahead. I can safely leave holes in lines which I know shall never be cleared to modify the build pattern. I can build right to the top, safe in the knowledge of what pieces are coming, and that I will clear lines to bring everything down. There is no need to take a line immediately, if it will help make more lines later. I can manipulate the AI to give certain pieces and not others. As there is no randomness, every piece can be planned, and a solution can hopefully be found to this puzzle. Hopefully, this will give some insight as to why my strategy works so well. Maybe this will help you make a more difficult AI. I do ask that you keep the current version up, because it still works reasonably well, and as to not invalidate everything done so far. With regards to piece balance, maybe it would be good, maybe it would not. Just as an example, my 20-point game had 46 S-pieces, 19 T-pieces, 14 I-pieces, 1 Z-piece, and none of the others. This is not even close to an even 1/7 spread, so it certainly would change things. Sorry if this post is a complete waste of time.

2010-04-12 21:01:23 by Atypical:

Yes, that touches on a possible alternative to the AI. As I we all know there is an order of pieces which are checked, which imbalances the piece frequency (making S by far the most popular). There are some non-random methods of adding variety to the pieces it gives you; if two pieces are deemed equally as bad, if it were to simply give you the one which you have received less of up until that point, the game might be equally as difficult yet not as repetitive. This would add another dimension of planning ahead, which when fully mastered I could imagine would lead to an infinite loop of lines in a game which on the surface would still seem impossible.

2010-04-13 15:57:04 by Jiaying:

There might be a strategy to beat the algorithm. Probably playing randomly is one. My top score is 5: replay of last game: AA00 3555 5AAA AAAA A00A AAAA AAAA AAA8 AAA0 8A6A AAAA AA08 95D6 AAAA AAA9 B6AA AAAA 9B6A AAAA ABAA AAAA A2DA AAAA A57E DAAA AAAA 572A AAAA 576A AAAA EAAA AA57 0037 5A9A AAA5 D5AA AA80 14DA AAAA AA80 3DBF 076A AAAA 83B5 EAAA A0EA AAA9 7AAA A00A 9DAA 830A 9555 6ABA AA80 3AAA AAAA 808E AAAA AA02 CAAA AAA1 5400 C2AA AAA8 D5AA AA8C AAAA A365 56AA ABAA AA80 C952 AAA3 0055 5AAA A0C0 AAAA 805D 55AA AAEA AA8D 3D54 002F 5554 32AA 8C09 AAA3 555A AAC5 6AA8 02AA 92AA 0355 5002 A95A A00E A

2010-04-14 00:56:52 by ejl:

@previous post Well of course, you could play randomly, blind mountaineers/hill-climbing and all that. You just won't do very well :-)

2010-04-14 03:48:20 by my:

19: A59A AAAA AAAA A9AA AAAA A8AA AAAA ABA2 2222 AAAA AAA6 992A AAAA AB65 9A6A AA88 AAAA AAAA 9E66 A9AA A967 AAAA AAAA A9AA AAA2 22AA AAAA AAA6 AAAA AAA2 222A AAAA AAA9 68AA ABA2 222A AAAA A8AA AAAA AA96 AD6B 566A AA9A 9AAA AA88 AAAA AAAA 6B5A AAAA A6AA AAAA 22A8 AAAA AAAA A6AA 2888 8AAA AAAA 9AAA AA38 888A AAAA 8AAA AAAA 96AA AB3A AAAA AA99 ADAA AD56 AAAA 9AAA AA22 2AAA AAAA 16AA AA22 222A AAAA 9AAA AAA2 AAAB 8A22 22AA 895A AAAA 22AA AAA5 68D6 DA6A 6AAA 9AAA A222 AAAA A9AA AA22 222A AAA9 AAA8 8A6A AB02 88AA A5AA AAA2 2AAA 75AA A9AA AAA2 22AA B556 AAAA 6AA8 8888 AA6A AAA2 AAAC A222 225A AAA2 2AAD 5AA9 AAA8 82AA 9D50 3AAA 2888 8AD5 6AA6 AA8A A80A AA6A A00A AA96 AAB0 AA00 BA

2010-04-14 06:32:38 by EternalDensity:

Reminds me of this tetris-related theses http://www.iam.ubc.ca/theses/Brzustowski/brzustowski.html which of course I found via xkcd.

2010-04-14 16:33:12 by neil:

I implemented HATETRIS in RPython, and created a "player" AI based on the AI giving out the pieces. In a similar fashion, this one just iterates through every possible move, looking for the one that gives the best (lowest) height of the well. The basic version that does no lookahead (ie. just plays the best move as calculated by the piece-selection AI) does really badly, getting no lines. By looking ahead one move (piece) it manages to get one line, but probably more by luck than good planning, since looking ahead 2 moves gives no lines. Unfortunately more than 2-3 moves of lookahead rapidly becomes impractical: at the moment, my (rather slow, admittedly) laptop is churning through a 3-move-lookahead algorithm at a rate of ~3 hours/move. I'm not sure if a more efficient algorithm is possible. Given the power of existing chess AIs, it doesn't seem like it should be unsolvable; tetris is so much simpler than chess.

2010-04-15 17:05:11 by RetroBLM:

I've only managed to get 7 so far. I'm still happy with it, though. DDD9 AAAA AAAA AAA9 D5AA AAA5 5DAA AAAA A955 D55A AAA9 5DAA AA95 7555 5555 55AA A875 55AA 8032 AAAA AAAA 000C AAAA AAA8 0CAA AAAA 800C AAAA A800 32AA AA00 0CAA A800 CAAB 99AA AAAA AAAA 9DAA AAA9 A6DA AAA1 D9AA AAAA 8D99 AB66 AAAD 9A83 9369 AAAA AAAA 0AAA AAAA A8DA AAAA AAA0 D9AA AAAA EAAA AAAA 0EAA AAA8 CAAA A7CA AA8D AAAA AAEA AAAE AAA9 5DAA A800 32AA A302 9576 AB66 AA76 A8E6 AA36 A83A AAAA 8CAA AA83 AAA8 4000 0AAA 759A A76A A36A A0FA A9D5 AA76 A8DA A00A A801 6A

2010-04-16 21:59:46 by Ivenris:

22 EAAA AAAA AB0A AAAA AAAB 0AAA AAAA B00A AAAA AAA9 5AAA AAAA AAD5 6AAA AAAA 0C0A AAAA AAC0 2AAA AAAA 5AAA AAAA AB56 AAAA AAA6 AAAA AAAA D6AA AAAA AAAA AAAA AB6A AAAA AA2A AAAA AAAE AAAA AAAD 56AA AAAA A976 AAAA AA0A AAAA AAA9 6AAA AAA9 6AAA AAAC AAAA AAA8 0AAA AAAA A900 2AAA AAAA A56A AAAA AEAA AAA8 0AAA AAA6 802A AAAA AAB0 AAAA AAC2 AAAA B00A AAAA A5D6 AAAA B00A AAAA 5AAA AAAD 000A AAA9 D6AA AAA6 AAAA AD6A AAAA AAAA AB6A AAAA 2AAA AABA AAAA D56A AAA9 76AA AA0A AAAA A5AA AA5A AAA3 AAAA A02A AAAA 802A AAAA AA56 AAEA AA02 AAAA 6002 AAAA B0AA AB0A AB02 2AA9 75AA B00A A96A AAD5 AAB0 02AA 6AAA D6AA AAAB 6AA2 AAAD 56AA EAAD 5AAC 36AA A5AA CAA8 0AAA 802A AA75 6A80 AAA6 AA00 AA96 AAA8 2A80 2AA8 My eyes turned red when I was trying to beat the previous score (20) I think this is not the highest result and I hope someone could use it to achieve more! :)

2010-04-18 16:46:32 by neil:

Well, looking ahead three pieces causes my AI to get a whopping 2 lines. If anything this is interesting because it shows how much forward planning we humans do to get such high scores as 22. It also shows how much more power the computer AI has compared to the player - in order for a player to do any good, they have to be not just one step, but several steps ahead of the AI at all times.

2010-04-21 00:04:54 by Power:

I do think it is impossible to design Hatetris to prevent the player from gaining any lines. An easy way to force scoring is rather simple: build your pile to score if given any of the 7 pieces in the game. As for changes to the AI, the only thing I can think of that can't be exploited would be to random what piece is chosen to drop if there are multiple worse choices. For example, S and Z pieces are equally bad at the beginning of a game. My personal best so far has been a score of 9.

2010-04-22 19:02:45 by ReverseEngineer:

So, if I were to write an algorithm to try to beat hateris, I believe it would be a Maximinimax algorithm - find the worst choice that will result in the best worst outcome. Or is the best choice that would result in the best worst outcome?

2010-04-22 19:13:31 by T:

"Yes, the game is written entirely in JavaScript. Very few real games are amenable to this" Not quite true. There was a Lemmings port a year or two ago, and some folks at Google made Quake II run entirely in HTML5 and Javascript.

2010-04-22 19:47:50 by TheGZeus:

I also would like to see a license for the code. Theoretically this could be played offline as will as online.

2010-04-23 05:12:53 by neil:

Well, you *can* just save the webpage onto your harddisk. That's a kind of "offline" :)

2010-04-23 10:54:26 by me:

A few hints on the controls would be nice. How do you rotate the pieces?

2010-04-23 11:49:04 by gumboot:

If you find more than one candidate for the next block, you might consider breaking that tie using the _best_ candidate from the round before. This improves the chances of giving the player the block that they really wanted as soon as it's too late.

2010-04-23 23:03:09 by Chuck:

I think i know how to make the algo much more evil, and simpler to implement. Give the I the "deep drop" capability. Have it check not only positions it knows you can get to, but any spot where there's enough space for the peice to land, whether or not it's reachable. This would stop many of the abuses.

2010-04-24 20:28:16 by Kamineko:

Hey - neat idea, but could you post a guide to the keyboard controls? Or is it deliberate that you can't rotate the pieces?

2010-04-24 22:48:53 by qntm:

Uh, guys, with all due respect, if you haven't figured out that pressing Up will rotate the piece, HATETRIS is not for you.

2010-04-25 02:20:09 by dwineman:

It's absolutely possible to change the algorithm without invalidating replays: versioning. Keep the code for the old algorithm and use it just for old replays. Add a prefix to replays of new games indicating that they use the new algorithm. Now you can change the algorithm whenever you want; just remember to bump the version number each time and don't throw away the old code.

2010-04-25 20:04:13 by digarb:

My personal best is 8 lines with nice pattern: C002 AAAA AAAA CAAA AAA8 AAC9 AAAA AAAA C2AA 00AA AAAC AAAA 2AAA DAAA AA2A ACAA A2AA AC55 542A AAAA AAAC 56AA AAAA AC00 162A AAAA B000 AAAA AAFD 5550 AA90 0000 AB00 AAAA B02A AAAB 2A8A AAAE 2AAA AAEA AAAA AD6A AAAA B002 AAC2 AAAE AAAA D6AA AAAD 556A AAAA AAAD 55AA AAAA AB00 02AA C8AA AEAA AAD6 AAAA AD55 5AAA AAA9 56AA AAAA A9AA AA2A AA82 8AA9 56AA AAAA A6AA 8AAA A556 AAAA 9AAA A955 6AAA AAAA C00E C2AA A72A AAD6 AAA0 02AA 0AAA AA5A AB55 AAAA D56A FAFE 800A A0AA 4AA5 AAD5 6A

2010-04-25 20:32:10 by Kamineko:

Sam, with all due respect, if you can't be bothered to take the 30 seconds to write down a quick guide to the controls to your game, then maybe game development isn't for you. But yeah, I guess it's us who are all stoopid for not figuring out that it was the 'Up' key that rotates the pieces - because that's what it is in every other Tetris game. Oh wait...

2010-04-25 21:21:52 by qntm:

Uh, yeah, pretty much. Sixty thousand other people figured it out.

2010-04-27 22:39:42 by webmaren:

I think I have figured out a better algorithm. Instead of evaluating the board to try and minimax the height of the field, minimize the number of possible line scores. You set up an array: pieces[0] = [numLines] Then when iterating through the possible drops, increment numLines each time a complete line is made. Select all of the pieces that have the minimum number of possible line scores, and give the player a random block from that list. The only situation that forces a line should be: x x x _ _ x x x x x x x x _ x x x x x x or a horizontal flip of that. No algorithm can block a line there because every one of the pieces fits. But I doubt you'd be able to get it more than three or four times in one go.

2010-04-28 12:15:24 by Dimatra:

I got a score of 21. I copied the beginning a bit from the last ones and came up with a new tactic in the end. I wonder, if this could be improved: C00A AAAA AAAB 0AAA AAAA AAEA AAAA AAAC 00AA AAAA AB0A AAAA AAB0 0AAA AAAB D556 AAAA AAAA B556 AAAA AAA5 AAAA AAAA D5AA AAAA AA75 56AA AAAD 55AA AAAD 55AA AAB5 5AAA D56A 6AAA AAAA AB5A AAAA AAAA AAAA AAAD AAAA AAAB 5AAA AAAD 6AAA AB5A AAB5 AAAB 55AB 5AA2 AAAA AAAA BAAA AAAA 82AA AAAA AAEA AAAA BAAA ACAA AAAA AB55 AB5A AC3A AAAA AAAA 0002 AAAA AAAA D55A AD6A 0AAA AAAA AEAA CAAA AAAB 000A AAAA AA80 AAAA AAA9 D56A D6A8 000A AAAA AAA0 AAAA AABA ACAA AAA8 03AA AAAA 80AA AAAA B55A AD6A A00A AAAA AAD5 6AD6 A82A AAAA B2AA A830 AAAA A80A AAAA 802A AAAA 0AAA AB00 02AA AAAA AAC0 00AA AAAA BAAA D40A AAD5 6AAD 6AAC 02AA AA80 AAAA B55A AD6A AEAA 00AA AAAD 56AD 6ABA A02A AAA0 0AAA 80DA AB0A AC02 AAD5 6AB0 0AAD 416A 82AB A8

2010-04-29 04:43:22 by Dimatra:

23 EAAA AAAA AB0A AAAA AAAB 0AAA AAAA B00A AAAA AAAB 00AA AAAA AB00 00AA AAAA 956A AAAA AAAB 55AA AAAA A96A AAAA AAAD 69AA AAAA 9AAA AAAA AB5A AAAA AAAA AAAA AAAD AAAA AAA2 AAAA AAAA BAAA AAAA B55A AAAA AAB5 6AAA AAA8 2AAA AAAA AC6A AAAA 956A AAAA A955 56AA AAAA 556A AAAA 9556 AAAA A54A AAAA 54D6 AAA9 6AAA A5AA AA5A AA5A AAB2 AAAA AAA0 2AAA AAAA A000 AAAA AAAA 82AA AAAA A035 AAAA AAC0 2AAA AAAA 02AA AAAA A00A AAAA AAB5 5AAA AB51 AAAA D56A AB5A AAF2 AAAA AABA AAB0 0002 AAAA AAAA B2AA AAB0 5000 AAAA AA80 AAAA AA80 2AAA AAA0 AAAA AD5A AAAD 6AAB 5556 AAAA D2AA B6AA 8EAA AA03 0AAA AA80 AAAA A800 AAAA AB55 AAAD 56AA 76AA 82AA AAEA AB2A AB00 AAAA 80AA AAB7 00AA AAB5 50AA AB55 AAAD 56AB 5AAB AA80 AAA6 C02A AAD6 ABAA 02AA A00D 5556 A802 AAAD 6ABA A036 AA83 AA0C 0AAA AAAB 00AA B55A AE8

2010-04-29 16:58:24 by Tom:

@ Dimatra, Ivenris, and of course the SDA guest: All I can say is wow :) I hadn't checked back for a while. I really expected the 20 to still be the world record, but three different people have pushed the game even farther. Good luck at creating the true Hatetris II! (the one that never allows a single line) The advancements you have made sound exciting. I have no objection to receiving a disproportionately large number of S and reverse S pieces myself :)

2010-04-30 15:57:22 by CS:

based on the 28, this run gets 29: 56AA AAAA AABA AAAA AAAA C2AA AAAA AAC2 AAAA AAB0 0AAA AAAA AB00 2AAA AAAB 00AA AAAA AB55 AAAA AAA9 6AAA AAAA AD5A AAAA AAAA AAA9 AAAB 5AAA AAAA AAAA AAAA ADAA AAAA AB55 AAAA AAAD 6AAA AA8A AAAA AAAB AAAA AAAB 56AA AAAA AAAA A82A AAAA B00A AAAA A95E AB55 AAAA AAA6 AAAA A9AA AAAB 55AA AAAE AAAB 56AA AAA5 AAAA B00A AAAA A996 FC02 AAAA AA9A EFC0 2AAA AAAA EB00 AAAA AAA8 0AAA AAAA A0AA AAAA B2AA AAAC 02AA AAAA B6AA AAAB D56A AAAA BF56 AAAA AD56 AAAA F2AA AAAA AAAB F00A AAAA 9AEF C02A AAAA BAC0 2AAA AA9A AAAA A6AA AAAE AAAB 6AAA B5AA AAD5 6AAA AD5A AAAA 02AA AAA8 2AAA AACA AAAC 02AA AAAF 59AA AAAA B55A AAF5 AA95 AA8A ABC0 AAA5 BF00 AAAA 6BBF 00AA AABA C02A AAAF C0AA AAE0 02AA AA56 AAAB AAAB 0AAA B0AA B00A AAB0 0AAB 55AA 96AA AC00 AAB5 6AA6 AAAD 6AAA AAB6 AA2A AAEA AD56 AAD5 AA0A AA95 AACA A80A AA80 2AAA 0356 A80A AA00 AA82 AB6A B56A AD56 ABC0 2A97 0D5A AC01 5557 0001 5557 0A

2010-04-30 16:16:13 by Yan:

Yeah. Seems the 28 runner missed the very last possible line.

2010-04-30 17:32:34 by Guest:

Okay, point of order. Not to discredit anyone (or sound like a sore loser), but I must point out that the algorithm has been tweaked (presumably for speed, the game is running faster). You see, the last piece in my replay was originally an L-piece, which either doesn't make a line, or ends the game. It has changed into a S-piece, which makes a line safely, however it is rotated incorrectly. CS's replay rotates this new S-piece correctly, and makes a line. The problem is, this S-piece is not the worst piece, and not what I was originally given. I am not sure why this is. Maybe it now doesn't realize that making a line with an L-piece will go too high and end the game (before the line is counted), therefore not making a line. The point is that something broke, allowing an extra line, which previously did not (and presumably should not) exist. Sorry, but I'm calling a technical foul on this, and I feel this needs to be addressed.

2010-04-30 23:10:10 by qntm:

Thanks for the heads-up. Yes, I've incorporated some substantial changes to the algorithm (originating from my efforts to create Hard mode - no luck so far) which make the algorithm much more efficient. I had hoped that these changes would not alter the original behaviour of the algorithm but it looks like a small alteration has snuck in. When HATETRIS was first released several people complained that the game registers a "piece above the bar" BEFORE it begins calculating "lines that you have made" whereas supposedly traditional Tetris behaves in the opposite manner: it doesn't matter if the tower goes above the bar as long as, in doing so, the user makes a line which instantly moves the tower back below the bar afterwards. While optimising HATETRIS I altered this behaviour (it also makes the algorithm fractionally faster) but in uploading these alterations it looks like I forgot to alter the behaviour back to the norm again. I've uploaded a version of HATETRIS which should resolve this problem (while invalidating the 29-point run). Apologies for this false positive, and thank you very much for catching it. I think we can all agree that everybody benefits when the game behaves consistently.

2010-05-01 06:56:28 by CS:

It did seam a little odd to me that the one extra line was missed! My incremental minor improvement stand invalidated, but I take full credit for finding the bug.

2010-05-01 13:31:39 by Guest:

Sorry to waste more time, but I think I found two more broken things. First, I think I was wrong in my thoughts as to the cause of the previous bug. Although that may have needed to be fixed, it may not have been the root cause. I now think that the algorithm is not checking what piece gives the highest peak correctly. Two (incomplete) replays: 56AA AAAA AA9A AAAA AAAA 2AAA AAAA A802 AAAA AAAA B2AA AAA2 AACA AAAA AA95 AAAA AAAA 6AAA AAAA BAAA AAAA F59A AAAA ABD6 AAAA AAD5 6AAA AAA0 0AAA A9AA 6 5AAA AAAA AA0A AAAA AAAA When the first replay ends, it gives an S-piece. I believe that this differs from what would previously happen, which is to give an L-piece. When making the line, the L-piece's peak is 1 block higher (two above where the line is made, and one above the rest of the stack) than any other piece (the S and O-pieces are even with the rest of the stack, and the Z, I, J and T pieces all make two lines). If you place the L-piece elsewhere (ie. don't make the line), the stack height becomes high enough for the piece not to matter when making a line, because an L-piece won't surpass the rest of the stack. The game therefore does not give you a second L-piece, and I believe this is what originally happened. In the second replay, two S-pieces are placed oddly. The game gives a third S-piece, even though it does not yield the highest peak. It can go on the far left, even with the rest of the S-pieces. What the game is supposed to give you is a Z-piece, as it (and I and J-pieces, but the priority is to Z-pieces) gives you a peak one higher than the rest of the stack. This is inconsistent with the previous algorithm, and potentially breaks some replays. I also found a minor bug involving the replays. Play this: DAAA AAAA AAAE AAAA AAAA AAAA AADA BAAA CA8 (the shortest possible game, 69 inputs), and then observe the replay that the game gives you (and note it does not end in 8). The replay is one input short, and if you play it, the game won't end. Maybe this is because of an odd number of inputs, and the last character not being padded with a zero-input (which happens to be left, but the game is already over). Feel free to ignore this if any of it is wrong, or I'm just imagining things. Thank you for reading this, and good luck on making a hard-mode of this game. ps. I don't care who gets the credit for finding bugs, as long as they get fixed.

2010-05-03 19:31:03 by sone:

I want to play Internet Explorer. Please add it here. function inputKey(e) { var transformId = null; e = e || window.event; // add for IE switch(e.keyCode) { function startReplay() { // user inputs replay string var string = prompt() || ""; // change for IE

2010-05-03 21:13:13 by qntm:

I don't have Internet Explorer to test those fixes in, but I've confirmed the game still works in Firefox after those changes are made, so I'm uploading a new version with the changes added and good luck to you all.

2010-05-03 21:32:05 by qntm:

Guest: You're correct, I modified the algorithm to test for lines made rather than the height of the tower left over afterwards. This was closer to the spirit of "the hardest possible Tetris" but evidently it results in some slight changes to piece choice. If it's possible to get a line with *every* possible piece, then it may turn out that an S will sit relatively flush with the ground, while an L or a J will poke up in the air. If "number of lines" is the deciding factor, then an S will appear, since it's at the top of the list i.e. it's the least desirable piece for general purposes. If "height" is the deciding factor, then an L will be given instead since this is marginally less preferable. In most other cases, of course, both algorithms will result in the same piece being generated. I don't *believe* that there is any situation where it turns out that giving the user a line will result in a higher tower than any other possibility, so I will see what I can do about reverting this change.

2010-05-03 22:23:03 by qntm:

I believe the latest update of HATETRIS will fix the replay bug. Apologies for this oversight: because each hexadecimal character encodes not one but two keystrokes, there is a small issue which arises when a game takes only an odd number of keystrokes to complete.

2010-05-03 22:42:13 by hasi:

line 170: > ints.push(hashCode(thisPiece.x, thisPiece.y, thisPiece.o)); Is this the intent? I think this statement means ints[0] = hashCode

2010-05-03 23:25:03 by qntm:

Actually both of those lines would be functionally equivalent and wrong. It should have been "ints[hashCode()] = 1". Cheers

2010-05-04 01:36:24 by sone:

I was able to enjoy this game by Internet Explorer. Thanks a lot!

2010-05-04 04:20:17 by masuidrive:

Thank you for cool game! I made iPhone safari version Hatetris. I add thin iPhone safari wrapper to your code. Can I publish modified Hatetris to my blog?

2010-05-04 09:52:49 by qntm:

Um, no. The game works fine in Safari. iPhone users can just visit the site.

2010-05-04 10:33:55 by masuidrive:

Really? how do I move cursor?

2010-05-04 17:02:47 by SlashdotJP:

30 lines ! http://slashdot.jp/comments.pl?sid=493607&cid=1758529

2010-05-05 11:50:48 by archmond:

wow... funny ;)

2010-05-05 22:51:13 by T:

Keyboard does not repeat, making the "dropping" of pieces a bit tiresome... Opera 9.64. Linux.

2010-05-06 00:54:22 by CS:

The iPhone and iPod Touch lack a keyboard which makes nearly impossible to play. I have tried it on both Safari and Opera Mini on the iPod Touch.

2010-05-06 02:48:21 by T:

Ok, just tried writing a program for playing this. I manage a search depth of 4-5 pieces (trying all rotations and placements of all pieces, using minimax with alpha beta pruning). That is not good enough: it manages to eliminate only 4 rows. Considering this was a 3h hack (from scratch) there might be several tunings left to do for achieving deeper search depths. Also my evaluation function can probably be tweaked some more, both regarding speed and evaluation quality. (I use 4096*eliminated_lines - sum_i column_height[i]^2 ) Another time. //Tapani

2010-05-06 10:06:03 by qntm:

The fact that the keydown event doesn't repeat in Opera seems to be a known issue in Opera: http://www.quirksmode.org/dom/events/index.html#t09 If anybody has the faintest idea how to resolve this I would very much like to know!

2010-05-06 12:52:12 by T:

Sam, about keyboard repeat in Opera -- I found some link suggesting using the keypress event instead of keydown. http://www.webdeveloper.com/forum/showthread.php?t=205426 I am not a web developer, so I don't know if that is helpful here. Maybe add a key (that generates an ascii code) for just dropping (e.g. space), since that is where repeating is the most useful? //Tapani

2010-05-06 21:35:06 by qntm:

All of this is only increasing my irritation at the current state of JavaScript. Opera's failure to repeat the onkeydown event when a key is held down is Opera's problem, not mine. However, "move to a different browser" always enrages me when proffered as a solution to any kind of browser issue, so I won't rehearse it myself, and instead hunt for an alternate solution. Onkeypress is blatantly the wrong solution because that isn't what the onkeypress event is for ('tis for entering data, not inputting control keys). While I have verified that HATETRIS works in Safari it hadn't occurred to me that iPhones have nothing resembling a sensible keyboard and I don't own one myself so it took me a little while to find out that iPhone games are usually set up so that portions of the screen function like keyboard controls when tapped. With this in mind I've added four touch-sensitive areas at the top left of the playing field which can be used as controls if you do not have an actual keyboard to hand. This solution has the same problem as the Opera problem, namely that holding down your finger on the button doesn't repeat the input, so to move the piece to the bottom means you have to hold the button down for a while. However, I'm hoping that there will be a harmonious solution to both problems whereby onkeydown starts a repeating loop of inputs and onkeyup halts that loop - the only remaining task is for me to think about it for a while and then implement it. Continued...

2010-05-06 21:59:16 by qntm:

Ugh, I got someone to try the new controls on their iPhone and apparently the buttons are far too close together to be usable. I can't easily enlarge the buttons since they're tied to the game grid. Evidently adapting this game for the iPhone is going to be much more complex than I imagined. Suddenly I understand that the iPhone is clearly a platform that hates developers and wants them to suffer and I've only been trying to develop for it for about two hours. Make your own entertainment, I guess.

2010-05-07 06:54:00 by T:

Ok, I tried Firefox instead of Opera. It doesn't work there either. (linux, FF 3.0.10). I googled a bit, and found for instance this thread about it: http://stackoverflow.com/questions/1900117/how-can-i-get-auto-repeated-keydown-events-in-firefox-when-arrow-keys-are-held-do Recommended workaround is ... to use keypress. =/ //Tapani

2010-05-07 18:19:30 by Luke:

It seems broken. If you follow the strategy from the 30 line high score, the S piece that makes your first line seems like not the most inconvenient shape. Wouldn't a backwards L piece be less useful at that point?

2010-05-07 18:46:44 by qntm:

Not according to the algorithm. Both a J and an S piece would give you a line at that point. All things being equal, then, the AI will give you an S rather than anything else. It would be possible to vary the piece which is supplied but I think this actually makes it easier.

2010-05-10 13:29:18 by bshnet:

D555 57AA AAAA AAA6 AAAA AAAA 8AAA AAAA AA02 AAAA AAAA 8C00 002A AAAA AAA9 5555 AAAA AAAA AAC0 000D DC00 003F FBAA AAA0 AAAA AA80 0002 AAAA A9AA B1AA AAAA AB03 6AAA AAAB 2AAA AAA5 555A AAAA AB6A AAAA A02A AAAA B400 0F76 1555 57CE AAAA AD4E AAAA ACC0 02AA AAAD CAAA AA56 AAAA A5AA AA01 AAAA B000 00AA AAAF 5AAA 80AA AA2A AA55 556A AA6A A805 4000 0AAA 9555 DC1D 6AAC 35D6 AA2A A002 AB55 5700 2AB5 556A

2010-05-10 14:14:44 by qntm:

why would you post a replay in which you got 0 lines

2010-05-19 03:23:13 by Steve:

Your replay function is broken, I got four lines, but when I put in the replay number, it came out as a complete fail. (The piece progression wasn't even logical and after it finished, the replay code was something completely different.)

2010-05-19 08:08:40 by qntm:

Would you care to post the replay in question?

2010-06-01 00:19:48 by Hobbes:

003A AAAA AAAA A300 0AAA AAAA 3000 0AAA AAA0 39AA AAAA AAB4 0AAA AAAA AEAA AAAA AA5D 5AAE AAAA AA77 6AAA AAAA B555 5AAA AAAA 99AA AAAA A4CB 9AAA AA95 51AA AAAA AA5A AAAA AA80 C6DA AAAA A3B6 AAAA A955 526A AAAA A840 2AAA AAA5 AAAA A30D DAAA AB2A 27DC 0000 0AAA AAAB 98AA AAB2 8AAA A720 0AAA AA0B 82AA CAAA 8A7A AA8A A6EA C2C0 A6C5 2A82 9A70 2AAA 7002 A9BA A6AA AAA5 E9DB 6AAA 971A AA75 DAAA AAAC 6AAA 5F26 AAA9 77C0 0015 AAAA DD56 AAAA 4C2A AA50 00AA AA6B C45A A57C 5AAA AABB A52A A975 AAA9 C0AA 700A A756 CAA9 8AA8 6D5A A756 A85A A0B6 A005 5400 BF7C AA I got 8... Its ok. i guess.

2010-10-12 10:12:52 by bottleHeD:

I got 5 on my second run - replay of last game: C000 2AAA AAAA AAAB 01AA AAAA B1AA AAAA AAD6 AAAA AAAA AC00 0000 AAAA AAB0 0AAA AAAA AB02 AAAA AC2A AAAA AAB2 AAAA AAEA AAAA AAD5 5556 AAAA AAAA AAAB 5AAA AB75 556A AAAA AAA9 AAAA AAAF EAAA AA95 556A AAAA AAAA C02A AAAB 0AAA AAAA AAAA AAB0 2AAA AAB0 0000 0AAA AAB0 000A AAAB 0000 2AAA C000 0AAB 2AAA AA95 B035 556A AAAA ADAA AAAF 2AAA AB55 56AA AAAB 5555 AAAA A9AA AAB5 5556 AAAA A5EA AAD5 55AA AB5A AAB5 556A AD6A A2AA AA0A AAAA EAAA 0AA0 2AAD 5555 AAAD 6B1A A001 2AB0 A

2010-10-12 10:18:52 by bottleHeD:

Great, 7 now - C000 AAAA AAAA B000 2AAA AAAA C000 AAAA AAB0 002A AAAA AB00 00AA AB00 00AA AC00 02AA C2AA AAAA AAC0 6AAA AAAA B0AA AAAA C2AA AAAC 2AAA AB0A AAB0 AAEA AAAA AAAE AAAA AAAE AAAA AAEA AAAB AEAA ABAA ABAA 96EA AAAA AAB5 AAAA AAA9 D542 AAAA AAD6 AAAA AD6A AAAD 556A AAAA AAA7 56AA AAAA AD9A AAAC 0000 AAB0 AABA A96B AA97 556A AAAA A759 AAAA AC00 00AA 83AA BAAB 5AAA B55A AAA9 5AAA A6AA A031 AAA5 6AAA CAA9 AAA5 D5AA A000 02AA EA97 56AB 4056 A

2010-10-20 23:26:48 by dtanders:

I used to hate JavaScript, too, until I realized that it's not really a problem with the language but with the (stupidly inconsistent) browser implementations of it and (more so) the DOM, which is just horrible. Try doing something with node.js. When you can evaluate JS without browser bugs it becomes a lot nicer. Oh and as someone who has had to do some iToy development, I understand your pain.

2010-11-15 23:56:34 by trophymursky:

just curious, have you ever thought of instead of maximizing the height, maximizing the height for pieces you can't clear lines for, like its essentially minimizing the lines and then maximizing the height is a tiebreaker.

2011-02-04 09:55:21 by Rick:

Here's a bug, a line made close to the top is not cleared and the game ends because of that. replay of last game: EEAA A02A AAAB EAAA AAA8 AAA9 AAA8 AA95 5AAA AAA0 8229 6AA5 6AAA A00A 95AA AAAA A80A 55AA AAAA AA0A A5A5 AAAB 5EA0 9956 B5AA AAAA A800 2AAA AAAD 5056 AAAA AA80 35AA 54CA AAA0 0AAA AAAA B54A AAAA 8DC0 AAAA AAB0 B26D 5556 AAAA AA2A 0AAA 8D4A AB5A AAAB 156A AAA8 02AA AA8C AAAB 5AA0 AAB5 A2AA 754A AA85 D56A A0BA A80C 2AAA 00EA AB2A A80A A955 6A05 AAAB 7DFF C002 A8AA 5EAA A556 B5AA

2011-02-04 11:06:20 by qntm:

You went above the red line, that means you died. That's deliberate. If you go above the red line, even for an instant, you're dead.

2011-02-07 10:11:55 by Rick:

Well if the line was removed (since it was filled) then I would not be above the red line...

2011-02-07 16:04:23 by qntm:

Too bad you died before that could happen!

2011-02-09 11:06:43 by Rick:

What I mean is, in normal tetris, that would not be a death as total height after clearing the line would not be over the red line. I played SO many versions since the early 80's and this always worked. Therefore, I still call it a bug :-) Nonetheless, I really liked your idea of a bastard tetris :-) Take care, Rick

2011-03-29 20:25:44 by HydraBurrito:

Infinite loop possible. Here is 50 lines: A002 AAAA AAAA AAAA A2AA 826A AAAA AA88 9600 0C0A AAAA AAAA A815 556A AAB2 8302 AAAA AAC0 02AA AA02 CAAA AAAA C02A AAAA C22A AAAA AAC2 AAAA AAB2 AAAA AAAE AAAA AAB5 05AA AAAA A2AA AAAA AB6A AA36 A86A 8C9A AAA8 3AAA AAAC 0AAA AC15 555A AAAA AAAA AC02 AAA3 002A 0CAB 5556 CEAA AB75 AAAA A56A AAAA AA34 92AA 8CAA AAA0 CAAA AAC1 5C03 1AAA 971D 6AAA AA95 AAAA AAEA AAAA D75A AAA9 5AAA AAAB 2AAA AAB0 AAA8 32AA AA80 302A AAAC 02AA B02A A8CA AAC1 AAA5 6AAA AAAE AAAA 56AA AAAA 56AA AAA9 5AAA AAA5 56AA AAAC 0002 AAAA 032A AAC0 AAAB 0AAA B2AA AC00 AA9C AAAA 956A AAAA A955 AAAA A955 AAAA A955 AAAA AA95 550E 2AAA 00C2 AA03 2AAA B02A AAC2 AAAC AAAB AA95 AAAA A665 56AA AAA9 556A AAAA AA55 AAAA A55A AAAA AB00 002A AAB0 0AAB 00AA B02A AAB0 AAAA CAAA A56A AAAA A95A AAAA 9556 AAAA AAEA AA8C 02A8 32AA AC2A AACA AABA A95A AAAA 995A AAAA AA56 AAAA A56A AAAA 56AA AAAA 032A AAB0 2AAA B000 02AA B00A AB0A AABB 2AAA BAAA 56AA AAAB 02AA C2AA CAA6 56AA AAAA 56AA AAAA 5555 AAAA AA56 AAAA A95A AAAA AF56 AAAA B002 AAAA AC02 AAAC 00AB 02AA AC2A AACA AAB1 AAAA B4AA 95AA AAAA 56AA AAA6 56AA AAAA 56AA AAA9 5AAA AAAC 00AA B00A AAAB 00AA AAC0 AAB0 AAAA CAAA AEAA A56A AAAA A56A AAA9 5AAA AAA9 5AAA AAA5 A6AA AAA4 0CAA AB0A AAAB 2AAA A55A AAAA AA56 AAAA 95AA AAAA A953 0F6A AABA AAAB A

2011-03-29 21:25:19 by qntm:

Sorry folks, that was a bug. I accidentally uploaded a version of HATETRIS where the order of piece preference was S O I Z L J T when it should obviously have been S Z O I L J T. Well spotted though.

2011-04-20 02:21:32 by FinalOne:

I just tied the 30 lines guy!!! to see my code watch my youtube video of it first! http://www.youtube.com/watch?v=EIBqEUvvDi0

2011-04-20 09:23:43 by qntm:

Sorry, you get no points for memorising another player's replay.

2011-04-22 04:43:19 by wallawalla:

C000 2AAA AAAA AAB0 0AAA AAAC 02AA AAAA AAC2 AAAA AAAC 2AAA AAAA EAAA AAAA A95A AAAA AAAA 9D5A AAAA AAA5 AAAA AAA9 D6AA AAAA A9AA AAAA B5AA AAAA AA89 AAAA AAAA 9EAA AAAA AA2A AAAA ABAA AAAA AAD5 5540 1555 56AA AAAB 56AA AAAA 88AA AAAA AAE2 AAAA AA82 2AAA AAAA 802A AAAA AAAA AAAB 00AA AAAC 2AAA AAAC 02AA AAAA A8CA AAAA AC02 AAAA AB0A AAAA BAAA AAAB 00AA AAA7 1402 AAAB AAAA AAB5 AAAA AAA5 D6AA AAAA A700 2AAA B22A AA72 AAAA A9DA AAAA AA56 AAAA A9AA AAA9 56AA AAAA 2AAA A9AA AAAA 55AA AAAA 802A AAA0 AAAA 4AAA A96A AAAA 7D5A AAAA 96AA 8C0A AAAA C2AA 8C0A AA47 5707 5000 02AA 32AA BAAB 755A EAAA AAAA 5C02 9756 A56A 8A9A 0AAC 2

2012-04-22 10:25:04 by Robert:

Would you please add the piece chosen by the AI to the replay string so that the replay program doesn't even have to have an AI, let alone the same AI. NB: You don't need to add the size of the play area too as that's implicit in the moves made, but a run length encoding of the moves would be good. This way either you or anyone could modify the AI and replays can still be shared. You'd need to keep a copy of the present AI to translate the present recordings, but that's not really difficult. Oh, and don't forget to leave space for unknown pieces, of course, the playback would have to use different coloured pacman squares or something, unless you included the piece shapes (non standard only?) in the recording too.

2012-04-22 10:31:32 by qntm:

Run-length encoding is a good idea, maybe for the next version of HATETRIS. But I can't include the piece ID in the replays, because then a player could very easily manually modify the replay string to provide easier pieces. I don't know what you mean by "unknown pieces", there are only seven possible pieces.

2012-04-22 12:26:50 by Robert:

Of course the user could manually change the string; but what would be the point, running it side by side with the current AI would immediately label them as either a dishonest cheater or running an old version, which one is proven by asking what version they're running. It's exactly the same with the current file, there's nothing to stop anyone creating any string they like, but compare it against the current AI and it all falls apart. The only difference is that you can change what "current" means with the new one. The unknown pieces was in response to this "You can also put custom pieces in the list at the top, including pieces of more or fewer than 4 "bits" (components)". Again a different set of pieces potentially allows for an even more evil game; of course you have to decide if it's actually fair to have a different piece set. Perhaps only if the piece set is is some way 'easier' for the player.

2012-06-10 17:37:59 by Muzozavr:

This is evil and genius. Got 2 lines, and can't get anything more than that. Maybe HATETRIS II is possible, but the current HATETRIS is amazing as a puzzle game. It doesn't even feel like Tetris anymore, it feels more like one of those multi-state maze puzzles. Only one thing I'd like to see added is a little bit from the original Linux version of bastet (which I've seen on YouTube) which actually calculates the MOST desirable piece and then shows it to you in a "next block" area, but instead of "next block" it says "won't give you this one!". I thought that was funny. HATETRIS is totally the least forgiving implementation of the "most useless pieces" idea I've ever seen. Thank you.

2012-06-19 18:41:42 by Muzozavr:

Personal best is now 8 lines. It's a set of loopable actions that allow you to keep making lines in the same way, even though it keeps getting higher and eventually you lose. A88A AAAA AAA6 9AAA 8AAA 2A69 2AAA AAA9 999A A9D9 AAAE 2A65 9D9A AAAA 8A8A 8AAA AAB6 7AAA AAAA 2222 AAAA AAB5 99AA AAAA 2AAA AAAA 882D 6955 9AA8 6AAD AAAA AA22 AAAA AAA2 222A AAAA B6A6 AAAA AA55 D6AA AAB6 9AAA AA2A AAAA A222 AAAA A888 A2AA AAD9 99AA AAA7 6AAA A8AA AAAA 2A2A AAA8 888A AAAE 6666 AAAD A6AA A2AA AAA2 22AA AA2F A6AA 8888 8AAA D56A AAAD A6AA A8AA AA22 2AAA B55A AA79 AAA2 2222 AB55 AAA9 DAA8 AAAA 22AA 8882 AAD5 6AAD 6AA2 AA82 2AAF AA00 AAB5 5AA7 6A8A A02A B00F 7AA Seems you need to approach this thing in a completely non-Tetris way. The order of operations really matters.

2012-08-14 11:20:15 by Robin:

Would be very nice if you could add the actual feature of tetris that you can see the next block coming up. That way you could really position your block strategically (would significantly add to the difficulty of the AI I guess

2012-11-05 14:38:09 by Muzozavr:

What's the point? It's HATETRIS. It hates you. It doesn't want you to plan things out. If there's anything new I would want to see is a feature that is the complete OPPOSITE -- it shows you the best block and says "won't give you this one!" I've seen that in a few versions of Bastet and it gives you *some* information while staying hateful to the player and funny as hell. Oh, and if the bug that forces Opera users to TAP the button every single time instead of just holding it like in Firefox... that'd be nice.

2013-01-16 03:57:24 by MK:

It doesn't know what block it's going to give you until you place your current block, making either of the preceeding suggestions impossible. Though, to tweak the latter idea, maybe it could be a "don't you wish you had this piece?" feature for your current round.

2013-12-01 04:58:32 by QuillMcGee:

Hmm, I can't actually find what number I have to change to increase the search depth. There's the searchDepth thing, but that isn't actually called anywhere. There's the thisSearchDepth, but I don't see where that's defined. Any help?

2014-02-04 05:08:12 by Quelthias:

I wonder if it is possible to invent an AI to play this game. Think of it as a test for the least possible amount of points that can be generated.

2014-12-02 17:20:54 by Piotr:

Has anyone made higher than 30?

2015-09-18 05:31:04 by Ben Goldberg:

QuillMcGee, to play a game with increased search depth, click the "show a replay" button, and put in "#" (without quotes) in the text field, then click "ok".

2015-09-18 06:00:31 by Ben Goldberg:

Sam, for the next version of Hatetris, you might want to consider speeding up how the game looks ahead using something called a 'transposition table'. Suppose from a given starting position, it's possible to move a piece down, then left, OR, they could move it left then down. Either of these routes produces the same result position. If you calculate that result twice, once for each way it can be reached, you are doing twice as much work than you need to. If there are 10 ways to reach a position, you are doing 10x as much work as you need to! To put it another way, if you memoize either worstPieceRating or bestWellRating, you'll save lots of time. The cache table would be a third argument to worstPieceRating, a fourth argument to bestWellRating, and would be created within worstPiece. Another (much simpler) thing you might want to consider for a future version of the game, is alternate between "S" and "Z" pieces, if the computer thinks that they are equally bad for the player.

2016-03-07 17:01:25 by vaiyt:

The reason the game keeps giving everyone long strings of S and Z pieces is because, well, having a long enough string of S/Z pieces makes the game unwinnable. It's natural that a Tetris game that wants you to lose ends up giving you lots of those.

2016-04-26 15:17:11 by saladin_the_great:

Wow! :) Nice game, bro! I managed to get like 5 at least! Thanks! :) - peace be upon him

2016-06-17 14:26:30 by Dwscdv3:

I'll recommend it to my friends :)

2016-08-01 07:36:20 by Jared:

If you are going to make another version or HATETRIS you should consider a feature that is in most Tetris games called the bag. It is 14 pieces or 2 sets of tetriminos (tetris pieces) which are chosen from until and removed from the bag until the bag is empty or designed so you don't get more than 4 s and z pieces in a row. This would give the player a small chance to do well and false hope. I think it would really cool to see that added and possible a bank and the ability to see the next piece.

2017-02-25 07:11:20 by Piotr Grochowski:

The purpose of HATETRIS is to give the absolute worst piece. Your idea has been done here: http://ondras.github.io/custom-tetris though it has some extra pieces.

2017-06-06 23:46:30 by @chromeyhex:

31: 𤂻愈䲻㰋𣻋㼘𤇀𠞻𤇋傜𣾻𤇋𤆦𠪵𤃄遈肼𡮻𤆻絈𤇄𤆴𥆹𤅛𤆻𤺸𤅋𤄋𥆺𠞻𤆻𥆐𠪻𠪄𤇄𣺁𤄋𡪄郈𢪻𤇄㲸㰈𤄋𤊁𤂻𤄜𡪼𣢻𡊀𣺻丘𤇋𤩘𣾻𥄈𠪻𤃋㰈𤀛蹌𤅋𤄋𡚡𤇋𤀜緊𣥋𤆜𤆁𠲼綹𥅘𣹋䰉𣼋蹊𤽋𤅋𤆌𤆰𡚡䲻𤇂𤆤𡪥𣚻𣢻𠮤𤺸𤅋𤂄𡘜羹𤇆㾸㶹𤀌𢙛𡞐𤆌㶺𥄩𡮴㺻𣣋𤃋𣛋𥆀𤺦ꉊ𣛄𠚀𠚜𤆀职𢊻徻蹈𢫄𣾻𤄌𤛋𡛁𡫋羌𡏋㼈𢢌𢢬𥂐𡫅𣪄𡊤肻𣊐㼸𢪠𢪄䂸𡪄趜𥀩𡙋𢢀𡊀𣺆㼩𤂄𡫇𡪴䲹𥄉𨂀

2017-06-07 00:20:52 by qntm:

Nice work! That record stood for more than seven years!

2017-06-07 01:13:20 by qntm:

Also the new record replay is 154 characters long, so it won't fit in a Tweet anymore, even with Base65536! I may have to just secretly admit that the real solution is to put the replay in a URL and entrust the data to t.co :-/

2017-07-23 14:43:03 by mina:

𤄫𥆹𣺻𤅛𤶹𤅛肼𤊻𤅛𤆣𡊻𤅵𤞺𣺻𥙩𣊻𡈫𤄛䢼邇𤪻𣺻𤇀𤦺𤇋暬𣊻𤅫肁𢊻𤁫𤄛庌𤇐𤆬𡪤𤇁𤇅袬𤄲𓎬𤮺𡊻𤄤𤆢𤆁郇膬𣈻𣍛𤁀𤟀𤷐𢉻𢉛𤭻𣾰𡤫𦆸𣮃ᗊ

2018-08-14 10:42:49 by tigerninjaman:

Hey qntm, there seems to be a small bug - it looks like it's checking for over the red line before it clears lines. I just ran into this, thinking i would clear a line and free up some space but instead losing.

2018-08-14 11:00:03 by qntm:

That's intentional. Sorry for your loss.

2019-01-03 07:16:30 by Noumenon72:

All that reading and then clicking on the link gave me nothing but S blocks no matter what I did.

2019-01-08 07:58:58 by Spain_programer_player:

௨ටຜݹ௧੬ତݹಕق೯কޚถഫݪݣටȤଙ௩ѮໄཥಎՕܘݷΖටऐݹஓقໃݎߜටՀݹஓىІٽयටՀݷಒദໃʥடටಸݹ୦లໃܥಈಛໂݹதػЅחळكʑԓଚඖܓݹஓقӿԃસජϨԒϡʈദɒɳඪฮ - ok. nice. some games with 0, now, after read all of yours coments... i do "9"... interesting game... i think that a IA can do better that me, ... with strategy similar chess IA, of google, ALPHA-ZERO... motecarlo neural red. regards from spain.

2019-01-08 08:24:20 by spain_programer_player:

continue... in some games IA give me, S, L, I and squares... i think that i was doing good if IA change the pieces, but I have not dedicate enough time to optimice this changes of piezes. I see some records of youtube and I don´t undestarnd why in some records IA give a model of pieces that permit do a line in the next move, is rare... squares are more problematic in some moments... --- continue in the next entry for end...

2019-01-08 08:25:09 by spain_programer_player:

traductor google, sorry for my english. spanish a little better... From the point of view of a programmer and a chess player, I think the AI ​​part of a initial conceptual error from the beginning; it is not their fault, but the human mind, similar to what has happened to chess , with others engines diferents to alphazero, that has been a revolution, this has allowed that through neural networks, WITHOUT ALGORITHM influenced by humans, without chosen openings, the AI, discovered, after several thousands or hundreds of thousands of games, the best possible openings, only need some days with a lot of powers of cpu and TPUs, literally crushing other well-known engines. In this game, all of you start from the base that the worst possible piece is an S at the beginning ¿? Sure ?, seems to be what dictates the intuition, but this might not be true if then it will continue to give many S , so that certain pyramids can be created in some areas of the game. I do not say that the 20 or 30 record is incorrect, it is of great ability, but I think we can not be certain that the AI ​​is not "influenced" by the initial pattern of the programmer; to avoid this, we should play an AI, against another AI, so that it stores the results and changes its strategy, as it is a very deterministic algorithm, is very possible that after a few hundred games, little time computationally speaking discover, at least the human record, and should get a good result. The best possible result? . NO, we are not talking about going through all the tree of possible plays-moves, that are very long branches, but that the AI ​​itself, discarding or choosing "the best" possible openings, depending on whether it is winning or losing game, for initial instructions, lose game is give 29 points of more lower, becuase we know now that it is posible 30 lines... (this is only for initial used, after this, lose game is a number of lines more smaller that the better records of IA or HUMAN.) , there is REALLY no to program any pattern or selection in the second AI, IA1 versus IA2, just let it play and write down the results, discarding or changing plays depending if it reaches 30 or does not reach 30, once the AI ​​has reached 30 , WE as humans, we will not know if the AI ​​can go further, on its own ... it is complex to explain, but I advise those interested to go to the articles on alphazero, google AI to know what I mean ... The bottom line is to establish a success pattern, based on thousands of games ... or at least to imitate the current human record. About the entertaining program, although I believe that "there are initial conditions chosen by the programmer," which may have weakened the AI ​​... it is inevitable, some must be put to start ... a way to see if this is the case because the same programmer recognized making few combinations or lines, then indicates that his knowledge of the puzzle is limited, as well as the programmers of chess engines, who are rarely great game masters, therefore, their initial indications could be "contraindicated" "for a perfect defensive game on the part of the AI. Greetings.

2019-06-20 08:34:42 by PiotrGrochowski:

I can survive indefinitely, here is a replay: ၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕ

2019-06-20 08:40:45 by PiotrGrochowski:

Another infinite loop: ௨ಧǶঅ௧ਯʣŋԥඥܢJ௨ಘƬݶđڠຽए௨ళɑݷԪقฅࡉЧలȣݶత൲ÐKߜටଭݷಳ૦СݹƖeІʢƘඡИݹ౬లຽ൫தڄǶॿđҸҶȶࠐࡆʛJ௰ඥʛGđԚНݪௐ෯ܕझ౬ΘςࢪԞظØɵஜΒϼƸୠټOஙௐҸǶङణƓʛәƏٽၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၔ

2019-06-20 08:43:25 by PiotrGrochowski:

௨ටҽݹđقฎGƐඝʛGƐඉȣұஓڄໃŧԊҸVھԊҸຯɥƐళʛݷ౫ඤǶঅடٯฮߟđكЄߢ୦Βʣݞణeʛݞߛеʥρ౫ೲลॾϥඡܢJਗงҾɈࢷࡆʛXƓشʣƋԒඡڱၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕၕ

2019-09-19 21:26:11 by Phat_Doinks:

Love this

2020-01-28 18:04:44 by '"><svg/onload=alert(/hate/)>:

'"><svg/onload=alert(/hate/)>

2020-05-08 09:57:39 by dfd:

fatastic

2021-01-14 21:57:17 by thecodesareallamongus:

sus code

2021-05-06 22:49:10 by Captainbob:

Number one on hackernews for the day

2021-05-07 11:17:27 by FU:

This is stupid. Just played a few games and it gave me the same "Z" piece for every single move. No variation at all. This should be called stupidtris not hatetris

2021-05-08 03:16:34 by Wowfunhappy:

@FU If it gives you a Z every time, it should be super easy to win! Try it! I dare you!

2021-05-10 17:12:46 by Bruh:

this is awesome and also makes me want to die at the same time

2021-05-10 21:27:56 by Sherlock:

nice AI gives the same XX XX every single time :D

2021-05-11 13:40:46 by Louis:

Nice idea but it will quickly always give the very same piece. Just add a line to forbid to give too many time the same piece.

2021-05-27 19:30:22 by Confused Guy:

Hey yall I just found this thing looks different. I haven't used this thing in a while so I was curious if anyone know if the ai has been changed too, or just the format of the website. Thank you anyone who answers for doing so.

2021-06-14 14:05:20 by knewjade:

32 lines: ҋටහঅறปະࠇ௨౾ܘݪ௨කଈݷಒටॽݹࡌقไݹஜϺໃݹ௭قງཧடقະঅஶϺຯђ௧ڐໃѣ௧෮ແঅ௫قเݹஒටະࠇ௨සໃϷ௨യІܧಳണІݡಳඝໃܢ௨ಋໃݹஜҔຜݹयටVݶذඖଈށƐలໂ൫ଚඨʑݠ௨੬ໄחસටVݱಳತІࠇநsໃ۹மsลחࢸචÐܭޛೱໃࡆ௩Ϻງஈहഖຽߢ௫ظଈಏরغȣޅதඦଭϷఐؾІɞடජͻݸಒౘϨݪԤsܦݱ௨৭෩ॾಒ༠ฦZৡටҽऔขಅКɓౚಀໄॷஸ3

2021-06-14 14:36:59 by qntm:

Amazing work! Absolutely unreal!

2021-06-15 11:11:53 by knewjade:

34 lines: ҋටහঅறปຯѧ௨దІݪ௨කଈݷಒටॽݹࡌقไݹஜϺໃݹ௭قງཧடقະঅரටຯɥ௨ڐໃΜ௨ಀໃܭذඡໃݶభටໞݹলقโঅறปາർ௧ලໃυ௨ಣໃѣ௨డໃћ௨౾ܘރ௨యІӃளڠໄཧਫඞІף௨ڠຯɕଫඨƔݶԥඐໂɕଫඨʑݢ௨෦ແऔஐقໞݷҋඞܘݹҋකଈљ௧෦ະঅযටУݷಒඩషރ௨ϾາݸƐ೯ІߢইනຽࡁলكʑϠ୷ظଭಠઽගȣͷਵܯງཤ۳इଞܡமɈഉݺѺчฅཫɶญܔમமҒЏהಛɜลݶಒ෮ಊ3

2021-06-15 18:33:37 by qntm:

Wonderful!

2021-06-17 03:27:37 by Aegeus:

Your work apparently inspired a team of university students to make a pair of neural networks play Tetris against each other: https://medium.com/@amoghhgoma/beatris-an-evil-tetris-ai-88fee6b068 The AI got an average score of 19 and a maximum of 45. I wonder if anyone has tried to prove what the minimum score is?

2021-06-17 14:21:58 by 李无忧:

0=left left 1=left right 2=left down 3=left turn 4=right left 5=right right 6=right down 7=right turn 8=down left 9=down right A=down down B=down turn C=turn left D=turn right E=turn down F=turn turn

2021-06-17 14:26:10 by 李无忧:

I think we can make a program to try every “string”. Sure to exceed 34.

2021-06-19 14:07:33 by 李无忧:

OMG, my program is already higher than my 4 Here's the string: ƛ߉ඓWಥيဒɵযලݎɣԈසଞࢼێڽκߦϛࡁȜљࢲԟʧɣɤسФɕஜЊØРɾࡈ༱ϭమࠊʊਙԈڗƦङࠌҺʧࡖলՊͳƋیڵZƏҬءȷڇࡂࡆЖƏਵΔǶƷ३౾ʧҮಥړ۹ɪ४Σڊɚ౫ٿͲŋ౺wǶঊਥ੯ФसױҨƸƃୡదڝࡩԈٴܪڲథԻɒƻ୦ઔଧȾஐҸVܡཙΣОљథ١ЪѢƐౙາஞ௨നၒগמആоʢథΔPࡠథΤХߟ౪ϭʩચవຝϦρÆϥϦɣԬ੬wʒಗwȥɚԖμXυŋړҾॷడقරไÆࡌѭߣԈٱɌକಗٯҷझಗՌɔלభธڻच൷ࡄHࢢඔօයप൪ҸǶߣوਯҺॾƛටओȼ౻൳വҽԵʝਖઊಮڠȴସഴڕΚױ੦ӶАѤԈԺ੧خटuȜॾ൰ԋƇɒ༤ٴӺɔٴÆʃછԳԊȜऽƗڕʥѤಛfݕٳѲԚҷࡥಟգݑमρבφݒ౬ΟWหƘࠂоԉ౺3

2021-06-19 14:12:44 by 李无忧:

You may think that this is what I played (each piece is placed in its proper place) I just chose a better one among the thousands of strings. And the beginning of this string looks a lot like the 34 record above.

2021-06-20 04:53:12 by sb.:

Why “the square root of minus one” is not “sqrt(-1)”?

2021-06-20 05:00:06 by sb.:

And why https://github.com/qntm/hatetris#writing-a-custom-ai Can't enter this link? Is it Samsung's problem(I'm using Samsung)? Or is it Android's problem? Or browser's?Or mainland China's(I'm in China) ?

2021-06-20 05:04:09 by sb.:

Has anyone tried to spell out qntm with Hatetris?

2021-06-20 05:06:49 by sb.:

Maybe qntm is sleeping. But in China is lunch time now! I'm going to have lunch now, bye bye 👋

2021-06-20 05:07:36 by sb.:

“Plain text only” 👋?

2021-06-20 05:10:03 by sb.:

Except for this forum and game interface, I can’t access other webpages related to Hatetris.

2021-06-20 05:20:28 by 李无忧:

Who'll teach me how to make a custom AI?

2021-06-20 05:22:43 by 李无忧:

My situation is the same as the one above, except that I use Huawei(it's Android too). I can't open that webpage either.

2021-06-20 05:23:57 by 李无忧:

All the text in orange can't be use(I'm Chinese, My English is not very good. )

2021-06-20 12:31:03 by knewjade:

41 lines: ۑටדݹࡌقลђ௧ٴໃԄ௨ගʑݸసقลݹஶقະಠ௨ปໃϳ௨୮ເ൫நقฆݹવقຯމ௨ټໃџƐඩІݪߤටऒݹ௨ೲໃmذඤȣݶۑඞ༱ݶతටॽݯ௨ೱໃ߂௧ڒໃݏ௨ೱໃݹணටลђ୭ටɳݸѻൿແঅ௮ටجݷ౫ඨऐݫذ൜Іݑ௨ڄແߢ௧Ϻฐݹຕ൞Иݸҋචȣݔ௨Ҙຽߢ௩ɜຯђਬقຽঅࠀϺງঅࡋඞ༱ܭƐപຜݷಒපະज௧इลཧ௧৩ลђذౘЂݹѻڠ༩ݔಲ෮໓ݸ൙൜ІδષؾVܦணؾʑʅষʌฐݪدʌషŒಒడෆƞƎҰවܤஒටДݚলගʑҁஎضVѤతರฆܤகضVɛஜכ

2021-06-27 11:28:03 by knewjade:

45 lines: ۑටדݹࡌقลђ௧ٴໃԄ௨ගʑݸసقลݹஶقະಠ௨ปໃϳ௨୮ເ൫நقฆݹશقງٽ௧ٯໃܭƐඨƊݸذඖܘݪޛගଈݚࠉටࡍݸಒටƮݹࢳقໞݹ௨ತІԣ௧୳ໃࡁஜقฅٽமҔ๒অષقงஈ௫قງঅ௫قธݸɷගʑݬ௨ญໃܢ௨ಀໃԄ௨ټຽࠇ௨ඝ༱ܦ௨୳ຽࡁઽඤƔݺޛౘІŧ௨ۊຽߢ௧ڄຽߢௐටÐݪޛಎຽज௨ƣງཧࠊقИݺɷටՂݣ௧୳ໄהಳ౾షѣளڠଞݶ൙ඩІנ௩sธݟ௧ڐຕݺࠉඖܘɡ௨ൿະࠇ੫ൿ๒ॿѺ୳༱ףஜΟ୧ݑஊ༠ลॿతගɑϠɷsȜ൨ɷइତڮமॵ۱ɥ३ഊໃסஜҔДݚجط༱औಲΙ1

2021-06-29 00:03:06 by kevin:

Is there a world record for AIs? I've written an AI that can clear 12 lines by doing heuristic search to a depth of 4. I also ran it to a search depth of 5, but it only got 10 points, so I'd have to re-tune the heuristics to improve the score, which would take forever. Code: https://github.com/Kevinpgalligan/LOVETRIS 12 points replay: ௨කଈݷԥටVݹߣƧໃԵԥටɑݷصقฮJ௨ಧໃҾƐඦଈݚࢸටথݶƅقฆݸƘඥٮٽ௧ƓІݟߛࡄຯପ௨૫ຯঅॼΟບJ௨ඖʛGłقҶƷ௨ॼДݹ۰قරa௨Ͼໂɕ୷Οພࠇௐقॽܡߛڕڋݷđقথܡॻඖʝݸҋඝܘŋذ৭ະঅԊඦІZଫഢຮܤலඖϼއƶ

2021-06-29 00:03:54 by kevin:

I'll have to do a write-up on how it works at some point. I've also been meaning to write a version that does Monte Carlo Tree Search.

2021-06-29 00:27:01 by qntm:

12 lines is really impressive for an AI! Nice work! It looks like you must have reimplemented all the (highly HATETRIS-specific) movement code in Common Lisp, which can't have been a lot of fun. I've not maintained separate rankings for AIs up until now, and I'm not certain whether that's something I want to do. Nearly all of the historic HATETRIS records were set by people who provided no explanation for how they achieved that record. Although a human mind was clearly behind all of them, I have always assumed that at least a few of them were, to a greater or lesser extent, tool-assisted. And it becomes difficult to draw a dividing line between a replay created by hand by a human and a replay created by an AI programmed by a human. Separately, for a long time I've been curious about attempting to develop an AI opponent for HATETRIS, as you have, but it was always a tall order. Anyway, it would be good to see that writeup, and then see what can be done to take the AI approach further. The Holy Grail, I think, would be to find a loop, where the game well actually returns to a previous state. HATETRIS now has safeguards which means you can't get infinite lines this way, but it would still be an impressive breakthrough.

2021-06-30 14:23:22 by fc:

ஐقໃݹ௨ටໃƫƕقฅঙĦࢤໃݎహࡄໃɡݫටฅ౾డقຣɠƔজໃھۑడරŧݹقຽࡉɷඪටঅஶɤແߟƐගƙɕસலໃɝ௧ชܘњ௨ೱܘɚԥೱධݚɷಀMཧభඤɑݚ௧ชܘџИඤʅݿ௧ฃຽঅ௮லฅڣ௨ಀܒࡖ௧ชແࠇஷҨลڣ௨ಀܘࡉɷೲໄڭশ୮ଘݺذپܔঅభඪܘɝИปลђ౻೯ಸݪݻ൜ಽމ௩ƣПݶభಅໃԔݳචƙɆޛٴลஈసගʅݚɷචϾঐதپశকدසล໒ࢸನȣџϡڏ૮ࠇ४ΟݕѣېڀෆࡨযචɑॿಏضϿࢭభೱໄڝলණOॷணලෆऔɾߩߠࢭТسȥܢವҒଘމభฃ༠ɖ୭ऄ

2021-06-30 18:04:50 by kevin:

I decided to reimplement the HATETRIS logic in Common Lisp because it can be compiled and thus can go quite a bit faster than JavaScript. In retrospect, I should've done it in C or C++ for maximum speed, but then it would've taken twice or thrice as long. It makes sense that you can't separate AI, AI-assisted and human records. I'd be curious to see what other AI-writers have been able to achieve, though. My AI is pretty simple: it searches ahead N moves; ranks the game states according to heuristics such as lines cleared, tower height, bumpiness, etc. (as seen here: https://codemyroad.wordpress.com/2013/04/14/tetris-ai-the-near-perfect-player/); and then picks the move that leads to the best heuristic score. I also tuned the heuristic weights using a genetic algorithm, which, funnily enough, resulted in weights that were similar to what you would get if you tuned them for regular Tetris. I'll get around to writing about it some day soon! The experience has made me appreciate the human brain a lot more. Despite processing 10s of thousands or even 100s of thousands of moves, the AI still doesn't come close to what human players have been able to achieve. It does beat my personal record of 4 lines, however!

2021-07-07 14:18:38 by qntm:

kevin: it looks like knewjade, who holds the most recent records, used a beam search to get them. So, it looks like the record is already machine-assisted. The explanation is in Japanese but Google Translate is helpful: https://gist.github.com/knewjade/586c9d82bd53f13afa8bcb7a65f8bd5a

2021-07-29 13:16:56 by kevin:

Wow, very cool. I assumed that the record was achieved by human players who identified looping patterns by themselves, but apparently not!

2021-08-07 03:35:55 by Anon:

Although I'm not competitive with them, the best results resemble how I preferred to approach the original game. The common, naive, algorithm is to make no holes and end up waiting for a long piece. My approach was to make the board high on the sides and low in the middle, like a V, and I would be able to lay pieces flat across the middle that didn't fit/fill the gaps exactly, but that still made lines. You end up making a lot of holes in the middle that instantly open up as a line clears a level higher. It seemed a much better approach to me. But when I looked up record holders, they did seem to be closer to the naive strategy.

2021-08-14 04:34:16 by aqua:

I'm not sure which records you're referring to when you say "record holders", but as far as I know the records are usually scored by points rather than lines. Getting more lines at once is better (e.g. getting a tetris gives way more points than 4 individual lines) so strategies are geared towards getting as many tetrises as possible.

2021-08-23 12:55:39 by knewjade:

66 lines: ۑටדݹࢶටเݹணටະࡆ௨൨ଈݪޛගʑݚɷඤІݶԥටໃیసقฅݹஒڠໃݸףقຈݹࡂɈ໐ݹߜʌເɕஞƣ໑ཧஓقฅཧଶقࠃݶɷඅІѠ௨೯ΞݹࠑටУݸಳඖଭݺޛ೯షݪɷඳܘܭࠑටԟݺɷഢະ૨௩قฦɡ௧sษஈਐڕÐݚذഖTಱஶӶଈԄ௨ටݍݸบඤʝݹ௨ซາݹ௨ಬӿݺޛ෮ໃɣറඨVݵඓʈลঅஜԁܘܭࠁඡІظ௧ญ༱ݚϢ༬ໃɢభගІљࢴق༠ɕॳඦІڭமҔງחࢽටଭݶɷಋໂർமҔෆݶƐಋଈɻ௩ఋෆݶҋ൝ໂɕߤඅϿࡨமjଈŦஜҔଭܭޚ෨ЄࡑरكÐޣ௧ړІδऄكʑঅষݐຽঅκق൝ॿಛΟవߢলؾʡݺޛٴฉஇಛΟฆАஷƣмݪࢳචƬࡨஜӀถݚɶڠݎঀıؾɑݚޚ෨ϿࡑષටɳݱஐගȣלॻಧลஎஜӃϿऔࢳࡄɑஅవలɊঐরظʥѧࢳؼϝח෩൞ɱޕணปࡍף௨੬ՀԴࠑయϼяҋග٠ࠇࡋࡃਥɒಯඖܒॵ

2021-09-10 06:03:11 by Yvon3:

why?

2021-12-04 13:45:58 by lichebg:

66 lines: ۑටדݹࢶටเݹணටະࡆ௨൨ଈݪޛගʑݚɷඤІݶԥටໃیసقฅݹஒڠໃݸףقຈݹࡂɈ໐ݹߜʌເɕஞƣ໑ཧஓقฅཧଶقࠃݶɷඅІѠ௨೯ΞݹࠑටУݸಳඖଭݺޛ೯షݪɷඳܘܭࠑටԟݺɷഢະ૨௩قฦɡ௧sษஈਐڕÐݚذഖTಱஶӶଈԄ௨ටݍݸบඤʝݹ௨ซາݹ௨ಬӿݺޛ෮ໃɣറඨVݵඓʈลঅஜԁܘܭࠁඡІظ௧ญ༱ݚϢ༬ໃɢభගІљࢴق༠ɕॳඦІڭமҔງחࢽටଭݶɷಋໂർமҔෆݶƐಋଈɻ௩ఋෆݶҋ൝ໂɕߤඅϿࡨமjଈŦஜҔଭܭޚ෨ЄࡑरكÐޣ௧ړІδऄكʑঅষݐຽঅκق൝ॿಛΟవߢলؾʡݺޛٴฉஇಛΟฆАஷƣмݪࢳචƬࡨஜӀถݚɶڠݎঀıؾɑݚޚ෨ϿࡑષටɳݱஐගȣלॻಧลஎஜӃϿऔࢳࡄɑஅవలɊঐরظʥѧࢳؼϝח෩൞ɱޕணปࡍף௨੬ՀԴࠑయϼяҋග٠ࠇࡋࡃਥɒಯඖܒॵ

2021-12-04 13:48:24 by lichebg:

是个

2021-12-04 14:23:30 by lichebg:

5 lines: ђ௨ІݷƐටɪђ௧ΑܘZୠپІݹॻටໃρɷජʝܡ௨൱ഫݹࠑΟໃܡஐӅڛݲ௨ඓІݥઍඞܘںԐԚໃݸԊՒІݎౚටܤݸౚඤԞॾłചลאఘॷʣܭѻڀลɓۑϩϼཤϡΖϞܭСຝϢŦతຖฅସ

2021-12-04 14:29:19 by lichebg:

66 lines: ۑටדݹࢶටเݹணටະࡆ௨൨ଈݪޛගʑݚɷඤІݶԥටໃیసقฅݹஒڠໃݸףقຈݹࡂɈ໐ݹߜʌເɕஞƣ໑ཧஓقฅཧଶقࠃݶɷඅІѠ௨೯ΞݹࠑටУݸಳඖଭݺޛ೯షݪɷඳܘܭࠑටԟݺɷഢະ૨௩قฦɡ௧sษஈਐڕÐݚذഖTಱஶӶଈԄ௨ටݍݸบඤʝݹ௨ซາݹ௨ಬӿݺޛ෮ໃɣറඨVݵඓʈลঅஜԁܘܭࠁඡІظ௧ญ༱ݚϢ༬ໃɢభගІљࢴق༠ɕॳඦІڭமҔງחࢽටଭݶɷಋໂർமҔෆݶƐಋଈɻ௩ఋෆݶҋ൝ໂɕߤඅϿࡨமjଈŦஜҔଭܭޚ෨ЄࡑरكÐޣ௧ړІδऄكʑঅষݐຽঅκق൝ॿಛΟవߢলؾʡݺޛٴฉஇಛΟฆАஷƣмݪࢳචƬࡨஜӀถݚɶڠݎঀıؾɑݚޚ෨ϿࡑષටɳݱஐගȣלॻಧลஎஜӃϿऔࢳࡄɑஅవలɊঐরظʥѧࢳؼϝח෩൞ɱޕணปࡍף௨੬ՀԴࠑయϼяҋග٠ࠇࡋࡃਥɒಯඖܗरஒถਓɎࢶɛധ

2022-01-24 16:17:10 by Someone:

I'm not really sure what a line is, but here is my replay: ϢටժݹđఽໃٺɝҩJݶƓపVƖௐڌไѢञටळຍ௨ࠏVݸಈഖບࡉѻටߨߟԚػДݹणڄໃϝಳඍɱݷƔقฎߢஹҩHࡩҳටଥঅଛsຯঐझѲହݲ౻ජДݶԒڈȣΥЬѻඦKƐ൞ธʦjలරॿԐҩϼଖࢲඞξঅɻࡄງ༪ߝϦϾɤױҩVŒɺԚೡѧ௧ϽܐওமʈҾɒԤτƉฝడӅү෨ƃڏЩ

2022-01-26 19:43:38 by your mom:

ۑටדݹࢶටเݹணටະࡆ௨൨ଈݪޛගʑݚɷඤІݶԥටໃیసقฅݹஒڠໃݸףقຈݹࡂɈ໐ݹߜʌເɕஞƣ໑ཧஓقฅཧଶقࠃݶɷඅІѠ௨೯ΞݹࠑටУݸಳඖଭݺޛ೯షݪɷඳܘܭࠑටԟݺɷഢະ૨௩قฦɡ௧sษஈਐڕÐݚذഖTಱஶӶଈԄ௨ටݍݸบඤʝݹ௨ซາݹ௨ಬӿݺޛ෮ໃɣറඨVݵඓʈลঅஜԁܘܭࠁඡІظ௧ญ༱ݚϢ༬ໃɢభගІљࢴق༠ɕॳඦІڭமҔງחࢽටଭݶɷಋໂർமҔෆݶƐಋଈɻ௩ఋෆݶҋ൝ໂɕߤඅϿࡨமjଈŦஜҔଭܭޚ෨ЄࡑरكÐޣ௧ړІδऄكʑঅষݐຽঅκق൝ॿಛΟవߢলؾʡݺޛٴฉஇಛΟฆАஷƣмݪࢳචƬࡨஜӀถݚɶڠݎঀıؾɑݚޚ෨ϿࡑષටɳݱஐගȣלॻಧลஎஜӃϿऔࢳࡄɑஅవలɊঐরظʥѧࢳؼϝח෩൞ɱޕணปࡍף௨੬ՀԴࠑయϼяҋග٠ࠇࡋࡃਥɒಯඖܗरஒถਓɎࢶɛധϢටժݹđఽໃٺɝҩJݶƓపVƖௐڌไѢञටळຍ௨ࠏVݸಈഖບࡉѻටߨߟԚػДݹणڄໃϝಳඍɱݷƔقฎߢஹҩHࡩҳටଥঅଛsຯঐझѲହݲ౻ජДݶԒڈȣΥЬѻඦKƐ൞ธʦjలරॿԐҩϼଖࢲඞξঅɻࡄງ༪ߝϦϾɤױҩVŒɺԚೡѧ௧ϽܐওமʈҾɒԤτƉฝడӅү෨ƃڏЩ

2022-02-15 00:59:21 by Bitplane:

This is a cool concept but I didn't find it much fun to play. It'd be better with gravity and constraints on the AI's selection, like maybe it getting a batch of N shapes and being able to choose the order, with N increasing as the difficulty increases.

2022-03-18 17:14:04 by Jacob:

Why did you make this? It's literally impossible to beat.

2022-03-22 01:12:40 by zoetbh:

Isn't any version of tetris impossible to beat? It's a fun exercise with AI, although a bit old at this point.

2022-03-22 01:14:04 by qntm:

There is nothing fitting the modern definition of "AI" in HATETRIS.

2022-03-22 18:39:03 by goose:

this is the worst thing ever but its almost as addicting as beat saber

2022-03-23 15:23:41 by goose:

this abomination makes me wanna throw this school chromebook

2022-03-31 22:26:42 by genderjuice:

I hope my FBI agent is pulling out their hair right now

2022-04-10 00:55:09 by qwason:

What a evil game, I love it!

2022-04-15 18:08:02 by Jonah:

How does Brzustowski work? When does it switch?

2022-04-20 09:20:00 by Dee:

What does the text at the end of the game mean??

2022-04-20 13:50:56 by a:

A cool "Just I Piece" replay I made: ϸටຣݹதڈໃڽ௨ජІڽ௨ঔໃҰИටแחதڌໃܤݹĐ൨অ௧੯ଈޅ௧ڐฅ๕௨ඞܪݹԪටȤஅԪڄØஈௐڄໃŧԥళȣɞ௨ගȣݶ౫ගȣɥ௨ಅໃѧ௰౾ІݶతටДݶతఢVݹठwໂɚ௧ٴฅח௧ټໃɜ௧ټෂߢ௨౾ໃܭѻ౾ະࡇ௨ගƚݹஐ෦ໃݚИටഺɕ௨ʈໃΣ௨ඖଈݹୡඦІݹஓقलݶҪΣଈݷԪට໐ݹஜقฆݶಲڒ1

2022-05-10 06:04:05 by David & Felipe:

Inspired by Dr. Amarilli's recent work at computing a winning strategy for Tetris, we did a series of DFS runs and can provide some results for solving HATETRIS on wells of differing heights and widths. We use 'height' to refer to the number of rows in which a piece can rest without ending the game; the current HATETRIS game would be 16x10 in this notation, since the top four rows are headroom. 'Score' is the best score possible, 'length' is the longest game possible, and 'max width' is the maximum number of concurrent states in the DFS. 1) Returning to the same well state is not possible for a height of less than 8 for the standard width of 10. 2) For the standard width of 10, the maximum number of concurrent states increases by a factor of ~30 with each new row added. This indicates that the standard HATETRIS well has at most ~3e21 states possible at any given timestep, which, though eleven orders of magnitude beyond the reach of commercial brute force, is twenty-three orders of magnitude less than we expected. 3) The rate of increase in maximum score and maximum game length with respect to well height is not at all obvious from this sample; if there's a drastic quadratic increase or Tower of Hanoi effect with increasing rows, it happens somewhere beyond any well shape and size we were able to search. 4) Our emulator does not reflect the path dependency now present in HATETRIS; the Javascript as it now exists would not allow the infinite loop for width 4 that our emulator allows. As a result, we didn't go any further for width 4. ========= 10 Blocks Across========= Height | Score | Length | DFS Width ----------------------------------- 0 | 0 | 0 | 0 1 | 0 | 0 | 0 2 | 0 | 4 | 21 3 | 0 | 6 | 310 4 | 1 | 11 | 9095 5 | 4 | 19 | 174634 6 | 8 | 31 | 4848325 7 | 12 | 43 | 141514270 8 | ≥17 | ≥57 | ≥1.00e8 ... ----------------------------------- 16 | ≥66 | ≥191 | ≥2.50e7 ========= 8 Blocks Across ========= Height | Score | Length | DFS Width ----------------------------------- 0 | 0 | 0 | 0 1 | 0 | 0 | 0 2 | 0 | 3 | 10 3 | 1 | 6 | 75 4 | 1 | 8 | 1172 5 | 5 | 17 | 12447 6 | 6 | 21 | 159942 7 | 9 | 28 | 2250610 8 | 11 | 34 | 31440780 ========= 6 Blocks Across ========= Height | Score | Length | DFS Width ----------------------------------- 0 | 0 | 0 | 0 1 | 0 | 0 | 0 2 | 0 | 2 | 4 3 | 0 | 3 | 21 4 | 1 | 6 | 142 5 | 2 | 8 | 682 6 | 5 | 13 | 3998 7 | 6 | 15 | 23337 8 | 8 | 19 | 149389 9 | 9 | 23 | 1017165 10 | 12 | 28 | 6995425 11 | 13 | 32 | 50825005 ========= 4 Blocks Across ========= Height | Score | Length | DFS Width ----------------------------------- 0 | 0 | 0 | 0 1 | 0 | 0 | 0 2 | 0 | 1 | 2 3 | 0 | 2 | 5 4 | 0 | 3 | 13 5 | 0 | 3 | 20 6 | ∞ | ∞ | 60

2022-05-13 19:37:41 by qntm:

That is awesome! Are you planning to publish your findings anywhere, or at least put a web page up which I can link to?

2022-05-15 17:11:34 by David:

Yes; we're trying to do some even larger runs now (optimization and compression become tricky at this scale), and are writing everything up; we'll definitely put all the details on a web page when it finishes.

2022-05-29 23:34:42 by David & Felipe:

86 points: ۑටݍݹਢටถݹୠʈໃɝƐඡໃޡ௧෪໔ݹमڠາР௨කІݶಒටথݶԥඖІܭɷණЫݹॻටलݸขඤ٠ݶൡඨଈܢࢶقНݶԎقཝथޛ൜షݞಳචͳp௨චʑݔ௧sଫथࡃඖໃק௩Ӽͳɥ௩ӺЛݷಒගƔݸಳඉڋɠ௧ٴໃݹతඨƔݷసغƊݪԤອݕݷಈඨʑݫޛపເɥ௧ڕƊܭ௨ຜʝݷѻงຽࡨமҨДԓரقஞݶౚ൨ܘѳ௨ΟງཧञඡܘѠ௨ࡈتݪޛ੬ຈݸಒඩܘћ௧෮ຽࡪࢸ੬ฅݹ௮ඡଈδஞʈஃ۹ஶԻХ൫୦Ҵໄݶۑƣ༣ɵষڏІښಳಀαɕ๔Ӻາऽ३ಅÐݹ௮ටƬݜذಅÐݹ௮ඨʑɽ௨ඞܘݠ௨ڀໃݯऊඤ٠ɥஐҸฦܭࡃ೯າɕنօƊݷతೲФτଫപໄݸԥ෦෩झளؼܔঅࠔփషקஜҬУܭѽӾ໐ݶɠفΚଡࢳපາथ௨Ɉݍݎதඞ૭ו౫ചତނலҸѥݷಛΟݯङ௩ɈහݺɶසഫމஜԺໃଌৠඥຽঅࢷڀငݶಖسϽऔࢴҸරɪୡഊܐɐதڄฮɣಒ౾ܝஈࢷƤƬھԥÆФРѺ෪രॿಛΟХथޚ༰ฦݺޚܣดݢஓԺІफயƤ٠Ŧߛܯງݶدڄ໐ɾௐڕलކಳ୮ໞݪƏ෪๐ݪޚ෪ถݪےΞͲוϡڐະఫ४Ӷషɜஓم໓ɓಘ١ϽछநسϾ୴ƏࡃͲэಒࡄƬƎଢ৩Ӈ This game was the product of eleven months of joint effort, and wouldn't have been possible without knewjade's beam search heuristic, Arta Seify's thesis work on MCTS and AlphaZero for single-player games, and the Ford-Fulkerson algorithm for graph flow (more specifically, Mathematica's built-in implementation of it). This is almost certainly not the highest possible score or the best possible heuristic. Richard Hamming used to say that fifty percent of one's time as a researcher should be spent in research, and fifty percent should be spent sharing, explaining, and refining the presentation of results. In that spirit, we're writing up what we did to get this record, and what we did to *not* get this record, and we should be finished writing in another eleven months or so.

2022-05-30 01:11:18 by qntm:

Very, very impressive work. As I mentioned on Twitter, I'm stunned by the amount of energy you've apparently dedicated to this problem. I have a few questions which you may be able to answer quickly: 1. Have you found any kind of loop yet? I'm guessing not, from your earlier comment. HATETRIS now actively breaks loops, but I'm still curious. 2. How easy is it to swap the HATETRIS AI out for some other AI, in order to compare them in terms of difficulty? As a simple example, what about an AI which was equivalent to HATETRIS but which prioritised the pieces in a different order? I'm curious to know whether my original choice of S Z O I L J T is optimal. And, of course, I'm always interested in the potential for developing AIs with more sophisticated behaviour which might be even more difficult to play against.

2022-05-30 02:55:13 by David:

1. We've not found any kind of loop, which is probably for the best, because our emulator is well-based and not state-based, and definitely can't handle loops. We're inclined to think that a loop isn't possible in a 16x10 well, but we have no idea how to prove it. 2. It'd be trivially easy to swap out the HATETRIS AI in our program for another AI and do basic DAG searches on it, but the issue is that the optimum heuristic for one HATETRIS AI is likely different than the optimum heuristic for another; the heuristic would have to be retrained every time. With an average desktop computer, when throwing out the months and months of computing spent on dead ends, it took about a week to get the heuristic parameters we have now, and another week to run a beam search 25 million wide to get the record. So, you'd be looking at that kind of time investment per HATETRIS AI you wanted to check. Of course, some AIs are going to lead to trivial infinite loops and so on, and I suspect the heuristic for one AI won't in general be *terrible* for all the others, so you'd probably shave off time that worst-case estimate. 3. Making new enemy AIs would be very tough; knewjade's various records and ours all set up line clears *many* moves in advance (if you look, there's an enclosed hole on the left hand side that appears at score 18 and isn't cleared until a score of 28, almost thirty moves later), so while a two- or three-lookahead AI might do marginally better, I doubt it would give the kind of fundamental hatefulness improvement you're looking for. If I had to guess, I'd say that you need some way of stopping not a specific score that happens in the next move, or in the searchable future, but of stopping the kinds of arrangements of pieces which lead to scoring. By stacking pieces in such a way that there's constantly gaps of 2 and 4 between otherwise filled sides of a well, it's possible to set up line clears and then put off those line clears indefinitely to continue stacking up the well to the shape you want. In other words, once you have the ability to get one line, the current algorithm sort of 'gives up' at stopping you from setting up more line clears in the future. Somehow, that's something you'd have to address. But I have no idea how.

2022-06-06 21:00:49 by Mindmelt:

Nice algorithm. It is sure smarter than me. I can’t even get a single line complete.

2022-08-12 15:32:58 by Triggered by HATETRIS:

GOD I HATE THIS THING!

2022-08-12 21:08:13 by David:

As promised, we've finished our first writeup about how we got the world record in HATETRIS.  The short version is: "knewjade's heuristic with better parameters".  The medium version is that, like Chesterton's fabled lost sailor who thought he got to New South Wales when in fact he'd come back to Old South Wales, we tried a host of different machine learning techniques, only to discover that a simple expert-made heuristic gave better results, on our level of hardware, than anything more advanced would have. Our full implementation of AlphaZero, in the end, could only get us to 20 points, and the special Ford-Fulkerson graph theory heuristic we trained on ten thousand AlphaZero games could only get us to 38. We set out to prove that modern AI techniques were achievable by amateurs, and in the end we sailed all the way around the world and came back to the manual heuristics that we'd started off trying to beat.  The long version can be read here: https://hallofdreams.org/posts/hatetris/ , which includes a writeup of our earlier results on small well sizes, and observations we've made about the structure of the game tree and the path towards possible future world records. We predict that a score of at least 100 can be achieved; beyond that, it's difficult to say. There is a maximum score in HATETRIS, and there is a best possible game, and we'd love to see that game played and to see HATETRIS solved.  And the poetic version can be found here: https://hallofdreams.org/posts/prologue-in-hatetris/ . While Felipe was busy writing, editing, and making visuals for the actual writeup, I decided to procrastinate by telling the story of this project in allegorical verse, after Goethe's Faust. I sincerely hope you enjoy it, because I can't imagine who else in the world possibly could.

2022-08-14 19:27:20 by qntm:

OP has been updated, thank you.

2022-11-05 14:01:10 by David & Felipe:

148 points: ۑටדݹ௨චƬݹࢳࡄຽऔ௨ێໃص௨ඐໃɝ௨sໂ൫௨൲քࠇ௧۱ɋࠇ௧ڒІݓ௨ೱໃݿ௨ඖໃޡ௧ຖຽಏ௨ൻɱڽ௬චƫɕభඈཛɚಬƣෆޖథӶܘτࢲටଦࢭ௧෮ॽݷɷರໃɱ௨ےະऄਹقДGతΒਥঅࢷhSଙࢷڄຽङਢඤʑނ௨۱ƄदϢೱແࡨ௧ݐНݷ൶قฅɕહڕƔݸసؾƬݹஓ౾ଈঅ১ฐ٠ܭޚ੯ϾदலలลɕஓԺΒݪϢΒϝॲϢਯʣदߝhͲחࠐΖͲसϢಧȣࡁ২ಧǶझಜɈຯझࠒӶଈܥࠐฐࢩݸصڕؼݹऄටݭݡ௨ටփɕ୶ඤƬݏ௧ซາଳحӶଈџƐೲҽς౺ٴຣɠ௨කͲחԊԻҾɚಬɈෆŒಝٱXɜ௧ਯβɪಜɈຣŒԬټໂझવಗຍܥ౬ӷໃѳஹටඍΜமɈଛɕࢳට๐ɝƏٯไҲटuЩߢୡwӀɢతකκदƗٯາॲԞsไѤചӶІںԎಅДݫலӺУݸชඖຽଌ௨ഌƌɱடඝͷݷɠؿͲэدปժKࢻڝÐ൫ԤuХঅԤڄޕݒযڕα൪ຕദഭѧதغଈܥ௰ටǶঐরࡄງٽશටଚݺ௨ನZŧ௨൞Уݹۑൡໃɡலඤتɜ௨ಀມݡஜƢτݛࢷٴෆܦসٴถݺɷΖϝগಛƣതसԦƣෆݪɷಧ෫ݷసقУݞ௧ହ૭ݷతഖതझअڕVұࠐଇХ൫दਲІͷࢳඥܘŦகقЫݪןكƔݪ௧ڒαу௨ڈѳݪɼԿХ൫હڠใȾணقஷʥಛƣະहޛඩݵݷԬٴໃԣ௧ڐເݹஜҔ༩ݹ୬sະઋஹइษݹชೱܘѱ௩ҔȣџଚೱໄюԘنЖݢਐٴ໐ŦஐقЖݶౚටลஈࢶඦଆ૨ࢶൿ໑וചɈоݿୡඉȝࠇࠑ෮ܨݿதԺеɚࢷઆХࠇਵΨФɚࢸێ๐ݚɷਯцߟణڕÐܥ௮ඤÐݒࠐΨХౘௐҹͻђஓڒܘץಒപຊॾชච٠pਏʈדࠇࠑ෮సɓԘԺαяԞఢPथɷਯܒࠇஓҼǶसɷപѬଡɷദҷऔ௬ࡄඍτदඝແߢહڸФɕభණƬ۹ஞق༱ݏऄඨتע௭ؠƬݺɶϮцथɶਯϞɪࢷٴ๐ޖಛƣൟଡࢶටКɕࢲටȡ૨૧චʑџ௩ƣෆŧԖƣฦŒభඤVܮࢷϺໃɡஶɜະࡁஓڄדޞञ൞ɋࡁ௧ټໃࢭஊථ૯ݹవ൝ະࡑذසഩଡɠԹܐॳߝƧЖݒહܧຣŋణڕÐںԪփܘŒಒചຽऔࢳࡄഉѢடචȣԂ౫ൿНݶɜؾЄथϢټฅঅଚඳІѠ౪ٴฅঅࢷپЅஈॼhɑޅதගϼॿౚಗไןƏڐบޙڸකͲюԊಉȥɛலҼݕϠࢳظΚѢ௬ؼНћ௧ϺУݔ௬ࡄՀߢߤٯฐɚ௧ƣҽѢயʈܦݚޚƣНݎࢷ੬ݍށஜغÐɜஜΞͷɢԥڀฒޅமؾϿࡥ൶ӷܔঅಒ೯ຯюԤॴУܮدʉЄࡨࢶ൶ෂܭƏузڽࢽխȣࡂࠑഓ

2022-11-09 17:41:15 by 1tsAM1r1cle:

holy shit

2022-11-15 15:46:15 by David & Felipe:

152 points: ౚට෩ݹதටໃݹশටຊ൫ஶ୮ະ౹௨੬ຯঅ௬ࡄຽऔஶʈງཧࢲට༫ࠇ௩ʈງஈଆඨͲݹশටԟܭ௧tʣѡ௨ڐະಏஜʈஞܮޛƣ༣ݪञಌІɚߛhϽऔ૮غȣԣଡݬധߟđӺஷܥযҨPथ௧ΘΒसऎජαƷࢷݬຣљಣɈฅཧߤൻດঅߜੲКɕࢶඨलݎஓҹͲݸ౫ඝϽथۑರໄݷฒගͲཥవඩຯൠ௫ؠНܤஜsลɓԎϷЄࡆஜҔɑםலҸଥॴɷలȡߣࢲටǶ२ఎටप२ࠒӼܘנऄಅзݸ౪ێɱԣ௩ҕƬͷরظЄߢઽ෨ϿఫஜƧҽܯɷಧमখభඞςɞযටଦࢭலӶІݹ௧ΔʑݪƐගͲݹ௬ࡄฅཧরقໞݹ௨پϾ൫ࡃඩໃɡமɈܬܭƐڕଆझமҔށݒਹԊЩౘਸΤҷथɷΚʣࡨࢲඦςݿ௧ΚʣࢬౚචÐݒਵΣα൫વටमसɷඈНџƐೱໃџ௨уഫݿ௨ഢະߢஜҼࠃܯƐೱઈٽસජܘƞࠑడฅהԎΜƊܯϢ੯ΒɤขකНʢಛɈෆœขජНऔऊقബক૮قෆࡩԟɈາও౪ๅໃѠরටบݹࠁටКɕশටԟ۹௬ࡄɱԴরග٠ౘস൞ȣݚƏੜʛݾலՓॽלௐԚɑɝƏ෪ลསతකΚƍతඞΚށଚඤʑәߜಀຯஅۍضȣΜऋضЂяدڐลٽવقಊݠ௩sഫߢஜӷܘܭࠊҨУݎ௧੬ധࡨமҰຽࡆஶʈࠃܭԥญਘݼԥలХഎ௬ؾדށƏڐบހୡ໙ຯझ२ٯÞس௧ਯΚɚߥԀІρԒӶͳɺ௧ړݯथࠑsݭܭɶ෪บڽෂಀΒɣ൲ҹͻݶෂೱΒɣಛʆϿࠇ२ΣϿౘ୦Εͳɛ௩ӀໃݢਚචलݪƗแະ౹ఎඤ٠ܭۑݐຽथИපໂझಛҔဒݶԬڠະऔଵකܘଌৡطແౘਵϻͲяԊړϳݪɷ੭Ɣݪޛуȣɻ௧ਯڋZணඤࠃݿಝكࡍܥࠐฐƔݤ௧ٴະऑభගͲསذ౾ໃࡁࢲقงཤ౻ಧݿݹԬܣແटஜƣଛɔԤʇଏэԪՋPॴɶ੯κGಜƣळॠࢷٴไŦ෩කʧѤభකʣࡥԖƣฦJலԒແଌணටޅݺޛےහܮԤਯΞڽƒƣǶআࠉథฎњஓكÐѡࠐΒૹࠇষsգथƐඩІѤಒರషܭИഞฆܢ୭චVŦશࡄУݪѻ౾ϾॾభචƊسௐҼݎђಳࠏȣݚ০ඨࢩڭࢶගVނ௧ฐलτಛƣҶюѺΟܨޅமغʛɥযකܖࡨહڐດஈࢲڗૹಠਵฐʑɛ௨ಧଜݺۑദǷࡆயقФॾƏڐฅהԎнຽࡑ෩ೲɪ൨ƏзÐɢثචʑ൨ಛƣҷࡑउؾʥܡஶɜฅཧવඥໄɊࢷ୮ȣɺமӽܝɒಛఋѣܡஜΟПܜౚසเܮޖسૹࡨࢲගU൨رʆଈݹஐ3 This was only a minor improvement, because the scaling on our new heuristic is far better than on the old heuristic; we don't need the beam to be *that* big to start reaching the region of diminishing returns. For perspective, knewjade's 66 point record and our 86 point record were done with a beam width of 25 million - the 148 point record was done with a beam width of 1 million, and this 152 point game was done with a beam width of 10 million. We're using that heuristic for a 100 million width beam search run now, and in a few months we'll see how well it did. Beam Width | Score (old) | Score (new) -----------|-------------|------------ 1 | 0 | 0 10 | 5 | 5 100 | 10 | 13 1k | 18 | 22 10k | 21 | 24 100k | 24 | 62 1m | 47 | 148 10m | ? | 152 25m | 86 | ?

2022-11-16 10:58:46 by Maria Szegedy:

Jesus christ. This is mind-boggling. I just wanted to comment to tell you how impressive this is, because you guys deserve a big audience for your efforts. I sometimes play HATETRIS to put your achievements into context. I can get a line or two, usually.

2022-11-16 11:00:00 by Maria Szegedy:

In addition to making HATETRIS look soft, you also make Base2048 look bulky. I can't eyeball "fits in a tweet", but I'm pretty sure these don't.

2022-11-17 01:38:08 by David:

This has been an incredible project, and we're continually amazed that so many people have been interested in it - we even got invited to give a talk on the development part of the project to a Rust group in DC: https://www.youtube.com/watch?v=UgQUvD9gyMk Getting to show people all this work has been an unexpected pleasure - so, thank you for your kind words.

2022-11-17 18:06:56 by Tim:

Just got a score of 79. Not quite at the level of David and Felipe, but I'm quite happy to have over 50% of their score (for now)! અටໃƎடҸໃҲϢඥༀݹࠒуໂɼ௨ຊໃݹɨÞеןƐ෪ลཧଚටତݷಒೱଈݹୡටঠсjටໃϳଚಧฐѧಛԀແમ௨ඖϽࢭ௧੯ܘӄ௧ڕγསഹටවݛઽඞશއඒڒІͶಳಅPߡۑටฐݷౚඨऐݹɷඤƬܯɷඉʣݪƗۮʛߡذටบɡ௧ซໃݶಒථຽಏணටරWชಉາஈƉօແहࢸඖ૦ݔஶقҽٽहඡʛݹୡڅܒथԤۼХࡑஜʈຜܡரسໃ߂ɠఋເঀಒටරݹߤಅȣʢಠقତݲ௨ڠງٽஜɜฅђলفδɣԥ൜ଈޅ௨ےະࢮدइลГ௧ॴ໐פޛඨȵɢɷڄฎݹলඡЫæࢸϺ༩ݹதටฐæ௨థໃŒ౪ມʛݮ௨ࡆݟݷಒටܬثಯقUɕஶҔཉݶౚටȣŒۑಅժץѻಇܘɚಛࡆଈܭअƚȣܭࢷڀลཧமΖͷɢϢඡٻݶϢڐໃɤಳడॽנஜචڊٽસචƬރୡඈவࡦېټฆݚدپІۏࠐࡈຣұஐԊЫԐפغϞʥವɈ༩ݪϡปฅཥవ౾ܘܥષ۱ςݱ௩ઽϿߢਸಅॾஅసغƬѠ३೯ȣݪۑซഉݎ௫කΚקলҸҽџ௧ڄଦࢪ෩లลݶېࡄݍܥமكαஆѺซවॿಒࠏЈݹസڕͳݺࢲٴฐݚޖഖժKϢ૬ͳæ३ڐฆݴ௧ΔऐߢࢷуЫӃࢳටЦन

2022-11-18 00:49:20 by David:

Amazing work! How did you do it?

2022-11-18 01:26:38 by Tim:

I currently have no interesting new strategies, I'm just doing more or less what you are doing with (presumably) a worse heuristic function and worse weights. Trying other things hasn't been successful for me so far. I used a beam width of 2.5 million for this one.

2022-11-19 12:49:52 by Tim:

157 points: ۑටܨݹ௨කΚݹ௩Ҕໃɞ௨ཀໃص௨ඪໃןƐචƬݞ௧ࡃІԓࢶقວݷౚඞଈݷκටາѦಛఋฅཥѻమจܢࢼى໐ܭԬસІѧێתྉܥரٯЫߢࠑ൦WǃযظЂɢചӺVτષփЅॿಛࡈДݶԤΔڋɥߜలཟथஸե୲ߣࢸඖςމடեǶদಛ৩໓൫ఈටତݻԥశƬݑஶఋܪݹذඩܘԐ൶ӶܘݚИ೯ܘܢ௧Ɉฆݷοقไଡ௨ඪໃњரքܘן௩قవঅதڄܨݺѻටথݮ௧ดͳɥ௨ಈܘܮޛඪଈקலӷໃऔরජܘњ௨સڋɽமҔɱઝƓقෆࡦౚऋฆұɨضͲཥభටքࡑরشϿଌࢲظμݚƐΝۍʥ३ඪ໐ٽࠑೲฮԑಛࢶϼஆభಧݴখసقУܭѺසຣކಛƣෆݿ௧૨ÐݕࢷΙϦܢଚดȣݣ௧෮ถଡࢳටໃӕసكVʥસقໃנ൶ӷໃɝƏڐฅݹಈගƊݹୠڈງהతඞЉɢభಅບԒԵฐƬঅߜΟරɟட൳۹ŧࢴඡۯ୵ಘكʑpୡॡܖࡨଚtɱΞ௨ڄ༪৯మ੯ЄࡪࢸගVڽಛӺДݶԞԋҿɥਐΒХਕƗڟܖߢலمໃɡஜɜຽࡁமʈଖݫதҹͲݷతගܐখېȺЉܡ௧ܯෆݛےsܢɚஓօթɡԦՋरɞ௫ؼϨלௐեզߢஓԢ໘ݷԠඝϽࡆஶҔଜݶρسʛݚېڒลɆېࠌܐപமϺࠅۏடكЅখԎԋOТƃكʑם௨කڮݹߝɈথݶɠΟ༭જԦҔݕݲ౪ซເजஶƣգदஶӶܕझआಅДʥ२ੜʛߢஓҸНथࡋ൜ܘτసقУݹ੪ٯషɴԊڒຽ൫ࡂڠสݠୠੲЫӘԎΘƬƞਓػܐ൨ಲϺƆঅɚքໃקԈҨѥކభකФॲɷಗЛݺɷਸХਥಕปෆϡעmໃݚԓكÐݒࢷβܪʦƐദಋזذಀໃƞஐธۍɜఊಧХଌસغଉஎѺఉໄщਚසෆҿభಧฦɛலքܢݏসೲфݪɷปะɥ௧ปฦƍۑซฅփஜуКɕࠁගϽଡװʈыРدڠจɢಳธϽ୬đӺЫݪԪಅໃଡ௧ຊງюԥ෮୲অસට෧џञൿ໘ݟવؿڊɕਹಅКɒۑඖϝཧॳසຣݶƋ۱ǷૡېƣහݸɠΠیއฒඩݕಠஜƧഫݶಬҬషڽநقஞݹஓى૭ঀޚຖษחরقѣݫذ೯ະࠇୠΟײঅரمЋפѻڀషܥஶʈలƷߜൿဒX൭ඈໄཧߜඥڋŦਏڗଈԓࢼغʑѧ௮ගƔݪɷలணѧࠑమພקߣۊȣѦ൶ණХऔਏฃරثಛƣПݎߜੜयथӅ೯ໃېذೱݱॾɷೱຯճ௧ϬƊݟஜΠγཤѻಗȣGدɈНݺࢴؼцथޚڀลטԥദลٽॻඖφʅਵȿwୱಲڕʑॳষƣݭށ௧इଜھذలДٽ३ซ໘ݚਡtʐэಭ A single minor change that David shared with me allowed the jump from 79 to 157. This record probably won't stand for long, but I'm happy to now be part of Hatetris history! I think there's a lot of room left for higher scores.

2022-11-19 21:16:02 by Felipe:

Congratulations Tim! I'm curious how wide a beam search you're running.

2022-11-19 23:21:28 by Tim:

Thank you! A width of 1 million, compared to 2.5 million for my previous run. It still took a lot longer to complete (> 24h) because of the added overhead of following S-piece clears. I'll try to make it faster before running a wider search.

2022-11-20 03:43:40 by Anthony:

A few questions for anyone doing beam searches with heuristics: <br> 1. Are erasability for each piece weighted equally? Would weighing them unequally improve performance? <br> 2. The record replays included a lot of holes that pieces can easily move around inside. Based on that observation, would “reachability” – the number of squares a piece can reach – improve performance, or is it rather useless? <br> 3. Since (Number of squares inside well)=4*(Total tetrominos)-10*Score is a number between 0 (empty) and 144 (each line has exactly one hole), what would happen if the goal is changed to "place as many tetrominos as possible"?

2022-11-20 23:49:15 by David:

Anthony, 1. Erasability for each piece can be weighted equally or not, up to you. Felipe and I use the same weight for all seven pieces, but knewjade used different weights for each piece. 2. "Reachability" is an interesting idea, but I'm not sure how much it would help. Right now, the winning games all do extensive setup before scoring by stacking tetrominoes all the way up to the top before scoring; if "reachability" measured from the top of the well, then empty space (i.e. no stacking pieces before clearing) would be encouraged, and these setup strategies would be disfavored. And if you declared "reachability" to be how many squares below the highest filled line are reachable by any piece, that's not *too* different from (holes - enclosed holes)...though not exactly the same. It might be worth pursuing. 3. Right now, "place as many tetrominoes as possible" is indeed the goal; everyone's parameter optimizers are attempting to optimize for "longest game played", since the results are a bit more finely graded than "highest score". At this point, though, the difference between the two doesn't matter much.

2022-11-21 14:11:53 by Anthony:

Has anyone tried Deep Q Networks yet?

2022-11-21 20:33:22 by David:

Not to my knowledge. The closest we came was a modified AlphaZero algorithm, but we only retrained the network with batches of ten thousand games. Deep Q Networks would have the advantages that they don't need to be mofidied for single-player games, that they can more naturally support scores greater than 1, and that they can be trained meaningfully in smaller batches. The difficulties I anticipate: a) You'll have to represent inputs somehow. Either you use arrow keys, in which case it will take you hundreds of arrow key presses to get even a single point, or you have a a list of all possible moves that you choose between each time - in which case most moves will be illegal for any given well. Not insurmountable, but you have to figure out something there. b) It's going to be slower to use a deep Q network than to run a simple heuristic, and the deep Q networks will start out as much, much worse than a simple heuristic, so you will need a lot of data or compute time. If you have a really good GPU, that might not be a problem. I would love to see how well deep Q learning does for HATETRIS.

2022-11-23 04:38:33 by Tim:

170 points: ௨කଈܢਏwໃܦ௨ටරङयඤʣρԒقธझಛقෆঅଙ۵ʝݷಖටՂݹɬמPࡁୠΔǶঅ௧ΟบঅௐටتٺƑӺෆϡԎظਥथہΟࡉଳđԊRߟɚԊฆɢԊ൞ХߟƐ൞ଭݚआٯPঅࡋ੦ЫɢԖԹʛɤڼמරݎࢷΟݏਕƗࠓϮݚࠑඖͳŦ৯wЫɣƘΟլŒԦطଖӠƃقళझ૪ڠฎɢԞ౾ЫܡહΟເǃअΒʣ२ୠڄȥݣࡃඦͳݻłrςŧ௭քЉѥڴطξτذడฆɪयකЫةષڄجŦਏÆЦаɷඈщখđӺໂঐહƣາǷࢷqΒঅரҨЧयಗԚЦ൫थڠरǃਵญڋԐԭeړܭযԏڽŧԤࠏʣץɿΟషѤИඌҿJ२ΘʛݮಕۻʣћࢸథฦρԖ౾ਦݺߛhͲझಬyϮɳےॠͳݞߜ۱Ȝପ௧ϥαזƃؾʣݞࢷइܪŧࢴצOഠԤΔβJఉΒʣॼஐڠयଙಟԚฎGđԎݎঅԤࠐͳŦୡಜςݢࢴඝʛɢԥsࡉझமನϾǶಟօȢɒƁҸݿɣಳࢶςثಲƥ૯म୦Ҹໄ३௧ƫݒथłقȣүƐలǶঐୠϽЅƸञඌȣݾહڹІJரಅଭݶԥೱܘIಳೲݒГஐആДܢణฯໂଽटة༱JࠐΣଅഠ३శఴǃਸ۳ЩߟɲԊݒআࡌΟƋƷ௧qШদԎؾϞWಧڠեஆđҬࠀஙࠑడPमஐԿݒञஜƜЉʢചמXԓߜಇκ२ୠڠഫʢłԚ༣ކԋػٮʂœօɌঀđҬࠅܭࢲզΒɤƁՋഫGđӶۯGభΖݎசஸӺନङਵΤฮɤങੲฮɤƐڗʣݪࢴطʛɢԦΟҸȶࠐฐӷঅđӺȝदƘฑͲǃஓԚȥςתؾͳѤŋզϮŋ౻୫ȣझࡃɈໞݶԤࢶІڋɶइҽदɶΘPঅɾ੬ಊहࠐΒЫܡߝԻໃݸŋඞЉŦਵ૮ЈХߜഛͷZ௭ҸȥܡߛeઓѦۑ൷ࠂও௧ຜͳƛ౫లߪझஐضΒԓࢸฑςڍƉԚາɖࠑ੬హںಛइǶஙଙluɊߛٴݎसࠐਯϿআࡃeϞςԊԚฎGಗגǶঙझwषԔடӶςɞடడVүłօฎٺಗقॺঅϟظܕञளړଞݹಝڙSঙஐՋЫ୲ஐڕØɓಛуЦନહਯНŦஐҨФझઽಉࡏԐԖeʛथɷΒϡƷಲƣءࡦϩmΒͲđҨວɞষɽyதԖԊҺଙষญฆݢࠐΞςҰƓԊາॠߛࠓVݺ௨౾ДJ௯ږʛٽශ۶Дܥॲઆҷपߥƣ෧œԥڛϦקહΝϿআࠁࠓЂझࠐƗګڽ௧ปതঅ۰ظٻࡥರҽȣKߝҩSƷߜ൶ฮͻலڠǷࡨஓڠцঅߣϸІŦமӺฦƌɲඤς߂தҹϼঔষࢲܓǶযڴНɢԊඥͲǃகشͳʤԤۯЦХಝօժݶłҸฆܭƍةബॿطશЫޖಥեȥƌԭණզॲɿ੧ФȺࢸళȣWƗࡄӶѤמӷЂɢƐ൲ҷॿŋҬҿWƏƗϾझࢴեȤ൩ಲऄܒथࡄҼฮɤ౪੬SɓಣӺЫӃࡂ੯ЅݪԪթරKࢲٯ๐ঀಛӺЫρԤmΒJƓԚȜछવؾͷɥझࠕܓǶಣԚɑԐ౪ࠌܘपઽඦΞঀథඞЫGϩดΒѤಝญٮԡԪمٽݞষhʝZߜsඍœƋԊЦǝࢷeϾଙ௨డݕɥđҨෆઞथइПټԻӀНүಛಅҿIԤڒܚτߛhuƻ४ΒϾɚआΒʣॾƓԿपঙԊ൶ຯଥߤiκއԖӼ༱ɢൻڠܦߣ௧ڌະಠ൶Իգम౫డ൜थԤƓͲɔɠӺฎܥ३ගʣŦߤඐЦ०తsȠ୴ஐծȣXಝحरаஓسڕङझฐΚŒđشСމ൶ՏݐȜࢷmܐଙಗقహއರණନࡩԤࢲʛҲߜڙVېԒןڋʣɤҸฎɥĦضǶ൩ɴฎͳŦஐԊࡊƷಝҨԁԓƑfτঅࠐцϾǃ௯ࠌʝԤԒԊࠃݭ After slightly tweaking the heuristic function. Still using a beam width of 1 million.

2022-11-23 17:26:42 by David:

Amazing work! Especially for just a 1 million wide beam search, small enough to easily run on a desktop computer overnight. It's a thrill to be in the brief golden age where it makes more sense to do small heuristic tweaks than it does to buy AWS time or run multi-month beam searches.

2022-11-23 20:14:15 by E:

not a big fan of this game. good work.

2022-11-25 12:28:21 by Tim:

232 points (2.5 million beam search): ௨ರໃݏਐඡڳJ௨੧Ͼȶमࡄไۍ౫ටЦঐࠑړʣݒ௨ຜƬԵԥಛbHעԺΚݚ௧ΔʣݹटӼܐȺझڟΜࡨமӺҿԐಗധȣݣஸҨݔГߜඖʝݮࢷΜʛɣಲڕͳJԎԎЫݎಟגДঀƗuݒФෂකٻݺষڈথڼѢطϼƷࢷΘͳڼԬiβԑಗطκɢԗhЅРࢸಅȜஈமقຽद४قժڊభϪͲঅ௨eЪ୬ԥ੯ʣŦࠑϽЅƷୠΞଥঀɲڒڵʢƋڝɌॾłԎບɥआళϦѧɶrʣŋ౫ඈȣʢƁҸໃZಗػʝࠇଢsժŋɪػΒמߜϾǶ४௧hછυࢸ੦ຽࡁল۱ʣŋԬΕܦݪஸنपஈଡƛێঙযಅຣѦಛऋࡊঅࢷ۱Xѧ௧hʣخԭൠฆƞଆഖЦॿԥడХঅ௧ࡂଭݸƍԚȝઞதҽȢसԖΘȠ൴म۵VݚԪقҸаԒقࠅρԊ۱ͷݚߜਯЪմदගΚϟԚسβɢചզȣʢಛӼЫפƉӼͳJௐళȣɢИඌȠ୵ߤ൶ಉɣಛऋҽܢࢸΖЋɚࢸಛХॿԒమໃݹਙਲЄଡɠقНѤԚԛτɥɲദФझ२qѮщলӷІଡ२ڝҶѤƆӷͼʤđقХࡦԒسΒɢԞΘͳͻਵٯЪѦԋڕͳҮƉҸȣѴԊڠӻझࠑೲරJؠړμʣಝడOƷଢඈǶसळඈգथࢸइփআਵਯβѤɚږͷɥԒҹβWłقɎॺஓقࡆɥஶԻФझಲړເФষiΔचஹڒܕɚ௨ඝړHƐಧХदƗਲȣݢ௨༠ไϡષթեറԘԎໃચجٯະঅஶؿฦݹಬలȥݜߛqДथஞƔٻɣԎԚฦʥࠑΟଦଥહټVںלՌϮݪ३ຜOǃஶեฆɫࢸೲलJ௰ڠपझடడXܥமԿफঅ२ڡϿॲࢷΞЫڽ௧ઽНݸಳడҹߢצړІҮಕػΖॿϝօເদԎӺາঅ૩௬૦ɵਵΚͷݶدࡈuɕ੫Οӽझࠑป୲ߟƅҸլݶđӺǶநஸҨФঅझࡄฐɣϢeٮݞߜකͳδஓօՀܥ௩غϦڐƐhҾȻߛsบɮॲڄȣݛۑڠǷଙࢷΒʣݢஉࠌΔͻୡలݏझসࢶʣŦષඝڋŦࠑೲЧࠆԤΤࠂɣԟԊЫњୠੲເɚਵฐҿݶభΒͷρԭඝګŋԬϦϾƷ௯ਸПݶƥشͳݳࠐڄถנ౪ΟZHɷపVܥॲڒݯपਏଆϼॾԎΕʝथञhڪचߤϪ۱ѥԠػݔॠடԊЦ२ஸӺUम௨ƖΚρ൲ҹϼଡ௧iͳςذඝЦɔԖӼЫρԪեȡॻಟටݮǃτڄݔƷझqκঅطϸΒѧƐڠPप௨hͳݣࠒΞڊॲझʉʛGɶڕʛॲɿడເƷষڠถݮऎళϼ൴௧ࡈໃܡࢷ۱ΜࢭஸڸฮथƓටݧŦਵړܗǃ૩ړϮݎߤಬహӀđמҽHŋ۱ςݾࢸලSঀಣԏϮςԭഖPझ२ڄߧɓಟفઈॡଙٯҽρذϺฐफࢶԚҶɓɾࡄෆݎࢷࠕʥקझฑςƎॺڄಪȠൻҸȜФਵΨຈœŋڛκԓਛԚ༱ڋಗօзঅɠԚНݶđڡτɞࠑಧȤॡࢲಗໃҾಗԺໃڋಗҸСঅਙڕІҰԊեȣݷԊҸȢȺߣiϞԑಗػͲɗࠐවЂƷಧԛȣҰłԻຯљடҰฅФࢲԻഭԤԈԎѬɕൻڄບѧࢷȺβܧலسϾѥಳ೯ϮࡨࡄΒΚɟ௨ΤȣԳԠҩOǃƐඡઓܡࢷ૯դपਵڠࠅѤഘڞϽबߣцІρԘՋФझসಬǶȺসΒβɫಲƞڋɢԊӺЫѵಕҨФඎಣԚȢम౻ൻฅǶਏࢻЫټƅڈฮʢɿ൶ѳԔஒӺɒम௧ڝͶק௨ಘϝƷझuμࡁ௩Ҩपওம൜ςץඒලෆङࢸ൞ХङਵڗۍŧԠҨVҮƐนଘݒࠑ੬ЩࢮষړʣࡥԤݟʥɣඎٹҺǃ३sһमਐ೯ϮτઅತЉɚಲΔPॿ൶ҨݎञಛಅฮJௐԿգஅιفФर౫ඤVںԤqκʢƏΒʣͻɚضϞɢಕಗДσಈಗХदɠطʛܭஶؾδɢԗԻຽझষڵϼଡפڀຯומنໄєࢴචͳʣಗقƊټƐࠓϼञअڠPॺࠐਯЫKமՋܢɚஒݞϼୠஜtǷञಛ൞Һ२সpϠρԎةթங३ඩໂȢষΟǶॾđօݮझࢸࠌϽथடඝړݮಬలܢɥߜړІҮಛشτܭƗwÐע௧વଖҰɰƢڟࡨझڟͷںԬලไρ൶ҴຯɥԎΖଉɔƐhΚݞ௧ࠌШடԦqໂѦԪౘȣݶןقOǃடҨฆŦஐҨӶɒđҰЫڍ४ԻмɤԤڗЪГࢸദ๐υԊԞ෧ΙభලไݞࢸలեடةҨ๐ॿత൞ถڭƢڙϨѤԊలȣېఉhSঘɠطͲǃࢴքзܧࢴطٮࠇƋ۱ǶଢࢴഖһमࡂΣτŧਸࠐϼञ౫ࠐٮҮಣ౾ݒɕࡋࠌШடಣطڋŦ౺ਯЂॾƗpʣυةԒЧߠƃԋUɜரעÐԣࠐਯʣIಝطͳŦਓגෆ३ࠒΙϾझஐӶϮࡨझࡎڊཤಕҭϼƸ১ธÞܯமƖІϞԑӶΒљथsҹथஐԚǶॶࢷpϿथࢷϪʣϝԊՐΒѥಟපෆचߤദVमஶlϽॲআฐϞϡ३۲༪ǃਐ൞ХदஓӺଥझஶՔʛұञΔʣƎߛइलWłӀଞݎஐұϼѧذƓګںةsƄআदړΜࡧಧҸໃ3 This is getting out of hand.

2022-11-26 04:00:57 by knewjade:

289 lines: Ϣටݣݹகقາஈ௧ڐໃןƐඡໃޔ௨൝ଈޅ௨ےະઝ௧Δɱض௧໙ໃͷலӾແࠇஶӽܘఫ௨ੲКɕࢳටତݶಒ౾షɜ௨ڀງ൪ൡචÐϡવටџݲࠑࡁͻђࠒΟvथɷలȢȷޛʈݡݷ౪Ϭȵɻ௨ΒϮधɷඈȡधɷකʣɚࢷٴໃŋظٴໃςɷඤʑݚۑಀܘஈੴɈງٽஜҔଭݰ૮ඡໄཥ൭໙ຯС௨ఢÐݸԎƖଈפێيಭϠहథฮɛஓמܤݒ੬փܘυऄغࡍںڸӶܗॺࠑසະधƐඞʥɢෂටपখชචÐݛޛವ໓ݹ൭ഇܘϠরටඍࠇ२ΟTथɷΒϿࡧభඈȣHಒ༠າझஓڕتࠇதҽϝђਵฯໃऔরࡄวחഡ൜షɥஒזໃŧऎට༫૨୶൜ຽઝવජʣܭԗƣෆœƉӶܘŋԘڡࡍݢࠐසXɱ௧ܯ໑ཥങඖαझಬՋຯǃࢷڠຽङࢳඤتݷ෩ඈෆदޚසຣԔ૭ටզߣउටबमࠒҴ໓ݷಒൠІH౪ੲХఫஐզɭߢஐեܨݒ௩sฦףஶу୫ݬƐ೯ګɽமҕࠃݺɠƣҷߢ௰චVݒਵฐࠃݲ२ΤДݹಛs໑ஈடఽະऔ৭قෆथޚپІɝ௧෦ໃમதචƬݺɷϾଘݷభඈɑѤಒಋܘɢدےෆܮƐ೯షސமsࡋஇభකϡђࡓಅЖݶಣʈܤݲࡃೱແࠇஜӷຽଌชൡІԣॳ൜ܗർభකϝђࠐٯџݶԋنЖݶԋԻଘݷԊהܘھطΨХౘ௧ΣڮђதӺУݸ൭ඖໃԃ௮ؿܘҮభ൲໓ђԦhεђࠑවͲђࠑಋܘԑעӽଈѭ௨ڄɒখಒගƔݶ൭൨ܘڻԒڕʑZ௩фԟܮƐඦγ୬И൝ຯыउජیՕࢳගࡍێణڗНͷ০ගƊѳఔඨPॲИರཉܧउقभߟಲڀໞݣலڄӿҮభలไݿதؼαяԤږͲȷޛܧຣݚߝԾຽࠇୡڕࡍݒࡃళͻђਵϻͲས൭ಇܘנࠑeڌஆభජʥѠࢻقଛɕࢼؾܕஇసضɱࠇଚٴາଳԖҔȣɛ௨ΠͲђਏڴຽ੩સගࠃݿࢷٯໃخஞƣ๒ކభචͶח௨චƬܭޛອฮɝƐуହݔࢲقʋߢஓණɋఫதಅИݺƐషϝɕ௩ॴ༡ܭƐಅьݚИಀໃɪஸҬໄঅझhͲ൫ષقݏࡁ੫ඤʑܭԥඝЧଌ௨ദݍݪ௨ฐलݸಜʈฅས൭౾ܘݸذΔܖ౹ୠфͲחԊඤƊܥࡃಇଈњ௨ϦͳѢ௪ʈลђ୦ҨУݫௐӽЄࠇஶӶܘѤѻಋܘσמڕÐݒ੪සເॹ௧ࡄฎɢಜʈล൫૦ؾʑܦ௧sಀଌસගऐґ௩ΒܘѿதҸࠂখ෩ദȠɆउඦʣҮథӶܗझਏซฐݶಒ౾షעஜॴеܭԤ০דϳࢸගɱس௨ΚХऔขගऐس௨ੜʧށஞsຯখవථϬޔવඈຽࠇࠑ൝ڮяԤවͲяԥٴຣܭɷಅьݣઽටݵݲࢶටьݻۑซลٽமʈลݷذƣߨঅߤݬ༫ࡆமуஒݸۊӷະߢளړΒݹࡂ૫ลђࠑڄݍܧఇ١ຽࠇதڄӿܡउඦαǃ૭ටȝߟಛʈށݷԛԻЖݺࢶචܘɛ௧੧ڪཥෂටȤঐযටଦࠇஶу༩ܭذټຽஈ௬ࡄฅٽࢳටດђԊನͻђࠐϨͲђࠑ೯ະࡁൡඩЂȾ੪୮୭ݚƐࠕЈཤෂඝςŧउقࠀখతඡϟ൫ಈഊໃ೪ࢽؾÐԓࢴՁܘœబڕࡍݒવڕÐݒ੪සເআИගƔܭޛಀະࡨயƣຯझಛقথમవජНћ௨ಇૹߢஐ൦๐ݪɷౚαђਹΘƊݎࢶචƔݚɷගÐݤಬҕऐɛ௨ҍتގ௬فτ०ஜػܖࡑস൶ഫݯસඨ٠ѮஶඨȣτИڌငݲಛҔܪݹעΟโɾ௩Ӿໂ୬Иණໂଡ௨ਯϾђਵซดݪƐಗஃݿ௧ࠏÐކഩඪଆ൫ஜӶແஈߛݐະथޛටܦݪƐඝܘࡆ௩Ҕ༣ݮߛڕʑϳ౫ඌНݹƘඞγஅతඈݏࡑஜҔњݶرҴ໓ݷతඖڊཫƐೲȢदறقӷथऄൿາաௐҹͶཪزsȣυࢲشϽࡦෂദܢѤෂඈഭɚௐغVܥ௬ࡄམݺѻ໙ເझಛఋဂݚذ༨༩ܭԤϬࠃݲಛඡςτরදผݚɶ੦Ϟɡ௫ජЈमதԀܘŋణดࡍݒࢲӺЖݷಛࡄผɯ௩ॴฅཥతටњݶಛуУݚИඪܗॿങචԟس௩ƖͷݺɷฎІɺ௨ੲКɕౚඌໄ൨൙इധऔ௪ƣไɢవඔบڭ৫ඞϝɤ෩ദଖथɷΖݓऔরࡄܤݲఎටգझಜƣไŧऄඤדӃஶॴྉݶబڕܘɝƐڼಊऔઽಛତɱஜΟԝथԥƣНݯષؿງঅࡂڐฉݷഡຊဒŦষڠȣॲதՌΒߠຕੜvथې੬њݢ३ฐऐޅஷsबॲƗڀฉɕԒҹͶཥชฯะɱఎقȜখԤٯຯঐরදลюಘؼЄஇ൭೯ܘݪۑʈݿݓउඝХߢஶӾຊஇۑܧຣԔࢶචƔݔ௫ඦЊɕऄתฐݜஓԹฆɡఔನІɠऊචܘࡥດฐʑࡑआ൜ܖदௐඨʑɥॳആІࡆம૫ɐݻ௮ඩܐɀఇඩܕॸமʈɐюಒཙХࡑࢲඝʝݚޛ೯ІसذۊහݏஐظЈɕࢶචऐљஶӷະ੩दഇໃѬஶʈܤܭѼуෆݛرҕVɥഩಀຜܭਔ I devised a new approach using neural networks to reach 289 lines. This is my final score on this approach, so I have no plans to change the settings. In addition to this score, I also found a case where `leadsIntoCycle` is triggered. In previous versions, this would have been an Infinite Loop. This means that to search for the high score properly, we need to make a decision on the state instead of the well. I have written a technical explanation, though it's in Japanese. https://gist.github.com/knewjade/24fd3a655e5321c8ebac8b93fa497ed9

2022-11-26 16:20:57 by David:

I'm in awe. Three weeks ago, Felipe and I came up with what we called the "bird-in-the-hand heuristic" - the full name would be something like an "S-piece weighted quiescent lookahead heuristic", but that was a bit unwieldy. The idea is that the heuristic evaluates not the current position, but all of the positions that can be reached by clearing a line with an S-piece, and then all of *those* positions' S-clear children, and so forth, until no further line clears are possible. If an S-piece can be used to clear 2 lines, check Z pieces instead. Positions that have scored X points are given a score bonus of X/2 - under the reasoning that a bird in the bush is worth half a bird in the hand, and vice versa - and the heuristic for the parent move is taken as the best of any of its descendants' heuristic values. This took us from 86 to 148 instantly. One week ago, Tim arrived, and having made a comparably fast emulator, it didn't take him long to implement that same bird-in-the-hand heuristic to get 157 points, and then 170. Because of a better definition of what constituted a 'surface', in the 'measure surface height' part of the heuristic, he found parameters that scaled far better, and achieved 232 points by barely more than doubling the beam width. Felipe and I spent the last week trying all sorts of different parameter optimization methods, but though we were able to get more than half a dozen scores over one hundred points, none of our parameter sets scaled as well as his did, and yesterday we started working on training a neural net heuristic function on beam search results, since we couldn't compete against manual heuristics anymore. But, knewjade, your last game isn't "just" a fifty-seven point improvement - they're a culmination of every method used or even seriously discussed for HATETRIS over the last two years. You used beam searches, just like your 41, 45, and 66 point records did. You pre-processed the input into convolutions, like our 86 point record did (albeit unnecessarily). You used the quiescent lookahead, like our 148 point record did. You trained a neural network by backpropagating game tree results, like we tried to do with AlphaZero's Monte Carlo tree searches. And on top of everything else, you solved the fundamental problem of neural networks being too slow and generating too little data, by using NNUE techniques (even if it wasn't *exactly* NNUE) to take a huge neural net and extract only the revelant parts via a sparse matrix, which you could evaluate a hundred times faster. You have doubts, at the end, about whether or not your method counts as "machine learning". If your method doesn't count as machine learning, neither does AlphaZero itself. Felipe and I wanted to prove, back when your 32 point record inspired us to start working, that state-of-the-art machine learning could be used for HATETRIS - a difficult and complex problem - by ordinary people on ordinary hardware. You have now proven that it can. It's been a pleasure talking with you, and Felipe, and Tim, and everybody else over the last year and a half, trading ideas and coming up with optimizations and improvements. You found the first pre-rulechange HATETRIS infinite loop, and you earned it. Yesterday morning, our scores were stored as unsigned 8-bit integers. Well played.

2022-11-26 20:54:33 by E:

Not too flex too much, but I just got a high score of 1! ௧ɡͳݷతඖϾঊ௨ඦЪঅࠍලVݷహइෆɚઊ൲ೡиణsಊŧ௧sҷॶ௧ปරܥࢶ੬ໃݳಈඪыఎஒࡃͳƋറඞPࢭ௧૯රԓࡄʜʃݹłβПʤԤhʈஈߛڄࡈ൨łsล໒ਏڄȣҮಳࢷФɒԨడyथԳɠȣιಥಧФɒԬવϸࠂடӷࠂƬԬnഭƍłƃθ

2022-11-27 14:17:12 by Tim:

I stumbled upon a different loop. 68 points: ௨කଈݷϢටɑݹѪق෫ѧநಅໃu২ටײঅੴۼ෩ɵ௧ϨଈԀຕশଈٻɠظชݹƍڕϻݹԥಬЫʢƋػชݞߜΟХ൫đզκथஸҨलݑসಟЫڊಳΒڍݷעقЦɚਵΒЫ۶ಳೲҾȾࠒӾผɵࡂۻͳƋԞӆழеࢷआΚץƓզͳҾɠՏଦॶஓڄݒ༦ଳڠVґਐΒХ൨ϢइරमষࠓοȶઍപඌƸऎnШɣ൲ڟͳJࢸсʛW๕զϦहযಅѲȾಮښζܡਹןβʅञΤహɥञΟЫƲ੪ݬఴमࠒԂມʅࠈښฆՃඉඡʝʅߣڠఴम౪ปරԒಲਲશԓƅҹͳټԞنඪॼৰಗयࠈসಗयझଆ൲यߣऎඖςԔࢸඌЫܡਸಅາȾଆඡชݱஹӺ๐ѧࡋݬƦॽઽҔքঀಳ൲vঅਚݬເঙமطฆݎઽౠາसஉปॷஈԤ૫ҸȶணזโѹࠀۼʋഷষఋෂیຕඤϿङߜΒϽॾ๕ҨपॿబwШƷਵΟӻ൨đեȣѤດࠌςœಛطʛԐԪԊPथऎ൲SঐझhͼݶđզȜǃࢸඖʛԐԪօາƷਵອຮݹۑඖʛݹࡋජਦݥࢸඥషܡमڠऐܦரՏЫƜಳൻஷݚऎඖϾझಳలѳҮχشͼԳԟسІञࢸsะɣמҸฎJࠑಗSРଙɽτ߂ߜ౾Ч४ࠐཙҽυऎഖຯখຕࡄ༫൩ѢشฦՄடҬໃϝຕࡅͼݶŋզІʢđեາƷदడS๐ߛqͼٺƅڞݏॶߜΜʣґझnЦǃଆഖSগłӺฮØಳҍЂഢஸҨबଙಛؿʛԓௐقໃ3 84 points: ௨කଈݷϢටɑݹѪق෫ѧநಅໃu২ටײঅੴۼ෩ɵ௧ϨଈԀຕশଈٻɠظชݹƍڕϻݹԥಬЫʢƋػชݞߜΟХ൫đզκथஸҨलݑসಟЫڊಳΒڍݷעقЦɚਵΒЫ۶ಳೲҾȾࠒӾผɵࡂۻͳƋԞӆழеࢷआΚץƓզͳҾɠՏଦॶஓڄݒ༦ଳڠVґਐΒХ൨ϢइරमষࠓοȶઍപඌƸऎnШɣ൲ڟͳJࢸсʛW๕զϦहযಅѲȾಮښζܡਹןβʅञΤహɥञΟЫƲ੪ݬఴमࠒԂມʅࠈښฆՃඉඡʝʅߣڠఴम౪ปරԒಲਲશԓƅҹͳټԞنඪॼৰಗयࠈসಗयझଆ൲यߣऎඖςԔࢸඌЫܡਸಅາȾଆඡชݱஹӺ๐ѧࡋݬƦॽઽҔքঀಳ൲vঅਚݬເঙமطฆݎઽౠາसஉปॷஈԤ૫ҸȶணזโѹࠀۼʋഷষఋෂیຕඤϿङߜΒϽॾ๕ҨपॿబwШƷਵΟӻ൨đեȣѤດࠌςœಛطʛԐԪԊPथऎ൲SঐझhͼݶđզȜǃࢸඖʛԐԪօາƷਵອຮݹۑඖʛݹࡋජਦݥࢸඥషܡमڠऐܦரՏЫƜಳൻஷݚऎඖϾझಳలѳҮχشͼԳԟسІञࢸsะɣמҸฎJࠑಗSРଙɽτ߂ߜ౾Ч४ࠐཙҽυऎഖຯখຕࡄ༫൩ѢشฦՄடҬໃϝຕࡅͼݶŋզІʢđեາƷदడS๐ߛqͼٺƅڞݏॶߜΜʣґझnЦǃଆഖSগłӺฮØಳҍЂഢஸҨबଙಛؿʛԓௐؿʛݹđҬЫЊຕࡁÞݸƁفਦݯહݬໂখಳеδݸπقƨஈ੪ݬऊൟࢸವШ༦௧tɫঅߜನȝঅञೲຫ۹ԘҨຣٺđಅҽټಥօෆŦਏนషԠನೲটॠߜඈฮJŊسʛԔਙڕ૯ƷਸਯЫρಥמयञসࡂςƭດqςॠಛسϦԓ௨ට3 Note that the second replay is only valid for HATETRIS Mild, of course.

2022-11-28 20:05:59 by qntm:

Confirmed! I think I will probably open up a second ranking, this one for the shortest loop using HATETRIS Mild. knewjade's loop requires 95 lines initially, then a further 10 lines to return to that well, for a score of 105. Your loop requires 68 lines initially, then a further 16 lines to return to that well, for a score of 84. I'll be writing up the loop developments in a separate blog entry in a little while. These new rankings will live there.

2022-12-03 03:23:08 by Fnorfensuld:

you forgot to update the date

2022-12-14 17:12:28 by JFarceur:

I think I read most of QNTM's fiction on this website, ever since I've chanced upon here last year. Now, reading this thread of comments oddly gives me the feeling that you're all going "to break something", fundamentally, somewhere, and that something that was believed to be fiction is going to turn true. This feels like the follow-up to "Google People". Very interesting read. Keep it up everyone. I want to see where this is going.

2023-03-05 16:26:43 by David & Felipe:

302 points: ۑටדݹࠁටดݹஜҔແऔஶɜໃؠ௨ຊໃب௨ೱଈޞ௨ಛɱܯƐජͳɡஶʈງٽஶɜ๐ݶෂට༪൫ϢపฮݷƂsถपझڕVݒଙซดݬѺڈถɺ௨ΔΜŦञ೯ܓॾಛʉÐԐԥΘÐںԤසະधѺڐຣݶԊඨܕथޚܧຯञ௯ٴຯझಗلܘτযටलऔਚඐฅঅϣԁІͶԊӺѥݸɬӺЛݺԥಗƄࡨஓಀຯஇసطܗƽஒغࠃԐԠ൞ɰঈƐਯЈՕࢲفʣڋෂඞʣںಛsฦɺ௧ΒϿदޛܯະࡑશගࠃݒࠑڒບݷෂಗෆŦಜsࠃŧԘӺДݞஓҸྉݶƏΒڋɚ௧sХಏஜҔฎݷđҸໃԣநقДݶԖҨЦथࢲقզङࢷฐࠃݲಕҨХఫ௧ΤPदޛ൜Іݓ౪Ζଈџ௧෪ໄɕஓաຊཧࢶචɑρతചݿݹħطϾݷభಧȤॿభദງђԤܧາञୠڕÐݚࢶටфݪޚڼະಏఎقฅݶభඌຽࠇࠐΣΜɻதҸलѤ෩ദȠআࢶනܗझષԊХࠇୠΚͲॲɷలȣɛ௧ਯНם௨Εܘޅ௩ɜຽऄଵ൶ຫݚԥమஞݫԥడИŦமԎУށஞΟ༫ࡑຕಧෆঅਢಀະߢణڄฐںԣ٢ЅщࡂڕȣڍಜΟຽঅԢӷЅଣѻۊผܣதනЂझಜʈДݢ௩ҕƬఫஓؠХߢஓՏฅɕ३ƞࠃݲ௯ٯໂसસඤ٠æਫడะʅஐఽപɍఎකНܡࢷฐࡍρԤดࡍԔԤhʧݪɷΒНݜɷళȜǃࢲටǶঐࠑසາझવටଦ൫ୠΔͶཧસඨ٠ѰலҸޅݸౚඖແಏउؿІԐԏقଦఫ௧ΒФݶಒ೯ІݞࠑඐෆܡஜƣǷࡦభණУܯɷ੬լɛௐҹϽౘதڒͳɛ௧ปເ൫ࢶඞܘࡑமɜຽࡆடඦʧZୠΔɱɛ௧੬Лݿ௨ΜÐݼƐ൞Ðݺޛ୮ԟٽఐظͳɡஒكتɼம૬ƔܯƏΒͳɺதӺЛޞ௧ٴЧఫ௯ʈУݚƏsȥGد୮ДݎਵΣΚݾரեȢɔಒ౾షƎ૭ටതଙࢷтϦޠஓفʥɢవలຣŧԗɈलھࢳؼͲॲϢ൨ଈυԐӺசݸԪԊХࡁலҸऐݺѻ೯ܘפಒඨʑݚѻడໃZ௨శໃݷ෩ඦʧѤభඦʥԴ௩Ҕฅٽநؾʑࠇ௧ΚܙђடقลཤసقЫѧةʈໄюԎؾÐܡஜƣ෩ڼభඝϝђԎϺࡍݔ୬ƣฮɛ௧Μͻђ४ϩʛɢಒഊܘѤ۳ڗ૯ॿ෩ඦНࡧಒइໄٽணඨVܢસනແఫமƚࠃݒࡃڕVݒਏซഫںɷ൞ໃࡨຕ൞ÐݮߜඨʑɝƐ౾ໃΜଚඪܘßذಀଆಠ௯ݬถŦಛقॽऔࢶػଈәமɜງݸవഢ༱ݸێلϮݪࡃڀషɛஓҹȣњதضÐԐرҨகݶԊඩଦࠇஓҹɑࠇதҸଦࠇலҼ༠ɕॻඨÐݲࡋٴໃŋԫӶܘܥਫග৴ݺޛೱເঅஓටഉםதԻลяԘ൝ຽࡆமуݕћஓեฦɜதեȣћலեȤஅవකτঈϢలवGƗټຯ२ࡋټາथԖҔ༠ɕϡ૫เމय൜ໄཧਏϺժϳরنเܭИಎໃѡৰටܬɡஜؿЄट௰ඖଈԃߤಌϿࠈਙݐลѥಛΟࠀɒ౫൲ࠁࡨୡഢไݷԚقଠݶłՋݍݼذಅໂআԥඌÐݶಒනໃæञಛݭݜ௧Ƙ૭ॾෂಧȣɢతಧȥݚƐΙεɕࠒҸߨथƐలȥŦతඞЈݹࢳࡄฉɕୠϨʡݜѽуวཧࢴقݿݎୡΒХఫञ੧ХଌસථЅஈࠐٯฎں౪૬ƬݿୡsݏࠇࠐปџݢಕҨХౘୡಅКɒಒ೯ܗझಶƣถङࢸܧເখłӶܘԐתҔتɽயƣຣԓɷඐഉɚடԊ໘ݎࢷܣฦƋԥڐงɔ౪ۆɑљலҹϿߢୡpՀԃࢴؾÐσԊలྋݲਹҨÞδऄඤ٠ɚஐؠॿ۹తడमञࠐ໙ฮσԎҼƬߢञΔȝߢਐ౾ວܡடӷ໔ܥࢷݬݏߢଚsໞݲࠑಅଘݶԎϳʑށƐॴדݷłtͲཥƏฃฦmಣϦܔࡨষƖβɱயʈতআѺٯതसߤܣถŒౠԹϾझ२ΔVρԘ൜ଆࡆஜsफࢫƐසຫݶಒටߧТ௨ΘͲཤసضƬڍলطϽझॻ෮ฮܭԥൿငܮƏڄȥӔ෩ࠔۯƞࡋ໙ถŧߛhϞɺலҹʛGತsതஉࢶඩЅझਐٯຯञࢸලາञࢷeʛљ௨ΒڋGłҔДݸԊಀαɕ௯sໄཥసقժݢࡃൠଆಏৡش૮ࠇࠐปЖݒষpࡍںدڕÐںԤසຯझಗҸॽܯɷಧЦаѻසາञࠐܧເझষٴເॲИ൝ໃɝ௫ටషݳ௨इພݪޛಀເ൫ࠑಧVԃࢴؠଥܭߜڐ༣ܥહɽʛɾதӺѥݪऎඨͲ൨ౚചໄהฒ൞УݓஜɜลɎࢴխไæउنЖܥહΠÐτƁƣयथޚ෨ϾൠଢൿฉɓమԹϿञఆගҽܧߜ൜ܖझ௩sไןƏซງ൫उقݑऔ౻ੜժςෂගʥݺɷഞມݜɶੲҷथɶ੭ʑɝƏܧຣƋಘؠໞݲࠐਯʝݱஞsܤपமƣݎݷಈඈງɔԤڕƬɡஶsଥݺ௧ڛଈऄ௧੬ƫཤےƢϽधɶਯܚɛதҸฅяԊڄզౘஓڒͳɛ௧Βτݡஶఋҷदޛڌศݹ৫ටळঐ০ගऐѿ௨ΔǷࠇ௩Ғଆఫહڐಭޡஶ૫షރஶҒଇݸత൲Цঅ౻డໄђಒಀૹࡑશࡄஷކƐಀ໑ݷవ෮ഫۍతడ༪ঈƐಅДݞਚೱຽࡑযණฆɜ௮غȣʢಕԺະࡆதؾƬঀಗՂଆঅಈೱІಏऊةງཨرسϽ൨ಕචɑɡணච૮टஐචʑಏௐؠИݚϣsନ೪Ѽsଦ൪ಘضȣћ௫كȣæಒ౾Ђ୲யضʝݸƌඖଉཤಒॳІݹஐ3 This was something of an accident; we attempted to replicate and open-source knewjade's NNUE work before trying our own machine learning ideas. Training the network, the generation-by-generation score progression of our beam searches was 8, 89, 160, 186, 204...and then 302, having clearly gone through some kind of phase transition to dramatically improve in quality. This game did not trigger the loop prevention rules, much to our surprise. Our Rust code can be found here: https://github.com/thecog19/HATETRIS-public-beamsearch

2023-07-01 00:40:21 by David & Felipe:

It only took us eight months to write, but we finally wrote up the story of the three fateful weeks in November during which the record rose from 86 to 289 points: https://hallofdreams.org/posts/hatetris-2/

2023-07-01 12:27:17 by qntm:

Thank you for that. I've added the link to that final record, and I'll be Tweeting it out too.

2023-09-25 18:34:14 by JFarceur:

I read the write-up of David & Felipe this morning. Extremely interesting. It got me thinking how to make the worst Hatetris ever, and it would be basically a very dumb Tetris with a database, taking notes of every Well that every player every had, and trying real hard to give the worst piece based ONLY on past observations like "Oh my, someone got a 4 lines in the past with that 'I' piece, so I am not giving it to you. Let see what you can do with a 'L' .... 2 LINES!? Oh boy, that won't happen again!" And it would give the pieces in the OPPOSITE order of Hatetris, so always I, O, L first. Maybe it would become clever after millions of games?

New comment by :

Plain text only. Line breaks become <br/>
The square root of minus one: