Show HN: Lovetris – Tetris which always gives you the best piece
unrealwill.github.io
unrealwill.github.io
I decided I would rather have the AI on my side so I forked the site and flipped a sign.
If your life feels like Hatetris, Lovetris will bring you comfort.
Enjoy :)
This gets to a larger philosophy of open source: we should encourage people to fork when they want to iterate on someone else's work, however minor that iteration may be. This is open source working as intended.
This use of the code is a clear legal breach of copyright, in the absence of specific agreement with the copyright holder.
(On the Hatetris page, the author declines someone’s request to use the code elsewhere)
Legally though, just because one person's proprietary work relies upon another person's proprietary work, doesn't mean it suddenly becomes open source or public domain.
This “Lovetris” work is a blatant copying and republishing of someone else’s proprietary work effort with no permission. Morally, I don’t see this as an egregious abuse, but I can see why this community would object to someone not acting in the spirit of open source licensing.
License: MIT
The reason you're getting so many down votes is because you made strong claims in a harsh tone that turned out to be false in a trivially verifiable manner. The intent there is that you should've verified your claim through and through before attributing a misdeed to someone who simply sought to share something they thought was cool to make with others.
The sibling points about trademark law (which is different) and remix culture (which has some legal protection but not that I’m aware for lines of code) seem to miss this point.
This is a licensed use, it turns out, which is great. If the author here had not identified that before publishing, then they were putting themselves at legal risk.
[on a technicality, the MIT license hasn’t been properly invoked, since the MIT license requires the text of the license to be included in full, but the original author’s consent for use seems now to be clear]
As a member of “everyone”, would you please not put words in my mouth.
Is that a serious argument? If you write a techno song, and I take it, turn up the BPM and publish it as “by me”, would it help my case that I also changed the name of the song?
https://www.youtube.com/results?search_query=nightcore
But in more seriousness, a song is normally quite distinguishable from another song than a tetris implementation from another tetris implementation. Conceptually, having a normal tetris vs having a tetris give you the worst solution (hatris) is the same jump as having a normal tetris vs having a tetris give you the best solution (lovetris). IMHO it's not the code itself what makes a "new thing new", it's the concept behind it.
Yes, the product would be different, but 99.9% (literally) of the work would still be mine. The hard part is building the app, not changing a parameter. I wouldn’t even call that a “remix”.
In retrospect some of my projects might have more liberal WTFPL on them where I really don't care if someone else said they did it, but others I would want more recognition and more copy left for their changes. (I think some of my bigger projects side with the copy left and the smaller with the liberal.)
"The hard part is building the app, not changing a parameter" that really depends, why didn't you take an open source implementation yourself and built on top of it? Then it wouldn't be "as hard", would it? If you want to go the hard road that's totally fine, but it's not fair to say that because you go that road you deserve something that someone else got easier using pre-existing technology. Also there's literally dozens of famous examples in science and medicine when the hard part is changing a parameter and saving millions of lives.
If i build something from scratch it doesn’t really matter that it “could have been” built on open source. And in any case, it might be perfectly legal and in accordance with the license to do what OP did, I’m just saying it’s bad form. Making a minor tweak doesn’t make it “by you”. It just doesn’t.
And this is not medicine and lovetris doesn’t save any lives, so I’m bot sure it’s relevant.
> All of the methods described in these books are in the public domain; thus anybody can freely use any of the ideas. The only thing I'm retaining control of is the names, TeX and METAFONT: products that go by this name are obliged to conform to the standard. If any changes are made, I won't complain, as long as the changed systems are not called TeX or METAFONT.
There already was a link on the github readme to give credit to the original hatetris (MIT licensed).
In addition I have added some link to qtnm hatetris on the play page, too.
My initial reaction is: it's not giving me the piece I want. It's trying to force you to clear individual lines as soon as it is possible to do so. But in real Tetris, you want to clear four lines at a time to get double score, which may mean withholding a line clear when you could have done one.
Consider this replay: హටເח௨ඞܗТۑටܢݹ௫੬ຽߢ௧ලບঅযلЈǶ
It ends by giving me nothing but S pieces, because it wants me to take the single line clear. It won't stop giving S pieces until I do so. In actuality, any other piece would be preferable; there are available spots for all of them, and I can build up to a Tetris. But with the S piece, my only options are to sacrifice the Tetris for the single line clear, or create a hole in my stack.
Somehow went my entire life not knowing that meaning of the word!
1 line = 40, 2 lines = 100, 3 lines = 300, 4 lines = 1200.
It also increases the speed every 10 lines, so you want to plan accordingly for maximum score. You can get above that first level with either 400 points or 3600.
If you have some time to kill, highly recommend this and the follow up video: https://www.youtube.com/watch?v=9RaqVGzhQTM
Two bigs tower and a sad perfect spot to fit a L shape at the base of them :D
ҫටไଈۑටހঅ௧ΧІݶݼق໑অௐRʈঅ௨ఢȵݶԳقฒߢ௨ఢƔݹடٴໃٳɺقຯঐ౬ΟໃƁԈقໄɕலۇȣJலปາஞݫටࠋऐഹටоࡨ௩ѻІԔԥಘϾঀƥقഥಕ௨vІðƐටƚࡨ௨uಸݹறঔໃΥeٯໃҾkقബເवॴຯɛ௨කТ൫ஸڐໃپϢඡಋڝ௨ΣІݞ౻ටࠄঅடڠາɚ௨ౚ༣ݹބقଡɕષقࠄঅटقԀɕ௧uଈݡКʈເŧݸටඨࡖ௨ࡆІܥ౮قଞݸƕقܢઝடٴໃܤƓقฮࡈ௨ඉʑݢ౻ඥСݸ౫ඡಋঅஐٴໃܡవටଥɕஜؿϽߡƗࡕ
I see a combination of characters loosely looking like some East Asian alphabet, I guess that this is some kind of encoding ?
I can't other articles on it other than that readme. Does anyone else know where I can learn more about it? Someone needs to make a Wikipedia page!
But yeah, making a wikipedia entry and adding it to this list (https://en.wikipedia.org/wiki/Binary-to-text_encoding) could spread it a little further.
If it could always set me up for amazing t-spin plays, that would be really enjoyable, I think.
Might be more interesting if there were other constraints like it couldn't give you the same piece too often or something.
Started a new game. Put the long piece vertically against a side wall. Got an S piece. Whhhhyyyyyyyyyyy?
I appreciate a free game but is this one of those abusive research projects?
Edit: Undo and redo don't work here either
"Undo and redo" shortcut don't seem to work, but the clickable undo and redo button at the top left work.
It's a quick project which arose from curiosity : "what would happen if the hateful AI tried to do the opposite".
This AI does its best to always provide you some outs to the limit of its abilities. You have plenty of freedom to guide the game into interesting landscape while having an AI that always offer you safe ways to recover. But you still have to play your part, the AI can only handle half the job.
Lovetris has some interesting complexities, and touch the subject of collaborative AI whereas Hatetris is an adversarial AI.
Collaborative AI and AI alignment are interestingly hard research subjects which have philosophical and technological components.
With subject as deep as love and working jointly, it's hard to satisfy everybody.
Lovetris with its "exhaustive short horizon exploring strategy with simple terminal heuristics" isn't capable of perceiving long-term intent farther than its tree searching depth. And reciprocally, if you set the horizon too far, the human player is bad at reading the intent of the AI, and doesn't do what the AI suggest.
There are probably better strategies, like monte-carlo tree search with some neural networks which could better solve the intent communication problem between the human and the AI, and provide a better experience, but they take a little more work than just flipping a sign.
Add a little feedback via data collection and such an AI can probably send its player into an hedonistic loop.
"Exhaustive short horizon exploring strategy with simple terminal heuristics" - is this in reference to the for loop which calculates the future possible states of the game up to a certain depth?
It seems to be a state exploration algorithm. The number of possible game states is well-defined here. Perhaps you're conflating the subject of video game AI with concepts related to machine learning AI?
Like a loving helicopter mom, this AI is trying its best to help you reduce tower height now (to reduce risk) whereas the human player has different objective often related to increasing its score over a certain horizon.
The thing is from the programming point of view there are not a unique way to define what should be a "best move".
My issue is with you using incorrect terms and conflating machine learning with a relatively simple graph based algorithm with a relatively simple heuristic.
There is no machine learning going on in this codebase whatsoever as far as I can tell, but you seem to be claiming there is. Do you care to respond to that?
Afaik I haven't coined the term "machine learning" in this thread and made no such claim.
To clarify : There is no machine learning going on in this codebase (though the problem is interesting enough that you can replace the simple AI by a more advanced one).
I was just merely pointing that AI alignment problem already affect even simple decision making agents.
Ζටໃܢ௨ඖȤཧ௪Ϻതझ௨චʑݹɷටÐݹಏටෆࢭ௧ڈໃŧ௨൞ໃӃ௨ƣໃڍਚඨƙђ௨ఢƙɕஓقາђ௨ചໃυۑටҏಠ௨శժݹࠒуໃZ௨बໃܘݤঋТວ௧ϽІܥ౫ටլݹષsເђரටใחਚඨʃݶԪටПݷ౫චƸݹߤඖܘͻݫళɑŧԤƣවݺԥಅවݟవටฮࡉ௨ഖVݶɷඖʛݸԫقիஈԪقНݸ౦قࡍݥݬϺȤஅԪضȣקਚඝܘͷਚ൲UɝϢටࠄݹ௧uಸݹଢටಊݹಏටෆࡥԥඪܘݚԥචȠɕ୦уෆऄࢶقȤஅԪقȤॾiʝȣݚԥvІקਛටฎJ௧ƣຯђఅටӿݎߜ൶ຜݞߜథลɛతටවࡁ௨ಘƙɕ௩ʝÐݷԫقໃѢ௭ටฅຍஜҔСݷԪකНݺد෮ໃѠ௨ڄฮࡨ௨ڠຈݟ௨ചໃͷ௧ƣຜݸđقÐܢஸඥܒࡉ௨ඝЛݹଛɦଈݶɝقVݹளڄໃѢ௨ฃໃɢԥගІپ௨౾ܘܡభ൝ඨҲϢඡНऄஐڄຯ൫ࡋඐ๒ݕகණවߢ௨wະࠇஐڠWɔҋගƬݶమwฅݸసටຯɝѻටWڝ௨౾నݹਓeІݹ௧Σଈܦ౫ටȤঅ௨ඡܘܢ௨ช൧ܥಈಀଈɠஐڌະࢭࢴقଭݪԥڠࡍݟ௧इවݶɷƣКݹ௨uഉݸƔঌໃܢߛΟໃi௨ೲໃԔҫටనऔௐ෮ໃŧԥඖܘݟ௨ಛໃZௐڌຯঔஓڈະऄࢴටПܭԥ൝Єঅઽചໂђߛsවݶɶƣܧɕ௨ටฎࡑ௨ఢƚݹஐټໃҲтටࠄڢ௨ඨІݹಳೲໃঅઽගЄॾಥ3
Still a bit far from the randomness of the real Tetris but would enable quite some strategies..
This is doing something different, which can't be described by the given blurb.
[1] if you lie the two long pieces horizontally next to each other against the left wall
If that contradicts your notion of "best piece" then either the author is being too imprecise or you are being too literal. Either way I don't think it's an interesting discussion.
There is a worthwhile observation to make here, which is that even though Hatetris assigns scores to all the pieces and correctly determines, based on those scores, which one is the worst, Lovetris cannot correctly determine which piece is the best by picking "the opposite of what Hatetris does". Good is the opposite of bad, but the metrics for badness are not simultaneously metrics for goodness.
To be clear, the people that took away meaning from this word were the people that added "trigger warnings" to the most trivial of things. "trigger warning: meat eating." "trigger warning: bad words."
> It is tragic that people with a hatred of people living with conditions like PTSD and epilepsy have turned that word into a joke
That's really not what's happening.
I would object to this on two grounds.
Firstly, seemingly insignificant things can be triggers. It doesn't have to be something people without PTSD consider a big deal, because by definition it isn't them who are affected. I have seen this first-hand. The source of the trauma and the thing that is the trigger can even be totally disparate. (Nice use of “bad words” to describe racial and other slurs by the way. That isn't trivial for the people affected.)
Secondly, in communities that centred around mocking people who (among other things) used trigger warnings, there was a self-perpetuating cycle of creating fake posts to reinforce collectively held biases. They began by ridiculing real content and ended up ridiculing fake content because they did not understand what was real.
In any case, it is a choice to decide “people I don't like use trigger warnings excessively” means that you can use the entire concept as a joke and ruin it for the vulnerable group it is useful for.
> That's really not what's happening.
I've seen it play out. There are definitely malicious actors, even if not everyone is.
Are you a yoga teacher? Because WOW!! What a stretch!!
It triggers me that I couldn't get a full screen clear
And you can repeat the pattern forever and ever! :D
I worked around it until I got a well on the right hand side, at which point all I got was long-bars. This is the cleanest path I could find to an infinite run of tetrises: ذටරऍƐඥժݹߝɿඍݷ౫ටฅڝ௨పໃܡ௨ඖІݮ௨ഗƊݹɷඝܘܢ௨پܘݓ௨ಮІܦ௨ชІݶΗʈາђடටවݹदඦܘݣ௨ಬໃƎௐڌໃݷಒටԠђௐڊಸݹࠂƣຜࡁரڀฮࡁਓȺಥɜਆ
It would be better if it used a variant of the Random Generator algorithm, which guarantees an equal distribution of pieces.
https://tetris.fandom.com/wiki/Random_Generator
Lovetris should choose, from the remaining pieces in the current bag, the one that it thinks is "best".
ϢටलݹઊƗȤڥ௨೯ಽݹॴਉПݹ௨ඥΒधԥටеݹఒௐໃޅݫටДݹ४Οໃࡑ௧پഋݹরΟະࠀ௨ೲໃԔԥඦܯ൫ஜуໄஈமΟະࡊѻ೯लܭЕڠฅɕসඤʈཧࢶكɑݚԥఫІݹஶɈໂɝЩටܬݹ௨ඩໃܭݹقฅ൫௨ටໃݹ௨൜ೡɕরටɓݷಏ୮ฅ൫వට౻ݷԥಀඤݪɷ੬ഫןЬكƬמ௨ඍȣݹ௨ටลஈಏඤɱџбඩແࡁ௨ඨʑעமҼใɕࢳচܘݹ௨ටd
edit: a very safe place indeed, I played for 5 minutes and the excitement is kinda low once you figure out how to trick the AI to give you what you want :D.
Best strategy is to clear 1, 2, or even maybe 3 lines at a time. (But don't get in the 3-line habit, you might anger the AI still)
ଵටໂ໒௨ටಭݹ௧ଆඤݹ௨ඖಸݹளஶໃݑɷටॡݹறටໂວ௨ටໂٽ௨യժݹ௨ඥషݹઋقາח௨ඦІͻϢටƘঅணএဒݱРڠසމଯڠԮɥЬږ1
Edit: I wonder if you can do that with Hatetris also, if the difference is just flipping a sign as the author says.
ࠁටໃݶԣலໃݹࠅॴໃݛԥ੯ටஈ௨ඥ೦ݹ௨ඥಸݹ௨ටമ๐௨ൽഉݹݹقາڭ௨ටഫݑСටໃԓ௦૫ໃݹ௨ටໃݹ௨ටໃxħقໃƬݴΟໃKЭइໃC౻ටຯٲಏقแڽ௨ఢƔݹரٯໃԔޛඥДݹߚฃໂɛԥడM൵௨బໞݹҬɦషݸßࡇHܤЪsເלԚؿИݷƶ