Skip to content

Commit

Permalink
add exercise: high-scores
Browse files Browse the repository at this point in the history
  • Loading branch information
glennj committed Jun 23, 2023
1 parent 5f09f76 commit 47923d0
Show file tree
Hide file tree
Showing 12 changed files with 524 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,14 @@
"practices": [],
"prerequisites": [],
"difficulty": 4
},
{
"slug": "high-scores",
"name": "High Scores",
"uuid": "58c2bdd1-a03e-4403-a203-0f854fc9d809",
"practices": [],
"prerequisites": [],
"difficulty": 4
}
]
},
Expand Down
6 changes: 6 additions & 0 deletions exercises/practice/high-scores/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Instructions

Manage a game player's High Score list.

Your task is to build a high-score component of the classic Frogger game, one of the highest selling and most addictive games of all time, and a classic of the arcade era.
Your task is to write methods that return the highest score from the list, the last added score and the three highest scores.
20 changes: 20 additions & 0 deletions exercises/practice/high-scores/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"authors": ["glennj"],
"files": {
"solution": [
"src/high-scores.cob"
],
"test": [
"tst/high-scores/high-scores.cut"
],
"example": [
".meta/proof.ci.cob"
],
"invalidator": [
"test.sh",
"test.ps1"
]
},
"blurb": "Manage a player's High Score list.",
"source": "Tribute to the eighties' arcade game Frogger"
}
Empty file.
46 changes: 46 additions & 0 deletions exercises/practice/high-scores/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# This is an auto-generated file.
#
# Regenerating this file via `configlet sync` will:
# - Recreate every `description` key/value pair
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
# - Preserve any other key/value pair
#
# As user-added comments (using the # character) will be removed when this file
# is regenerated, comments can be added via a `comment` key.

[1035eb93-2208-4c22-bab8-fef06769a73c]
description = "List of scores"

[6aa5dbf5-78fa-4375-b22c-ffaa989732d2]
description = "Latest score"

[b661a2e1-aebf-4f50-9139-0fb817dd12c6]
description = "Personal best"

[3d996a97-c81c-4642-9afc-80b80dc14015]
description = "Top 3 scores -> Personal top three from a list of scores"

[1084ecb5-3eb4-46fe-a816-e40331a4e83a]
description = "Top 3 scores -> Personal top highest to lowest"

[e6465b6b-5a11-4936-bfe3-35241c4f4f16]
description = "Top 3 scores -> Personal top when there is a tie"

[f73b02af-c8fd-41c9-91b9-c86eaa86bce2]
description = "Top 3 scores -> Personal top when there are less than 3"

[16608eae-f60f-4a88-800e-aabce5df2865]
description = "Top 3 scores -> Personal top when there is only one"

[2df075f9-fec9-4756-8f40-98c52a11504f]
description = "Top 3 scores -> Latest score after personal top scores"

[809c4058-7eb1-4206-b01e-79238b9b71bc]
description = "Top 3 scores -> Scores after personal top scores"

[ddb0efc0-9a86-4f82-bc30-21ae0bdc6418]
description = "Top 3 scores -> Latest score after personal best"

[6a0fd2d1-4cc4-46b9-a5bb-2fb667ca2364]
description = "Top 3 scores -> Scores after personal best"
63 changes: 63 additions & 0 deletions exercises/practice/high-scores/bin/fetch-cobolcheck
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/usr/bin/env bash

# This file is inspired by https://github.com/exercism/configlet/blob/main/scripts/fetch-configlet.
# It is only used in the cobol track, and a copy of it is placed in every exercise folder.
# If you change something, make sure to upgrade all scripts in all exercises!

set -eo pipefail

readonly LATEST='https://api.github.com/repos/0xE282B0/cobol-check/releases/latest'

case "$(uname)" in
Darwin*) os='mac' ;;
Linux*) os='linux' ;;
Windows*) os='windows' ;;
MINGW*) os='windows' ;;
MSYS_NT-*) os='windows' ;;
*) os='linux' ;;
esac

case "${os}" in
windows*) ext='.exe' ;;
*) ext='' ;;
esac

arch="$(uname -m)"

curlopts=(
--silent
--show-error
--fail
--location
--retry 3
)

if [[ -n "${GITHUB_TOKEN}" ]]; then
curlopts+=(--header "authorization: Bearer ${GITHUB_TOKEN}")
fi

suffix="${os}-${arch}${ext}"

get_download_url() {
curl "${curlopts[@]}" --header 'Accept: application/vnd.github.v3+json' "${LATEST}" |
grep "\"browser_download_url\": \".*/download/.*/cobol-check.*${suffix}\"$" |
cut -d'"' -f4
}

main() {
if [[ -d ./bin ]]; then
output_dir="./bin"
elif [[ $PWD == */bin ]]; then
output_dir="$PWD"
else
echo "Error: no ./bin directory found. This script should be ran from a repo root." >&2
return 1
fi

output_path="${output_dir}/cobolcheck${ext}"
download_url="$(get_download_url)"
curl "${curlopts[@]}" --output "${output_path}" "${download_url}"
chmod +x "${output_path}"
}

main
27 changes: 27 additions & 0 deletions exercises/practice/high-scores/bin/fetch-cobolcheck.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# This file is inspired by https://github.com/exercism/configlet/blob/main/scripts/fetch-configlet.ps1.
# It is only used in the cobol track, and a copy of it is placed in every exercise folder.
# If you change something, make sure to upgrade all scripts in all exercises!

$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"

$requestOpts = @{
Headers = If ($env:GITHUB_TOKEN) { @{ Authorization = "Bearer ${env:GITHUB_TOKEN}" } } Else { @{ } }
MaximumRetryCount = 3
RetryIntervalSec = 1
}

$arch = If ([Environment]::Is64BitOperatingSystem) { "amd64" } Else { "x86" }
$fileName = "cobol-check-windows-$arch.exe"

Function Get-DownloadUrl {
$latestUrl = "https://api.github.com/repos/0xE282B0/cobol-check/releases/latest"
Invoke-RestMethod -Uri $latestUrl -PreserveAuthorizationOnRedirect @requestOpts
| Select-Object -ExpandProperty assets
| Where-Object { $_.browser_download_url -match $FileName }
| Select-Object -ExpandProperty browser_download_url
}

$downloadUrl = Get-DownloadUrl
$outputFile = Join-Path -Path $PSScriptRoot -ChildPath "cobolcheck.exe"
Invoke-WebRequest -Uri $downloadUrl -OutFile $outputFile @requestOpts
184 changes: 184 additions & 0 deletions exercises/practice/high-scores/config.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
# Configuration settings for Cobol Check

#---------------------------------------------------------------------------------------------------------------------
# This configuration - echoed to console when Cobol Check is executed, for information only.
#---------------------------------------------------------------------------------------------------------------------
config.loaded = production

#---------------------------------------------------------------------------------------------------------------------
# Prefix for field names and paragraph names in the test management code that cobol-check
# inserts into programs to be tested. The default is "UT-". If this conflicts with names
# in the programs to be tested, you can override it with a value you specify here.
# The value must be 3 characters or less. Cannot be empty.
#---------------------------------------------------------------------------------------------------------------------
cobolcheck.prefix = UT-

#---------------------------------------------------------------------------------------------------------------------
# Tags written in the generated test code in the form of a comment, when a code injection starts and ends.
# Default is null, which will prevent the tags from appearing. Any other value will appear as comments
# surrounding the injected code.
# Examples:
# cobolcheck.injectedCodeTag.start = ###INJECT START###
# cobolcheck.injectedCodeTag.end = ###INJECT END###
#---------------------------------------------------------------------------------------------------------------------
cobolcheck.injectedCodeTag.start = null
cobolcheck.injectedCodeTag.end = null

#---------------------------------------------------------------------------------------------------------------------
# A tag written at the start of entities stubbed by default. Recommended value-length <= 4.
# Note: The tag will appear only when cobolcheck stubs lines by default.
# This is the case for CALLs and batch file IO verbs.
# Default is null, which will prevent the tag from appearing.
#---------------------------------------------------------------------------------------------------------------------
cobolcheck.stub.comment.tag = null

#---------------------------------------------------------------------------------------------------------------------
# Determines if cobolcheck should generate code, such that decimal point is comma.
# The default is "false". The value should be set to "true" if the compiler is set to
# read decimal points as commas. If the cobol source program sets DECIMAL-POINT IS COMMA,
# this configuration will be overwritten.
# Example: 1,385,481.00 (decimalPointIsComma = false)
# Example: 1.385.481,00 (decimalPointIsComma = true)
#---------------------------------------------------------------------------------------------------------------------
cobolcheck.decimalPointIsComma = false

#---------------------------------------------------------------------------------------------------------------------
# If the source program contains rules as the first line follwed by CBL, the given value will be appended
# to this.
# If no CBL is found in source, it will be added along with the given value
# default is null, which will make no changes.
#---------------------------------------------------------------------------------------------------------------------
cobolcheck.append.rules = null

#---------------------------------------------------------------------------------------------------------------------
# Path for the generated Cobol test code
# Default: ./
#---------------------------------------------------------------------------------------------------------------------
cobolcheck.test.program.path = ./

#---------------------------------------------------------------------------------------------------------------------
# Suffix to append to the name of each program under test to produce the name of the corresponding
# test program that contains the merged test code.
# Example: For program ABCXYZ4, if suffix is T.CBL then the test program name will be ABCXYZ4T.CBL.
#---------------------------------------------------------------------------------------------------------------------
cobolcheck.test.program.name = test.cob


#---------------------------------------------------------------------------------------------------------------------
# Path for the generated testsuite parse error log
# Default: ./
#---------------------------------------------------------------------------------------------------------------------
testsuite.parser.error.log.path = ./

#---------------------------------------------------------------------------------------------------------------------
# Name of the generated testsuite parse error log file - with extension
# Default: ParserErrorLog.txt
#---------------------------------------------------------------------------------------------------------------------
testsuite.parser.error.log.name = ParserErrorLog.txt

#---------------------------------------------------------------------------------------------------------------------
# The charset that cobolcheck will use when reading- and writing to files.
# See https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html, for a list of
# valid values.
# Default value for each OS is <default>, which will use the default encoding for the OS.
#---------------------------------------------------------------------------------------------------------------------
cobolcheck.file.encoding.linux = default
cobolcheck.file.encoding.macosx = default
cobolcheck.file.encoding.windows = default
cobolcheck.file.encoding.zos = default
cobolcheck.file.encoding.unix = default

#---------------------------------------------------------------------------------------------------------------------
# Sets permissions for all files generated by Cobol Check, for all users.
# If read, write and execute permissions are set, all users can perform said actions on all files
# that Cobol Check generates.
# Value can be any permutation of the letters: 'rwx' (read, write, execute) or none - meaning no permissions.
# Default value: rx
#---------------------------------------------------------------------------------------------------------------------
generated.files.permission.all = rx

#---------------------------------------------------------------------------------------------------------------------
# Determines if Cobol Check should run the generated test program.
# Default is true.
# If set to false, Cobol Check will generate the code, but not run it. If more than one program
# is given as a command line option, the generated test file will be overwritten. Thus if set to false,
# only one program should be given at a time.
#---------------------------------------------------------------------------------------------------------------------
cobolcheck.test.run = false

#---------------------------------------------------------------------------------------------------------------------
# These settings are to locate the application code under test in *your* Cobol project directory tree.
# Can be absolute path or relative to project root.
#---------------------------------------------------------------------------------------------------------------------
application.source.directory = src
application.copybook.directory = cpy

#---------------------------------------------------------------------------------------------------------------------
# Location of test suite input file(s). This can also be passed on command-line option --test-suite-path.
#---------------------------------------------------------------------------------------------------------------------
test.suite.directory = tst

#---------------------------------------------------------------------------------------------------------------------
# Location of test output. File extension is determined by a given format.
#---------------------------------------------------------------------------------------------------------------------
test.results.file = output/testResults

#---------------------------------------------------------------------------------------------------------------------
# Determines the format of the test results written to the output file.
# Supported formats: txt, xml, html.
#---------------------------------------------------------------------------------------------------------------------
test.results.format = txt

#---------------------------------------------------------------------------------------------------------------------
# Determines the format style of the test results written to the output file.
# The style controls the hierarchy and structure of data and naming of the 'object' that is written
# in a given format. Format: txt and style: directOutput are exclusive. txt cannot use any other style
# than directOutput, and directOutput cannot be used with any other format than txt.
# Other formats and styles can be used interchangeably.
# Supported styles: directOutput, JUnit, tableDocument, tableEmbed
#---------------------------------------------------------------------------------------------------------------------
test.results.format.style = directOutput

#---------------------------------------------------------------------------------------------------------------------
# If application source filenames have a suffix, specify it here without the period or dot.
#---------------------------------------------------------------------------------------------------------------------
application.source.filename.suffix = CBL,cbl,COB,cob

#---------------------------------------------------------------------------------------------------------------------
# If application copybook filenames have a suffix, specify it here without the period or dot
# e.g. application.copybook.filename.suffix = CBL
#---------------------------------------------------------------------------------------------------------------------
application.copybook.filename.suffix = CBL,cbl,COB,cob

#---------------------------------------------------------------------------------------------------------------------
# Optional override of system default Locale for log messages and exception messages.
#---------------------------------------------------------------------------------------------------------------------
#locale.language = ja
#locale.country =
#locale.variant =

#---------------------------------------------------------------------------------------------------------------------
# Cobol Check concatenates multiple test suite input files into a single file for the Generator.
# This is the relative or absolute path of the concatenated file. If not specified, the default
# is "./ALLTESTS" relative to the directory in which Cobol Check was started.
#---------------------------------------------------------------------------------------------------------------------
concatenated.test.suites = ./ALLTESTS

#---------------------------------------------------------------------------------------------------------------------
# Shell scripts and JCL files for executing your test suites.
# Cobol Check will invoke one of these after creating the copy of the program under test that contains
# test code generated from your test suites.
# Unix and Mac OS X are both treated as unix. Most unices can run the linux script.
# Unix is the default.
# You can write custom scripts/JCL for your environment, for instance if you are using a different Cobol compiler.
# The first element in these names reflects the first few characters returned by Java's System.getProperty("os.name").
# Cobol Check will select one of these entries based on which platform it thinks it's running on.
#---------------------------------------------------------------------------------------------------------------------

cobolcheck.script.directory = scripts
linux.process = linux_gnucobol_run_tests
osx.process = linux_gnucobol_run_tests
freebsd.process = linux_gnucobol_run_tests
windows.process = windows_gnucobol_run_tests.cmd
zos.process =
unix.process = linux_gnucobol_run_tests
Loading

0 comments on commit 47923d0

Please sign in to comment.