[{"data":1,"prerenderedAt":560},["ShallowReactive",2],{"project-46234734":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":27,"sentiment":28,"stance_mix":29,"scored_comments":34,"aspects":35,"strip":45,"post_text":47,"what":48,"said":65,"maker_in_thread":191,"shape":202,"grid":206,"attempts":521,"same_week":522,"maker_shows":32,"maker_hidden":552,"reader_version":553,"card":554},"46234734","bidicalc","A spreadsheet where formulas also update backwards","title","Show HN: I made a spreadsheet where formulas also update backwards","https:\u002F\u002Fvictorpoughon.github.io\u002Fbidicalc\u002F","victorpoughon.github.io","fouronnes3",1765476055,2025,252,116,236,3837,7,"legend","dev_tools","spreadsheet","web_app",[21,24,25,26],"bidirectional formulas","constraint solver","goal seek","curious",-0.037,{"positive":30,"neutral":31,"mixed":32,"critical":33},8,36,3,13,60,{"design":36,"idea":39,"execution":41,"docs":44},{"positive":37,"critical":38},0,2,{"positive":40,"critical":40},6,{"positive":42,"critical":43},1,4,{"positive":37,"critical":42},[32,32,32,42,42,42,32,38,37,37,37,37,37,37,42,32,32,32,37,37,32,46,38,32,32,46,32,32,32,42,32,42,46,32,32,32,43,32,42,46],5,"Hello HN! I'm happy to release this project today. It's a bidirectional calculator (hence the name bidicalc).\n\nI've been obsessed with the idea of making a spreadsheet where you can update both inputs and outputs, instead of regular spreadsheets where you can only update inputs.\n\nPlease let me know what you think! Especially if you find bugs or good example use cases.",{"problem":49,"audience":55,"pricing":55,"motivation":56,"time_to_build":55,"stack":63,"openness":64,"stage":64,"team_size":64},{"value":50,"source":51,"evidence":52},"Regular spreadsheets only update outputs from inputs; bidicalc also updates inputs when outputs change","maker",[53],{"id":54},"post",null,{"value":57,"source":51,"evidence":58},"Obsession with spreadsheets that update both inputs and outputs; built for fun",[59,60],{"id":54},{"id":61,"by":11,"text":62},"46256938","That's great feedback, thanks! I agree with you, but I don't want to flip the default because this is an experiment I made for fun, and the whole point is to lean in to the chaos…",[],"unknown",{"praise":66,"objections":90,"requests":117,"questions":135,"alternatives":154},[67,83],{"value":68,"source":69,"evidence":70},"Clever concept and clean prototype","commenter",[71,75,79],{"id":72,"by":73,"text":74},"46258502","hallole","Phenomenal! This is a solid prototype, clean execution. I've had exactly this idea, too: I've already given the spreadsheet the relationships between these values, why can't it…",{"id":76,"by":77,"text":78},"46250867","aatd86","LOL! Gemini suggested to implement this to me literally yesterday: bidirectional computations. The example was that given a temperature in Celsius and Fahrenheit, modifying…",{"id":80,"by":81,"text":82},"46251936","nrhrjrjrjtntbt","Excellent (sorry accidental pun) This is a nice exploration.",{"value":84,"source":69,"evidence":85},"Similar to Excel goal seek but handles arbitrary input cells",[86],{"id":87,"by":88,"text":89},"46250831","thomastay","This is really cool! It's like Excel's goal seek but can also handle the case of arbitrary input cells. Goal seeek can only handle one input and one output cell. But how do you…",[91,106],{"value":92,"source":69,"evidence":93},"Unclear which inputs move when an output changes; needs fixed vs free cells",[94,98,102],{"id":95,"by":96,"text":97},"46250610","willrshansen","The first example on the main page has a formula with two variables being updated from changing one value. The immediate question I have is if I change the output, where does the…",{"id":99,"by":100,"text":101},"46256818","pedrozieg","The interesting thing here isn’t “spreadsheet, but backwards” so much as “spreadsheet as a constraint system”. Classic spreadsheets are basically DAGs: data flows one way and a…",{"id":103,"by":104,"text":105},"46252120","d--b","The examples are great and these bidirectional calculators are something that people would love to have in traditional spreadsheets. So much so that Credit Suisse, which…",{"value":107,"source":69,"evidence":108},"Solver fails on some edge cases, such as setting a cell exactly to 100 or multiple outputs at once",[109,113],{"id":110,"by":111,"text":112},"46260936","penteract","This is great. Since you've asked about bugs, I tried pushing the limits and found the following: ``` A1: 100 B1: =100-A1 A2: =A1*(100-A1) A3: =A1*B1 ``` A2 can be successfully…",{"id":114,"by":115,"text":116},"46253905","filipeisho","set A1 = 3 set B1 = 4 set C1 = A1 + B1 = 7 now change C1 = 14 expected A1 = 6 expected B1 = 8 what it did A1 = 7 B1 = 7 great",[118,126],{"value":119,"source":69,"evidence":120},"Ability to mark cells as constants or fixed without special syntax",[121,125],{"id":122,"by":123,"text":124},"46250428","kccqzy","I think the concept is solid. I’ve only had a few minutes of playing with it, but I have the opinion is that from a UX perspective constants are more common than variables. So…",{"id":103,"by":104,"text":105},{"value":127,"source":51,"evidence":128},"Domain constraints for variables",[129,132],{"id":130,"by":11,"text":131},"46252750","You can do it and it is explained, actually. Use # as a prefix to indicate a constant, e.g.: #50 will be a constant and not a variable. In the future I'd like to support more…",{"id":133,"by":11,"text":134},"46252575","Constants are supported, use # as a prefix, e.g.; #50. I'd like to add more constraints in the future like a domain constraint for variables.",[136,143],{"value":137,"source":69,"evidence":138},"How the solver chooses among multiple solutions",[139,142],{"id":140,"by":11,"text":141},"46250607","I made this mostly as a fun challenge :) You are right that there is some arbitrariness involved when picking a solution, however it's a bit more subtle than that. Let's say our…",{"id":87,"by":88,"text":89},{"value":144,"source":69,"evidence":145},"Whether it can solve inverse kinematics or control problems",[146,150],{"id":147,"by":148,"text":149},"46252224","nico","Could you build an inverse kinematics solver with this? (I recently watched a youtube video of someone iteratively working out the solutions for a robotic arm, by alternating…",{"id":151,"by":152,"text":153},"46253084","koolala","Could this easily represent a Kalman filter and other typically complex control problems? Makes me imagine plotting a inverted pendulum and other real time systems. Could a cell…",[155,163,170,177,184],{"value":156,"source":69,"evidence":157},"Excel Goal Seek",[158,162],{"id":159,"by":160,"text":161},"46250871","b-karl","In Excel you have goal seek for this functionality. I believe it does some form of numerical solving of the equation system. Good for every situation when you need to solve…",{"id":87,"by":88,"text":89},{"value":164,"source":69,"evidence":165},"TK Solver",[166],{"id":167,"by":168,"text":169},"46250407","PaulHoule","Wow! See the classic https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTK_Solver",{"value":171,"source":69,"evidence":172},"Prolog constraint logic programming (clpr)",[173],{"id":174,"by":175,"text":176},"46258286","fainpul","In Prolog you can write rules (similar to functions in other languages) so that they work \"both ways\". Let's say you have this rule that defines how pace (\"runner's speed\")…",{"value":178,"source":69,"evidence":179},"g9 graphics constraint tool",[180],{"id":181,"by":182,"text":183},"46250646","jy14898","you might like https:\u002F\u002Fomrelli.ug\u002Fg9\u002F which is a similar concept but for graphics",{"value":185,"source":69,"evidence":186},"IBM TM1 and Anaplan break back",[187],{"id":188,"by":189,"text":190},"46254597","jsax","This is pretty cool. This functionality is called ‘break back’ in a lot of enterprise modelling software. See [IBM…",{"comments":192,"answered":193,"key":194},18,9,[195,196,199],{"id":61,"text":62},{"id":197,"text":198},"46252637","You can actually solve fifth order polynomials with bidicalc! But it's a numerical solution, not an algebraic one, so no Fields medal.",{"id":200,"text":201},"46256009","You can do this with bidicalc already! You just have to model the problem correctly. If you expect the ratio to remain constant, what you actually want is a problem with a single…",{"commenters":203,"max_depth":18,"maker_replies":192,"first_comment_mins":204,"lifespan_hours":205},81,1775,342,[207,209,211,214,216,220,223,227,230,234,235,239,243,246,247,251,252,255,259,261,264,268,271,274,277,280,282,285,288,291,293,295,298,301,304,306,309,311,314,316,319,322,325,326,329,330,334,336,340,341,344,347,350,353,356,359,361,364,366,369,370,372,373,375,379,381,385,387,390,393,397,399,401,402,405,407,409,411,414,416,418,422,426,428,432,436,439,440,443,445,448,451,453,455,458,460,464,466,469,471,475,477,479,483,485,489,491,495,497,500,504,506,508,510,513,517],[99,37,32,208,100,37],"project\u002Fneutral\u002Fdesign",[61,37,37,210,11,42],"maker\u002Fneutral\u002Fdesign",[212,37,32,208,213,37],"46257337","abakker",[95,42,32,215,96,37],"project\u002Fmixed\u002Fidea",[217,42,32,218,219,37],"46251288","project\u002Fneutral\u002Fexecution","rahimnathwani",[221,42,32,208,222,37],"46251720","exe34",[224,42,32,225,226,37],"46251745","project\u002Fneutral\u002Fdocs","hamandcheese",[228,42,32,225,229,37],"46253320","shomp",[231,42,37,232,233,37],"46251747","other\u002Fneutral\u002Fnone","idiotsecant",[197,42,37,218,11,42],[236,42,42,237,238,37],"46253543","project\u002Fcritical\u002Fdesign","geon",[240,42,42,241,242,37],"46255395","project\u002Fcritical\u002Fexecution","pxx",[244,42,32,225,245,37],"46255425","rafabulsing",[200,42,37,225,11,42],[248,42,42,249,250,37],"46252671","project\u002Fcritical\u002Fdocs","ximm",[130,42,37,225,11,42],[253,42,42,237,254,37],"46255696","nkrisc",[256,38,32,257,258,37],"46253796","project\u002Fneutral\u002Fidea","areyousure",[260,38,32,218,175,37],"46257017",[262,38,37,232,263,37],"46258176","davexunit",[265,38,42,266,267,37],"46258206","project\u002Fcritical\u002Fidea","culi",[269,32,32,257,270,37],"46251928","SoftTalker",[272,32,32,257,273,37],"46252001","spiderice",[275,32,37,232,276,37],"46252060","jamestimmins",[278,32,37,232,279,37],"46252102","Suppafly",[281,32,37,232,148,37],"46252206",[283,32,37,232,284,37],"46252259","alexchantavy",[286,32,37,232,287,37],"46253312","dizhn",[289,32,37,232,290,37],"46252552","Towaway69",[292,32,37,232,279,37],"46253023",[294,32,37,232,238,37],"46253584",[296,32,37,232,297,37],"46259793","agumonkey",[299,32,37,232,300,37],"46252295","RachelF",[302,32,37,232,303,37],"46252764","InsideOutSanta",[305,32,37,232,238,37],"46253569",[307,32,37,232,308,37],"46253966","RobotToaster",[310,32,37,232,11,42],"46252742",[312,32,37,232,313,37],"46252948","zoky",[315,32,37,232,287,37],"46253317",[317,32,37,232,318,37],"46254464","sroerick",[320,32,37,232,321,37],"46259837","anonymousiam",[323,32,37,232,324,37],"46254263","yonatan8070",[174,32,42,266,175,37],[327,32,37,232,328,37],"46387971","rvba",[159,43,32,257,160,37],[331,43,37,332,333,37],"46251448","commenter\u002Fneutral\u002Fnone","moron4hire",[335,43,37,218,11,42],"46252657",[337,43,46,338,339,37],"46253559","project\u002Fpositive\u002Fidea","graemep",[87,46,42,241,88,37],[342,46,32,208,343,37],"46250913","fragmede",[345,46,32,225,346,37],"46251003","tkzed49",[348,40,32,257,349,37],"46251634","amirhirsch",[351,40,37,352,11,42],"46252871","maker\u002Fneutral\u002Fnone",[354,18,37,232,355,37],"46252079","adonovan",[357,18,37,232,358,37],"46252405","uoaei",[360,18,37,232,290,37],"46252577",[362,18,37,232,363,37],"46254853","vandyswa",[365,18,37,232,358,37],"46255468",[367,18,42,266,368,37],"46253599","big-chungus4",[167,30,46,338,168,37],[371,30,32,257,300,37],"46252307",[188,193,46,338,189,37],[374,193,37,352,11,42],"46254795",[376,377,32,257,378,37],"46256978",10,"Animats",[122,380,32,208,123,37],11,[382,383,42,266,384,37],"46255956",12,"satvikpendem",[386,383,37,332,267,37],"46258232",[388,33,32,257,389,37],"46250374","remywang",[110,391,32,392,111,37],14,"project\u002Fmixed\u002Fexecution",[394,395,32,257,396,37],"46252058",15,"zkmon",[398,395,37,352,11,42],"46252630",[103,400,32,215,104,37],16,[133,400,37,210,11,42],[403,400,46,338,404,37],"46254099","amelius",[147,406,32,257,148,37],17,[408,406,37,352,11,42],"46252683",[410,406,32,257,404,37],"46254105",[412,192,32,413,328,37],"46387956","project\u002Fneutral\u002Fnone",[181,415,32,257,182,37],19,[417,415,37,352,11,42],"46250661",[419,420,37,232,421,37],"46253022",20,"deckar01",[423,424,32,257,425,37],"46251670",21,"iamwil",[427,424,32,413,290,37],"46252584",[429,430,32,257,431,37],"46256114",22,"1718627440",[433,434,42,266,435,37],"46250529",23,"throw310822",[437,434,42,241,438,37],"46250584","generalizations",[140,434,37,352,11,42],[441,434,32,257,442,37],"46250887","kolarski",[444,434,37,352,11,42],"46252885",[446,434,42,266,447,37],"46251838","esafak",[449,434,37,332,450,37],"46253453","dmurray",[452,434,37,332,447,37],"46255674",[454,434,32,257,81,37],"46251932",[72,456,46,457,73,37],24,"project\u002Fpositive\u002Fexecution",[459,456,37,352,11,42],"46258606",[461,462,32,208,463,37],"46250479",25,"WillAdams",[76,465,37,232,77,37],26,[467,465,37,332,468,37],"46251999","maplethorpe",[470,465,37,232,77,37],"46252347",[472,473,32,257,474,37],"46252016",27,"injidup",[476,473,37,352,11,42],"46252696",[151,478,32,257,152,37],28,[480,481,37,232,482,37],"46251430",29,"digdugdirk",[484,481,37,232,290,37],"46252601",[486,487,32,257,488,37],"46260000",30,"RA_Fisher",[80,490,46,338,81,37],31,[492,493,32,257,494,37],"46251230",32,"aghilmort",[496,493,37,352,11,42],"46252721",[498,493,32,257,499,37],"46322712","pod_krad",[501,502,32,413,503,37],"46256332",33,"lethal-radio",[114,505,42,241,115,37],34,[507,505,37,332,11,42],"46254760",[509,505,37,332,115,37],"46257386",[511,505,37,332,512,37],"46266823","ninalanyon",[514,515,46,338,516,37],"46256185",35,"BSTRhino",[518,31,46,519,520,37],"46256603","project\u002Fpositive\u002Fnone","yogeshpaliyal",[],[523,528,533,538,543,547],{"id":524,"name":525,"points":526,"category":527},"46290349","Picknplace.js",455,"languages",{"id":529,"name":530,"points":531,"category":532},"46294144","fuzzycanary",373,"security_privacy",{"id":534,"name":535,"points":536,"category":537},"46234186","Sim",240,"ai",{"id":539,"name":540,"points":541,"category":542},"46249538","uvm32",196,"infrastructure",{"id":544,"name":545,"points":546,"category":20},"46276002","Sqlit",190,{"id":548,"name":549,"points":550,"category":551},"46264657","UDP-7777",104,"productivity",false,"v2",{"id":555,"name":5,"line":6,"ai":552,"cat":20,"year":13,"points":14,"comments":15,"rec":27,"s":556,"top":18,"kw":557,"maker":11,"domain":10,"tier":19,"attempts":37,"strip":558,"url":9,"mix":559,"praise":68,"objection":92,"sub":21},46234734,-0.04,[21,24,25,26],"3331113200000013330035233533313153334315",[30,31,32,33],1794036687233]