How to resolve the algorithm Price fraction step by step in the Tcl programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Price fraction step by step in the Tcl programming language

Table of Contents

Problem Statement

A friend of mine runs a pharmacy.   He has a specialized function in his Dispensary application which receives a decimal value of currency and replaces it to a standard value.   This value is regulated by a government department.

Given a floating point value between   0.00   and   1.00,   rescale according to the following table:

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Price fraction step by step in the Tcl programming language

Source code in the tcl programming language

# Used once to turn the table into a "nice" form
proc parseTable table {
    set map {}
    set LINE_RE {^ *>= *([0-9.]+) *< *([0-9.]+) *:= *([0-9.]+) *$}
    foreach line [split $table \n] {
	if {[string trim $line] eq ""} continue
	if {[regexp $LINE_RE $line -> min max target]} {
	    lappend map $min $max $target
	} else {
	    error "invalid table format: $line"
	}
    }
    return $map
}

# How to apply the "nice" table to a particular value
proc priceFraction {map value} {
    foreach {minimum maximum target} $map {
	if {$value >= $minimum && $value < $maximum} {return $target}
    }
    # Failed to map; return the input
    return $value
}


# Make the mapping
set inputTable {
    >=  0.00  <  0.06  :=  0.10
    >=  0.06  <  0.11  :=  0.18
    >=  0.11  <  0.16  :=  0.26
    >=  0.16  <  0.21  :=  0.32
    >=  0.21  <  0.26  :=  0.38
    >=  0.26  <  0.31  :=  0.44
    >=  0.31  <  0.36  :=  0.50
    >=  0.36  <  0.41  :=  0.54
    >=  0.41  <  0.46  :=  0.58
    >=  0.46  <  0.51  :=  0.62
    >=  0.51  <  0.56  :=  0.66
    >=  0.56  <  0.61  :=  0.70
    >=  0.61  <  0.66  :=  0.74
    >=  0.66  <  0.71  :=  0.78
    >=  0.71  <  0.76  :=  0.82
    >=  0.76  <  0.81  :=  0.86
    >=  0.81  <  0.86  :=  0.90
    >=  0.86  <  0.91  :=  0.94
    >=  0.91  <  0.96  :=  0.98
    >=  0.96  <  1.01  :=  1.00
}
set map [parseTable $inputTable]

# Apply the mapping to some inputs (from the Oz example)
foreach example {.7388727 .8593103 .826687 .3444635 .0491907} {
    puts "$example -> [priceFraction $map $example]"
}


  

You may also check:How to resolve the algorithm Test integerness step by step in the Sidef programming language
You may also check:How to resolve the algorithm Array concatenation step by step in the E programming language
You may also check:How to resolve the algorithm Sequence of primorial primes step by step in the Raku programming language
You may also check:How to resolve the algorithm Display a linear combination step by step in the Wren programming language
You may also check:How to resolve the algorithm HTTP step by step in the Ruby programming language