Icon representing a recipe

Recipe: CG303 Score Part All V3.01

created by Crashguard303

Profile


Name
CG303 Score Part All V3.01
ID
44355
Shared with
Public
Parent
None
Children
None
Created on
October 12, 2012 at 08:48 AM UTC
Updated on
October 12, 2012 at 08:48 AM UTC
Description

This script pops out an input-box dialog, where you can select a range of puzzle segments (by sliders) and check score parts (packing, hiding, clashing etc.) by checkboxes.
Over the selected segment-range, a score sum for each single score part is calculated and the overall-sum of all selected score parts.
Results are shown in the script recipe output window.
If you select all segments (1 as first and maximum as last) in sliders,
and check all score parts, the overall score sum should be 8000 points fewer than puzzle score (in most puzzles).

Best for


Code


--[[ Score Part all by Crashguard303 This script pops out an input-box dialog, where you can select a range of puzzle segments (by sliders) and check score parts (packing, hiding, clashing etc.) by checkboxes. Over the selected segment-range, a score sum for each single score part is calculated and the overall-sum of all selected score parts. Results are shown in the script recipe output window. If you select all segments (1 as first and maximum as last) in sliders, and check all score parts, the overall score sum should be 8000 points fewer than puzzle score (in most puzzles). ]]-- function DialogCheck() -- create dialog containing checkboxes with names as in ScorePartNames local ask -- initialize table ask for dialog display and storing chekbox values ask = dialog.CreateDialog("Get all score parts") -- windows title ask.which_segments = dialog.AddLabel("Which segment range?") -- add label for information ask.first = dialog.AddSlider("first segment",1,1,NumSegs,0) -- add slider for first segment to calculate. initial value is 1, range is 1...number of segments, stepsize is 10^0=1 -- slider method parameters: (name,initial value,min,max,10^-stepsize (0 is 1, 1 is .1, 10 is .01 etc) ask.last = dialog.AddSlider("last segment",NumSegs,1,NumSegs,0) -- add slider for last segment to calculate. initial value is number of segments, range is 1...number of segments, stepsize is 10^0=1 ask.which_parts = dialog.AddLabel("\nWhich score parts?") -- add label for information local k for k=1,#ScorePartNames do -- by variable k, cycle through all score part names ask[ScorePartNames[k]] = dialog.AddCheckbox(ScorePartNames[k], false) -- for each name, create a checkbox with this variable-name and show it as text -- default value for aech checkbox is false end -- k loop ask.OK = dialog.AddButton("OK", 1) -- add OK button returning 1 in function if pressed ask.Cancel = dialog.AddButton("Cancel", 0) -- add cancel button retunrning 0 in function if pressed return ask,dialog.Show(ask) -- return what is in table ask (containing which score parts (by names) have been selected) and flag for OK button end -- function function ScoreCalculate(ScoreCheck) -- for all segments in range, calculate all score parts selected in ScoreCheck if ScoreCheck.first.value>ScoreCheck.last.value then -- if first segment value is bigger than last segment value ScoreCheck.first.value,ScoreCheck.last.value = ScoreCheck.last.value,ScoreCheck.first.value -- swap values end -- if ScoreCheck.first>ScoreCheck.last print("Calculating score parts from segment "..ScoreCheck.first.value.." to "..ScoreCheck.last.value) local ScorePart={} -- initialize table for score-part-segment-sums ScorePart.all=0 -- in this table, initialize overall-sum value local k for k=1,#ScorePartNames do -- by variable k, cycle through all score part names if ScoreCheck[ScorePartNames[k]].value then -- if this score part name was checked in table ScoreCheck (ScoreCheck.ScorePartNames[k].value == true) -- same as if ScoreCheck[ScorePartNames[k]]["value"] == true ScorePart[ScorePartNames[k]]=0 -- initialize variable for score-part-segment-sum local l for l=ScoreCheck.first.value,ScoreCheck.last.value do -- by variable l, cycle through all selected segments ScorePart[ScorePartNames[k]]=ScorePart[ScorePartNames[k]]+absolutebest.GetSegmentEnergySubscore(l,ScorePartNames[k]) -- add score part with name ScorePartNames[k] at segment l to score-part-segment-sum end -- l loop -- when all single segment-scores of one score-part-segment-sum have been added ScorePart.all=ScorePart.all+ScorePart[ScorePartNames[k]] -- add this score-part-segment-sum value to overall-sum, too end -- if ScoreCheck end -- k loop return ScorePart -- return this value as function value end -- function function ScoreShow(ScoreCheck,ScorePart) -- show all score parts with names, values and overall-sum local k for k=1,#ScorePartNames do -- by variable k, cycle through all score part names if ScoreCheck[ScorePartNames[k]].value then -- if this score part name was checked in table ScoreCheck (ScoreCheck.ScorePartNames[k].value == true) print (ScorePartNames[k]..": "..ScorePart[ScorePartNames[k]]) -- show score-part name and segment sum end -- if ScoreCheck end-- k print ("Sum of all parts: "..ScorePart.all) -- show overall-sum end -- function NumSegs=structure.GetCount() -- set variable NumSegs to number of all puzzle segments fetched by function ScorePartNames={"clashing";"packing";"hiding";"bonding";"backbone";"sidechain";"reference";"disulfides";"other"} -- initialize table containing all score part (criteria) names local ScoreCheck={} -- initialize table containing information which score criteria should be checked, calculated and displayed local OKFlag -- initialize flag containing information if OK was pressed in score criteria selection dialog ScoreCheck,OKFlag=DialogCheck() -- set ScoreCheck and OKFlag by calling score criteria selection dialog containing checkboxes with names as in ScorePartNames local ScorePart={} if OKFlag>0 then -- if OK was pressed ScorePart=ScoreCalculate(ScoreCheck) -- by content of ScoreCheck, calculate scores ScoreShow(ScoreCheck,ScorePart) -- and show them end -- if OKFlag

Comments


Crashguard303 Lv 1

I know, there are already other scripts which can show score part components,
just had some fun feeding the component's names (clashing, hiding packing etc.) into a table, then generating an input box and fetching score parts using this table.