/* Classify Department Employees in Picat. From https://dmcommunity.org/challenge/challenge-sep-2017/ """ A human resource office has information about all employees in every department including: salary, marital status, age, etc. Help the office to create a decision model that for each department calculates minimal, maximal, and average salaries along with a number of high-paid employees using rules like "Salary > 85000" Name Marital Status Gender Age Salary ------------------------------------------------ Robinson Married Female 25 20000 Warner Married Male 45 150000 Stevens Single Male 24 35000 White Married Female 32 75000 Smith Single Male 46 110000 Green Married Female 28 40000 Brown Married Male 32 65000 Klaus Married Male 54 85000 Houston Single Female 47 35000 Long Married Male 29 40000 Short Single Male 22 20000 Doe Single Female 21 21000 """ Note: The statement mentions department but there is no department info, so I skip this. This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => go. go ?=> data(1,People), N = People.len, Ix = [NameIx,MaritalIx,GenderIx,AgeIx,SalaryIx], Ix = 1..Ix.len, Marital = [P[MaritalIx] : P in People].sort_remove_dups, Gender = [P[GenderIx] : P in People].sort_remove_dups, Name = [P[NameIx] : P in People].sort, % salaries statistics Salaries = [P[SalaryIx] : P in People], MaxSalaries = max(Salaries), MinSalaries = min(Salaries), AvgSalaries = sum(Salaries) / N, % high paid HighPaid = [P[NameIx] : P in People, P[SalaryIx] > 85000], NumHighPaid = HighPaid.len, println(maxSalaries=MaxSalaries), println(minSalaries=MinSalaries), println(avgSalaries=AvgSalaries), println(highPaid=HighPaid), println(numHighPaid=NumHighPaid), % extra println(lowPaid=[P[NameIx] : P in People, P[SalaryIx] <= 30000]), println(meanAge=( sum([P[AgeIx] : P in People]) / N)), nl, nl. go => true. data(1,People) => People = [ [robinson,married,female,25, 20000], [warner ,married,male ,45,150000], [stevens ,single ,male ,24, 35000], [white ,married,female,32, 75000], [smith ,single ,male ,46,110000], [green ,married,female,28, 40000], [brown ,married,male ,32, 65000], [klaus ,married,male ,54, 85000], [houston ,single ,female,47, 35000], [long ,married,male ,29, 40000], [short ,single ,male ,22, 20000], [doe ,single ,female,21, 21000] ].