How to resolve the algorithm Soloway's recurring rainfall step by step in the jq programming language

Published on 12 May 2024 09:40 PM
#Jq

How to resolve the algorithm Soloway's recurring rainfall step by step in the jq programming language

Table of Contents

Problem Statement

Soloway's Recurring Rainfall is commonly used to assess general programming knowledge by requiring basic program structure, input/output, and program exit procedure. The problem: Write a program that will read in integers and output their average. Stop reading when the value 99999 is input. For languages that aren't traditionally interactive, the program can read in values as makes sense and stopping once 99999 is encountered. The classic rainfall problem comes from identifying success of Computer Science programs with their students, so the original problem statement is written above -- though it may not strictly apply to a given language in the modern era. Implementation Details: The purpose of this problem, as originally proposed in the 1980's through its continued use today, is to just show fundamentals of CS: iteration, branching, program structure, termination, management of data types, input/output (where applicable), etc with things like input validation or management of numerical limits being more "advanced". It isn't meant to literally be a rainfall calculator so implementations should strive to implement the solution clearly and simply. References:

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Soloway's recurring rainfall step by step in the jq programming language

Source code in the jq programming language

def isinteger: test("^ *[+-]?[0-9]+ *$");

def soloway:
  label $out
  | foreach (inputs, null) as $x (null;
      .invalid = false
      | if $x == null then .break = true
        elif ($x|isinteger) then ($x|tonumber) as $n
        | if $n == 99999
          then .break = true
          else .sum += $n | .n += 1
          end
        else .invalid = $x
        end;
      if .break then ., break $out
      elif .invalid then .
      else empty
      end)
  | (select(.invalid) | "Invalid entry (\(.invalid)). Please try again."),
    (select(.break and .sum) | "Average is: \(.sum / .n)") ;

soloway

  

You may also check:How to resolve the algorithm Substring/Top and tail step by step in the 360 Assembly programming language
You may also check:How to resolve the algorithm Rock-paper-scissors step by step in the JavaScript programming language
You may also check:How to resolve the algorithm Loops/While step by step in the Panda programming language
You may also check:How to resolve the algorithm Longest string challenge step by step in the D programming language
You may also check:How to resolve the algorithm Regular expressions step by step in the Java programming language