Skip to content

Commit

Permalink
Implement exercise 'acronym'
Browse files Browse the repository at this point in the history
  • Loading branch information
ingydotnet committed Aug 1, 2024
1 parent d317c09 commit 8f79578
Show file tree
Hide file tree
Showing 10 changed files with 157 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,14 @@
"practices": [],
"prerequisites": [],
"difficulty": 1
},
{
"slug": "acronym",
"name": "Acronym",
"uuid": "69afd018-4769-431e-b1d3-84a678103736",
"practices": [],
"prerequisites": [],
"difficulty": 1
}
]
},
Expand Down
7 changes: 7 additions & 0 deletions config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,13 @@ exercises:
prerequisites: []
difficulty: 1

- slug: acronym
name: Acronym
uuid: 69afd018-4769-431e-b1d3-84a678103736
practices: []
prerequisites: []
difficulty: 1

tags:
- execution_mode/compiled
- execution_mode/interpreted
Expand Down
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 @@
# Instructions

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 |
8 changes: 8 additions & 0 deletions exercises/practice/acronym/.meta/acronym.ys
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
!yamlscript/v0

defn abbreviate(phrase): 42
phrase
.re-seq(/[A-Z]+['a-z]*|[a-z]+/ _)
.map(first)
.apply(str)
.upper-case()
18 changes: 18 additions & 0 deletions exercises/practice/acronym/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"authors": [],
"files": {
"solution": [
"acronym.ys"
],
"test": [
"test/test-1.ys",
"Makefile"
],
"example": [
".meta/acronym.ys"
]
},
"blurb": "Convert a long phrase to its acronym.",
"source": "Julien Vanier",
"source_url": "https://github.com/monkbroc"
}
1 change: 1 addition & 0 deletions exercises/practice/acronym/.meta/test
37 changes: 37 additions & 0 deletions exercises/practice/acronym/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# 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.

[1e22cceb-c5e4-4562-9afe-aef07ad1eaf4]
description = "basic"

[79ae3889-a5c0-4b01-baf0-232d31180c08]
description = "lowercase words"

[ec7000a7-3931-4a17-890e-33ca2073a548]
description = "punctuation"

[32dd261c-0c92-469a-9c5c-b192e94a63b0]
description = "all caps word"

[ae2ac9fa-a606-4d05-8244-3bcc4659c1d4]
description = "punctuation without whitespace"

[0e4b1e7c-1a6d-48fb-81a7-bf65eb9e69f9]
description = "very long abbreviation"

[6a078f49-c68d-4b7b-89af-33a1a98c28cc]
description = "consecutive delimiters"

[5118b4b1-4572-434c-8d57-5b762e57973e]
description = "apostrophes"

[adc12eab-ec2d-414f-b48c-66a4fc06cdef]
description = "underscore emphasis"
9 changes: 9 additions & 0 deletions exercises/practice/acronym/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
SHELL := bash

export YSPATH=$(PWD)

default:

.PHONY: test
test:
prove -v test/*.ys
4 changes: 4 additions & 0 deletions exercises/practice/acronym/acronym.ys
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
!yamlscript/v0

defn abbreviate(phrase):
# Implement the 'abbreviate' function.
48 changes: 48 additions & 0 deletions exercises/practice/acronym/test/test-1.ys
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env ys-0

require ys::taptest: :all

use: acronym

test::
- name: Basic
code: abbreviate('Portable Network Graphics')
want: PNG
uuid: 1e22cceb-c5e4-4562-9afe-aef07ad1eaf4

- name: Lowercase words
code: abbreviate('Ruby on Rails')
want: ROR
uuid: 79ae3889-a5c0-4b01-baf0-232d31180c08

- name: Punctuation
code: abbreviate('First In, First Out')
want: FIFO
uuid: ec7000a7-3931-4a17-890e-33ca2073a548

- name: All caps word
code: abbreviate('GNU Image Manipulation Program')
want: GIMP
uuid: 32dd261c-0c92-469a-9c5c-b192e94a63b0

- name: Punctuation without whitespace
code: abbreviate('Complementary metal-oxide semiconductor')
want: CMOS
uuid: ae2ac9fa-a606-4d05-8244-3bcc4659c1d4

- name: Very long abbreviation
code: abbreviate('Rolling On The Floor Laughing So Hard That My Dogs Came Over And Licked Me')
want: ROTFLSHTMDCOALM
uuid: 0e4b1e7c-1a6d-48fb-81a7-bf65eb9e69f9

- name: Consecutive delimiters
code: abbreviate('Something - I made up from thin air')
want: SIMUFTA
uuid: 6a078f49-c68d-4b7b-89af-33a1a98c28cc

- name: Apostrophes
code: abbreviate("Halley's Comet")
want: HC
uuid: 5118b4b1-4572-434c-8d57-5b762e57973e

done: 8

0 comments on commit 8f79578

Please sign in to comment.