trackler 1.0.1.1 → 1.0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitmodules +3 -0
- data/README.md +11 -1
- data/bin/setup +2 -0
- data/lib/trackler/version.rb +1 -1
- data/tracks/prolog/.git +1 -0
- data/tracks/prolog/.gitignore +4 -0
- data/tracks/prolog/.travis.yml +12 -0
- data/tracks/prolog/LICENSE +21 -0
- data/tracks/prolog/README.md +12 -0
- data/tracks/prolog/SETUP.md +0 -0
- data/tracks/prolog/bin/build.sh +25 -0
- data/tracks/prolog/bin/fetch-configlet +32 -0
- data/tracks/prolog/config.json +74 -0
- data/tracks/prolog/docs/ABOUT.md +0 -0
- data/tracks/prolog/docs/INSTALLATION.md +0 -0
- data/tracks/prolog/docs/LEARNING.md +0 -0
- data/tracks/prolog/docs/RESOURCES.md +0 -0
- data/tracks/prolog/docs/TESTS.md +0 -0
- data/tracks/prolog/exercises/.keep +0 -0
- data/tracks/prolog/exercises/anagram/anagram.example +24 -0
- data/tracks/prolog/exercises/anagram/anagram.pl +1 -0
- data/tracks/prolog/exercises/anagram/anagram_tests.plt +57 -0
- data/tracks/prolog/exercises/binary/binary.example +11 -0
- data/tracks/prolog/exercises/binary/binary.pl +1 -0
- data/tracks/prolog/exercises/binary/binary_tests.plt +51 -0
- data/tracks/prolog/exercises/grains/grains.example +17 -0
- data/tracks/prolog/exercises/grains/grains.pl +3 -0
- data/tracks/prolog/exercises/grains/grains_tests.plt +39 -0
- data/tracks/prolog/exercises/hamming/hamming.example +15 -0
- data/tracks/prolog/exercises/hamming/hamming.pl +1 -0
- data/tracks/prolog/exercises/hamming/hamming_tests.plt +48 -0
- data/tracks/prolog/exercises/hello-world/hello_world.example +5 -0
- data/tracks/prolog/exercises/hello-world/hello_world.pl +0 -0
- data/tracks/prolog/exercises/hello-world/hello_world_tests.plt +11 -0
- data/tracks/prolog/exercises/leap/leap.example +3 -0
- data/tracks/prolog/exercises/leap/leap.pl +1 -0
- data/tracks/prolog/exercises/leap/leap_tests.plt +24 -0
- data/tracks/prolog/exercises/nucleotide-count/nucleotide_count.example +15 -0
- data/tracks/prolog/exercises/nucleotide-count/nucleotide_count.pl +0 -0
- data/tracks/prolog/exercises/nucleotide-count/nucleotide_count_tests.plt +22 -0
- data/tracks/prolog/exercises/rna-transcription/rna_transcription.example +18 -0
- data/tracks/prolog/exercises/rna-transcription/rna_transcription.pl +1 -0
- data/tracks/prolog/exercises/rna-transcription/rna_transcription_tests.plt +27 -0
- data/tracks/prolog/exercises/space-age/space_age.example +16 -0
- data/tracks/prolog/exercises/space-age/space_age.pl +1 -0
- data/tracks/prolog/exercises/space-age/space_age_tests.plt +38 -0
- data/tracks/prolog/exercises/sum-of-multiples/sum_of_multiples.example +14 -0
- data/tracks/prolog/exercises/sum-of-multiples/sum_of_multiples.pl +1 -0
- data/tracks/prolog/exercises/sum-of-multiples/sum_of_multiples_tests.plt +39 -0
- data/tracks/prolog/exercises/triangle/triangle.example +26 -0
- data/tracks/prolog/exercises/triangle/triangle.pl +1 -0
- data/tracks/prolog/exercises/triangle/triangle_tests.plt +45 -0
- data/tracks/prolog/img/.keep +0 -0
- metadata +51 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46eba216917195005f43b257524ef79a75d0fcce
|
4
|
+
data.tar.gz: bf6317aaf2b8742bd480e33ea4e06bcbce0081f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 323e53e441f4c400f84a4d0d0123d57e1c20ecee05c684c2df0788c678dc15cab9f6e32fb661e9bf4908fa3033051350e08eda69063add138f6077c927ca36ff
|
7
|
+
data.tar.gz: d7f42fc7e36ea22693526fcb80f2507492e59646361786e662e7ed1c02f7cc6cf19b7c3740469cae392e6a5c3ecb285de3edd3ec8e764b104764a9c48ba71217
|
data/.gitmodules
CHANGED
data/README.md
CHANGED
@@ -64,7 +64,17 @@ end
|
|
64
64
|
|
65
65
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
66
66
|
|
67
|
-
To install this gem onto your local machine, run `bundle exec rake install`.
|
67
|
+
To install this gem onto your local machine, run `bundle exec rake install`.
|
68
|
+
|
69
|
+
To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
70
|
+
|
71
|
+
## Adding a new language track
|
72
|
+
|
73
|
+
Language tracks are included as submodules. To add a new one, run the following command, defining the track id as an environment variable. Shown here with `prolog` as an example.
|
74
|
+
|
75
|
+
```
|
76
|
+
$ TRACK_ID=prolog; git submodule add https://github.com/exercism/x$TRACK_ID tracks/$TRACK_ID
|
77
|
+
```
|
68
78
|
|
69
79
|
## Contributing
|
70
80
|
|
data/bin/setup
CHANGED
data/lib/trackler/version.rb
CHANGED
data/tracks/prolog/.git
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gitdir: ../../.git/modules/tracks/prolog
|
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Katrina Owen, _@kytrinyx.com
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Exercism prolog Track
|
2
|
+
![build status](https://travis-ci.org/exercism/xprolog.svg?branch=master)
|
3
|
+
|
4
|
+
Exercism exercises in prolog.
|
5
|
+
|
6
|
+
## TODO
|
7
|
+
|
8
|
+
_Document how to contribute to the prolog track._
|
9
|
+
|
10
|
+
## Contributing Guide
|
11
|
+
|
12
|
+
Please see the [contributing guide](https://github.com/exercism/x-common/blob/master/CONTRIBUTING.md).
|
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
declare -i TEST_RESULT=0
|
2
|
+
FAILED_EXERCISES=''
|
3
|
+
|
4
|
+
for example_file in exercises/**/*.example
|
5
|
+
do
|
6
|
+
exercise_dir=$(dirname $example_file)
|
7
|
+
exercise=$(basename $example_file .example)
|
8
|
+
mv "$exercise_dir/$exercise.pl" "$exercise_dir/$exercise.impl"
|
9
|
+
mv "$exercise_dir/$exercise.example" "$exercise_dir/$exercise.pl"
|
10
|
+
echo '-------------------------------------------------------'
|
11
|
+
echo "Testing $exercise"
|
12
|
+
swipl -f "$exercise_dir/$exercise.pl" -s "$exercise_dir/${exercise}_tests.plt" -g run_tests,halt -t 'halt(1)'
|
13
|
+
if [ $? -ne 0 ]; then
|
14
|
+
TEST_RESULT=1
|
15
|
+
FAILED_EXERCISES+="$exercise\n"
|
16
|
+
fi
|
17
|
+
mv "$exercise_dir/$exercise.pl" "$exercise_dir/$exercise.example"
|
18
|
+
mv "$exercise_dir/$exercise.impl" "$exercise_dir/$exercise.pl"
|
19
|
+
done
|
20
|
+
|
21
|
+
if [ $TEST_RESULT -ne 0 ]; then
|
22
|
+
echo "The following exercises failed"
|
23
|
+
printf $FAILED_EXERCISES
|
24
|
+
exit $TEST_RESULT
|
25
|
+
fi
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
LATEST=https://github.com/exercism/configlet/releases/latest
|
4
|
+
|
5
|
+
OS=$(
|
6
|
+
case $(uname) in
|
7
|
+
(Darwin*)
|
8
|
+
echo "mac";;
|
9
|
+
(Linux*)
|
10
|
+
echo "linux";;
|
11
|
+
(Windows*)
|
12
|
+
echo "windows";;
|
13
|
+
(*)
|
14
|
+
echo "linux";;
|
15
|
+
esac)
|
16
|
+
|
17
|
+
ARCH=$(
|
18
|
+
case $(uname -m) in
|
19
|
+
(*64*)
|
20
|
+
echo 64bit;;
|
21
|
+
(*686*)
|
22
|
+
echo 32bit;;
|
23
|
+
(*386*)
|
24
|
+
echo 32bit;;
|
25
|
+
(*)
|
26
|
+
echo 64bit;;
|
27
|
+
esac)
|
28
|
+
|
29
|
+
VERSION="$(curl --head --silent $LATEST | awk -v FS=/ '/Location:/{print $NF}' | tr -d '\r')"
|
30
|
+
URL=https://github.com/exercism/configlet/releases/download/$VERSION/configlet-$OS-${ARCH}.tgz
|
31
|
+
|
32
|
+
curl -s --location $URL | tar xz -C bin/
|
@@ -0,0 +1,74 @@
|
|
1
|
+
{
|
2
|
+
"slug": "prolog",
|
3
|
+
"language": "prolog",
|
4
|
+
"repository": "https://github.com/exercism/xprolog",
|
5
|
+
"active": false,
|
6
|
+
"exercises": [
|
7
|
+
{
|
8
|
+
"slug": "hello-world" ,
|
9
|
+
"difficulty": 1,
|
10
|
+
"topics": []
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"slug": "sum-of-multiples",
|
14
|
+
"difficulty": 1,
|
15
|
+
"topics": []
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"slug": "binary",
|
19
|
+
"difficulty": 1,
|
20
|
+
"topics": []
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"slug": "leap",
|
24
|
+
"difficulty": 1,
|
25
|
+
"topics": []
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"slug": "triangle",
|
29
|
+
"difficulty": 1,
|
30
|
+
"topics": []
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"slug": "space-age",
|
34
|
+
"difficulty": 1,
|
35
|
+
"topics": []
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"slug": "grains",
|
39
|
+
"difficulty": 1,
|
40
|
+
"topics": []
|
41
|
+
},
|
42
|
+
{
|
43
|
+
"slug": "nucleotide-count" ,
|
44
|
+
"difficulty": 1,
|
45
|
+
"topics": []
|
46
|
+
},
|
47
|
+
{
|
48
|
+
"slug": "hamming",
|
49
|
+
"difficulty": 1,
|
50
|
+
"topics": []
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"slug": "anagram",
|
54
|
+
"difficulty": 1,
|
55
|
+
"topics": []
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"slug": "rna-transcription",
|
59
|
+
"difficulty": 1,
|
60
|
+
"topics": []
|
61
|
+
}
|
62
|
+
],
|
63
|
+
"deprecated": [
|
64
|
+
|
65
|
+
],
|
66
|
+
"ignored": [
|
67
|
+
"bin",
|
68
|
+
"img",
|
69
|
+
"docs"
|
70
|
+
],
|
71
|
+
"foregone": [
|
72
|
+
|
73
|
+
]
|
74
|
+
}
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
% turns a string into a sorted list of characters
|
2
|
+
format_word(Word, Formatted) :-
|
3
|
+
string_lower(Word, LowercaseWord),
|
4
|
+
string_chars(LowercaseWord, CharList),
|
5
|
+
sort(CharList, Formatted).
|
6
|
+
|
7
|
+
anagram(Word, Options, Matching) :-
|
8
|
+
format_word(Word, FormattedWord),
|
9
|
+
anagram(Word, Options, Matching, FormattedWord).
|
10
|
+
|
11
|
+
anagram(_, [], [], _) :- !.
|
12
|
+
anagram(Word, [Option|Options], Matching, CharList) :-
|
13
|
+
Word \== Option,
|
14
|
+
format_word(Option, FormattedOption),
|
15
|
+
equal_lists(CharList, FormattedOption),
|
16
|
+
anagram(Word, Options, NextMatching, CharList),
|
17
|
+
Matching = [Option | NextMatching],
|
18
|
+
!.
|
19
|
+
anagram(Word, [_ | Options], Matching, CharList) :-
|
20
|
+
anagram(Word, Options, Matching, CharList).
|
21
|
+
|
22
|
+
equal_lists([], []).
|
23
|
+
equal_lists([H|T1], [H|T2]) :-
|
24
|
+
equal_lists(T1, T2).
|
@@ -0,0 +1 @@
|
|
1
|
+
anagram(Word, Options, Matching).
|
@@ -0,0 +1,57 @@
|
|
1
|
+
:- begin_tests(anagram).
|
2
|
+
|
3
|
+
test(no_matches) :-
|
4
|
+
anagram("diaper", [ "hello", "world", "zombies", "pants"], []).
|
5
|
+
|
6
|
+
test(detects_simple_anagram) :-
|
7
|
+
anagram("ant", ["tan", "stand", "at"], ["tan"]).
|
8
|
+
|
9
|
+
test(does_not_detect_false_positives) :-
|
10
|
+
anagram("galea", ["eagle"], []).
|
11
|
+
|
12
|
+
test(detects_multiple_anagrams) :-
|
13
|
+
anagram("master", ["stream", "pigeon", "maters"], ["stream", "maters"]).
|
14
|
+
|
15
|
+
test(does_not_detect_anagram_subsets) :-
|
16
|
+
anagram("good", ["dog", "goody"], []).
|
17
|
+
|
18
|
+
test(detects_anagram) :-
|
19
|
+
anagram("listen", ["enlists", "google", "inlets", "banana"], ["inlets"]).
|
20
|
+
|
21
|
+
test(detects_multiple_anagrams) :-
|
22
|
+
anagram("allergy", ["gallery", "ballerina", "regally", "clergy", "largely", "leading"], ["gallery", "regally", "largely"]).
|
23
|
+
|
24
|
+
test(does_not_detect_identical_words) :-
|
25
|
+
anagram("corn", ["corn", "dark", "Corn", "rank", "CORN", "cron", "park"], ["cron"]).
|
26
|
+
|
27
|
+
test(does_not_detect_nonanagrams_with_identical_checksum) :-
|
28
|
+
anagram("mass", ["last"], []).
|
29
|
+
|
30
|
+
test(detects_anagrams_case_insensitively) :-
|
31
|
+
anagram("Orchestra", ["cashregister", "Carthorse", "radishes"], ["Carthorse"]).
|
32
|
+
|
33
|
+
test(detects_anagrams_using_case_insensitive_subject) :-
|
34
|
+
anagram("Orchestra", ["cashregister", "carthorse", "radishes"], ["carthorse"]).
|
35
|
+
|
36
|
+
test(detects_anagrams_using_case_insensitive_possible_matches) :-
|
37
|
+
anagram("orchestra", ["cashregister", "Carthorse", "radishes"], ["Carthorse"]).
|
38
|
+
|
39
|
+
test(does_not_detect_a_word_as_its_own_anagram) :-
|
40
|
+
anagram("banana", ["Banana"], []).
|
41
|
+
|
42
|
+
test(does_not_detect_a_anagram_if_the_original_word_is_repeated) :-
|
43
|
+
anagram("go", ["go Go GO"], []).
|
44
|
+
|
45
|
+
test(anagrams_must_use_all_letters_exactly_once) :-
|
46
|
+
anagram("tapper", ["patter"], []).
|
47
|
+
|
48
|
+
test(detects_unicode_anagrams) :-
|
49
|
+
anagram("ΑΒΓ", ["ΒΓΑ", "ΒΓΔ", "γβα"], ["ΒΓΑ", "γβα"]).
|
50
|
+
|
51
|
+
test(eliminates_misleading_unicode_anagrams) :-
|
52
|
+
anagram("ΑΒΓ", ["ABΓ"], []).
|
53
|
+
|
54
|
+
test(capital_word_is_not_own_anagram) :-
|
55
|
+
anagram("BANANA", ["Banana"], []).
|
56
|
+
|
57
|
+
:- end_tests(anagram).
|
@@ -0,0 +1 @@
|
|
1
|
+
binary(Str, Dec).
|
@@ -0,0 +1,51 @@
|
|
1
|
+
:- begin_tests(binary).
|
2
|
+
|
3
|
+
test(binary_0_is_decimal_0) :-
|
4
|
+
binary("0", 0).
|
5
|
+
|
6
|
+
test(binary_0_is_decimal_0) :-
|
7
|
+
binary("0", 0).
|
8
|
+
|
9
|
+
test(binary_1_is_decimal_1) :-
|
10
|
+
binary("1", 1).
|
11
|
+
|
12
|
+
test(binary_10_is_decimal_2) :-
|
13
|
+
binary("10", 2).
|
14
|
+
|
15
|
+
test(binary_11_is_decimal_3) :-
|
16
|
+
binary("11", 3).
|
17
|
+
|
18
|
+
test(binary_100_is_decimal_4) :-
|
19
|
+
binary("100", 4).
|
20
|
+
|
21
|
+
test(binary_1001_is_decimal_9) :-
|
22
|
+
binary("1001", 9).
|
23
|
+
|
24
|
+
test(binary_11010_is_decimal_26) :-
|
25
|
+
binary("11010", 26).
|
26
|
+
|
27
|
+
test(binary_10001101000_is_decimal_1128) :-
|
28
|
+
binary("10001101000", 1128).
|
29
|
+
|
30
|
+
test(binary_ignores_leading_zeros) :-
|
31
|
+
binary("000011111", 31).
|
32
|
+
|
33
|
+
test(two_is_not_a_valid_binary_digit, [fail]) :-
|
34
|
+
binary("2", _).
|
35
|
+
|
36
|
+
test(nonbinary_digit_is_invalid, [fail]) :-
|
37
|
+
binary("01201", _).
|
38
|
+
|
39
|
+
test(trailing_nonbinary_characters_is_invalid, [fail]) :-
|
40
|
+
binary("10nope", _).
|
41
|
+
|
42
|
+
test(nonbinary_characters_is_invalid, [fail]) :-
|
43
|
+
binary("nope10", _).
|
44
|
+
|
45
|
+
test(internal_nonbinary_characters_is_invalid, [fail]) :-
|
46
|
+
binary("10nope10", _).
|
47
|
+
|
48
|
+
test(whitespace_separated_is_invalid, [fail]) :-
|
49
|
+
binary("001 nope", _).
|
50
|
+
|
51
|
+
:- end_tests(binary).
|
@@ -0,0 +1,17 @@
|
|
1
|
+
square(1, 1) :- !.
|
2
|
+
square(SquareNumber, Value) :-
|
3
|
+
SquareNumber > 1, not(SquareNumber > 64),
|
4
|
+
NextSquare is SquareNumber - 1,
|
5
|
+
square(NextSquare, NewValue),
|
6
|
+
Value is 2 * NewValue,
|
7
|
+
!.
|
8
|
+
|
9
|
+
total(Total) :- total(Total, 64).
|
10
|
+
|
11
|
+
total(0, 0) :- !.
|
12
|
+
total(Total, Square) :-
|
13
|
+
NextSquare is Square - 1,
|
14
|
+
total(NextTotal, NextSquare),
|
15
|
+
square(Square, SquareValue),
|
16
|
+
Total is NextTotal + SquareValue.
|
17
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
:- begin_tests(grains).
|
2
|
+
|
3
|
+
test(first) :-
|
4
|
+
square(1, 1).
|
5
|
+
|
6
|
+
test(second) :-
|
7
|
+
square(2, 2).
|
8
|
+
|
9
|
+
test(third) :-
|
10
|
+
square(3, 4).
|
11
|
+
|
12
|
+
test(sixteen) :-
|
13
|
+
square(16, 32768).
|
14
|
+
|
15
|
+
test(twenty_three) :-
|
16
|
+
square(23, 4194304).
|
17
|
+
|
18
|
+
test(thirty_two) :-
|
19
|
+
square(32, 2147483648).
|
20
|
+
|
21
|
+
test(fifty_five) :-
|
22
|
+
square(55, 18014398509481984).
|
23
|
+
|
24
|
+
test(sixty_four) :-
|
25
|
+
square(64, 9223372036854775808).
|
26
|
+
|
27
|
+
test(total) :-
|
28
|
+
total(18446744073709551615).
|
29
|
+
|
30
|
+
test(zero, [fail]) :-
|
31
|
+
square(0, _).
|
32
|
+
|
33
|
+
test(negative, [fail]) :-
|
34
|
+
square(-1, _).
|
35
|
+
|
36
|
+
test(off_board, [fail]) :-
|
37
|
+
square(65, _).
|
38
|
+
|
39
|
+
:- end_tests(grains).
|
@@ -0,0 +1,15 @@
|
|
1
|
+
hamming_distance(Str1, Str2, Distance) :-
|
2
|
+
string_length(Str1, Length),
|
3
|
+
string_length(Str2, Length),
|
4
|
+
string_chars(Str1, List1),
|
5
|
+
string_chars(Str2, List2),
|
6
|
+
hamming_distance_cmp(List1, List2, Distance).
|
7
|
+
|
8
|
+
hamming_distance_cmp([], [], 0) :- !.
|
9
|
+
hamming_distance_cmp([Char1|Chars1], [Char2|Chars2], Distance) :-
|
10
|
+
hamming_distance_cmp(Chars1, Chars2, NextDistance),
|
11
|
+
(Char1 == Char2 ->
|
12
|
+
Distance is NextDistance
|
13
|
+
;
|
14
|
+
Distance is NextDistance + 1
|
15
|
+
).
|
@@ -0,0 +1 @@
|
|
1
|
+
hamming_distance(Str1, Str2, Dist).
|
@@ -0,0 +1,48 @@
|
|
1
|
+
:- begin_tests(hamming).
|
2
|
+
|
3
|
+
test(identical_strands) :-
|
4
|
+
hamming_distance("A", "A", 0).
|
5
|
+
|
6
|
+
test(long_identical_strands) :-
|
7
|
+
hamming_distance("GGACTGA", "GGACTGA", 0).
|
8
|
+
|
9
|
+
test(complete_distance_in_single_nucleotide_strands) :-
|
10
|
+
hamming_distance("A", "G", 1).
|
11
|
+
|
12
|
+
test(complete_distance_in_small_strands) :-
|
13
|
+
hamming_distance("AG", "CT", 2).
|
14
|
+
|
15
|
+
test(small_distance_in_small_strands) :-
|
16
|
+
hamming_distance("AT", "CT", 1).
|
17
|
+
|
18
|
+
test(small_distance) :-
|
19
|
+
hamming_distance("GGACG", "GGTCG", 1).
|
20
|
+
|
21
|
+
test(small_distance_in_long_strands) :-
|
22
|
+
hamming_distance("ACCAGGG", "ACTATGG", 2).
|
23
|
+
|
24
|
+
test(nonunique_character_in_first_strand) :-
|
25
|
+
hamming_distance("AGA", "AGG", 1).
|
26
|
+
|
27
|
+
test(nonunique_character_in_second_strand) :-
|
28
|
+
hamming_distance("AGG", "AGA", 1).
|
29
|
+
|
30
|
+
test(same_nucleotides_in_different_positions) :-
|
31
|
+
hamming_distance("TAG", "GAT", 2).
|
32
|
+
|
33
|
+
test(large_distance) :-
|
34
|
+
hamming_distance("GATACA", "GCATAA", 4).
|
35
|
+
|
36
|
+
test(large_distance_in_offbyone_strand) :-
|
37
|
+
hamming_distance("GGACGGATTCTG", "AGGACGGATTCT", 9).
|
38
|
+
|
39
|
+
test(empty_strands) :-
|
40
|
+
hamming_distance("", "", 0).
|
41
|
+
|
42
|
+
test(disallow_first_strand_longer, [fail]) :-
|
43
|
+
hamming_distance("AATG", "AAA", _).
|
44
|
+
|
45
|
+
test(disallow_second_strand_longer, [fail]) :-
|
46
|
+
hamming_distance("ATA", "AGTG", _).
|
47
|
+
|
48
|
+
:- end_tests(hamming).
|
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
:- begin_tests(hello_word).
|
2
|
+
test(hello_world) :-
|
3
|
+
hello_world('Hello World!').
|
4
|
+
|
5
|
+
test(hello_world_fail, blocked("Pending")) :-
|
6
|
+
hello_world('Alice', 'Hello Alice!').
|
7
|
+
|
8
|
+
test(hello_world_fail, blocked("Pending")) :-
|
9
|
+
hello_world('Bob', 'Hello Bob!').
|
10
|
+
|
11
|
+
:- end_tests(hello_word).
|
@@ -0,0 +1 @@
|
|
1
|
+
leap(Year).
|
@@ -0,0 +1,24 @@
|
|
1
|
+
:- begin_tests(leap_tests).
|
2
|
+
|
3
|
+
test(leap_year) :-
|
4
|
+
leap(1996).
|
5
|
+
|
6
|
+
test(standard_and_odd_year) :-
|
7
|
+
not(leap(1997)).
|
8
|
+
|
9
|
+
test(standard_even_year) :-
|
10
|
+
not(leap(1998)).
|
11
|
+
|
12
|
+
test(standard_nineteeth_century) :-
|
13
|
+
not(leap(1900)).
|
14
|
+
|
15
|
+
test(standard_eighteenth_century) :-
|
16
|
+
not(leap(1800)).
|
17
|
+
|
18
|
+
test(leap_twenty_fourth_century) :-
|
19
|
+
leap(2400).
|
20
|
+
|
21
|
+
test(leap_y2k) :-
|
22
|
+
leap(2000).
|
23
|
+
|
24
|
+
:- end_tests(leap_tests).
|
@@ -0,0 +1,15 @@
|
|
1
|
+
nucleotide_count(Strand, Counts) :-
|
2
|
+
atom_chars(Strand, Nucleotides),
|
3
|
+
count_nucleotides(Nucleotides, [('A', 0), ('C', 0), ('G', 0), ('T', 0)], Counts).
|
4
|
+
|
5
|
+
count_nucleotides([], Counts, Counts).
|
6
|
+
count_nucleotides([Nucleotide | Rest], Running, Counts) :-
|
7
|
+
count_single_nucleotide(Nucleotide, Running, NewCounts),
|
8
|
+
count_nucleotides(Rest, NewCounts, Counts).
|
9
|
+
|
10
|
+
count_single_nucleotide(Nucleotide, [(OtherNucleotide, OtherCount) | Rest], NewCounts) :-
|
11
|
+
count_single_nucleotide(Nucleotide, Rest, RestCounts),
|
12
|
+
append([(OtherNucleotide, OtherCount)], RestCounts, NewCounts).
|
13
|
+
count_single_nucleotide(Nucleotide, [(Nucleotide, Count) | Rest], NewCounts) :-
|
14
|
+
NewCount is Count + 1,
|
15
|
+
append([(Nucleotide, NewCount)], Rest, NewCounts).
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
:- begin_tests(nucleotide_counting).
|
2
|
+
|
3
|
+
test(empty_dna_strand_has_no_adenosine) :-
|
4
|
+
nucleotide_count('', [('A', 0) | _ ]), !.
|
5
|
+
|
6
|
+
test(repetitive_cytidine_gets_counted) :-
|
7
|
+
nucleotide_count('CCCCC', Counts),
|
8
|
+
member(('C', 5), Counts), !.
|
9
|
+
|
10
|
+
test(counts_only_thymidine) :-
|
11
|
+
nucleotide_count('GGGGGTAACCCGG', Counts),
|
12
|
+
member(('T', 1), Counts), !.
|
13
|
+
|
14
|
+
test(counts_only_thymidine) :-
|
15
|
+
nucleotide_count(
|
16
|
+
'AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC',
|
17
|
+
[ ('A' ,20), ('C' , 12), ('G' , 17), ('T', 21) ]), !.
|
18
|
+
|
19
|
+
test(fails_when_not_dns, [fail]) :-
|
20
|
+
nucleotide_count('JOHNNYAPPLESEED', _), !.
|
21
|
+
|
22
|
+
:- end_tests(nucleotide_counting).
|
@@ -0,0 +1,18 @@
|
|
1
|
+
rna_transcription(Rna, Dna) :-
|
2
|
+
string_chars(Rna, RnaList),
|
3
|
+
rna_transcription_list(RnaList, DnaList),
|
4
|
+
string_chars(Dna, DnaList).
|
5
|
+
|
6
|
+
rna_transcription_list([], []) :- !.
|
7
|
+
rna_transcription_list([RnaBase | Rna], [DnaBase | Dna]) :-
|
8
|
+
(RnaBase = 'C' ->
|
9
|
+
DnaBase = 'G';
|
10
|
+
RnaBase = 'G' ->
|
11
|
+
DnaBase = 'C';
|
12
|
+
RnaBase = 'T' ->
|
13
|
+
DnaBase = 'A';
|
14
|
+
RnaBase = 'A' ->
|
15
|
+
DnaBase = 'U'
|
16
|
+
),
|
17
|
+
rna_transcription_list(Rna, Dna).
|
18
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
rna_transcription(Rna, Dna).
|
@@ -0,0 +1,27 @@
|
|
1
|
+
:- begin_tests(rna_transcription).
|
2
|
+
|
3
|
+
test(rna_complement_of_cytosine_is_guanine) :-
|
4
|
+
rna_transcription("C", "G").
|
5
|
+
|
6
|
+
test(rna_complement_of_guanine_is_cytosine) :-
|
7
|
+
rna_transcription("G", "C").
|
8
|
+
|
9
|
+
test(rna_complement_of_thymine_is_adenine) :-
|
10
|
+
rna_transcription("T", "A").
|
11
|
+
|
12
|
+
test(rna_complement_of_adenine_is_uracil) :-
|
13
|
+
rna_transcription("A", "U").
|
14
|
+
|
15
|
+
test(rna_complement) :-
|
16
|
+
rna_transcription("ACGTGGTCTTAA", "UGCACCAGAAUU").
|
17
|
+
|
18
|
+
test(dna_correctly_handles_invalid_input, [fail]) :-
|
19
|
+
rna_transcription("U", _).
|
20
|
+
|
21
|
+
test(dna_correctly_handles_completely_invalid_input, [fail]) :-
|
22
|
+
rna_transcription("XXX", _).
|
23
|
+
|
24
|
+
test(dna_correctly_handles_partially_invalid_input, [fail]) :-
|
25
|
+
rna_transcription("ACGTXXXCTTAA", _).
|
26
|
+
|
27
|
+
:- end_tests(rna_transcription).
|
@@ -0,0 +1,16 @@
|
|
1
|
+
period("Earth", 1).
|
2
|
+
period("Mercury", 0.2408467).
|
3
|
+
period("Venus", 0.61519726).
|
4
|
+
period("Mars", 1.8808158).
|
5
|
+
period("Jupiter", 11.862615).
|
6
|
+
period("Saturn", 29.447498).
|
7
|
+
period("Uranus", 84.016846).
|
8
|
+
period("Neptune", 164.79132).
|
9
|
+
|
10
|
+
convYearSec(Year, Sec) :-
|
11
|
+
Year is Sec / 31557600.
|
12
|
+
|
13
|
+
space_age(Planet, AgeSec, Years) :-
|
14
|
+
period(Planet, Conv),
|
15
|
+
convYearSec(AgeYear, AgeSec),
|
16
|
+
Years is AgeYear / Conv, !.
|
@@ -0,0 +1 @@
|
|
1
|
+
space_age(Planet, AgeSec, Years).
|
@@ -0,0 +1,38 @@
|
|
1
|
+
:- begin_tests(space_age).
|
2
|
+
|
3
|
+
float_eq(Real, Expected) :-
|
4
|
+
Expected is round(Real * 100).
|
5
|
+
|
6
|
+
test(earth) :-
|
7
|
+
space_age("Earth", 1000000000, Age),
|
8
|
+
float_eq(Age, 3169).
|
9
|
+
|
10
|
+
test(mercury) :-
|
11
|
+
space_age("Mercury", 2134835688, Age),
|
12
|
+
float_eq(Age, 28088).
|
13
|
+
|
14
|
+
test(venus) :-
|
15
|
+
space_age("Venus", 189839836, Age),
|
16
|
+
float_eq(Age, 978).
|
17
|
+
|
18
|
+
test(mars) :-
|
19
|
+
space_age("Mars", 2329871239, Age),
|
20
|
+
float_eq(Age, 3925).
|
21
|
+
|
22
|
+
test(jupiter) :-
|
23
|
+
space_age("Jupiter", 901876382, Age),
|
24
|
+
float_eq(Age, 241).
|
25
|
+
|
26
|
+
test(saturn) :-
|
27
|
+
space_age("Saturn", 3000000000, Age),
|
28
|
+
float_eq(Age, 323).
|
29
|
+
|
30
|
+
test(uranus) :-
|
31
|
+
space_age("Uranus", 3210123456, Age),
|
32
|
+
float_eq(Age, 121).
|
33
|
+
|
34
|
+
test(neptune) :-
|
35
|
+
space_age("Neptune", 8210123456, Age),
|
36
|
+
float_eq(Age, 158).
|
37
|
+
|
38
|
+
:- end_tests(space_age).
|
@@ -0,0 +1,14 @@
|
|
1
|
+
factored([Curr|Factors], Num) :-
|
2
|
+
0 is mod(Num, Curr), !;
|
3
|
+
factored(Factors, Num).
|
4
|
+
|
5
|
+
sum_of_multiples(_, 0, 0) :- !.
|
6
|
+
sum_of_multiples(Factors, Limit, Sum) :-
|
7
|
+
Next is Limit - 1,
|
8
|
+
sum_of_multiples(Factors, Next, NextSum),
|
9
|
+
(
|
10
|
+
factored(Factors, Limit),
|
11
|
+
Sum is Limit + NextSum, !;
|
12
|
+
Sum is NextSum
|
13
|
+
).
|
14
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
sum_of_multiples(Factors, Limit, Sum).
|
@@ -0,0 +1,39 @@
|
|
1
|
+
:- begin_tests(sum_of_multiples).
|
2
|
+
|
3
|
+
test(low_limit) :-
|
4
|
+
sum_of_multiples([3, 5], 1, 0).
|
5
|
+
|
6
|
+
test(just_one_multiple) :-
|
7
|
+
sum_of_multiples([3, 5], 4, 3).
|
8
|
+
|
9
|
+
test(a_few_multiples) :-
|
10
|
+
sum_of_multiples([3, 5], 10, 23).
|
11
|
+
|
12
|
+
test(sum_more_multiples) :-
|
13
|
+
sum_of_multiples([3, 5], 100, 2318).
|
14
|
+
|
15
|
+
test(even_more_multiples) :-
|
16
|
+
sum_of_multiples([3, 5], 1000, 233168).
|
17
|
+
|
18
|
+
test(new_factors) :-
|
19
|
+
sum_of_multiples([7, 13, 17], 20, 51).
|
20
|
+
|
21
|
+
test(sum_more_new_factors) :-
|
22
|
+
sum_of_multiples([4, 6], 15, 30).
|
23
|
+
|
24
|
+
test(even_more_new_factors) :-
|
25
|
+
sum_of_multiples([5, 6, 8], 150, 4419).
|
26
|
+
|
27
|
+
test(divisible_factor) :-
|
28
|
+
sum_of_multiples([5, 25], 51, 275).
|
29
|
+
|
30
|
+
test(large_factors) :-
|
31
|
+
sum_of_multiples([43, 47], 10000, 2203160).
|
32
|
+
|
33
|
+
test(every_num) :-
|
34
|
+
sum_of_multiples([1], 100, 4950).
|
35
|
+
|
36
|
+
test(no_factors) :-
|
37
|
+
sum_of_multiples([], 10000, 0).
|
38
|
+
|
39
|
+
:- end_tests(sum_of_multiples).
|
@@ -0,0 +1,26 @@
|
|
1
|
+
triangle(Side, Side, Side, "equilateral") :-
|
2
|
+
valid_triangle(Side, Side, Side), !.
|
3
|
+
|
4
|
+
triangle(SideEq, SideEq, OtherSide, "isosceles") :-
|
5
|
+
valid_triangle(SideEq, SideEq, OtherSide), !.
|
6
|
+
|
7
|
+
triangle(SideEq, OtherSide, SideEq, "isosceles") :-
|
8
|
+
valid_triangle(SideEq, SideEq, OtherSide), !.
|
9
|
+
|
10
|
+
triangle(OtherSide, SideEq, SideEq, "isosceles") :-
|
11
|
+
valid_triangle(SideEq, SideEq, OtherSide), !.
|
12
|
+
|
13
|
+
triangle(Side1, Side2, Side3, "scalene") :-
|
14
|
+
valid_triangle(Side1, Side2, Side3).
|
15
|
+
|
16
|
+
|
17
|
+
valid_triangle(Side1, Side2, Side3) :-
|
18
|
+
Add23 is Side2 + Side3,
|
19
|
+
Add12 is Side1 + Side2,
|
20
|
+
Add13 is Side1 + Side3,
|
21
|
+
not(Side1 > Add23),
|
22
|
+
not(Side2 > Add13),
|
23
|
+
not(Side3 > Add12),
|
24
|
+
Side1 \== 0,
|
25
|
+
Side2 \== 0,
|
26
|
+
Side3 \== 0.
|
@@ -0,0 +1 @@
|
|
1
|
+
triangle(Side1, Side2, Side3, Type).
|
@@ -0,0 +1,45 @@
|
|
1
|
+
:- begin_tests(triangle).
|
2
|
+
|
3
|
+
test(equilateral_triangle_has_all_sides_equal) :-
|
4
|
+
triangle(2, 2, 2, "equilateral").
|
5
|
+
|
6
|
+
test(larger_equilateral_triangle) :-
|
7
|
+
triangle(10, 10, 10, "equilateral").
|
8
|
+
|
9
|
+
test(isosceles_triangle_with_last_two_sides_equal) :-
|
10
|
+
triangle(3, 4, 4, "isosceles").
|
11
|
+
|
12
|
+
test(isosceles_triangle_with_first_two_sides_equal) :-
|
13
|
+
triangle(4, 4, 3, "isosceles").
|
14
|
+
|
15
|
+
test(isosceles_triangle_with_first_and_last_sides_equal) :-
|
16
|
+
triangle(4, 3, 4, "isosceles").
|
17
|
+
|
18
|
+
test(isosceles_triangle_with_unequal_side_larger_than_equal_sides) :-
|
19
|
+
triangle(4, 7, 4, "isosceles").
|
20
|
+
|
21
|
+
test(scalene_triangle_has_no_equal_sides) :-
|
22
|
+
triangle(3, 4, 5, "scalene").
|
23
|
+
|
24
|
+
test(a2_equals_b_plus_c_isnt_always_equilateral) :-
|
25
|
+
triangle(5, 4, 6, "scalene").
|
26
|
+
|
27
|
+
test(larger_scalene_triangle) :-
|
28
|
+
triangle(10, 11, 12, "scalene").
|
29
|
+
|
30
|
+
test(scalene_triangle_with_sides_in_descending_order) :-
|
31
|
+
triangle(5, 4, 2, "scalene").
|
32
|
+
|
33
|
+
test(small_scalene_triangle_with_floating_point_values) :-
|
34
|
+
triangle((0.4), (0.6), (0.3), "scalene").
|
35
|
+
|
36
|
+
test(a_triangle_violating_the_triangle_inequality_is_illegal, [fail]) :-
|
37
|
+
triangle(7, 3, 2, _).
|
38
|
+
|
39
|
+
test(two_sides_equal_but_violates_triangle_inequality, [fail]) :-
|
40
|
+
triangle(1, 1, 3, _).
|
41
|
+
|
42
|
+
test(triangles_with_all_sides_zero_are_illegal, [fail]) :-
|
43
|
+
triangle(0, 0, 0, _).
|
44
|
+
|
45
|
+
:- end_tests(triangle).
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trackler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.1.
|
4
|
+
version: 1.0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -4956,6 +4956,55 @@ files:
|
|
4956
4956
|
- tracks/powershell/exercises/hello-world/hello-world.tests.ps1
|
4957
4957
|
- tracks/powershell/exercises/hello-world/hello-world_example.ps1
|
4958
4958
|
- tracks/powershell/img/icon.png
|
4959
|
+
- tracks/prolog/.git
|
4960
|
+
- tracks/prolog/.gitignore
|
4961
|
+
- tracks/prolog/.travis.yml
|
4962
|
+
- tracks/prolog/LICENSE
|
4963
|
+
- tracks/prolog/README.md
|
4964
|
+
- tracks/prolog/SETUP.md
|
4965
|
+
- tracks/prolog/bin/build.sh
|
4966
|
+
- tracks/prolog/bin/fetch-configlet
|
4967
|
+
- tracks/prolog/config.json
|
4968
|
+
- tracks/prolog/docs/ABOUT.md
|
4969
|
+
- tracks/prolog/docs/INSTALLATION.md
|
4970
|
+
- tracks/prolog/docs/LEARNING.md
|
4971
|
+
- tracks/prolog/docs/RESOURCES.md
|
4972
|
+
- tracks/prolog/docs/TESTS.md
|
4973
|
+
- tracks/prolog/exercises/.keep
|
4974
|
+
- tracks/prolog/exercises/anagram/anagram.example
|
4975
|
+
- tracks/prolog/exercises/anagram/anagram.pl
|
4976
|
+
- tracks/prolog/exercises/anagram/anagram_tests.plt
|
4977
|
+
- tracks/prolog/exercises/binary/binary.example
|
4978
|
+
- tracks/prolog/exercises/binary/binary.pl
|
4979
|
+
- tracks/prolog/exercises/binary/binary_tests.plt
|
4980
|
+
- tracks/prolog/exercises/grains/grains.example
|
4981
|
+
- tracks/prolog/exercises/grains/grains.pl
|
4982
|
+
- tracks/prolog/exercises/grains/grains_tests.plt
|
4983
|
+
- tracks/prolog/exercises/hamming/hamming.example
|
4984
|
+
- tracks/prolog/exercises/hamming/hamming.pl
|
4985
|
+
- tracks/prolog/exercises/hamming/hamming_tests.plt
|
4986
|
+
- tracks/prolog/exercises/hello-world/hello_world.example
|
4987
|
+
- tracks/prolog/exercises/hello-world/hello_world.pl
|
4988
|
+
- tracks/prolog/exercises/hello-world/hello_world_tests.plt
|
4989
|
+
- tracks/prolog/exercises/leap/leap.example
|
4990
|
+
- tracks/prolog/exercises/leap/leap.pl
|
4991
|
+
- tracks/prolog/exercises/leap/leap_tests.plt
|
4992
|
+
- tracks/prolog/exercises/nucleotide-count/nucleotide_count.example
|
4993
|
+
- tracks/prolog/exercises/nucleotide-count/nucleotide_count.pl
|
4994
|
+
- tracks/prolog/exercises/nucleotide-count/nucleotide_count_tests.plt
|
4995
|
+
- tracks/prolog/exercises/rna-transcription/rna_transcription.example
|
4996
|
+
- tracks/prolog/exercises/rna-transcription/rna_transcription.pl
|
4997
|
+
- tracks/prolog/exercises/rna-transcription/rna_transcription_tests.plt
|
4998
|
+
- tracks/prolog/exercises/space-age/space_age.example
|
4999
|
+
- tracks/prolog/exercises/space-age/space_age.pl
|
5000
|
+
- tracks/prolog/exercises/space-age/space_age_tests.plt
|
5001
|
+
- tracks/prolog/exercises/sum-of-multiples/sum_of_multiples.example
|
5002
|
+
- tracks/prolog/exercises/sum-of-multiples/sum_of_multiples.pl
|
5003
|
+
- tracks/prolog/exercises/sum-of-multiples/sum_of_multiples_tests.plt
|
5004
|
+
- tracks/prolog/exercises/triangle/triangle.example
|
5005
|
+
- tracks/prolog/exercises/triangle/triangle.pl
|
5006
|
+
- tracks/prolog/exercises/triangle/triangle_tests.plt
|
5007
|
+
- tracks/prolog/img/.keep
|
4959
5008
|
- tracks/purescript/.git
|
4960
5009
|
- tracks/purescript/.gitignore
|
4961
5010
|
- tracks/purescript/.travis.yml
|