gitignored
This commit is contained in:
parent
11454b1346
commit
0ef500d9ef
11 changed files with 347 additions and 1 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1 +1,2 @@
|
||||||
cpp/hello-world/.exercism/metadata.json
|
*/*/.exercism/metadata.json
|
||||||
|
|
||||||
|
|
|
||||||
0
cpp/hello-world/.gitignore → cpp/.gitignore
vendored
0
cpp/hello-world/.gitignore → cpp/.gitignore
vendored
1
yamlscript/.gitignore
vendored
Normal file
1
yamlscript/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
/.local/
|
||||||
23
yamlscript/hello-world/.exercism/config.json
Normal file
23
yamlscript/hello-world/.exercism/config.json
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"ingydotnet"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
"m-dango"
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"solution": [
|
||||||
|
"hello-world.ys"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"hello-world-test.ys",
|
||||||
|
"Makefile"
|
||||||
|
],
|
||||||
|
"example": [
|
||||||
|
".meta/hello-world.ys"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"blurb": "Exercism's classic introductory exercise. Just say \"Hello, World!\".",
|
||||||
|
"source": "This is an exercise to introduce users to using Exercism",
|
||||||
|
"source_url": "https://en.wikipedia.org/wiki/%22Hello,_world!%22_program"
|
||||||
|
}
|
||||||
127
yamlscript/hello-world/.yamlscript/exercism-ys-installer
Normal file
127
yamlscript/hello-world/.yamlscript/exercism-ys-installer
Normal file
|
|
@ -0,0 +1,127 @@
|
||||||
|
#!/env/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
intro-prompt() (
|
||||||
|
cat <<...
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
This YAMLScript Exercism exercise requires the YAMLScript version $version
|
||||||
|
interpreter command file to be installed here:
|
||||||
|
|
||||||
|
$prefix/bin/ys
|
||||||
|
|
||||||
|
You can install it by pressing Enter now, or by running this command:
|
||||||
|
|
||||||
|
$make install-ys
|
||||||
|
|
||||||
|
This should only take a few seconds and you only need to do this once.
|
||||||
|
Other exercises will use the same file.
|
||||||
|
|
||||||
|
See https://yamlscript.org/doc/install/ for more YAMLScript installation info.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Would you like to install the 'ys' file now?
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
printf "Press Enter to install. Ctl-C to Quit."; read -r
|
||||||
|
)
|
||||||
|
|
||||||
|
main() {
|
||||||
|
setup "$@"
|
||||||
|
|
||||||
|
install-from-local
|
||||||
|
|
||||||
|
$auto && intro-prompt
|
||||||
|
|
||||||
|
installed || install-from-release || true
|
||||||
|
installed || install-from-build || true
|
||||||
|
installed ||
|
||||||
|
die "Installing '$installed' failed. Giving up." \
|
||||||
|
"Consider filing an issue at: $gh_issue_url"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo 'Success!'
|
||||||
|
echo "$installed is now installed."
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
installed() {
|
||||||
|
[[ -f $installed ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
install-from-local() {
|
||||||
|
local path
|
||||||
|
path=$(command -v "$ysfq") || true
|
||||||
|
if [[ -f $path ]]; then
|
||||||
|
mkdir -p "$bin"
|
||||||
|
cp "$path" "$bin"/
|
||||||
|
ln -fs "$ysfq" "$bin/ys-0"
|
||||||
|
ln -fs "$ysfq" "$bin/ys"
|
||||||
|
(installed && $auto) && exit
|
||||||
|
true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install-from-release() (
|
||||||
|
set -x
|
||||||
|
curl -s https://yamlscript.org/install |
|
||||||
|
BIN=1 VERSION="$version" PREFIX="$prefix" bash
|
||||||
|
)
|
||||||
|
|
||||||
|
install-from-build() (
|
||||||
|
cat <<...
|
||||||
|
|
||||||
|
The binary release installation failed.
|
||||||
|
We can attempt to build and install $ysfq now.
|
||||||
|
This can take from 1 to 5 minutes to complete.
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
printf "Press Enter to install. Ctl-C to Quit."; read -r
|
||||||
|
|
||||||
|
[[ -d /tmp && -w /tmp ]] ||
|
||||||
|
die "Can't write to /tmp" \
|
||||||
|
'Giving up.'
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
rm -fr "$yamlscript_clone"
|
||||||
|
|
||||||
|
git clone --branch="$version" "$yamlscript_repo" "$yamlscript_clone"
|
||||||
|
|
||||||
|
"$make" -C "$yamlscript_clone/ys" install PREFIX="$prefix"
|
||||||
|
)
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
version=$1
|
||||||
|
prefix=$2
|
||||||
|
make=$3
|
||||||
|
auto=false
|
||||||
|
[[ ${4-} ]] && auto=true
|
||||||
|
|
||||||
|
[[ $version =~ ^0\.1\.[0-9]+$ ]] ||
|
||||||
|
die "Invalid YS_VERSION '$version'"
|
||||||
|
|
||||||
|
bin=$prefix/bin
|
||||||
|
ysfq=ys-$version
|
||||||
|
installed=$bin/$ysfq
|
||||||
|
|
||||||
|
if installed; then
|
||||||
|
echo "'$installed' is already installed."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
yamlscript_repo=https://github.com/yaml/yamlscript
|
||||||
|
yamlscript_clone=/tmp/yamlscript-exercism
|
||||||
|
gh_issue_url=https://github.com/exercism/yamlscript/issues
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
printf '%s\n' "$@" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
49
yamlscript/hello-world/GNUmakefile
Normal file
49
yamlscript/hello-world/GNUmakefile
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
SHELL := bash
|
||||||
|
|
||||||
|
BASE := $(shell pwd)
|
||||||
|
|
||||||
|
export YS_VERSION := 0.1.96
|
||||||
|
|
||||||
|
YS_LOCAL_PREFIX := ../../../.local/v$(YS_VERSION)
|
||||||
|
ifeq (,$(shell [[ -d "$(YS_LOCAL_PREFIX)" ]] && echo ok))
|
||||||
|
YS_LOCAL_PREFIX := $(shell cd .. && pwd -P)/.local/v$(YS_VERSION)
|
||||||
|
endif
|
||||||
|
|
||||||
|
YS_LOCAL_BIN := $(YS_LOCAL_PREFIX)/bin
|
||||||
|
YS_BIN := $(YS_LOCAL_BIN)/ys-$(YS_VERSION)
|
||||||
|
|
||||||
|
YS_INSTALLER := .yamlscript/exercism-ys-installer
|
||||||
|
YS_INSTALLER_CMD := \
|
||||||
|
bash $(YS_INSTALLER) $(YS_VERSION) $(YS_LOCAL_PREFIX) $(MAKE)
|
||||||
|
|
||||||
|
TEST_FILE ?= $(wildcard *-test.ys)
|
||||||
|
|
||||||
|
export PATH := $(YS_LOCAL_BIN):$(PATH)
|
||||||
|
export YSPATH := $(BASE)
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
default:
|
||||||
|
@echo " No default make rule. Try 'make test'."
|
||||||
|
|
||||||
|
test: $(YS_BIN)
|
||||||
|
prove -v $(TEST_FILE)
|
||||||
|
|
||||||
|
install-ys:
|
||||||
|
@$(YS_INSTALLER_CMD)
|
||||||
|
|
||||||
|
uninstall-ys:
|
||||||
|
rm -fr $(YS_LOCAL_PREFIX)
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
ifdef EXERCISM_YAMLSCRIPT_GHA
|
||||||
|
$(YS_BIN):
|
||||||
|
|
||||||
|
else ifeq (/mnt/,$(dir $(BASE)))
|
||||||
|
$(YS_BIN):
|
||||||
|
|
||||||
|
else
|
||||||
|
$(YS_BIN):
|
||||||
|
@$(YS_INSTALLER_CMD) auto
|
||||||
|
endif
|
||||||
87
yamlscript/hello-world/HELP.md
Normal file
87
yamlscript/hello-world/HELP.md
Normal file
|
|
@ -0,0 +1,87 @@
|
||||||
|
# Help
|
||||||
|
|
||||||
|
## Running the tests
|
||||||
|
|
||||||
|
To test your solution simply run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make test
|
||||||
|
```
|
||||||
|
|
||||||
|
This will run the test file `<exercise-name>-test.ys` which contains all of the
|
||||||
|
tests that you will need to pass for your solution to be correct.
|
||||||
|
You should study the test file to understand exactly what your solution needs
|
||||||
|
to do.
|
||||||
|
|
||||||
|
> Note: The first time you run `make test` it will also make sure that the
|
||||||
|
> correct version of the `ys` YAMLScript interpreter is installed in the
|
||||||
|
> correct place.
|
||||||
|
|
||||||
|
If you run `make test` before changing any files, all the tests will fail.
|
||||||
|
This is the proper and expected behavior.
|
||||||
|
The normal exercise development process is to iteratively improve your
|
||||||
|
solution, running `make test` after each change, until all the tests pass.
|
||||||
|
|
||||||
|
If you want to only run a specific test (while concentrating on that part of the
|
||||||
|
solution), you can add this key/value pair to that test:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ONLY: true
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to skip particular tests (while working on other parts of the
|
||||||
|
solution), you can add this key/value pair to those tests:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
SKIP: true
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Testing Prerequisites
|
||||||
|
|
||||||
|
YAMLScript currently runs on MacOS and Linux.
|
||||||
|
|
||||||
|
Your computer will need to have the following very common commands installed:
|
||||||
|
|
||||||
|
* `bash` - You can run the tests under any shell, but `bash` must be available.
|
||||||
|
* `make` - You must use GNU `make` to run the tests.
|
||||||
|
In some environments tt might have a different name than `make`.
|
||||||
|
Possibly `gmake`.
|
||||||
|
* `prove` - This program is part of any normal Perl installation.
|
||||||
|
* `curl` - Used to install ys if it is not already installed.
|
||||||
|
|
||||||
|
It is extremely likely that you already have all of these programs installed.
|
||||||
|
|
||||||
|
## Submitting your solution
|
||||||
|
|
||||||
|
You can submit your solution using the `exercism submit hello-world.ys` command.
|
||||||
|
This command will upload your solution to the Exercism website and print the solution page's URL.
|
||||||
|
|
||||||
|
It's possible to submit an incomplete solution which allows you to:
|
||||||
|
|
||||||
|
- See how others have completed the exercise
|
||||||
|
- Request help from a mentor
|
||||||
|
|
||||||
|
## Need to get help?
|
||||||
|
|
||||||
|
If you'd like help solving the exercise, check the following pages:
|
||||||
|
|
||||||
|
- The [YAMLScript track's documentation](https://exercism.org/docs/tracks/yamlscript)
|
||||||
|
- The [YAMLScript track's programming category on the forum](https://forum.exercism.org/c/programming/yamlscript)
|
||||||
|
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5)
|
||||||
|
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs)
|
||||||
|
|
||||||
|
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring.
|
||||||
|
|
||||||
|
If you need help with this YAMLScript exercise, try the following resources:
|
||||||
|
|
||||||
|
* [YAMLScript Documentation](https://yamlscript.org/doc/)
|
||||||
|
* [YAMLScript Examples - Rosetta Code](
|
||||||
|
https://rosettacode.org/wiki/Category:YAMLScript#mw-pages)
|
||||||
|
* [YAMLScript Matrix Chat](https://matrix.to/#/#chat-yamlscript:yaml.io)
|
||||||
|
* [YAMLScript Slack Chat](https://clojurians.slack.com/messages/C05HQFMTURF)
|
||||||
|
* [YAMLScript IRC Chat](https://web.libera.chat/?channel=yamlscript)
|
||||||
|
* [YAMLScript GitHub Discussions](
|
||||||
|
https://github.com/yaml/yamlscript/discussions)
|
||||||
|
* [YAMLScript on Stack Overflow](
|
||||||
|
https://stackoverflow.com/questions/tagged/yamlscript)
|
||||||
8
yamlscript/hello-world/Makefile
Normal file
8
yamlscript/hello-world/Makefile
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# This Makefile is a decoy to attempt to detect when a non-GNU make is being
|
||||||
|
# used and alert the user.
|
||||||
|
|
||||||
|
test:
|
||||||
|
@echo "You appear to be using a non-GNU version of the 'make' program."
|
||||||
|
@echo "The YAMLScript Exercism track requires you to use GNU make."
|
||||||
|
@echo "Please try 'make $@' again using GNU make."
|
||||||
|
@exit 1
|
||||||
35
yamlscript/hello-world/README.md
Normal file
35
yamlscript/hello-world/README.md
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Hello World
|
||||||
|
|
||||||
|
Welcome to Hello World on Exercism's YAMLScript Track.
|
||||||
|
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
The classical introductory exercise.
|
||||||
|
Just say "Hello, World!".
|
||||||
|
|
||||||
|
["Hello, World!"][hello-world] is the traditional first program for beginning programming in a new language or environment.
|
||||||
|
|
||||||
|
The objectives are simple:
|
||||||
|
|
||||||
|
- Modify the provided code so that it produces the string "Hello, World!".
|
||||||
|
- Run the test suite and make sure that it succeeds.
|
||||||
|
- Submit your solution and check it at the website.
|
||||||
|
|
||||||
|
If everything goes well, you will be ready to fetch your first real exercise.
|
||||||
|
|
||||||
|
[hello-world]: https://en.wikipedia.org/wiki/%22Hello,_world!%22_program
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
### Created by
|
||||||
|
|
||||||
|
- @ingydotnet
|
||||||
|
|
||||||
|
### Contributed to by
|
||||||
|
|
||||||
|
- @m-dango
|
||||||
|
|
||||||
|
### Based on
|
||||||
|
|
||||||
|
This is an exercise to introduce users to using Exercism - https://en.wikipedia.org/wiki/%22Hello,_world!%22_program
|
||||||
11
yamlscript/hello-world/hello-world-test.ys
Normal file
11
yamlscript/hello-world/hello-world-test.ys
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env ys-0
|
||||||
|
|
||||||
|
use ys::taptest: :all
|
||||||
|
load: 'hello-world.ys'
|
||||||
|
|
||||||
|
test::
|
||||||
|
- name: Say Hi!
|
||||||
|
code: hello()
|
||||||
|
want: Hello, World!
|
||||||
|
|
||||||
|
done: 1
|
||||||
4
yamlscript/hello-world/hello-world.ys
Normal file
4
yamlscript/hello-world/hello-world.ys
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
!YS-v0
|
||||||
|
|
||||||
|
defn hello():
|
||||||
|
'Hello, World!'
|
||||||
Loading…
Add table
Add a link
Reference in a new issue