Skip to content

Commit

Permalink
feat: new exercise - acronym
Browse files Browse the repository at this point in the history
  • Loading branch information
GroophyLifefor committed Mar 5, 2024
1 parent da23b4f commit 2ddfa24
Show file tree
Hide file tree
Showing 6 changed files with 208 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 |
20 changes: 20 additions & 0 deletions exercises/practice/acronym/.meta/Example.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
@echo off
setlocal enabledelayedexpansion

set "phrase=%~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9"
set "acronym="

REM replace some of special characters which cmd interpeter care.
set "phrase=%phrase:-= %"
set "phrase=%phrase:_= %"

for %%a in (%phrase%) do (
set "word=%%~a"
set "word=!word:~0,1!"
set "acronym=!acronym!!word!"
)

REM Uppercase output
for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set "acronym=!acronym:%%A=%%A!"

echo !acronym!
17 changes: 17 additions & 0 deletions exercises/practice/acronym/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"authors": ["GroophyLifefor"],
"files": {
"solution": [
"Acronym.bat"
],
"test": [
"AcronymTest.bat"
],
"example": [
".meta/Example.bat"
]
},
"blurb": "Convert a long phrase to its acronym.",
"source": "Julien Vanier",
"source_url": "https://github.com/monkbroc/"
}
13 changes: 13 additions & 0 deletions exercises/practice/acronym/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# 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.

[af9ffe10-dc13-42d8-a742-e7bdafac449d]
description = "Say Hi!"
10 changes: 10 additions & 0 deletions exercises/practice/acronym/Acronym.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@echo off
setlocal enabledelayedexpansion

set "phrase=%~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9"
set "acronym="

REM Your code goes here


echo !acronym!
131 changes: 131 additions & 0 deletions exercises/practice/acronym/AcronymTest.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
@echo off
REM ---------------------------------------------------
REM Acronym Unit Testing
REM
REM sUnit Testing Framework version: 0.2
REM ---------------------------------------------------

:Main
REM Initalize result variable
set "slug=acronym"

CALL :Initialize

REM --------------------
REM Test Case Start \/\/
REM Resource: https://github.com/exercism/problem-specifications/blob/main/exercises/acronym/canonical-data.json
REM --------------------
set "expected=PNG"
set "if_success=Test passed"
set "if_failed=Test failed: basic."
CALL :Assert "Portable Network Graphics"

set "expected=ROR"
set "if_success=Test passed"
set "if_failed=Test failed: lowercase words."
CALL :Assert "Ruby on Rails"

set "expected=FIFO"
set "if_success=Test passed"
set "if_failed=Test failed: punctuation."
CALL :Assert "First In, First Out"

set "expected=GIMP"
set "if_success=Test passed"
set "if_failed=Test failed: all caps word."
CALL :Assert "GNU Image Manipulation Program"

set "expected=CMOS"
set "if_success=Test passed"
set "if_failed=Test failed: punctuation without whitespace."
CALL :Assert "Complementary metal-oxide semiconductor"

set "expected=ROTFLSHTMDCOALM"
set "if_success=Test passed"
set "if_failed=Test failed: very long abbreviation."
CALL :Assert "Rolling On The Floor Laughing So Hard That My Dogs Came Over And Licked Me"

set "expected=SIMUFTA"
set "if_success=Test passed"
set "if_failed=Test failed: consecutive delimiters."
CALL :Assert "Something - I made up from thin air"

set "expected=HC"
set "if_success=Test passed"
set "if_failed=Test failed: apostrophes."
CALL :Assert "Halley's Comet"

set "expected=TRNT"
set "if_success=Test passed"
set "if_failed=Test failed: underscore emphasis."
CALL :Assert "The Road _Not_ Taken"

REM --------------------
REM Test Case End /\/\/\
REM --------------------

CALL :ResolveStatus
exit /b %errorlevel%
REM End of Main

REM ---------------------------------------------------
REM Assert [..Parameters(up to 9)]
REM ---------------------------------------------------
GOTO :End REM Prevents the code below from being executed
:Assert
set "stdout="

REM Run the program and capture the output then delete the file
CALL %slug%.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 > stdout.bin 2>&1
set /p stdout=<stdout.bin
del stdout.bin

REM Check if the result is correct
if "%stdout%" == "%expected%" (
if defined if_success (
echo %if_success%

REM Reset the variable to avoid duplicating the message.
set "if_success="
set "if_failed="
)

REM If the result is correct, exit with code 0
set /a successCount+=1
exit /b 0
) else (
if defined if_failed (
echo %if_failed%

REM Reset the variable to avoid duplicating the message.
set "if_success="
set "if_failed="
)

REM If the result is incorrect, exit with code 1
set /a failCount+=1
exit /b 1
)
GOTO :EOF REM Go back to the line after the call to :Assert

:Initialize
REM It's for initialize, not about checking empty file
set "successCount=0"
set "failCount=0"
GOTO :EOF REM Go back to the line after the call to :CheckEmptyFile

:ResolveStatus
set "status="
if %failCount% gtr 0 (
REM status: Fail
REM message: The test failed.
exit /b 1

) else (
REM status: Pass
exit /b 0

)
GOTO :EOF REM Go back to the line after the call to :ExportResultAsJson

:End

0 comments on commit 2ddfa24

Please sign in to comment.