Skip to content

Commit

Permalink
added acronym, all-your-base, atbash-cipherr, binary, circular-buffer…
Browse files Browse the repository at this point in the history
…, complex-numbers, matching-brackets, pascals-triangle
  • Loading branch information
eksopolitiikka committed Nov 2, 2023
1 parent 2a50271 commit ff59057
Show file tree
Hide file tree
Showing 80 changed files with 4,766 additions and 0 deletions.
17 changes: 17 additions & 0 deletions exercises/practice/acronym/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Description

Convert a phrase to its acronym.

Techies love their TLA (Three Letter Acronyms)!

Help generate some jargon by writing a program that converts a long name like Portable Network Graphics to its acronym (PNG).

Punctuation is handled as follows: hyphens are word separators (like whitespace); all other punctuation can be removed from the input.

For example:

|Input|Output|
|-|-|
|As Soon As Possible|ASAP|
|Liquid-crystal display|LCD|
|Thank George It's Friday!|TGIF|
23 changes: 23 additions & 0 deletions exercises/practice/acronym/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"authors": [
"kapitaali"
],
"files": {
"solution": [
"src/acronym.cob"
],
"test": [
"tst/acronym/acronym.cut"
],
"example": [
".meta/proof.ci.cob"
],
"invalidator": [
"test.sh",
"test.ps1"
]
},
"blurb": "Convert a phrase to its acronym.",
"source": "Julien Vanier",
"source_url": "https://github.com/monkbroc"
}
52 changes: 52 additions & 0 deletions exercises/practice/acronym/.meta/proof.ci.cob
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. acronym.
AUTHOR. kapitaali.
ENVIRONMENT DIVISION.
DATA DIVISION.
FILE SECTION.

WORKING-STORAGE SECTION.
01 WS-ACRONYM PIC X(80).
01 WS-RESULT PIC X(20).
01 LEN PIC 99.
01 PICKNEXT PIC 9.
01 COUNTER PIC 99.
01 IDX PIC 99.
01 CHAR PIC X.

PROCEDURE DIVISION.
ABBREVIATE.
PERFORM STR-LENGTH.
MOVE 1 TO IDX.
MOVE SPACES TO WS-RESULT.
MOVE 1 TO PICKNEXT.
PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER = LEN
MOVE WS-ACRONYM(COUNTER:1) TO CHAR
EVALUATE CHAR
WHEN "_"
CONTINUE
WHEN " "
MOVE 1 TO PICKNEXT
CONTINUE
WHEN "-"
MOVE 1 TO PICKNEXT
CONTINUE
WHEN OTHER
IF PICKNEXT = 1
MOVE FUNCTION UPPER-CASE(CHAR)
TO WS-RESULT(IDX:1)
ADD 1 TO IDX
END-IF
MOVE 0 TO PICKNEXT
END-PERFORM.

STR-LENGTH.
MOVE 0 TO LEN.
MOVE FUNCTION LENGTH(WS-ACRONYM) TO IDX.
PERFORM VARYING IDX FROM FUNCTION LENGTH(WS-ACRONYM)
BY -1 UNTIL WS-ACRONYM(IDX:1) <> " "
ADD 1 TO LEN
END-PERFORM.
COMPUTE LEN = 80 - LEN.


63 changes: 63 additions & 0 deletions exercises/practice/acronym/bin/fetch-cobolcheck
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/usr/bin/env bash

# This file is a copy of the
# https://github.com/exercism/configlet/blob/main/scripts/fetch-configlet file.
# Please submit bugfixes/improvements to the above file to ensure that all tracks benefit from the changes.

# 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
28 changes: 28 additions & 0 deletions exercises/practice/acronym/bin/fetch-cobolcheck.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# This file is a copy of the
# https://github.com/exercism/configlet/blob/main/scripts/fetch-configlet.ps1 file.
# Please submit bugfixes/improvements to the above file to ensure that all tracks
# benefit from the changes.

$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
183 changes: 183 additions & 0 deletions exercises/practice/acronym/config.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# 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
10 changes: 10 additions & 0 deletions exercises/practice/acronym/src/acronym.cob
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. ACRONYM.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-ACRONYM PIC X(80).
01 WS-RESULT PIC X(20).

PROCEDURE DIVISION.
ABBREVIATE.
Loading

0 comments on commit ff59057

Please sign in to comment.