[{"data":1,"prerenderedAt":296},["ShallowReactive",2],{"project-14703098":3},{"id":4,"name":5,"line":5,"line_source":6,"title":7,"url":8,"domain":8,"maker":9,"posted_at":10,"year":11,"points":12,"comments":13,"rank_in_year":14,"shown_in_year":15,"top":16,"tier":17,"category":18,"subcategory":19,"format":20,"keywords":21,"reception":27,"sentiment":28,"stance_mix":29,"scored_comments":32,"aspects":33,"strip":40,"post_text":43,"what":44,"said":72,"maker_in_thread":155,"shape":165,"grid":169,"attempts":257,"same_week":258,"maker_shows":38,"maker_hidden":287,"reader_version":288,"card":289},"14703098","A virtual machine made with Google Sheets formulas (no script)","title","Show HN: A virtual machine made with Google Sheets formulas (no script)",null,"SonOfLilit",1499268140,2017,620,37,12,2242,1,"legend","languages","esoteric language interpreter","web_app",[22,23,24,25,26],"brainfuck","google sheets","interpreter","virtual machine","spreadsheet formulas","loved",0.302,{"positive":30,"neutral":31,"mixed":16,"critical":16},7,8,17,{"design":34,"docs":36,"execution":37,"idea":39},{"positive":16,"critical":35},0,{"positive":16,"critical":35},{"positive":38,"critical":35},2,{"positive":35,"critical":16},[41,35,41,35,42,42,41,35,41,35,42,42,35,35,16,35,35,35,35,35,35,41,42,35,35,35,42,41,35,42,35,41,35,41,35,35,41],3,5,"In a popular post today[1] the title claims \"VM in Google Sheets\", but it's actually in Google Script, which is basically Javascript and not an interesting technical accomplishment (definitely a useful educational tool, though).\n\nDisappointed, I set out to fix it. Voila!\n\nhttps:\u002F\u002Fdocs.google.com\u002Fspreadsheets\u002Fd\u002F1g3-FZBnkDuLqFYOmk457hOvyrS798vO4X2nV77gVzGI\u002Fedit\n\nA Brainfk interpreter in pure Google Sheets formulas. The hard part was parentheses matching, so I think other VMs would be even easier.\n\n[1] https:\u002F\u002Fnews.ycombinator.com\u002Fitem?id=14701460",{"problem":45,"audience":51,"pricing":8,"motivation":61,"time_to_build":8,"stack":65,"openness":70,"stage":71,"team_size":70},{"value":46,"source":47,"evidence":48},"Shows that a Brainfuck interpreter and VM can be built with only spreadsheet formulas, no script","maker",[49],{"id":50},"post",{"value":52,"source":53,"evidence":54},"Educators and programmers interested in computing fundamentals","inferred",[55,58],{"id":56,"by":9,"text":57},"14704237","Also, I think I'm going to use this in beginners' lessons in programming from now on. Everyone understands the level of Excel formulas used in the orange table, so this really…",{"id":59,"by":9,"text":60},"14706211","First of all, I must agree about the way I presented it, and admit that when j45 posted that first comment I checked if I could still edit my post and it turned out I couldn't.…",{"value":62,"source":47,"evidence":63},"Disappointed that a popular post's 'VM in Google Sheets' was actually Apps Script, so built a formula-only version",[64],{"id":50},[66],{"value":67,"source":47,"evidence":68},"Google Sheets formulas",[69],{"id":50},"unknown","launched",{"praise":73,"objections":100,"requests":112,"questions":126,"alternatives":138},[74,86,96],{"value":75,"source":76,"evidence":77},"Clever parenthesis matching implementation","commenter",[78,82],{"id":79,"by":80,"text":81},"14704028","briansteffens","Awesome, nice work.",{"id":83,"by":84,"text":85},"14708353","doubleplusgood","Oh, that's pretty clever. Thanks for the explanation!",{"value":87,"source":76,"evidence":88},"Impressive how quickly it was built",[89,93],{"id":90,"by":91,"text":92},"14704102","j45","This is very cool as well. A comment about how you have presented this - not everything has to be an interesting technical accomplishment. Creating beginners is a much harder…",{"id":94,"by":80,"text":95},"14703501","Wow this is cool and you did this really fast! So you did kind of a functional style where each row represents an instruction being run with a full copy of the state of the VM at…",{"value":97,"source":47,"evidence":98},"Useful for teaching how a CPU works",[99],{"id":56,"by":9,"text":57},[101,108],{"value":102,"source":76,"evidence":103},"Brainfuck is esoteric and unsuited to beginners",[104],{"id":105,"by":106,"text":107},"14706095","resu_nimda","Have you used Brainfuck in an educational context before? It seems rather esoteric and unfamiliar, especially for beginners. They will likely be distracted by the inscrutable…",{"value":109,"source":76,"evidence":110},"Original post was presented poorly and the tone was condescending",[111],{"id":105,"by":106,"text":107},[113,119],{"value":114,"source":76,"evidence":115},"Write-up explaining the parenthesis parser",[116],{"id":117,"by":80,"text":118},"14703784","Yeah I don't follow the parenthesis parser. Plan to do a write-up of some kind on how it works?",{"value":120,"source":76,"evidence":121},"Emulate a more useful instruction set with formulas",[122],{"id":123,"by":124,"text":125},"14706315","thriftwy","Next step is emulating a more fulfilling instruction set using formulas only?",[127,131],{"value":128,"source":76,"evidence":129},"How does the parenthesis parser work",[130],{"id":117,"by":80,"text":118},{"value":132,"source":76,"evidence":133},"How input and output work in the sheet",[134],{"id":135,"by":136,"text":137},"14704322","eatonphil","Ah. I thought \".\" must be printing (as it's something similar to that in Forth [guess it's \".s\" though not \".\"]), but I was confused by the comma because I didn't understand how…",[139,148],{"value":140,"source":47,"evidence":141},"Apps Script Brainfuck VM by briansteffens",[142,145],{"id":143,"by":9,"text":144},"14704034","If you still don't get some part of what's going on after copying it and playing with it a bit (A1 is the code, A2 is the input, you can find an explanation of BF and a simple…",{"id":146,"by":9,"text":147},"14704161","My previous startup was about teaching programming to beginners with computer games, so I definitely have an appreciation for that. I made sure to point out that I still consider…",{"value":149,"source":76,"evidence":150},"PowerPoint Turing completeness video",[151],{"id":152,"by":153,"text":154},"14704672","aviraldg","See also: https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=uNjxe8ShM-8 (On The Turing Completeness of PowerPoint)",{"comments":156,"answered":30,"key":157},14,[158,161,164],{"id":159,"text":160},"14703592","Yes. Had to store state somewhere, spreadsheets find \"one row per thing\" to be most natural, and in my case the \"thing\" I'm working with is state, so one row per state transition…",{"id":162,"text":163},"14703981","The basic algorithm is \"parentheses counting\": walk the string starting from an opening bracket, counting +1 per `[` and -1 per `]`; when you reach 0 you're at the matching…",{"id":146,"text":147},{"commenters":32,"max_depth":166,"maker_replies":156,"first_comment_mins":167,"lifespan_hours":168},6,36,21,[170,172,173,175,177,179,180,182,184,187,189,192,194,196,198,200,202,204,206,210,213,214,216,221,223,226,229,233,234,237,241,243,246,248,249,251,254],[94,35,41,171,80,35],"project\u002Fneutral\u002Fdesign",[159,35,35,171,9,16],[117,35,41,174,80,35],"maker\u002Fneutral\u002Fdocs",[162,35,35,176,9,16],"project\u002Fneutral\u002Fexecution",[79,35,42,178,80,35],"maker\u002Fpositive\u002Fexecution",[83,35,42,178,84,35],[90,16,41,181,91,35],"maker\u002Fmixed\u002Fidea",[146,16,35,183,9,16],"commenter\u002Fneutral\u002Fnone",[185,16,41,186,136,35],"14704256","maker\u002Fneutral\u002Fnone",[188,16,35,186,9,16],"14704344",[190,16,42,191,84,35],"14708388","maker\u002Fpositive\u002Fnone",[193,16,42,191,91,35],"14704474",[195,16,35,183,9,16],"14704659",[56,16,35,197,9,16],"project\u002Fpositive\u002Fidea",[105,16,16,199,106,35],"project\u002Fcritical\u002Fidea",[59,16,35,201,9,16],"commenter\u002Fneutral\u002Fidea",[203,16,35,183,106,35],"14706358",[205,16,35,201,9,16],"14706405",[207,16,35,208,209,35],"14707765","other\u002Fneutral\u002Fnone","bobwaycott",[211,16,35,208,212,35],"14709703","seviu",[143,38,35,174,9,16],[152,41,41,215,153,35],"project\u002Fneutral\u002Fidea",[217,218,42,219,220,35],"14704564",4,"project\u002Fpositive\u002Fnone","artursapek",[222,218,35,208,9,16],"14704628",[224,218,35,208,225,35],"14707734","sattoshi",[227,218,35,208,228,35],"14708583","_ao789",[230,42,42,231,232,35],"14708132","project\u002Fpositive\u002Fdesign","myhf",[123,166,41,215,124,35],[235,166,35,236,9,16],"14706328","maker\u002Fneutral\u002Fidea",[238,30,42,239,240,35],"14703844","project\u002Fpositive\u002Fdocs","kronos29296",[242,30,35,174,9,16],"14704001",[244,30,41,245,136,35],"14704118","project\u002Fneutral\u002Fdocs",[247,30,35,174,9,16],"14704223",[135,30,41,245,136,35],[250,30,35,174,9,16],"14704528",[252,30,35,183,253,35],"14706158","fasquoika",[255,31,41,215,256,35],"14705705","GrumpyNl",[],[259,264,269,273,278,283],{"id":260,"name":261,"points":262,"category":263},"14691407","Under the hood ReactJS",266,"learning_science",{"id":265,"name":266,"points":267,"category":268},"14662860","VisiData",221,"dev_tools",{"id":270,"name":271,"points":272,"category":268},"14688031","Vecta.io",154,{"id":274,"name":275,"points":276,"category":277},"14690517","Artpip",142,"creative",{"id":279,"name":280,"points":281,"category":282},"14694210","login-with",127,"infrastructure",{"id":284,"name":285,"points":286,"category":268},"14667344","SOTA-Py",121,false,"v2",{"id":290,"name":5,"line":5,"ai":287,"cat":18,"year":11,"points":12,"comments":13,"rec":27,"s":291,"top":16,"kw":292,"maker":9,"domain":293,"tier":17,"attempts":35,"strip":294,"url":-1,"mix":295,"praise":75,"objection":102,"sub":19},14703098,0.3,[22,23,24,25,26],"","3030553030550010000003500053050303003",[30,31,16,16],1794036556994]