trackler 2.2.0.5 → 2.2.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/track.rb +16 -12
- data/lib/trackler/version.rb +1 -1
- data/tracks/bash/config.json +74 -45
- data/tracks/bash/config/exercise_readme.go.tmpl +16 -0
- data/tracks/bash/config/maintainers.json +24 -0
- data/tracks/bash/exercises/anagram/README.md +18 -0
- data/tracks/bash/exercises/bob/README.md +23 -0
- data/tracks/bash/exercises/difference-of-squares/README.md +24 -0
- data/tracks/bash/exercises/gigasecond/README.md +16 -0
- data/tracks/bash/exercises/hamming/README.md +47 -0
- data/tracks/bash/exercises/hello-world/README.md +66 -0
- data/tracks/bash/exercises/hello-world/example.sh +1 -7
- data/tracks/bash/exercises/hello-world/hello_world_test.sh +1 -15
- data/tracks/bash/exercises/leap/README.md +38 -0
- data/tracks/bash/exercises/pangram/README.md +20 -0
- data/tracks/bash/exercises/phone-number/README.md +39 -0
- data/tracks/bash/exercises/phone-number/example.sh +27 -0
- data/tracks/bash/exercises/phone-number/phone_number_tests.sh +73 -0
- data/tracks/bash/exercises/raindrops/README.md +29 -0
- data/tracks/bash/exercises/rna-transcription/README.md +30 -0
- data/tracks/bash/exercises/two-fer/README.md +53 -0
- data/tracks/bash/exercises/two-fer/example.sh +9 -0
- data/tracks/bash/exercises/two-fer/two_fer_test.sh +23 -0
- data/tracks/bash/exercises/word-count/README.md +24 -0
- data/tracks/vimscript/docs/ABOUT.md +0 -2
- metadata +20 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c01a1f87bf36c0dda5c6dda215561d9aab7f404f
|
4
|
+
data.tar.gz: 0a4cc995dcc8b75e502196695e9c3cde56e838fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15312570345615c7f7ad2b1f0132ec8c86a76985c29c315a6ca0686800a11f44e4def5039e2e4cc41f349b2c2dae502f302c0f79ce3271bc5cf856227953a5d5
|
7
|
+
data.tar.gz: 0bba7ef3ede35c23798163a1f1e7ba8f43bfe8c07cf2548aa90d9cabefed2f6905f30434f9b661bc9577c06797bc36258e1ed4efbd3aaed803a34ae3b163d0a4
|
data/lib/trackler/track.rb
CHANGED
@@ -32,7 +32,7 @@ module Trackler
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def active?
|
35
|
-
!!config
|
35
|
+
!!config.active
|
36
36
|
end
|
37
37
|
|
38
38
|
def upcoming?
|
@@ -53,11 +53,11 @@ module Trackler
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def checklist_issue
|
56
|
-
config.
|
56
|
+
config.checklist_issue || 1
|
57
57
|
end
|
58
58
|
|
59
59
|
def gitter
|
60
|
-
config
|
60
|
+
config.gitter
|
61
61
|
end
|
62
62
|
|
63
63
|
def icon_path
|
@@ -69,23 +69,23 @@ module Trackler
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def language
|
72
|
-
config
|
72
|
+
config.language.to_s.strip
|
73
73
|
end
|
74
74
|
|
75
75
|
def repository
|
76
|
-
@repository ||= (config
|
76
|
+
@repository ||= (config.repository || "https://github.com/exercism/%s" % id).to_s.strip
|
77
77
|
end
|
78
78
|
|
79
79
|
def test_pattern
|
80
|
-
if config.
|
81
|
-
Regexp.new(config
|
80
|
+
if !!config.test_pattern
|
81
|
+
Regexp.new(config.test_pattern)
|
82
82
|
else
|
83
83
|
/test/i
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
87
|
def ignore_pattern
|
88
|
-
config.
|
88
|
+
config.ignore_pattern || 'example'
|
89
89
|
end
|
90
90
|
|
91
91
|
def docs(image_path: DocFile::DEFAULT_IMAGE_PATH)
|
@@ -124,15 +124,15 @@ module Trackler
|
|
124
124
|
private
|
125
125
|
|
126
126
|
def active_slugs
|
127
|
-
|
127
|
+
exercises.reject(&:deprecated).map(&:slug)
|
128
128
|
end
|
129
129
|
|
130
130
|
def foregone_slugs
|
131
|
-
config
|
131
|
+
config.foregone || []
|
132
132
|
end
|
133
133
|
|
134
134
|
def deprecated_slugs
|
135
|
-
|
135
|
+
exercises.select(&:deprecated).map(&:slug)
|
136
136
|
end
|
137
137
|
|
138
138
|
def most_popular_format(path)
|
@@ -142,8 +142,12 @@ module Trackler
|
|
142
142
|
formats.max_by { |format| formats.count(format) }
|
143
143
|
end
|
144
144
|
|
145
|
+
def exercises
|
146
|
+
config.exercises || []
|
147
|
+
end
|
148
|
+
|
145
149
|
def config
|
146
|
-
@config ||= JSON.parse(File.read(config_filename))
|
150
|
+
@config ||= JSON.parse(File.read(config_filename), object_class: OpenStruct)
|
147
151
|
end
|
148
152
|
|
149
153
|
def config_filename
|
data/lib/trackler/version.rb
CHANGED
data/tracks/bash/config.json
CHANGED
@@ -6,11 +6,10 @@
|
|
6
6
|
{
|
7
7
|
"uuid": "4e2533dd-3af5-400b-869d-78140764d533",
|
8
8
|
"slug": "hello-world",
|
9
|
-
"core":
|
10
|
-
"unlocked_by": null,
|
9
|
+
"core": true,
|
11
10
|
"difficulty": 1,
|
12
11
|
"topics": [
|
13
|
-
|
12
|
+
"stdout"
|
14
13
|
]
|
15
14
|
},
|
16
15
|
{
|
@@ -20,97 +19,127 @@
|
|
20
19
|
"unlocked_by": null,
|
21
20
|
"difficulty": 1,
|
22
21
|
"topics": [
|
23
|
-
|
22
|
+
"dates"
|
24
23
|
]
|
25
24
|
},
|
26
25
|
{
|
27
|
-
"uuid": "
|
28
|
-
"slug": "
|
26
|
+
"uuid": "9ac0b041-a7aa-4b0c-952a-d38d35e2cd65",
|
27
|
+
"slug": "bob",
|
29
28
|
"core": false,
|
30
29
|
"unlocked_by": null,
|
31
30
|
"difficulty": 1,
|
32
31
|
"topics": [
|
33
|
-
|
32
|
+
"control_flow_conditionals"
|
34
33
|
]
|
35
34
|
},
|
36
35
|
{
|
37
|
-
"uuid": "
|
38
|
-
"slug": "
|
39
|
-
"core":
|
40
|
-
"unlocked_by": null,
|
36
|
+
"uuid": "e24451fd-761d-4d20-81d9-e470486ec44a",
|
37
|
+
"slug": "leap",
|
38
|
+
"core": true,
|
41
39
|
"difficulty": 1,
|
42
40
|
"topics": [
|
43
|
-
|
41
|
+
"control_flow_conditionals",
|
42
|
+
"input_validation",
|
43
|
+
"boolean_logic"
|
44
44
|
]
|
45
45
|
},
|
46
46
|
{
|
47
|
-
"uuid": "
|
48
|
-
"slug": "
|
47
|
+
"uuid": "1a9c8d65-43ee-435e-8c55-9a45c14a71fb",
|
48
|
+
"slug": "raindrops",
|
49
49
|
"core": false,
|
50
|
-
"unlocked_by":
|
50
|
+
"unlocked_by": "leap",
|
51
51
|
"difficulty": 1,
|
52
52
|
"topics": [
|
53
|
-
|
53
|
+
"input_validation",
|
54
|
+
"control_flow_conditionals"
|
54
55
|
]
|
55
56
|
},
|
56
57
|
{
|
57
|
-
"uuid": "
|
58
|
-
"slug": "
|
58
|
+
"uuid": "ca5139b4-8b2f-44ea-8d83-0b8ca7674436",
|
59
|
+
"slug": "difference-of-squares",
|
59
60
|
"core": false,
|
60
|
-
"unlocked_by":
|
61
|
+
"unlocked_by": "leap",
|
61
62
|
"difficulty": 1,
|
62
63
|
"topics": [
|
63
|
-
|
64
|
+
"control_flow_conditionals",
|
65
|
+
"control_flow_loops",
|
66
|
+
"string_transformation",
|
67
|
+
"string_comparison"
|
64
68
|
]
|
65
69
|
},
|
66
70
|
{
|
67
|
-
"uuid": "
|
68
|
-
"slug": "
|
71
|
+
"uuid": "a7e2018a-c454-4fe0-ad35-229304306648",
|
72
|
+
"slug": "pangram",
|
73
|
+
"core": true,
|
74
|
+
"difficulty": 2,
|
75
|
+
"topics": [
|
76
|
+
"string_transformation"
|
77
|
+
]
|
78
|
+
},
|
79
|
+
{
|
80
|
+
"uuid": "33d9eb48-5958-4e98-afc0-8cff89577c86",
|
81
|
+
"slug": "anagram",
|
69
82
|
"core": false,
|
70
|
-
"unlocked_by":
|
71
|
-
"difficulty":
|
83
|
+
"unlocked_by": "pangram",
|
84
|
+
"difficulty": 2,
|
72
85
|
"topics": [
|
73
|
-
|
86
|
+
"control_flow_loops",
|
87
|
+
"string_transformation"
|
74
88
|
]
|
75
89
|
},
|
76
90
|
{
|
77
|
-
"uuid": "
|
78
|
-
"slug": "
|
91
|
+
"uuid": "68103f44-b442-48e6-b2b5-09001f73e926",
|
92
|
+
"slug": "hamming",
|
79
93
|
"core": false,
|
80
|
-
"unlocked_by":
|
81
|
-
"difficulty":
|
94
|
+
"unlocked_by": "pangram",
|
95
|
+
"difficulty": 2,
|
82
96
|
"topics": [
|
83
|
-
|
97
|
+
"control_flow_loops",
|
98
|
+
"string_comparison"
|
84
99
|
]
|
85
100
|
},
|
86
101
|
{
|
87
|
-
"uuid": "
|
88
|
-
"slug": "
|
102
|
+
"uuid": "8a62e53e-59c2-42d5-96e5-a0f8f9b5d177",
|
103
|
+
"slug": "rna-transcription",
|
89
104
|
"core": false,
|
90
|
-
"unlocked_by":
|
91
|
-
"difficulty":
|
105
|
+
"unlocked_by": "pangram",
|
106
|
+
"difficulty": 2,
|
92
107
|
"topics": [
|
93
|
-
|
108
|
+
"control_flow_loops",
|
109
|
+
"associative_arrays"
|
94
110
|
]
|
95
111
|
},
|
96
112
|
{
|
97
|
-
"uuid": "
|
98
|
-
"slug": "
|
113
|
+
"uuid": "51bd6542-408b-4a73-8343-1c4d50db5315",
|
114
|
+
"slug": "word-count",
|
99
115
|
"core": false,
|
100
|
-
"unlocked_by":
|
101
|
-
"difficulty":
|
116
|
+
"unlocked_by": "pangram",
|
117
|
+
"difficulty": 2,
|
102
118
|
"topics": [
|
103
|
-
|
119
|
+
"control_flow_loops",
|
120
|
+
"string_comparison"
|
104
121
|
]
|
105
122
|
},
|
106
123
|
{
|
107
|
-
"uuid": "
|
108
|
-
"slug": "
|
124
|
+
"uuid": "0cfac255-6871-4588-a16b-98f7692bfdbe",
|
125
|
+
"slug": "two-fer",
|
109
126
|
"core": false,
|
110
|
-
"unlocked_by":
|
111
|
-
"difficulty":
|
127
|
+
"unlocked_by": "pangram",
|
128
|
+
"difficulty": 2,
|
112
129
|
"topics": [
|
113
|
-
|
130
|
+
"text_formatting",
|
131
|
+
"control_flow_conditionals"
|
132
|
+
]
|
133
|
+
},
|
134
|
+
{
|
135
|
+
"uuid": "9f9a1a49-472f-4a39-aa28-6aa17eeebdc7",
|
136
|
+
"slug": "phone-number",
|
137
|
+
"core": false,
|
138
|
+
"unlocked_by": "pangram",
|
139
|
+
"difficulty": 2,
|
140
|
+
"topics": [
|
141
|
+
"string_comparison",
|
142
|
+
"control_flow_conditionals"
|
114
143
|
]
|
115
144
|
}
|
116
145
|
],
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# {{ .Spec.Name }}
|
2
|
+
|
3
|
+
{{ .Spec.Description -}}
|
4
|
+
{{- with .Hints }}
|
5
|
+
{{ . }}
|
6
|
+
{{ end }}
|
7
|
+
{{- with .TrackInsert }}
|
8
|
+
{{ . }}
|
9
|
+
{{ end }}
|
10
|
+
{{- with .Spec.Credits -}}
|
11
|
+
## Source
|
12
|
+
|
13
|
+
{{ . }}
|
14
|
+
{{ end }}
|
15
|
+
## Submitting Incomplete Solutions
|
16
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"maintainers": [
|
3
|
+
{
|
4
|
+
"github_username": "adelcambre",
|
5
|
+
"show_on_website": false,
|
6
|
+
"alumnus": false,
|
7
|
+
"name": null,
|
8
|
+
"bio": null,
|
9
|
+
"link_text": null,
|
10
|
+
"link_url": null,
|
11
|
+
"avatar_url": null
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"github_username": "kotp",
|
15
|
+
"show_on_website": false,
|
16
|
+
"alumnus": false,
|
17
|
+
"name": null,
|
18
|
+
"bio": null,
|
19
|
+
"link_text": null,
|
20
|
+
"link_url": null,
|
21
|
+
"avatar_url": null
|
22
|
+
}
|
23
|
+
]
|
24
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Anagram
|
2
|
+
|
3
|
+
Given a word and a list of possible anagrams, select the correct sublist.
|
4
|
+
|
5
|
+
Given `"listen"` and a list of candidates like `"enlists" "google"
|
6
|
+
"inlets" "banana"` the program should return a list containing
|
7
|
+
`"inlets"`.
|
8
|
+
|
9
|
+
Run the tests with:
|
10
|
+
|
11
|
+
bats whatever_test.sh
|
12
|
+
|
13
|
+
## Source
|
14
|
+
|
15
|
+
Inspired by the Extreme Startup game [https://github.com/rchatley/extreme_startup](https://github.com/rchatley/extreme_startup)
|
16
|
+
|
17
|
+
## Submitting Incomplete Solutions
|
18
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Bob
|
2
|
+
|
3
|
+
Bob is a lackadaisical teenager. In conversation, his responses are very limited.
|
4
|
+
|
5
|
+
Bob answers 'Sure.' if you ask him a question.
|
6
|
+
|
7
|
+
He answers 'Whoa, chill out!' if you yell at him.
|
8
|
+
|
9
|
+
He says 'Fine. Be that way!' if you address him without actually saying
|
10
|
+
anything.
|
11
|
+
|
12
|
+
He answers 'Whatever.' to anything else.
|
13
|
+
|
14
|
+
Run the tests with:
|
15
|
+
|
16
|
+
bats whatever_test.sh
|
17
|
+
|
18
|
+
## Source
|
19
|
+
|
20
|
+
Inspired by the 'Deaf Grandma' exercise in Chris Pine's Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=06](http://pine.fm/LearnToProgram/?Chapter=06)
|
21
|
+
|
22
|
+
## Submitting Incomplete Solutions
|
23
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Difference Of Squares
|
2
|
+
|
3
|
+
Find the difference between the square of the sum and the sum of the squares of the first N natural numbers.
|
4
|
+
|
5
|
+
The square of the sum of the first ten natural numbers is
|
6
|
+
(1 + 2 + ... + 10)² = 55² = 3025.
|
7
|
+
|
8
|
+
The sum of the squares of the first ten natural numbers is
|
9
|
+
1² + 2² + ... + 10² = 385.
|
10
|
+
|
11
|
+
Hence the difference between the square of the sum of the first
|
12
|
+
ten natural numbers and the sum of the squares of the first ten
|
13
|
+
natural numbers is 3025 - 385 = 2640.
|
14
|
+
|
15
|
+
Run the tests with:
|
16
|
+
|
17
|
+
bats whatever_test.sh
|
18
|
+
|
19
|
+
## Source
|
20
|
+
|
21
|
+
Problem 6 at Project Euler [http://projecteuler.net/problem=6](http://projecteuler.net/problem=6)
|
22
|
+
|
23
|
+
## Submitting Incomplete Solutions
|
24
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Gigasecond
|
2
|
+
|
3
|
+
Calculate the moment when someone has lived for 10^9 seconds.
|
4
|
+
|
5
|
+
A gigasecond is 10^9 (1,000,000,000) seconds.
|
6
|
+
|
7
|
+
Run the tests with:
|
8
|
+
|
9
|
+
bats whatever_test.sh
|
10
|
+
|
11
|
+
## Source
|
12
|
+
|
13
|
+
Chapter 9 in Chris Pine's online Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=09](http://pine.fm/LearnToProgram/?Chapter=09)
|
14
|
+
|
15
|
+
## Submitting Incomplete Solutions
|
16
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Hamming
|
2
|
+
|
3
|
+
Calculate the Hamming difference between two DNA strands.
|
4
|
+
|
5
|
+
A mutation is simply a mistake that occurs during the creation or
|
6
|
+
copying of a nucleic acid, in particular DNA. Because nucleic acids are
|
7
|
+
vital to cellular functions, mutations tend to cause a ripple effect
|
8
|
+
throughout the cell. Although mutations are technically mistakes, a very
|
9
|
+
rare mutation may equip the cell with a beneficial attribute. In fact,
|
10
|
+
the macro effects of evolution are attributable by the accumulated
|
11
|
+
result of beneficial microscopic mutations over many generations.
|
12
|
+
|
13
|
+
The simplest and most common type of nucleic acid mutation is a point
|
14
|
+
mutation, which replaces one base with another at a single nucleotide.
|
15
|
+
|
16
|
+
By counting the number of differences between two homologous DNA strands
|
17
|
+
taken from different genomes with a common ancestor, we get a measure of
|
18
|
+
the minimum number of point mutations that could have occurred on the
|
19
|
+
evolutionary path between the two strands.
|
20
|
+
|
21
|
+
This is called the 'Hamming distance'.
|
22
|
+
|
23
|
+
It is found by comparing two DNA strands and counting how many of the
|
24
|
+
nucleotides are different from their equivalent in the other string.
|
25
|
+
|
26
|
+
GAGCCTACTAACGGGAT
|
27
|
+
CATCGTAATGACGGCCT
|
28
|
+
^ ^ ^ ^ ^ ^^
|
29
|
+
|
30
|
+
The Hamming distance between these two DNA strands is 7.
|
31
|
+
|
32
|
+
# Implementation notes
|
33
|
+
|
34
|
+
The Hamming distance is only defined for sequences of equal length. This means
|
35
|
+
that based on the definition, each language could deal with getting sequences
|
36
|
+
of equal length differently.
|
37
|
+
|
38
|
+
Run the tests with:
|
39
|
+
|
40
|
+
bats whatever_test.sh
|
41
|
+
|
42
|
+
## Source
|
43
|
+
|
44
|
+
The Calculating Point Mutations problem at Rosalind [http://rosalind.info/problems/hamm/](http://rosalind.info/problems/hamm/)
|
45
|
+
|
46
|
+
## Submitting Incomplete Solutions
|
47
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Hello World
|
2
|
+
|
3
|
+
The classical introductory exercise. Just say "Hello, World!".
|
4
|
+
|
5
|
+
["Hello, World!"](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program) is
|
6
|
+
the traditional first program for beginning programming in a new language
|
7
|
+
or environment.
|
8
|
+
|
9
|
+
The objectives are simple:
|
10
|
+
|
11
|
+
- Write a function that returns the string "Hello, World!".
|
12
|
+
- Run the test suite and make sure that it succeeds.
|
13
|
+
- Submit your solution and check it at the website.
|
14
|
+
|
15
|
+
If everything goes well, you will be ready to fetch your first real exercise.
|
16
|
+
|
17
|
+
# Welcome to Bash!
|
18
|
+
|
19
|
+
Unlike many other languages here, bash is a bit of a special snowflake.
|
20
|
+
If you are on a Mac or other unix-y platform, you almost definitely
|
21
|
+
already have bash. In fact, anything you type into the terminal is
|
22
|
+
likely going through bash.
|
23
|
+
|
24
|
+
The downside to this is that there isn't much of a development
|
25
|
+
ecosystem around bash like there is for other languages, and there are
|
26
|
+
multiple verions of bash that can be frustratingly incompatible. Luckily
|
27
|
+
we shouldn't hit those differences for these basic examples, and if you
|
28
|
+
can get the tests to pass on your machine, we are doing great.
|
29
|
+
|
30
|
+
## Installation
|
31
|
+
|
32
|
+
As I said above, if you are on a unix-like OS (Mac OS X, Linux, Solaris,
|
33
|
+
etc), you probably already have bash.
|
34
|
+
|
35
|
+
## Testing
|
36
|
+
|
37
|
+
As there isn't much of a bash ecosystem, there also isn't really a de
|
38
|
+
facto leader in the bash testing area. For these examples we are using
|
39
|
+
[bats](https://github.com/sstephenson/bats). You should be able to
|
40
|
+
install it from your favorite package manager, on OS X with homebrew
|
41
|
+
this would look something like this:
|
42
|
+
|
43
|
+
```
|
44
|
+
$ brew install bats
|
45
|
+
==> Downloading
|
46
|
+
https://github.com/sstephenson/bats/archive/v0.4.0.tar.gz
|
47
|
+
==> Downloading from
|
48
|
+
https://codeload.github.com/sstephenson/bats/tar.gz/v0.4.0
|
49
|
+
########################################################################
|
50
|
+
100.0%
|
51
|
+
==> ./install.sh /opt/boxen/homebrew/Cellar/bats/0.4.0
|
52
|
+
🍺 /opt/boxen/homebrew/Cellar/bats/0.4.0: 10 files, 60K, built in 2
|
53
|
+
seconds
|
54
|
+
```
|
55
|
+
|
56
|
+
|
57
|
+
Run the tests with:
|
58
|
+
|
59
|
+
bats whatever_test.sh
|
60
|
+
|
61
|
+
## Source
|
62
|
+
|
63
|
+
This is an exercise to introduce users to using Exercism [http://en.wikipedia.org/wiki/%22Hello,_world!%22_program](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program)
|
64
|
+
|
65
|
+
## Submitting Incomplete Solutions
|
66
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -1,22 +1,8 @@
|
|
1
1
|
#!/usr/bin/env bats
|
2
2
|
|
3
|
-
@test "
|
3
|
+
@test "Say Hi!" {
|
4
4
|
run bash hello_world.sh
|
5
5
|
|
6
6
|
[ "$status" -eq 0 ]
|
7
7
|
[ "$output" = "Hello, World!" ]
|
8
8
|
}
|
9
|
-
|
10
|
-
@test 'When given "Alice" it should greet Alice!' {
|
11
|
-
run bash hello_world.sh Alice
|
12
|
-
|
13
|
-
[ "$status" -eq 0 ]
|
14
|
-
[ "$output" = "Hello, Alice!" ]
|
15
|
-
}
|
16
|
-
|
17
|
-
@test 'When given "Bob" it should greet Bob!' {
|
18
|
-
run bash hello_world.sh Bob
|
19
|
-
|
20
|
-
[ "$status" -eq 0 ]
|
21
|
-
[ "$output" = "Hello, Bob!" ]
|
22
|
-
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# Leap
|
2
|
+
|
3
|
+
Given a year, report if it is a leap year.
|
4
|
+
|
5
|
+
The tricky thing here is that a leap year in the Gregorian calendar occurs:
|
6
|
+
|
7
|
+
```plain
|
8
|
+
on every year that is evenly divisible by 4
|
9
|
+
except every year that is evenly divisible by 100
|
10
|
+
unless the year is also evenly divisible by 400
|
11
|
+
```
|
12
|
+
|
13
|
+
For example, 1997 is not a leap year, but 1996 is. 1900 is not a leap
|
14
|
+
year, but 2000 is.
|
15
|
+
|
16
|
+
If your language provides a method in the standard library that does
|
17
|
+
this look-up, pretend it doesn't exist and implement it yourself.
|
18
|
+
|
19
|
+
## Notes
|
20
|
+
|
21
|
+
Though our exercise adopts some very simple rules, there is more to
|
22
|
+
learn!
|
23
|
+
|
24
|
+
For a delightful, four minute explanation of the whole leap year
|
25
|
+
phenomenon, go watch [this youtube video][video].
|
26
|
+
|
27
|
+
[video]: http://www.youtube.com/watch?v=xX96xng7sAE
|
28
|
+
|
29
|
+
Run the tests with:
|
30
|
+
|
31
|
+
bats whatever_test.sh
|
32
|
+
|
33
|
+
## Source
|
34
|
+
|
35
|
+
JavaRanch Cattle Drive, exercise 3 [http://www.javaranch.com/leap.jsp](http://www.javaranch.com/leap.jsp)
|
36
|
+
|
37
|
+
## Submitting Incomplete Solutions
|
38
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Pangram
|
2
|
+
|
3
|
+
Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma,
|
4
|
+
"every letter") is a sentence using every letter of the alphabet at least once.
|
5
|
+
The best known English pangram is:
|
6
|
+
> The quick brown fox jumps over the lazy dog.
|
7
|
+
|
8
|
+
The alphabet used consists of ASCII letters `a` to `z`, inclusive, and is case
|
9
|
+
insensitive. Input will not contain non-ASCII symbols.
|
10
|
+
|
11
|
+
Run the tests with:
|
12
|
+
|
13
|
+
bats whatever_test.sh
|
14
|
+
|
15
|
+
## Source
|
16
|
+
|
17
|
+
Wikipedia [https://en.wikipedia.org/wiki/Pangram](https://en.wikipedia.org/wiki/Pangram)
|
18
|
+
|
19
|
+
## Submitting Incomplete Solutions
|
20
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Phone Number
|
2
|
+
|
3
|
+
Clean up user-entered phone numbers so that they can be sent SMS messages.
|
4
|
+
|
5
|
+
The **North American Numbering Plan (NANP)** is a telephone numbering system used by many countries in North America like the United States, Canada or Bermuda. All NANP-countries share the same international country code: `1`.
|
6
|
+
|
7
|
+
NANP numbers are ten-digit numbers consisting of a three-digit Numbering Plan Area code, commonly known as *area code*, followed by a seven-digit local number. The first three digits of the local number represent the *exchange code*, followed by the unique four-digit number which is the *subscriber number*.
|
8
|
+
|
9
|
+
|
10
|
+
The format is usually represented as
|
11
|
+
```
|
12
|
+
(NXX)-NXX-XXXX
|
13
|
+
```
|
14
|
+
where `N` is any digit from 2 through 9 and `X` is any digit from 0 through 9.
|
15
|
+
|
16
|
+
Your task is to clean up differently formated telephone numbers by removing punctuation and the country code (1) if present.
|
17
|
+
|
18
|
+
For example, the inputs
|
19
|
+
- `+1 (613)-995-0253`
|
20
|
+
- `613-995-0253`
|
21
|
+
- `1 613 995 0253`
|
22
|
+
- `613.995.0253`
|
23
|
+
|
24
|
+
should all produce the output
|
25
|
+
|
26
|
+
`6139950253`
|
27
|
+
|
28
|
+
**Note:** As this exercise only deals with telephone numbers used in NANP-countries, only 1 is considered a valid country code.
|
29
|
+
|
30
|
+
Run the tests with:
|
31
|
+
|
32
|
+
bats whatever_test.sh
|
33
|
+
|
34
|
+
## Source
|
35
|
+
|
36
|
+
Event Manager by JumpstartLab [http://tutorials.jumpstartlab.com/projects/eventmanager.html](http://tutorials.jumpstartlab.com/projects/eventmanager.html)
|
37
|
+
|
38
|
+
## Submitting Incomplete Solutions
|
39
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
correct_pattern="^1?[2-9][0-9]{2}[2-9][0-9]{6}$"
|
4
|
+
|
5
|
+
function usage {
|
6
|
+
echo "Usage: $0 <phone-number>"
|
7
|
+
# echo "<phone-number>: [1]NXX-NXX-XXXX : N=[2-9], X=[0-9]"
|
8
|
+
}
|
9
|
+
|
10
|
+
if [ "$#" -ne 1 ]; then
|
11
|
+
usage
|
12
|
+
exit 1
|
13
|
+
fi
|
14
|
+
|
15
|
+
input="$1"
|
16
|
+
|
17
|
+
# Remove everything but numbers
|
18
|
+
result=${input//[^0-9]/""}
|
19
|
+
|
20
|
+
# Error checking
|
21
|
+
if [[ ! $result =~ $correct_pattern ]]; then
|
22
|
+
echo "Invalid number. [1]NXX-NXX-XXXX N=2-9, X=0-9"
|
23
|
+
exit 1
|
24
|
+
fi
|
25
|
+
|
26
|
+
# Strip off leading 1 country code if exists
|
27
|
+
echo ${result: -10}
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env bats
|
2
|
+
|
3
|
+
@test "Cleans the number" {
|
4
|
+
run bash phone_number.sh "(223) 456-7890"
|
5
|
+
[ "$status" -eq 0 ]
|
6
|
+
[ "$output" = "2234567890" ]
|
7
|
+
}
|
8
|
+
|
9
|
+
@test "Cleans numbers with dots" {
|
10
|
+
run bash phone_number.sh "223.456.7890"
|
11
|
+
[ "$status" -eq 0 ]
|
12
|
+
[ "$output" = "2234567890" ]
|
13
|
+
}
|
14
|
+
|
15
|
+
@test "Cleans numbers with multiple spaces" {
|
16
|
+
run bash phone_number.sh "223 456 7890 "
|
17
|
+
[ "$status" -eq 0 ]
|
18
|
+
[ "$output" = "2234567890" ]
|
19
|
+
}
|
20
|
+
|
21
|
+
@test "Invalid when 9 digits" {
|
22
|
+
run bash phone_number.sh "123456789"
|
23
|
+
[ "$status" -eq 1 ]
|
24
|
+
[ "$output" = "Invalid number. [1]NXX-NXX-XXXX N=2-9, X=0-9" ]
|
25
|
+
}
|
26
|
+
|
27
|
+
@test "Invalid when 11 digits does not start with 1" {
|
28
|
+
run bash phone_number.sh "22234567890"
|
29
|
+
[ "$status" -eq 1 ]
|
30
|
+
[ "$output" = "Invalid number. [1]NXX-NXX-XXXX N=2-9, X=0-9" ]
|
31
|
+
}
|
32
|
+
|
33
|
+
@test "Valid when 11 digits and starting with 1" {
|
34
|
+
run bash phone_number.sh "12234567890"
|
35
|
+
[ "$status" -eq 0 ]
|
36
|
+
[ "$output" = "2234567890" ]
|
37
|
+
}
|
38
|
+
|
39
|
+
@test "Valid when 11 digits and starting with 1 even with punctuation" {
|
40
|
+
run bash phone_number.sh "+1 (223) 456-7890"
|
41
|
+
[ "$status" -eq 0 ]
|
42
|
+
[ "$output" = "2234567890" ]
|
43
|
+
}
|
44
|
+
|
45
|
+
@test "Invalid with more than 11 digits" {
|
46
|
+
run bash phone_number.sh "321234567890"
|
47
|
+
[ "$status" -eq 1 ]
|
48
|
+
[ "$output" = "Invalid number. [1]NXX-NXX-XXXX N=2-9, X=0-9" ]
|
49
|
+
}
|
50
|
+
|
51
|
+
@test "Invalid with letters" {
|
52
|
+
run bash phone_number.sh "123-abc-7890"
|
53
|
+
[ "$status" -eq 1 ]
|
54
|
+
[ "$output" = "Invalid number. [1]NXX-NXX-XXXX N=2-9, X=0-9" ]
|
55
|
+
}
|
56
|
+
|
57
|
+
@test "Invalid with punctuations" {
|
58
|
+
run bash phone_number.sh "123-@:!-7890"
|
59
|
+
[ "$status" -eq 1 ]
|
60
|
+
[ "$output" = "Invalid number. [1]NXX-NXX-XXXX N=2-9, X=0-9" ]
|
61
|
+
}
|
62
|
+
|
63
|
+
@test "Invalid if area code does not start with 2-9" {
|
64
|
+
run bash phone_number.sh "(123) 456-7890"
|
65
|
+
[ "$status" -eq 1 ]
|
66
|
+
[ "$output" = "Invalid number. [1]NXX-NXX-XXXX N=2-9, X=0-9" ]
|
67
|
+
}
|
68
|
+
|
69
|
+
@test "Invalid if exchange code does not start with 2-9" {
|
70
|
+
run bash phone_number.sh "(223) 056-7890"
|
71
|
+
[ "$status" -eq 1 ]
|
72
|
+
[ "$output" = "Invalid number. [1]NXX-NXX-XXXX N=2-9, X=0-9" ]
|
73
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Raindrops
|
2
|
+
|
3
|
+
Convert a number to a string, the contents of which depend on the number's factors.
|
4
|
+
|
5
|
+
- If the number has 3 as a factor, output 'Pling'.
|
6
|
+
- If the number has 5 as a factor, output 'Plang'.
|
7
|
+
- If the number has 7 as a factor, output 'Plong'.
|
8
|
+
- If the number does not have 3, 5, or 7 as a factor,
|
9
|
+
just pass the number's digits straight through.
|
10
|
+
|
11
|
+
## Examples
|
12
|
+
|
13
|
+
- 28's factors are 1, 2, 4, **7**, 14, 28.
|
14
|
+
- In raindrop-speak, this would be a simple "Plong".
|
15
|
+
- 30's factors are 1, 2, **3**, **5**, 6, 10, 15, 30.
|
16
|
+
- In raindrop-speak, this would be a "PlingPlang".
|
17
|
+
- 34 has four factors: 1, 2, 17, and 34.
|
18
|
+
- In raindrop-speak, this would be "34".
|
19
|
+
|
20
|
+
Run the tests with:
|
21
|
+
|
22
|
+
bats whatever_test.sh
|
23
|
+
|
24
|
+
## Source
|
25
|
+
|
26
|
+
A variation on a famous interview question intended to weed out potential candidates. [http://jumpstartlab.com](http://jumpstartlab.com)
|
27
|
+
|
28
|
+
## Submitting Incomplete Solutions
|
29
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Rna Transcription
|
2
|
+
|
3
|
+
Given a DNA strand, return its RNA complement (per RNA transcription).
|
4
|
+
|
5
|
+
Both DNA and RNA strands are a sequence of nucleotides.
|
6
|
+
|
7
|
+
The four nucleotides found in DNA are adenine (**A**), cytosine (**C**),
|
8
|
+
guanine (**G**) and thymine (**T**).
|
9
|
+
|
10
|
+
The four nucleotides found in RNA are adenine (**A**), cytosine (**C**),
|
11
|
+
guanine (**G**) and uracil (**U**).
|
12
|
+
|
13
|
+
Given a DNA strand, its transcribed RNA strand is formed by replacing
|
14
|
+
each nucleotide with its complement:
|
15
|
+
|
16
|
+
* `G` -> `C`
|
17
|
+
* `C` -> `G`
|
18
|
+
* `T` -> `A`
|
19
|
+
* `A` -> `U`
|
20
|
+
|
21
|
+
Run the tests with:
|
22
|
+
|
23
|
+
bats whatever_test.sh
|
24
|
+
|
25
|
+
## Source
|
26
|
+
|
27
|
+
Rosalind [http://rosalind.info/problems/rna](http://rosalind.info/problems/rna)
|
28
|
+
|
29
|
+
## Submitting Incomplete Solutions
|
30
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# Two Fer
|
2
|
+
|
3
|
+
`Two-fer` or `2-fer` is short for two for one. One for you and one for me.
|
4
|
+
|
5
|
+
```
|
6
|
+
"One for X, one for me."
|
7
|
+
```
|
8
|
+
|
9
|
+
When X is a name or "you".
|
10
|
+
|
11
|
+
If the given name is "Alice", the result should be "One for Alice, one for me."
|
12
|
+
If no name is given, the result should be "One for you, one for me."
|
13
|
+
|
14
|
+
|
15
|
+
## Test-Driven Development
|
16
|
+
|
17
|
+
As programmers mature, they eventually want to test their code.
|
18
|
+
|
19
|
+
Here at Exercism we simulate [Test-Driven
|
20
|
+
Development](http://en.wikipedia.org/wiki/Test-driven_development) (TDD), where
|
21
|
+
you write your tests before writing any functionality. The simulation comes in
|
22
|
+
the form of a pre-written test suite, which will signal that you have solved
|
23
|
+
the problem.
|
24
|
+
|
25
|
+
It will also provide you with a safety net to explore other solutions without
|
26
|
+
breaking the functionality.
|
27
|
+
|
28
|
+
### A typical TDD workflow on Exercism:
|
29
|
+
|
30
|
+
1. Run the test file and pick one test that's failing.
|
31
|
+
2. Write some code to fix the test you picked.
|
32
|
+
3. Re-run the tests to confirm the test is now passing.
|
33
|
+
4. Repeat from step 1.
|
34
|
+
5. Submit your solution (`exercism submit /path/to/file`)
|
35
|
+
|
36
|
+
## Instructions
|
37
|
+
|
38
|
+
Submissions are encouraged to be general, within reason. Having said that, it's
|
39
|
+
also important not to over-engineer a solution.
|
40
|
+
|
41
|
+
It's important to remember that the goal is to make code as expressive and
|
42
|
+
readable as we can.
|
43
|
+
|
44
|
+
Run the tests with:
|
45
|
+
|
46
|
+
bats whatever_test.sh
|
47
|
+
|
48
|
+
## Source
|
49
|
+
|
50
|
+
This is an exercise to introduce users to basic programming constructs, just after hello World. [https://en.wikipedia.org/wiki/Two-fer](https://en.wikipedia.org/wiki/Two-fer)
|
51
|
+
|
52
|
+
## Submitting Incomplete Solutions
|
53
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env bats
|
2
|
+
|
3
|
+
@test "When given no name, it should have one for you!" {
|
4
|
+
run bash two_fer.sh
|
5
|
+
|
6
|
+
[ "$status" -eq 0 ]
|
7
|
+
[ "$output" = "One for you, one for me." ]
|
8
|
+
}
|
9
|
+
|
10
|
+
@test 'When given "Alice" it should have one for Alice!' {
|
11
|
+
run bash two_fer.sh Alice
|
12
|
+
|
13
|
+
[ "$status" -eq 0 ]
|
14
|
+
[ "$output" = "One for Alice, one for me." ]
|
15
|
+
}
|
16
|
+
|
17
|
+
@test 'When given "Bob" it should have one for Bob!' {
|
18
|
+
run bash two_fer.sh Bob
|
19
|
+
|
20
|
+
[ "$status" -eq 0 ]
|
21
|
+
[ "$output" = "One for Bob, one for me." ]
|
22
|
+
}
|
23
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Word Count
|
2
|
+
|
3
|
+
Given a phrase, count the occurrences of each word in that phrase.
|
4
|
+
|
5
|
+
For example for the input `"olly olly in come free"`
|
6
|
+
|
7
|
+
```plain
|
8
|
+
olly: 2
|
9
|
+
in: 1
|
10
|
+
come: 1
|
11
|
+
free: 1
|
12
|
+
```
|
13
|
+
|
14
|
+
|
15
|
+
Run the tests with:
|
16
|
+
|
17
|
+
bats whatever_test.sh
|
18
|
+
|
19
|
+
## Source
|
20
|
+
|
21
|
+
This is a classic toy problem, but we were reminded of it by seeing it in the Go Tour.
|
22
|
+
|
23
|
+
## Submitting Incomplete Solutions
|
24
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trackler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.0.
|
4
|
+
version: 2.2.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Owen
|
@@ -573,32 +573,51 @@ files:
|
|
573
573
|
- tracks/bash/README.md
|
574
574
|
- tracks/bash/bin/fetch-configlet
|
575
575
|
- tracks/bash/config.json
|
576
|
+
- tracks/bash/config/exercise_readme.go.tmpl
|
577
|
+
- tracks/bash/config/maintainers.json
|
576
578
|
- tracks/bash/docs/EXERCISE_README_INSERT.md
|
577
579
|
- tracks/bash/docs/INSTALLATION.md
|
578
580
|
- tracks/bash/docs/LEARNING.md
|
579
581
|
- tracks/bash/docs/RESOURCES.md
|
580
582
|
- tracks/bash/docs/TESTS.md
|
583
|
+
- tracks/bash/exercises/anagram/README.md
|
581
584
|
- tracks/bash/exercises/anagram/anagram_tests.sh
|
582
585
|
- tracks/bash/exercises/anagram/example.sh
|
586
|
+
- tracks/bash/exercises/bob/README.md
|
583
587
|
- tracks/bash/exercises/bob/bob_test.sh
|
584
588
|
- tracks/bash/exercises/bob/example.sh
|
589
|
+
- tracks/bash/exercises/difference-of-squares/README.md
|
585
590
|
- tracks/bash/exercises/difference-of-squares/difference_of_squares_test.sh
|
586
591
|
- tracks/bash/exercises/difference-of-squares/example.sh
|
592
|
+
- tracks/bash/exercises/gigasecond/README.md
|
587
593
|
- tracks/bash/exercises/gigasecond/example.sh
|
588
594
|
- tracks/bash/exercises/gigasecond/gigasecond_test.sh
|
595
|
+
- tracks/bash/exercises/hamming/README.md
|
589
596
|
- tracks/bash/exercises/hamming/example.sh
|
590
597
|
- tracks/bash/exercises/hamming/hamming_test.sh
|
591
598
|
- tracks/bash/exercises/hello-world/HINTS.md
|
599
|
+
- tracks/bash/exercises/hello-world/README.md
|
592
600
|
- tracks/bash/exercises/hello-world/example.sh
|
593
601
|
- tracks/bash/exercises/hello-world/hello_world_test.sh
|
602
|
+
- tracks/bash/exercises/leap/README.md
|
594
603
|
- tracks/bash/exercises/leap/example.sh
|
595
604
|
- tracks/bash/exercises/leap/leap_test.sh
|
605
|
+
- tracks/bash/exercises/pangram/README.md
|
596
606
|
- tracks/bash/exercises/pangram/example.sh
|
597
607
|
- tracks/bash/exercises/pangram/pangram_tests.sh
|
608
|
+
- tracks/bash/exercises/phone-number/README.md
|
609
|
+
- tracks/bash/exercises/phone-number/example.sh
|
610
|
+
- tracks/bash/exercises/phone-number/phone_number_tests.sh
|
611
|
+
- tracks/bash/exercises/raindrops/README.md
|
598
612
|
- tracks/bash/exercises/raindrops/example.sh
|
599
613
|
- tracks/bash/exercises/raindrops/raindrops_test.sh
|
614
|
+
- tracks/bash/exercises/rna-transcription/README.md
|
600
615
|
- tracks/bash/exercises/rna-transcription/example.sh
|
601
616
|
- tracks/bash/exercises/rna-transcription/rna_transcription_test.sh
|
617
|
+
- tracks/bash/exercises/two-fer/README.md
|
618
|
+
- tracks/bash/exercises/two-fer/example.sh
|
619
|
+
- tracks/bash/exercises/two-fer/two_fer_test.sh
|
620
|
+
- tracks/bash/exercises/word-count/README.md
|
602
621
|
- tracks/bash/exercises/word-count/example.awk
|
603
622
|
- tracks/bash/exercises/word-count/example.sh
|
604
623
|
- tracks/bash/img/icon.png
|