• OK, it's on.
  • Please note that many, many Email Addresses used for spam, are not accepted at registration. Select a respectable Free email.
  • Done now. Domine miserere nobis.

Learning programming languages

dr froyd

__________________________________________________
Local time
Today 2:14 AM
Joined
Jan 26, 2015
Messages
1,570
---
i decided i wanna learn a bunch of new programming languages and get a feel for how the various ones work.

i made small problem to try them on. It's simple but it contains a couple of aspects of practical interest: a bit of data i/o (reading JSON lines), data processing, and some basic calculation.

the program, if implemented correctly, will print the Mona Lisa:

Code:
          ____
        o8%8888,  
      o88%8888888.
     8'-    -:8888b 
    8'         8888
   d8.-=. ,==-.:888b
   >8 `~` :`~' d8888 
   88         ,88888 
   88b. `-~  ':88888
   888b ~==~ .:88888
   88888o--:':::8888    
   `88888| :::' 8888b
   8888^^'       8888b
  d888           ,%888b. 
 d88%            %%%8--'-.
/88:.__ ,       _%-' ---  -
    '''::===..-'   =  --.

the program needs to do the following:
1. take a command-line argument with a path to the text file containing the JSON lines (provided below in the spoiler).
2. read the file
3. for each line, calculate the value x = vf * vi
4. sort the entire data by x
5. the "mona" field is an integer representing a UTF8 character. Convert it to UTF8 and print everything in the sorted order.

at least for me, the goal here is to solve it without relying on any non-builtin libraries (libraries come and go, language stays more or less the same).

feel free to join in and provide your own solutions

JSONL data:
Code:
{"vf":0.63305535982,"vi":43,"mona":32}
{"vf":0.85782771534,"vi":40,"mona":32}
{"vf":0.39544885908,"vi":7,"mona":98}
{"vf":0.686375082,"vi":40,"mona":32}
{"vf":0.26752143214,"vi":39,"mona":56}
{"vf":0.8819775593,"vi":23,"mona":32}
{"vf":0.4566147353,"vi":45,"mona":32}
{"vf":0.40683259326,"vi":10,"mona":56}
{"vf":0.41764677968,"vi":46,"mona":44}
{"vf":0.94772694004,"vi":12,"mona":32}
{"vf":0.37223806023,"vi":37,"mona":56}
{"vf":0.06492829998,"vi":13,"mona":32}
{"vf":0.49752726709,"vi":31,"mona":94}
{"vf":0.11940477998,"vi":35,"mona":45}
{"vf":0.18769111927,"vi":18,"mona":32}
{"vf":0.75845953752,"vi":20,"mona":56}
{"vf":0.18529644189,"vi":24,"mona":45}
{"vf":0.87104341364,"vi":2,"mona":56}
{"vf":0.70650190115,"vi":17,"mona":10}
{"vf":0.97134245024,"vi":4,"mona":10}
{"vf":0.28252833011,"vi":25,"mona":56}
{"vf":0.46596245025,"vi":17,"mona":32}
{"vf":0.2249853292,"vi":1,"mona":32}
{"vf":0.69000710151,"vi":30,"mona":100}
{"vf":0.59414202045,"vi":32,"mona":32}
{"vf":0.59304565168,"vi":3,"mona":56}
{"vf":0.88953931606,"vi":35,"mona":32}
{"vf":0.1110964613,"vi":48,"mona":58}
{"vf":0.30878683273,"vi":38,"mona":32}
{"vf":0.55143501447,"vi":39,"mona":32}
{"vf":0.45245839423,"vi":43,"mona":37}
{"vf":0.25296492851,"vi":48,"mona":32}
{"vf":0.40439918102,"vi":26,"mona":111}
{"vf":0.19337867992,"vi":15,"mona":32}
{"vf":0.64881812432,"vi":33,"mona":37}
{"vf":0.91399544966,"vi":5,"mona":58}
{"vf":0.71327900072,"vi":6,"mona":46}
{"vf":0.22507335083,"vi":39,"mona":56}
{"vf":0.37270939443,"vi":10,"mona":56}
{"vf":0.61277100327,"vi":6,"mona":32}
{"vf":0.06072057155,"vi":32,"mona":32}
{"vf":0.21625478962,"vi":3,"mona":95}
{"vf":0.055301926332,"vi":7,"mona":32}
{"vf":0.79434232111,"vi":16,"mona":124}
{"vf":0.24361947272,"vi":19,"mona":56}
{"vf":0.78229430132,"vi":17,"mona":58}
{"vf":0.16307032923,"vi":18,"mona":32}
{"vf":0.1007215823,"vi":7,"mona":32}
{"vf":0.77906588279,"vi":12,"mona":98}
{"vf":0.56025326368,"vi":16,"mona":10}
{"vf":0.22011888516,"vi":12,"mona":56}
{"vf":0.69280340616,"vi":30,"mona":56}
{"vf":0.98214037367,"vi":27,"mona":58}
{"vf":0.41068977653,"vi":26,"mona":39}
{"vf":0.65983844968,"vi":41,"mona":44}
{"vf":0.96235893643,"vi":36,"mona":32}
{"vf":0.93731408915,"vi":2,"mona":56}
{"vf":0.73779740301,"vi":1,"mona":32}
{"vf":0.23909995565,"vi":47,"mona":56}
{"vf":0.38790902984,"vi":37,"mona":32}
{"vf":0.7533078643,"vi":13,"mona":56}
{"vf":0.73518430581,"vi":8,"mona":32}
{"vf":0.27054487239,"vi":35,"mona":61}
{"vf":0.11791384127,"vi":10,"mona":56}
{"vf":0.69737376622,"vi":26,"mona":32}
{"vf":0.31244816491,"vi":47,"mona":32}
{"vf":0.14711364731,"vi":38,"mona":56}
{"vf":0.54682615655,"vi":32,"mona":32}
{"vf":0.32334499317,"vi":8,"mona":58}
{"vf":0.052843942773,"vi":35,"mona":56}
{"vf":0.70829032222,"vi":28,"mona":56}
{"vf":0.4348927415,"vi":48,"mona":56}
{"vf":0.61801787326,"vi":10,"mona":32}
{"vf":0.67418684252,"vi":38,"mona":10}
{"vf":0.26085685706,"vi":46,"mona":32}
{"vf":0.042059533531,"vi":17,"mona":10}
{"vf":0.40451028175,"vi":4,"mona":32}
{"vf":0.41274611861,"vi":2,"mona":32}
{"vf":0.054629109101,"vi":20,"mona":37}
{"vf":0.14280002238,"vi":20,"mona":32}
{"vf":0.88044056878,"vi":45,"mona":45}
{"vf":0.047663627425,"vi":30,"mona":32}
{"vf":0.31982061709,"vi":28,"mona":32}
{"vf":0.18384952401,"vi":47,"mona":56}
{"vf":0.35398610262,"vi":8,"mona":32}
{"vf":0.48316766927,"vi":41,"mona":56}
{"vf":0.70853046817,"vi":3,"mona":32}
{"vf":0.91568353842,"vi":29,"mona":95}
{"vf":0.24572367803,"vi":16,"mona":32}
{"vf":0.16806081054,"vi":45,"mona":32}
{"vf":0.91443818691,"vi":6,"mona":56}
{"vf":0.33633120591,"vi":41,"mona":56}
{"vf":0.40897692181,"vi":22,"mona":32}
{"vf":0.99940452795,"vi":9,"mona":32}
{"vf":0.72670253902,"vi":15,"mona":58}
{"vf":0.96935641114,"vi":45,"mona":45}
{"vf":0.53767718305,"vi":23,"mona":56}
{"vf":0.88646906079,"vi":44,"mona":46}
{"vf":0.006300783949,"vi":40,"mona":32}
{"vf":0.46647237684,"vi":8,"mona":56}
{"vf":0.14704832458,"vi":37,"mona":32}
{"vf":0.59998895926,"vi":44,"mona":56}
{"vf":0.1422942956,"vi":27,"mona":32}
{"vf":0.95450364915,"vi":30,"mona":32}
{"vf":0.82095132396,"vi":20,"mona":56}
{"vf":0.46466594189,"vi":35,"mona":32}
{"vf":0.76919391123,"vi":29,"mona":32}
{"vf":0.54928465607,"vi":32,"mona":56}
{"vf":0.97187563567,"vi":41,"mona":39}
{"vf":0.89035022212,"vi":50,"mona":45}
{"vf":0.72839442827,"vi":7,"mona":96}
{"vf":0.0082155198324,"vi":49,"mona":32}
{"vf":0.79892484564,"vi":49,"mona":46}
{"vf":0.28915973729,"vi":17,"mona":32}
{"vf":0.89139411715,"vi":10,"mona":56}
{"vf":0.2741666215,"vi":5,"mona":32}
{"vf":0.83405430918,"vi":28,"mona":37}
{"vf":0.8930511144,"vi":36,"mona":32}
{"vf":0.37981653772,"vi":47,"mona":32}
{"vf":0.21048707911,"vi":11,"mona":39}
{"vf":0.40947495261,"vi":24,"mona":32}
{"vf":0.883017404,"vi":44,"mona":61}
{"vf":0.10359964496,"vi":13,"mona":10}
{"vf":0.17217174638,"vi":33,"mona":32}
{"vf":0.58548335312,"vi":30,"mona":56}
{"vf":0.14190690778,"vi":48,"mona":56}
{"vf":0.38999443525,"vi":16,"mona":32}
{"vf":0.57286705822,"vi":38,"mona":32}
{"vf":0.61925648339,"vi":48,"mona":32}
{"vf":0.68078755122,"vi":37,"mona":32}
{"vf":0.1370674714,"vi":42,"mona":32}
{"vf":0.7259830269,"vi":31,"mona":32}
{"vf":0.67437638808,"vi":33,"mona":32}
{"vf":0.21976763126,"vi":46,"mona":32}
{"vf":0.89504535915,"vi":31,"mona":32}
{"vf":0.35544538079,"vi":46,"mona":32}
{"vf":0.97709899629,"vi":10,"mona":56}
{"vf":0.95683334535,"vi":37,"mona":39}
{"vf":0.90229904512,"vi":40,"mona":39}
{"vf":0.17064523511,"vi":11,"mona":56}
{"vf":0.90530958166,"vi":32,"mona":37}
{"vf":0.13880606345,"vi":39,"mona":39}
{"vf":0.47784537985,"vi":22,"mona":56}
{"vf":0.81660588761,"vi":25,"mona":32}
{"vf":0.66231764201,"vi":17,"mona":32}
{"vf":0.89673868264,"vi":11,"mona":32}
{"vf":0.36948886584,"vi":40,"mona":56}
{"vf":0.44980248413,"vi":38,"mona":98}
{"vf":0.51644489425,"vi":45,"mona":32}
{"vf":0.10380668822,"vi":28,"mona":32}
{"vf":0.78819583403,"vi":33,"mona":56}
{"vf":0.24608773435,"vi":21,"mona":96}
{"vf":0.21799066872,"vi":30,"mona":32}
{"vf":0.99123655586,"vi":8,"mona":96}
{"vf":0.36330054351,"vi":15,"mona":100}
{"vf":0.058478488587,"vi":31,"mona":56}
{"vf":0.64998515882,"vi":38,"mona":45}
{"vf":0.83570883702,"vi":17,"mona":32}
{"vf":0.10292468267,"vi":12,"mona":32}
{"vf":0.17505265027,"vi":45,"mona":98}
{"vf":0.072057123994,"vi":14,"mona":32}
{"vf":0.73707773793,"vi":38,"mona":32}
{"vf":0.04555649939,"vi":28,"mona":32}
{"vf":0.26503273146,"vi":28,"mona":32}
{"vf":0.69826159487,"vi":22,"mona":94}
{"vf":0.15234661684,"vi":7,"mona":56}
{"vf":0.98335018079,"vi":41,"mona":32}
{"vf":0.86364411144,"vi":7,"mona":56}
{"vf":0.25721674645,"vi":36,"mona":56}
{"vf":0.31170220207,"vi":49,"mona":56}
{"vf":0.093594986713,"vi":20,"mona":56}
{"vf":0.4025733422,"vi":24,"mona":46}
{"vf":0.66877151746,"vi":47,"mona":32}
{"vf":0.33839128376,"vi":46,"mona":32}
{"vf":0.29589545541,"vi":46,"mona":39}
{"vf":0.40894399793,"vi":40,"mona":32}
{"vf":0.35390457185,"vi":34,"mona":32}
{"vf":0.86810680688,"vi":26,"mona":32}
{"vf":0.96302423254,"vi":42,"mona":32}
{"vf":0.41473533446,"vi":19,"mona":46}
{"vf":0.63013185281,"vi":7,"mona":44}
{"vf":0.98564088438,"vi":47,"mona":46}
{"vf":0.83192756283,"vi":30,"mona":46}
{"vf":0.61835122737,"vi":33,"mona":32}
{"vf":0.38831911515,"vi":25,"mona":56}
{"vf":0.64392291498,"vi":5,"mona":32}
{"vf":0.19281594688,"vi":37,"mona":56}
{"vf":0.62190229516,"vi":4,"mona":32}
{"vf":0.29774178262,"vi":16,"mona":32}
{"vf":0.23162578535,"vi":29,"mona":32}
{"vf":0.23959462903,"vi":24,"mona":10}
{"vf":0.31427078042,"vi":30,"mona":126}
{"vf":0.071904097218,"vi":36,"mona":56}
{"vf":0.54208036722,"vi":50,"mona":32}
{"vf":0.10286464426,"vi":33,"mona":32}
{"vf":0.89241904439,"vi":43,"mona":58}
{"vf":0.13654019707,"vi":5,"mona":95}
{"vf":0.53376487363,"vi":4,"mona":32}
{"vf":0.39522013464,"vi":31,"mona":32}
{"vf":0.010467111832,"vi":39,"mona":32}
{"vf":0.47157627763,"vi":28,"mona":58}
{"vf":0.52810548805,"vi":29,"mona":56}
{"vf":0.42842150875,"vi":44,"mona":32}
{"vf":0.62997305347,"vi":11,"mona":56}
{"vf":0.30772001087,"vi":3,"mona":32}
{"vf":0.2862853487,"vi":34,"mona":56}
{"vf":0.96739837062,"vi":8,"mona":56}
{"vf":0.13069569157,"vi":10,"mona":32}
{"vf":0.26597264037,"vi":18,"mona":10}
{"vf":0.51507180789,"vi":2,"mona":111}
{"vf":0.4398316876,"vi":28,"mona":96}
{"vf":0.31818100763,"vi":20,"mona":32}
{"vf":0.76082362537,"vi":11,"mona":58}
{"vf":0.78457526653,"vi":30,"mona":37}
{"vf":0.86648331466,"vi":3,"mona":56}
{"vf":0.37471395661,"vi":20,"mona":32}
{"vf":0.45333415619,"vi":43,"mona":56}
{"vf":0.23774940497,"vi":48,"mona":32}
{"vf":0.48641176405,"vi":5,"mona":32}
{"vf":0.31186974677,"vi":23,"mona":32}
{"vf":0.81006435305,"vi":50,"mona":32}
{"vf":0.15244474774,"vi":8,"mona":44}
{"vf":0.19774473668,"vi":24,"mona":98}
{"vf":0.11113542435,"vi":15,"mona":56}
{"vf":0.44220007421,"vi":11,"mona":32}
{"vf":0.24644899415,"vi":39,"mona":126}
{"vf":0.67028203956,"vi":14,"mona":32}
{"vf":0.66511519463,"vi":22,"mona":32}
{"vf":0.97982191737,"vi":15,"mona":32}
{"vf":0.32792071928,"vi":12,"mona":32}
{"vf":0.10105849407,"vi":50,"mona":32}
{"vf":0.47779597109,"vi":13,"mona":32}
{"vf":0.65675812797,"vi":28,"mona":32}
{"vf":0.39589268831,"vi":7,"mona":32}
{"vf":0.39715195331,"vi":8,"mona":32}
{"vf":0.41454633581,"vi":30,"mona":56}
{"vf":0.020024300553,"vi":1,"mona":32}
{"vf":0.78830513544,"vi":34,"mona":95}
{"vf":0.33282354032,"vi":8,"mona":56}
{"vf":0.60873498232,"vi":10,"mona":32}
{"vf":0.98421920347,"vi":6,"mona":56}
{"vf":0.56094798376,"vi":2,"mona":56}
{"vf":0.8474531651,"vi":8,"mona":44}
{"vf":0.21689276281,"vi":11,"mona":32}
{"vf":0.27438364457,"vi":16,"mona":32}
{"vf":0.28757752012,"vi":36,"mona":56}
{"vf":0.87468234287,"vi":6,"mona":32}
{"vf":0.96746949432,"vi":12,"mona":32}
{"vf":0.67299909261,"vi":25,"mona":56}
{"vf":0.79883161117,"vi":10,"mona":45}
{"vf":0.58175009978,"vi":40,"mona":37}
{"vf":0.70399206132,"vi":14,"mona":10}
{"vf":0.12189925998,"vi":44,"mona":126}
{"vf":0.59434319404,"vi":49,"mona":39}
{"vf":0.44851634139,"vi":36,"mona":32}
{"vf":0.9860542973,"vi":44,"mona":32}
{"vf":0.23116178205,"vi":46,"mona":58}
{"vf":0.96384333191,"vi":40,"mona":61}
{"vf":0.71018240135,"vi":28,"mona":98}
{"vf":0.78568783426,"vi":10,"mona":56}
{"vf":0.62922113156,"vi":12,"mona":32}
{"vf":0.65570579912,"vi":47,"mona":32}
{"vf":0.8537633738,"vi":44,"mona":58}
{"vf":0.23872602684,"vi":44,"mona":56}
{"vf":0.045831166673,"vi":42,"mona":46}
{"vf":0.033727773,"vi":6,"mona":32}
{"vf":0.05795856053,"vi":9,"mona":32}
{"vf":0.30122889997,"vi":6,"mona":56}
{"vf":0.35188863846,"vi":2,"mona":32}
{"vf":0.81464003888,"vi":5,"mona":46}
{"vf":0.67757063545,"vi":33,"mona":32}
{"vf":0.88024654123,"vi":4,"mona":32}
{"vf":0.091043999884,"vi":42,"mona":56}
{"vf":0.83976776479,"vi":6,"mona":56}
{"vf":0.57630183757,"vi":39,"mona":32}
{"vf":0.64146235399,"vi":11,"mona":56}
{"vf":0.4137243263,"vi":41,"mona":56}
{"vf":0.66805558745,"vi":3,"mona":32}
{"vf":0.45510805096,"vi":7,"mona":32}
{"vf":0.7862815517,"vi":4,"mona":39}
{"vf":0.65310192504,"vi":42,"mona":32}
{"vf":0.95409123856,"vi":27,"mona":47}
{"vf":0.42184495018,"vi":25,"mona":45}
{"vf":0.21640793583,"vi":38,"mona":32}
{"vf":0.09496241319,"vi":25,"mona":32}
{"vf":0.36884545092,"vi":48,"mona":56}
{"vf":0.26501780609,"vi":32,"mona":56}
{"vf":0.48091082997,"vi":15,"mona":32}
{"vf":0.69070527842,"vi":42,"mona":45}
{"vf":0.18382849079,"vi":21,"mona":32}
{"vf":0.80341854203,"vi":37,"mona":45}
{"vf":0.56459043478,"vi":47,"mona":46}
{"vf":0.15663685137,"vi":19,"mona":56}
{"vf":0.5765190213,"vi":38,"mona":32}
{"vf":0.98595416523,"vi":42,"mona":61}
{"vf":0.79546741769,"vi":32,"mona":32}
{"vf":0.51502972725,"vi":34,"mona":32}
{"vf":0.094840660924,"vi":30,"mona":10}
{"vf":0.91885734815,"vi":14,"mona":32}
{"vf":0.34351647226,"vi":24,"mona":39}
{"vf":0.46677904157,"vi":9,"mona":61}
{"vf":0.50281304563,"vi":16,"mona":32}
{"vf":0.08250274579,"vi":20,"mona":32}
{"vf":0.30811955431,"vi":15,"mona":56}
{"vf":0.35179790924,"vi":16,"mona":32}
{"vf":0.64789347933,"vi":24,"mona":39}
{"vf":0.034874804085,"vi":33,"mona":56}
{"vf":0.28823928069,"vi":23,"mona":32}
{"vf":0.43943153624,"vi":22,"mona":58}
{"vf":0.5115054599,"vi":11,"mona":32}
{"vf":0.39658459462,"vi":2,"mona":32}
{"vf":0.92570795584,"vi":17,"mona":32}
{"vf":0.46653270232,"vi":48,"mona":32}
{"vf":0.076691165334,"vi":15,"mona":56}
{"vf":0.9018743895,"vi":1,"mona":32}
{"vf":0.62329754629,"vi":21,"mona":58}
{"vf":0.10541774612,"vi":45,"mona":56}
{"vf":0.4753165741,"vi":50,"mona":56}
{"vf":0.48861303367,"vi":50,"mona":39}
{"vf":0.34280880168,"vi":36,"mona":56}
{"vf":0.91318822303,"vi":20,"mona":32}
{"vf":0.37446277589,"vi":30,"mona":56}
{"vf":0.52113572578,"vi":36,"mona":32}
{"vf":0.94046728429,"vi":41,"mona":61}
{"vf":0.23303409945,"vi":10,"mona":45}
{"vf":0.81238950952,"vi":33,"mona":32}
{"vf":0.65923032421,"vi":49,"mona":10}
{"vf":0.61723526963,"vi":37,"mona":32}
{"vf":0.48290239717,"vi":29,"mona":98}
{"vf":0.35478309751,"vi":4,"mona":32}
{"vf":0.37021479849,"vi":23,"mona":56}
{"vf":0.28221841739,"vi":32,"mona":56}
{"vf":0.20887634857,"vi":24,"mona":32}
{"vf":0.75424740207,"vi":12,"mona":56}
{"vf":0.074384513311,"vi":9,"mona":95}
{"vf":0.52983568585,"vi":17,"mona":32}
{"vf":0.44476800202,"vi":43,"mona":32}
{"vf":0.74656800414,"vi":23,"mona":32}
{"vf":0.41891589691,"vi":23,"mona":32}
{"vf":0.52602966013,"vi":33,"mona":32}
{"vf":0.20653138962,"vi":19,"mona":32}
{"vf":0.22924484033,"vi":49,"mona":56}
{"vf":0.17169849388,"vi":26,"mona":46}
{"vf":0.22588643292,"vi":29,"mona":32}
{"vf":0.12753165024,"vi":13,"mona":111}
{"vf":0.95016697934,"vi":10,"mona":61}
{"vf":0.32148275641,"vi":11,"mona":32}
{"vf":0.26568668685,"vi":8,"mona":32}
{"vf":0.74033436039,"vi":6,"mona":61}
{"vf":0.15288722282,"vi":23,"mona":32}
{"vf":0.22178793466,"vi":45,"mona":32}
{"vf":0.0094299050979,"vi":41,"mona":32}
{"vf":0.40660786629,"vi":44,"mona":32}
{"vf":0.80281227292,"vi":10,"mona":126}
{"vf":0.024613684509,"vi":26,"mona":95}
{"vf":0.75447515864,"vi":49,"mona":39}
{"vf":0.75859316951,"vi":3,"mona":56}
{"vf":0.57193531399,"vi":9,"mona":126}
{"vf":0.39893982466,"vi":36,"mona":10}
{"vf":0.78529167129,"vi":38,"mona":45}
{"vf":0.099041829351,"vi":20,"mona":32}
{"vf":0.96110479371,"vi":45,"mona":32}
{"vf":0.53368794546,"vi":14,"mona":10}
{"vf":0.33931258018,"vi":33,"mona":56}
{"vf":0.22110293782,"vi":18,"mona":100}
{"vf":0.60136572598,"vi":23,"mona":56}
{"vf":0.14709469094,"vi":9,"mona":32}
{"vf":0.70085308747,"vi":34,"mona":45}
{"vf":0.8998249704,"vi":34,"mona":45}
{"vf":0.72059627343,"vi":19,"mona":32}
{"vf":0.73213520553,"vi":19,"mona":56}
{"vf":0.32037324249,"vi":39,"mona":56}
{"vf":0.36409186479,"vi":29,"mona":45}
{"vf":0.53107039887,"vi":33,"mona":100}
{"vf":0.61999331019,"vi":20,"mona":56}
{"vf":0.14381704363,"vi":11,"mona":32}
{"vf":0.48204260552,"vi":50,"mona":45}
{"vf":0.017765811877,"vi":15,"mona":32}
{"vf":0.77033407427,"vi":26,"mona":46}
{"vf":0.54406602471,"vi":18,"mona":56}
{"vf":0.34732463141,"vi":8,"mona":32}
{"vf":0.72455434641,"vi":26,"mona":32}
{"vf":0.72939065192,"vi":8,"mona":32}
{"vf":0.77459154208,"vi":37,"mona":95}
{"vf":0.84272931889,"vi":37,"mona":45}
{"vf":0.49229332875,"vi":39,"mona":32}
{"vf":0.66828464973,"vi":8,"mona":96}
{"vf":0.98495697998,"vi":11,"mona":58}
{"vf":0.64050681377,"vi":25,"mona":32}
{"vf":0.85688542016,"vi":3,"mona":45}
{"vf":0.82180546015,"vi":25,"mona":10}
{"vf":0.0006247733254,"vi":2,"mona":10}
{"vf":0.57263340196,"vi":19,"mona":58}
{"vf":0.99426977662,"vi":50,"mona":10}
{"vf":0.13710608101,"vi":40,"mona":56}
{"vf":0.97785340482,"vi":36,"mona":32}
{"vf":0.9544738275,"vi":5,"mona":32}
{"vf":0.91506376164,"vi":19,"mona":10}
{"vf":0.164211225,"vi":12,"mona":10}
{"vf":0.83525531995,"vi":1,"mona":32}
{"vf":0.15420230082,"vi":36,"mona":56}
{"vf":0.78394647874,"vi":42,"mona":32}
{"vf":0.5849000935,"vi":3,"mona":37}
{"vf":0.48128980049,"vi":35,"mona":56}
{"vf":0.38958711154,"vi":23,"mona":32}
{"vf":0.93529980327,"vi":11,"mona":56}
{"vf":0.29630217538,"vi":15,"mona":61}
{"vf":0.3839696378,"vi":10,"mona":56}
{"vf":0.49256654782,"vi":4,"mona":32}
{"vf":0.50229956326,"vi":10,"mona":62}
 

dr froyd

__________________________________________________
Local time
Today 2:14 AM
Joined
Jan 26, 2015
Messages
1,570
---
Python version to start with (have used Python before but by no means an expert in it)
Code:
import json
import sys

if len(sys.argv) > 1:
    path = sys.argv[1]
else:
    raise ValueError("missing arg")

data = []

with open(path, 'r') as f:
    for l in f:
        d = json.loads(l)
        d["sc"] = d["vi"] * d["vf"]
        data.append(d)

data.sort(key = lambda x: x['sc'], reverse = False)

s = ""
for d in data:
    s += chr(d['mona'])

print(s)
solution greatly aided by the fact that Python has built-in json support, and that Python dictionaries are practically the same as json objects
 

fluffy

Blake Belladonna
Local time
7:14 PM
Joined
Sep 21, 2024
Messages
657
---
After figuring out how the CPU works.

The way I think about things is not really in laungauge.

But more like how the kernel operates.

Classes functions interactions variables folders files

These are all data structures of a kernel.

I never saw how all the code of a laungauge goes together because most of it is implicit and hidden.

There are languages for creating language.

Has to do with monads.

Where in basic

1 x = 0

2 print hello

3 x = x + 1

4 if x = 5 end

5 go to line 2

Which is as data recursion but a process of encapsulation for monads. (In math it's the reverse of a function inside a function k = f(f n) -> k(k n) putting them inside each other)
 

dr froyd

__________________________________________________
Local time
Today 2:14 AM
Joined
Jan 26, 2015
Messages
1,570
---
Awk version.

one thing's for sure; the beloved unix text-procesing language is specialized for processing csv-type text, not json. Practically no utilities beyond text-manipulation stuff so had to write a sort manually. The hyper-loose dynamic typing where you never really know if you have a number or a string also is quite challenging for numerical operations

the number-parsing can cause some funny situations; what it chooses for decimal separator depends on your locale, so this program doesn't even work outside US unless you set e.g. LC_NUMERIC=POSIX before running it.

verdict: great command-line tool, but it's primarily a command-line tool for a reason

Code:
function swap(arr, i, j){
    tmp = arr[i]
    arr[i] = arr[j]
    arr[j] = tmp
}

function isort(y, x){
    n = length(y)
    for(i = 1; i <= n; i++){
        j = i
    while(j > 1 && y[j-1] > y[j]){
        swap(y, j, j-1)
        swap(x, j, j-1)
        j--
        }
    }
}

BEGIN {FS = ","} {
    gsub(/[{}]/, "")
    gsub(/\"[[:alpha:]]*\"\:/, "")
    xvals[FNR] = ($1 + 0) * ($2 + 0)
    mvals[FNR] = $3
}

END {
    isort(xvals, mvals)
    for(i = 1; i <= length(xvals); i++){
        printf "%c", mvals[i]
    }
}
 

dr froyd

__________________________________________________
Local time
Today 2:14 AM
Joined
Jan 26, 2015
Messages
1,570
---
did a quick one in C. I know C well but interesting for comparison. Here of course there's no sort available, no regular expressions, no json, no nothing. Yet it's all beautiful.


C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


// assumes this exact order and types in each json
// {"vf":0.63305535982,"vi":43,"mona":32}
void parseline(double* vf, int* vi, int* mo, char* json){

    char* token = strtok(json, ":,");
    int i = 0;
    while(token){
    switch(i){
        case 1: *vf = atof(token); break;
        case 3: *vi = atoi(token); break;
        case 5: *mo = atoi(token); break;
        }
    i++;
        token = strtok(NULL, ":,");
    }
}

size_t linecount(FILE* file){
    fseek(file, 0, SEEK_SET);
    size_t out = 0;
    char c;
    while((c = fgetc(file)) != EOF){
    out += c == '\n';
    }
    fseek(file, 0, SEEK_SET);
    return out;
}


void swapd(double* arr, size_t i, size_t j){
    double tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}

void swapi(int* arr, size_t i, size_t j){
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}


void isort(double* y, int* x, size_t n){
    for(size_t i = 0; i != n; ++i){
        size_t j = i;
    while(j > 0 && y[j-1] > y[j]){
        swapd(y, j, j-1);
        swapi(x, j, j-1);
        j--;
        }
    }
}


int main(int argc, char* argv[]){

    if(argc != 2){
        printf("usage: %s <file_path>\n", argv[0]);
    return 1;
    }

    FILE* file = fopen(argv[1], "r");
    if(!file){
        printf("failed open-file %s\n", argv[1]);
    return 1;
    }

    size_t lc = linecount(file);

    double* x = malloc(lc * sizeof(double));
    int* mo   = malloc(lc * sizeof(int));

    char linebuf[64];
    double vf;
    int vi;
    size_t i = 0;

    while(fgets(linebuf, sizeof(linebuf), file)){
    parseline(&vf, &vi, mo + i, linebuf);
    x[i++] = vi * vf;
    }

    fclose(file);
    isort(x, mo, lc);

    for(size_t i = 0; i != lc; ++i){
        printf("%c", mo[i]);
    }

    free(x); free(mo);
    return 0;
}
 

dr froyd

__________________________________________________
Local time
Today 2:14 AM
Joined
Jan 26, 2015
Messages
1,570
---
this one is crazy. Wanted to do it in bash and came across this tool "jq". Maybe it's cheating since it's a library. But it was pre-installed on my linux, so... let's called it bash/jq

the crazy part is that it's 1 line of code lol

Bash:
jq -sr '[.[] | {x: (.vf * .vi), mo: .mona}] | sort_by(.x) | .[] | .mo' $1 | awk '{printf "%c", $1}'
 

dr froyd

__________________________________________________
Local time
Today 2:14 AM
Joined
Jan 26, 2015
Messages
1,570
---
Perl.
really damn nice language. Has everything you need for this problem and super concise syntax.

extremely lenient on type-related bugs, a lot of weird things you can write and it just runs without saying anything. Not necessarily a bad thing - just means such error checks are up to the programmer.

Perl:
use JSON;

my $fh;
if(@ARGV){
    open($fh, '<', $ARGV[0]) or die "read-file err";
} else {
    die "missing arg";
}

my @data;
push @data, decode_json($_) while <$fh>;

for(@data) {
    $_->{x} = $_->{vi} * $_->{vf};
}

@data = sort {$a->{x} <=> $b->{x}} @data;

for(@data){
    print chr($_->{mona});
}
 
Top Bottom