trackler 2.2.1.143 → 2.2.1.144
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/clojure/README.org +4 -2
- data/tracks/powershell/.gitignore +4 -0
- data/tracks/powershell/README.md +13 -0
- data/tracks/powershell/config.json +17 -4
- data/tracks/powershell/docs/ABOUT.md +16 -0
- data/tracks/powershell/docs/INSTALLATION.md +42 -0
- data/tracks/powershell/docs/LEARNING.md +28 -0
- data/tracks/powershell/docs/RESOURCES.md +5 -0
- data/tracks/powershell/docs/SNIPPET.txt +7 -3
- data/tracks/powershell/docs/TESTS.md +21 -0
- data/tracks/powershell/docs/img +0 -0
- data/tracks/powershell/exercises/hamming/hamming-example.ps1 +1 -1
- data/tracks/powershell/exercises/hamming/hamming.tests.ps1 +15 -15
- data/tracks/powershell/exercises/hello-world/hello-world-example.ps1 +4 -0
- data/tracks/powershell/exercises/hello-world/hello-world.tests.ps1 +4 -4
- data/tracks/powershell/exercises/leap/README.md +8 -0
- data/tracks/powershell/exercises/leap/leap-example.ps1 +4 -4
- data/tracks/powershell/exercises/leap/leap.tests.ps1 +7 -7
- data/tracks/powershell/exercises/two-fer/.version +1 -0
- data/tracks/powershell/exercises/two-fer/README.md +20 -0
- data/tracks/powershell/exercises/two-fer/TwoFer.example.ps1 +15 -0
- data/tracks/powershell/exercises/two-fer/TwoFer.ps1 +9 -0
- data/tracks/powershell/exercises/two-fer/TwoFer.tests.ps1 +36 -0
- data/tracks/python/exercises/markdown/markdown.py +7 -11
- data/tracks/rust/config.json +23 -0
- data/tracks/rust/exercises/diamond/Cargo.toml +6 -0
- data/tracks/rust/exercises/diamond/README.md +92 -0
- data/tracks/rust/exercises/diamond/example.rs +68 -0
- data/tracks/rust/exercises/diamond/src/lib.rs +6 -0
- data/tracks/rust/exercises/diamond/tests/diamond.rs +100 -0
- data/tracks/rust/exercises/spiral-matrix/Cargo.toml +4 -0
- data/tracks/rust/exercises/spiral-matrix/README.md +63 -0
- data/tracks/rust/exercises/spiral-matrix/example.rs +35 -0
- data/tracks/rust/exercises/spiral-matrix/src/lib.rs +6 -0
- data/tracks/rust/exercises/spiral-matrix/tests/spiral-matrix.rs +55 -0
- data/tracks/swift/exercises/isbn-verifier/Tests/IsbnVerifierTests/IsbnVerifierTests.swift +5 -0
- metadata +24 -4
- data/tracks/powershell/docs/INSTRUCTIONS.md +0 -14
- data/tracks/powershell/exercises/hello-world/hello-world_example.ps1 +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb51fb7ee44f636504401640885cdc66ec06f78c
|
4
|
+
data.tar.gz: 7062ee14e5593ea35ad7f5962982945a30876d9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c1491d32f0f088587e5f0d76767b2614f5b92eb7201da23983a464051ca97c9b516386183d3278689a90fca0d9eb9d9c66daff779f8773170e79259971307bc
|
7
|
+
data.tar.gz: 5acd3d5935adc9521292902cb4248a617b78c05d1ecd44f16c3372578f6268883a2b86e773809d572a6069d48f2b3bd02c690312c03e67cbb2f51f8f03342498
|
data/lib/trackler/version.rb
CHANGED
data/tracks/clojure/README.org
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
#+TITLE: Exercism Clojure Track
|
2
2
|
|
3
|
-
#+ATTR_HTML: :alt Build Status
|
4
|
-
[[https://travis-ci.org/exercism/clojure][https://travis-ci.org/exercism/clojure.svg]]
|
3
|
+
#+ATTR_HTML: :alt Travis Build Status
|
4
|
+
[[https://travis-ci.org/exercism/clojure][https://travis-ci.org/exercism/clojure.svg?branch=master]]
|
5
|
+
#+ATTR_HTML: :alt Appveyor Build Status
|
6
|
+
[[https://ci.appveyor.com/project/haus/clojure][https://ci.appveyor.com/api/projects/status/k7lh9ohu77sqcwp2/branch/master#.jpg]]
|
5
7
|
|
6
8
|
Exercism exercises in Clojure
|
7
9
|
|
data/tracks/powershell/README.md
CHANGED
@@ -6,3 +6,16 @@ Exercism Exercises for Windows PowerShell
|
|
6
6
|
|
7
7
|
Please see the [contributing guide](https://github.com/exercism/x-api/blob/master/CONTRIBUTING.md#the-exercise-data)
|
8
8
|
|
9
|
+
Due to the spected amount of parallel changes to the **config.json** file, entries regarding the related exercise should be edited during the merging process to the master.
|
10
|
+
|
11
|
+
## Development Guidelines (by Microsoft)
|
12
|
+
|
13
|
+
The topics in this section provide development guidelines that you can use to produce well-formed cmdlets. By leveraging the common functionality provided by the Windows PowerShell runtime and by following these guidelines, you can develop robust cmdlets with minimal effort and provide the user with a consistent experience. Additionally, you will reduce the test burden because common functionality does not require retesting.
|
14
|
+
|
15
|
+
[Cmdlet Development Guidelines (by Microsoft)](https://msdn.microsoft.com/en-us/library/ms714657(v=vs.85).aspx):
|
16
|
+
|
17
|
+
* [Required Development Guidelines](https://msdn.microsoft.com/en-us/library/dd878238(v=vs.85).aspx)
|
18
|
+
* [Strongly Encouraged Development Guidelines](https://msdn.microsoft.com/en-us/library/dd878270(v=vs.85).aspx)
|
19
|
+
* [Advisory Development Guidelines](https://msdn.microsoft.com/en-us/library/dd878291(v=vs.85).aspx)
|
20
|
+
|
21
|
+
!!! [Approved Verbs for Windows PowerShell Commands](https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx)
|
@@ -6,7 +6,7 @@
|
|
6
6
|
"active": false,
|
7
7
|
"foregone": [
|
8
8
|
|
9
|
-
|
9
|
+
],
|
10
10
|
"exercises": [
|
11
11
|
{
|
12
12
|
"uuid": "83c215e6-4a4e-4302-8d68-47f367478d2c",
|
@@ -15,7 +15,7 @@
|
|
15
15
|
"unlocked_by": null,
|
16
16
|
"difficulty": 1,
|
17
17
|
"topics": [
|
18
|
-
|
18
|
+
"strings"
|
19
19
|
]
|
20
20
|
},
|
21
21
|
{
|
@@ -25,7 +25,19 @@
|
|
25
25
|
"unlocked_by": null,
|
26
26
|
"difficulty": 1,
|
27
27
|
"topics": [
|
28
|
-
|
28
|
+
"control_flow_if_else_statements",
|
29
|
+
"integers"
|
30
|
+
]
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"uuid": "45f285c2-9358-451d-a931-1dee54df7b67",
|
34
|
+
"slug": "two-fer",
|
35
|
+
"core": false,
|
36
|
+
"unlocked_by": null,
|
37
|
+
"difficulty": 1,
|
38
|
+
"topics": [
|
39
|
+
"optional_values",
|
40
|
+
"strings"
|
29
41
|
]
|
30
42
|
},
|
31
43
|
{
|
@@ -35,7 +47,8 @@
|
|
35
47
|
"unlocked_by": null,
|
36
48
|
"difficulty": 1,
|
37
49
|
"topics": [
|
38
|
-
|
50
|
+
"filtering",
|
51
|
+
"strings"
|
39
52
|
]
|
40
53
|
}
|
41
54
|
]
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Windows PowerShell® is a task-based command-line shell and scripting language designed especially for system administration. Built on the .NET Framework, Windows PowerShell helps IT professionals and power users control and automate the administration of the Windows operating system and applications that run on Windows.
|
2
|
+
|
3
|
+
Windows PowerShell commands, called cmdlets, let you manage the computers from the command line. Windows PowerShell providers let you access data stores, such as the registry and certificate store, as easily as you access the file system. In addition, Windows PowerShell has a rich expression parser and a fully developed scripting language.
|
4
|
+
|
5
|
+
Windows PowerShell includes the following features:
|
6
|
+
|
7
|
+
* Cmdlets for performing common system administration tasks, such as managing the registry, services, processes, and event logs, and using Windows Management Instrumentation (WMI).
|
8
|
+
* A task-based scripting language and support for existing scripts and command-line tools.
|
9
|
+
* Consistent design. Because cmdlets and system data stores use common syntax and naming conventions, data can be shared easily and the output from one cmdlet can be used as the input to another cmdlet without reformatting or manipulation.
|
10
|
+
* Simplified, command-based navigation of the operating system, which lets users navigate the registry and other data stores by using the same techniques that they use to navigate the file system.
|
11
|
+
* Powerful object manipulation capabilities. Objects can be directly manipulated or sent to other tools or databases.
|
12
|
+
* Extensible interface. Independent software vendors and enterprise developers can build custom tools and utilities to administer their software.
|
13
|
+
|
14
|
+
[PowerShell has been open sourced](https://github.com/PowerShell/PowerShell) and when released, PowerShell Core 6 will be supported on Windows, Linux and MacOS.
|
15
|
+
|
16
|
+
Detailed documentation on many PowerShell concepts and features can be found at https://docs.microsoft.com/en-us/powershell
|
@@ -0,0 +1,42 @@
|
|
1
|
+
## PowerShell language track requirements
|
2
|
+
|
3
|
+
The Exercism Windows PowerShell language track requires installed on your system:
|
4
|
+
|
5
|
+
* Windows PowerShell or Windows PowerShell Core
|
6
|
+
* Pester test and mock framework module installed
|
7
|
+
|
8
|
+
(PS: Support for PowerShell is limited to critical fixes. PowerShell Core is consistently maintained and has greater cross-platform support)
|
9
|
+
|
10
|
+
### Installing Windows PowerShell
|
11
|
+
|
12
|
+
PowerShell comes pre-installed on all Windows operating systems from Windows 7 SP1 onward.
|
13
|
+
|
14
|
+
You can find the latest version of PowerShell and installation instructions for all platforms (Linux, macOS and Windows) [here](https://github.com/PowerShell/PowerShell/blob/master/README.md#get-powershell).
|
15
|
+
|
16
|
+
### Installing and updating the Pester framework
|
17
|
+
|
18
|
+
[Pester](https://github.com/pester/Pester) is the PowerShell testing framework. Since version 4.0.9 it is compatible with PowerShell Core on Windows, Linux and MacOS (with some limitations)
|
19
|
+
|
20
|
+
It is preinstalled on Windows 10, however, it is recommended you update by running the following PowerShell command:
|
21
|
+
|
22
|
+
```PowerShell
|
23
|
+
|
24
|
+
Install-Module -Name Pester -Force -SkipPublisherCheck
|
25
|
+
|
26
|
+
```
|
27
|
+
For subsequent updates, run:
|
28
|
+
|
29
|
+
``` PowerShell
|
30
|
+
Update-Module -Name Pester
|
31
|
+
```
|
32
|
+
if necessary, further instructions for installation are available at: https://github.com/pester/Pester/wiki/Installation-and-Update
|
33
|
+
|
34
|
+
## Using an IDE
|
35
|
+
|
36
|
+
If you want a more full-featured editing experience, you probably want to use an IDE. These are the most popular IDE's that support building PowerShell projects:
|
37
|
+
|
38
|
+
### All platforms
|
39
|
+
* [PowerShell ISE], build-in graphical IDE that comes with PowerShell
|
40
|
+
* [Visual Studio Code](https://code.visualstudio.com/download) with the [PowerShell extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell). Visual Studio Code will also allow you to run the tests and also debug your code.
|
41
|
+
* [Atom](https://atom.io/) with the [PowerShell package](https://atom.io/packages/language-powershell)
|
42
|
+
* [Sublime Text 3](https://www.sublimetext.com/3) with the [PowerShell package](https://packagecontrol.io/packages/PowerShell)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Learning PowerShell
|
2
|
+
|
3
|
+
A great place to start learning PowerShell is at the PowerShell Github repository where it has a [learning section](https://github.com/PowerShell/PowerShell/tree/master/docs/learning-powershell). This has a huge amount of information and links to a wide range of PowerShell topics.
|
4
|
+
|
5
|
+
PowerShell also has a very complete self documenting help system. You can explore much of what PowerShell offers using the `Get-Help` cmdlet. From within PowerShell, try:
|
6
|
+
|
7
|
+
``` PowerShell
|
8
|
+
Get-Help about
|
9
|
+
```
|
10
|
+
|
11
|
+
You will see about 3 pages of topics that can be explored.
|
12
|
+
|
13
|
+
Two further functions that will be of great use are:
|
14
|
+
|
15
|
+
* Get-Command
|
16
|
+
* Get-Member
|
17
|
+
|
18
|
+
Wanting to know what these do? Try `Get-Help Get-Command` and `Get-Help Get-Member` of course.
|
19
|
+
|
20
|
+
## PowerShell Verbs and Nouns
|
21
|
+
|
22
|
+
PowerShell follows quite a strict Verb-Noun for the naming of its cmdlets. Initially this can be a jarring experience to seasoned programmers. Whilst you can name your functions anything you like, becoming familiar with and adopting the standard verbs will improve your PowerShell coding.
|
23
|
+
|
24
|
+
To see a list of all the approved verbs, simply run:
|
25
|
+
|
26
|
+
``` PowerShell
|
27
|
+
Get-Verb
|
28
|
+
```
|
@@ -0,0 +1,5 @@
|
|
1
|
+
# Futher Reading
|
2
|
+
|
3
|
+
* A large resource of reference and training material can be found at the [PowerShell GitHub repostory](https://github.com/PowerShell/PowerShell/blob/master/docs/learning-powershell/powershell-beginners-guide.md#recommended-training-and-reading])
|
4
|
+
* PowerShell Documentation is found at https://docs.microsoft.com/en-us/powershell/
|
5
|
+
* Channel 9 series on [Getting Started with PowerShell 3.0](https://channel9.msdn.com/Series/GetStartedPowerShell3). This is still a valuable series even though PowerShell 3.0 is now old and superseded.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Tests
|
2
|
+
|
3
|
+
The exercises all use the [Pester](https://github.com/pester/Pester) framework for mocking and testing.
|
4
|
+
|
5
|
+
All tests will be in a file named `[exercise].Tests.ps1` as is the standard for the Pester framework.
|
6
|
+
|
7
|
+
To run tests from PowerShell you can simply run:
|
8
|
+
|
9
|
+
``` PowerShell
|
10
|
+
Invoke-Pester
|
11
|
+
```
|
12
|
+
|
13
|
+
This will run all `.Tests.ps1` files it can find in the directory.
|
14
|
+
|
15
|
+
## Running tests in Visual Studio Code
|
16
|
+
|
17
|
+
You can run tests in visual studio code in a couple of ways:
|
18
|
+
|
19
|
+
1. Running the `.Tests.ps1` script from the Debug menu. Keyboard short cuts are: `F5` or `Shift + F5`
|
20
|
+
1. From within the editor by clicking on the "Run Tests" link above the `Describe` keyword in the test code itself
|
21
|
+
1. Configuring a Task to run the Pester framework
|
File without changes
|
@@ -4,61 +4,61 @@ $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.tests\.', '.'
|
|
4
4
|
|
5
5
|
Describe "HammingTest" {
|
6
6
|
It "tests identical strands" {
|
7
|
-
|
7
|
+
Get-HammingDifference 'A' 'A' | Should be 0
|
8
8
|
}
|
9
9
|
It "tests log identical strands" {
|
10
|
-
|
10
|
+
Get-HammingDifference "GGACTGA" "GGACTGA" | Should be 0
|
11
11
|
}
|
12
12
|
|
13
13
|
It "tests complete distance in single nucleotide strands" {
|
14
|
-
|
14
|
+
Get-HammingDifference "A" "G" | Should be 1
|
15
15
|
}
|
16
16
|
|
17
17
|
It "tests complete distance in small strands" {
|
18
|
-
|
18
|
+
Get-HammingDifference "AG" "CT" | Should be 2
|
19
19
|
}
|
20
20
|
|
21
21
|
It "tests small distance in small strands" {
|
22
|
-
|
22
|
+
Get-HammingDifference "AT" "CT" | Should be 1
|
23
23
|
}
|
24
24
|
|
25
25
|
It "tests small distance" {
|
26
|
-
|
26
|
+
Get-HammingDifference "GGACG" "GGTCG" | Should be 1
|
27
27
|
}
|
28
28
|
|
29
29
|
It "tests small distance in long strands" {
|
30
|
-
|
30
|
+
Get-HammingDifference "ACCAGGG" "ACTATGG" | Should be 2
|
31
31
|
}
|
32
32
|
|
33
33
|
It "tests non unique character in first strand" {
|
34
|
-
|
34
|
+
Get-HammingDifference "AGA" "AGG" | Should be 1
|
35
35
|
}
|
36
36
|
|
37
37
|
It "tests non unique character in second strand" {
|
38
|
-
|
38
|
+
Get-HammingDifference "AGG" "AGA" | Should be 1
|
39
39
|
}
|
40
40
|
|
41
41
|
It "tests same nucleotides in different position" {
|
42
|
-
|
42
|
+
Get-HammingDifference "TAG" "GAT" | Should be 2
|
43
43
|
}
|
44
44
|
|
45
45
|
It "tests large distance" {
|
46
|
-
|
46
|
+
Get-HammingDifference "GATACA" "GCATAA" | Should be 4
|
47
47
|
}
|
48
48
|
|
49
49
|
It "tests large distance in off by one strand" {
|
50
|
-
|
50
|
+
Get-HammingDifference "GGACGGATTCTG" "AGGACGGATTCT" | Should be 9
|
51
51
|
}
|
52
52
|
|
53
53
|
It "tests empty strands" {
|
54
|
-
|
54
|
+
Get-HammingDifference "" "" | Should be 0
|
55
55
|
}
|
56
56
|
|
57
57
|
It "tests disallow first strand longer" {
|
58
|
-
{
|
58
|
+
{ Get-HammingDifference "AATG" "AAA" } | Should Throw "Mismatching string lengths"
|
59
59
|
}
|
60
60
|
|
61
61
|
It "tests disallow second strand longer" {
|
62
|
-
{
|
62
|
+
{ Get-HammingDifference "ATA" "AGTG" } | Should Throw "Mismatching string lengths"
|
63
63
|
}
|
64
64
|
}
|
@@ -4,14 +4,14 @@ $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
|
|
4
4
|
|
5
5
|
Describe "HelloWorldTest" {
|
6
6
|
It "outputs 'Hello World!'" {
|
7
|
-
HelloWorld | Should be 'Hello World!'
|
7
|
+
Get-HelloWorld | Should be 'Hello, World!'
|
8
8
|
}
|
9
9
|
|
10
10
|
It "outputs Hello Alice!" {
|
11
|
-
HelloWorld('Alice') | Should be 'Hello Alice!'
|
11
|
+
Get-HelloWorld('Alice') | Should be 'Hello, Alice!'
|
12
12
|
}
|
13
13
|
|
14
14
|
It "outpus Hello Bob!" {
|
15
|
-
HelloWorld('Bob') | Should be 'Hello Bob!'
|
15
|
+
Get-HelloWorld('Bob') | Should be 'Hello, Bob!'
|
16
16
|
}
|
17
|
-
}
|
17
|
+
}
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# Leap
|
2
|
+
|
1
3
|
Given a year, report if it is a leap year.
|
2
4
|
|
3
5
|
The tricky thing here is that a leap year in the Gregorian calendar occurs:
|
@@ -23,3 +25,9 @@ For a delightful, four minute explanation of the whole leap year
|
|
23
25
|
phenomenon, go watch [this youtube video][video].
|
24
26
|
|
25
27
|
[video]: http://www.youtube.com/watch?v=xX96xng7sAE
|
28
|
+
## Source
|
29
|
+
|
30
|
+
JavaRanch Cattle Drive, exercise 3 [http://www.javaranch.com/leap.jsp](http://www.javaranch.com/leap.jsp)
|
31
|
+
|
32
|
+
## Submitting Incomplete Solutions
|
33
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -1,14 +1,14 @@
|
|
1
|
-
function
|
2
|
-
param( [int]$year)
|
1
|
+
function Test-LeapYear {
|
2
|
+
param( [int]$year )
|
3
3
|
# This could be solved using the native system.datetime object
|
4
4
|
# but that isn't in the spirit of exercism.
|
5
5
|
#[system.datetime]::isleapyear($year)
|
6
6
|
|
7
7
|
# Instead solve using math
|
8
8
|
if ( $year % 4 -eq 0 -and $year % 100 -ne 0 -or $year % 400 -eq 0) {
|
9
|
-
return
|
9
|
+
return $True
|
10
10
|
}
|
11
11
|
else {
|
12
|
-
return
|
12
|
+
return $False
|
13
13
|
}
|
14
14
|
}
|
@@ -4,30 +4,30 @@ $sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.tests\.', '.'
|
|
4
4
|
|
5
5
|
Describe "LeapYear Tests" {
|
6
6
|
It "tests leap year" {
|
7
|
-
|
7
|
+
Test-LeapYear(1996) | Should be $True
|
8
8
|
}
|
9
9
|
|
10
10
|
It "tests standard and odd year" {
|
11
|
-
|
11
|
+
Test-LeapYear(1997) | Should be $False
|
12
12
|
}
|
13
13
|
|
14
14
|
It "tests standard even year" {
|
15
|
-
|
15
|
+
Test-LeapYear(1998) | Should be $False
|
16
16
|
}
|
17
17
|
|
18
18
|
It "tests standard ninteenth century" {
|
19
|
-
|
19
|
+
Test-LeapYear(1900) | Should be $False
|
20
20
|
}
|
21
21
|
|
22
22
|
It "tests standard eighteenth year" {
|
23
|
-
|
23
|
+
Test-LeapYear(1800) | Should be $False
|
24
24
|
}
|
25
25
|
|
26
26
|
It "tests leap twenty fourth century" {
|
27
|
-
|
27
|
+
Test-LeapYear(2400) | Should be $True
|
28
28
|
}
|
29
29
|
|
30
30
|
It "tests leap year 2000" {
|
31
|
-
|
31
|
+
Test-LeapYear(2000) | Should be $True
|
32
32
|
}
|
33
33
|
}
|
@@ -0,0 +1 @@
|
|
1
|
+
1
|
@@ -0,0 +1,20 @@
|
|
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
|
+
```text
|
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
|
+
## Source
|
15
|
+
|
16
|
+
[https://en.wikipedia.org/wiki/Two-fer](https://en.wikipedia.org/wiki/Two-fer)
|
17
|
+
|
18
|
+
## Submitting Incomplete Solutions
|
19
|
+
|
20
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Function Get-TwoFer(){
|
2
|
+
[CmdletBinding()]
|
3
|
+
Param(
|
4
|
+
[Parameter(Mandatory=$false, Position=0)]
|
5
|
+
[string]$Name
|
6
|
+
)
|
7
|
+
|
8
|
+
# Replace null or empty string with "you"
|
9
|
+
If ([string]::IsNullOrEmpty($Name))
|
10
|
+
{
|
11
|
+
$Name = "you"
|
12
|
+
}
|
13
|
+
|
14
|
+
"One for $Name, one for me"
|
15
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
$ExercisePath = Split-Path -Parent $MyInvocation.MyCommand.Path
|
2
|
+
$ScriptFile = (Split-Path -Leaf $MyInvocation.MyCommand.Path).Replace(".Tests.", ".")
|
3
|
+
|
4
|
+
$CommandName = "Get-TwoFer"
|
5
|
+
|
6
|
+
# Remove the function if its already found
|
7
|
+
If (Get-Command $CommandName -ErrorAction SilentlyContinue){
|
8
|
+
Write-Verbose "Removing the existing $CommandName function as it exists"
|
9
|
+
Remove-Item -Path "Function:\$CommandName"
|
10
|
+
}
|
11
|
+
|
12
|
+
# Load the script file
|
13
|
+
If (Test-Path "$ExercisePath\$ScriptFile"){
|
14
|
+
Write-Output ("Loading: {0}" -f "$ExercisePath\$ScriptFile")
|
15
|
+
. ("$ExercisePath\$ScriptFile")
|
16
|
+
}
|
17
|
+
Else {
|
18
|
+
# Display an error and stop the tests
|
19
|
+
Write-Error "The file $ScriptFile was not found. You need to create your answer in a file named $ScriptFile" -ErrorAction Stop
|
20
|
+
}
|
21
|
+
|
22
|
+
|
23
|
+
Describe "Get-TwoFer" {
|
24
|
+
|
25
|
+
It "Given <Name> expects <Expected>" -TestCases @(
|
26
|
+
@{ Name = $null; Expected = "One for you, one for me" },
|
27
|
+
@{ Name = ""; Expected = "One for you, one for me" },
|
28
|
+
@{ Name = "Alice"; Expected = "One for Alice, one for me" }
|
29
|
+
) {
|
30
|
+
Param(
|
31
|
+
$Name, $Expected
|
32
|
+
)
|
33
|
+
|
34
|
+
Get-TwoFer -Name $Name | Should -Be $Expected
|
35
|
+
}
|
36
|
+
}
|
@@ -29,28 +29,24 @@ def parse_markdown(markdown):
|
|
29
29
|
curr = m1.group(1) + '<em>' + m1.group(2) + \
|
30
30
|
'</em>' + m1.group(3)
|
31
31
|
is_italic = True
|
32
|
-
|
33
|
-
i = '<ul><li>' + curr + '</li>'
|
34
|
-
else:
|
35
|
-
i = '<ul><li><p>' + curr + '</p></li>'
|
32
|
+
i = '<ul><li>' + curr + '</li>'
|
36
33
|
else:
|
37
34
|
is_bold = False
|
38
35
|
is_italic = False
|
39
36
|
curr = m.group(1)
|
40
37
|
m1 = re.match('(.*)__(.*)__(.*)', curr)
|
41
38
|
if m1:
|
42
|
-
curr = m1.group(1) + '<strong>' + \
|
43
|
-
m1.group(2) + '</strong>' + m1.group(3)
|
44
39
|
is_bold = True
|
45
40
|
m1 = re.match('(.*)_(.*)_(.*)', curr)
|
46
41
|
if m1:
|
42
|
+
is_italic = True
|
43
|
+
if is_bold:
|
44
|
+
curr = m1.group(1) + '<strong>' + \
|
45
|
+
m1.group(2) + '</strong>' + m1.group(3)
|
46
|
+
if is_italic:
|
47
47
|
curr = m1.group(1) + '<em>' + m1.group(2) + \
|
48
48
|
'</em>' + m1.group(3)
|
49
|
-
|
50
|
-
if is_italic or is_bold:
|
51
|
-
i = '<li>' + curr + '</li>'
|
52
|
-
else:
|
53
|
-
i = '<li><p>' + curr + '</p></li>'
|
49
|
+
i = '<li>' + curr + '</li>'
|
54
50
|
else:
|
55
51
|
if in_list:
|
56
52
|
i = '</ul>+i'
|
data/tracks/rust/config.json
CHANGED
@@ -767,6 +767,29 @@
|
|
767
767
|
"difficulty": 4,
|
768
768
|
"topics": []
|
769
769
|
},
|
770
|
+
{
|
771
|
+
"uuid": "c6878b91-70dd-49a0-b7c1-06364fa3d80b",
|
772
|
+
"slug": "diamond",
|
773
|
+
"core": false,
|
774
|
+
"unlocked_by": null,
|
775
|
+
"difficulty": 4,
|
776
|
+
"topics": [
|
777
|
+
"String",
|
778
|
+
"str",
|
779
|
+
"parsing"
|
780
|
+
]
|
781
|
+
},
|
782
|
+
{
|
783
|
+
"uuid": "8dea3473-36f4-4228-b24b-bee8d9389167",
|
784
|
+
"slug": "spiral-matrix",
|
785
|
+
"core": false,
|
786
|
+
"unlocked_by": null,
|
787
|
+
"difficulty": 4,
|
788
|
+
"topics": [
|
789
|
+
"matrix",
|
790
|
+
"nested structures"
|
791
|
+
]
|
792
|
+
},
|
770
793
|
{
|
771
794
|
"uuid": "8cdc3424-51da-4cae-a065-9982859d5b55",
|
772
795
|
"slug": "palindrome-products",
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# Diamond
|
2
|
+
|
3
|
+
The diamond kata takes as its input a letter, and outputs it in a diamond
|
4
|
+
shape. Given a letter, it prints a diamond starting with 'A', with the
|
5
|
+
supplied letter at the widest point.
|
6
|
+
|
7
|
+
## Requirements
|
8
|
+
|
9
|
+
* The first row contains one 'A'.
|
10
|
+
* The last row contains one 'A'.
|
11
|
+
* All rows, except the first and last, have exactly two identical letters.
|
12
|
+
* All rows have as many trailing spaces as leading spaces. (This might be 0).
|
13
|
+
* The diamond is horizontally symmetric.
|
14
|
+
* The diamond is vertically symmetric.
|
15
|
+
* The diamond has a square shape (width equals height).
|
16
|
+
* The letters form a diamond shape.
|
17
|
+
* The top half has the letters in ascending order.
|
18
|
+
* The bottom half has the letters in descending order.
|
19
|
+
* The four corners (containing the spaces) are triangles.
|
20
|
+
|
21
|
+
## Examples
|
22
|
+
|
23
|
+
In the following examples, spaces are indicated by `·` characters.
|
24
|
+
|
25
|
+
Diamond for letter 'A':
|
26
|
+
|
27
|
+
```text
|
28
|
+
A
|
29
|
+
```
|
30
|
+
|
31
|
+
Diamond for letter 'C':
|
32
|
+
|
33
|
+
```text
|
34
|
+
··A··
|
35
|
+
·B·B·
|
36
|
+
C···C
|
37
|
+
·B·B·
|
38
|
+
··A··
|
39
|
+
```
|
40
|
+
|
41
|
+
Diamond for letter 'E':
|
42
|
+
|
43
|
+
```text
|
44
|
+
····A····
|
45
|
+
···B·B···
|
46
|
+
··C···C··
|
47
|
+
·D·····D·
|
48
|
+
E·······E
|
49
|
+
·D·····D·
|
50
|
+
··C···C··
|
51
|
+
···B·B···
|
52
|
+
····A····
|
53
|
+
```
|
54
|
+
|
55
|
+
## Rust Installation
|
56
|
+
|
57
|
+
Refer to the [exercism help page][help-page] for Rust installation and learning
|
58
|
+
resources.
|
59
|
+
|
60
|
+
## Writing the Code
|
61
|
+
|
62
|
+
Execute the tests with:
|
63
|
+
|
64
|
+
```bash
|
65
|
+
$ cargo test
|
66
|
+
```
|
67
|
+
|
68
|
+
All but the first test have been ignored. After you get the first test to
|
69
|
+
pass, remove the ignore flag (`#[ignore]`) from the next test and get the tests
|
70
|
+
to pass again. The test file is located in the `tests` directory. You can
|
71
|
+
also remove the ignore flag from all the tests to get them to run all at once
|
72
|
+
if you wish.
|
73
|
+
|
74
|
+
Make sure to read the [Modules](https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html) chapter if you
|
75
|
+
haven't already, it will help you with organizing your files.
|
76
|
+
|
77
|
+
## Feedback, Issues, Pull Requests
|
78
|
+
|
79
|
+
The [exercism/rust](https://github.com/exercism/rust) repository on GitHub is the home for all of the Rust exercises. If you have feedback about an exercise, or want to help implement new exercises, head over there and create an issue. Members of the rust track team are happy to help!
|
80
|
+
|
81
|
+
If you want to know more about Exercism, take a look at the [contribution guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md).
|
82
|
+
|
83
|
+
[help-page]: http://exercism.io/languages/rust
|
84
|
+
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
85
|
+
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
86
|
+
|
87
|
+
## Source
|
88
|
+
|
89
|
+
Seb Rose [http://claysnow.co.uk/recycling-tests-in-tdd/](http://claysnow.co.uk/recycling-tests-in-tdd/)
|
90
|
+
|
91
|
+
## Submitting Incomplete Solutions
|
92
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,68 @@
|
|
1
|
+
static ABC: &'static str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
2
|
+
use std::ascii::AsciiExt;
|
3
|
+
|
4
|
+
pub fn get_diamond(diamond_char: char) -> Vec<String> {
|
5
|
+
let mut result: Vec<String> = Vec::new();
|
6
|
+
let diamond_char = AsciiExt::to_ascii_uppercase(&diamond_char);
|
7
|
+
if ABC.find(diamond_char).is_none() {
|
8
|
+
return result;
|
9
|
+
}
|
10
|
+
if diamond_char == 'A' {
|
11
|
+
return vec![String::from("A")];
|
12
|
+
}
|
13
|
+
|
14
|
+
//build first half
|
15
|
+
for char_in_abc in ABC.chars() {
|
16
|
+
result.push(get_line(char_in_abc, diamond_char).clone());
|
17
|
+
if char_in_abc == diamond_char {
|
18
|
+
break;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
//build second half
|
23
|
+
let mut rev = result.clone();
|
24
|
+
rev.pop(); //remove middle pice to avoid duplicates
|
25
|
+
for line in rev.drain(..).rev() {
|
26
|
+
result.push(line);
|
27
|
+
|
28
|
+
}
|
29
|
+
|
30
|
+
result
|
31
|
+
}
|
32
|
+
|
33
|
+
fn get_line(char_in_abc: char, diamond_char: char) -> String {
|
34
|
+
let mut r = String::new();
|
35
|
+
let letter_e = get_letter_line(char_in_abc);
|
36
|
+
let letter_c = get_letter_line(diamond_char);
|
37
|
+
let ws = letter_c.len() - letter_e.len(); //number of whitespaces
|
38
|
+
|
39
|
+
//left
|
40
|
+
for _ in 0..ws / 2 {
|
41
|
+
r.push(' ');
|
42
|
+
}
|
43
|
+
//letter line
|
44
|
+
for i in letter_e.chars() {
|
45
|
+
r.push(i)
|
46
|
+
}
|
47
|
+
//right
|
48
|
+
for _ in 0..ws / 2 {
|
49
|
+
r.push(' ');
|
50
|
+
}
|
51
|
+
r
|
52
|
+
}
|
53
|
+
|
54
|
+
fn get_letter_line(char_in_abc: char) -> String {
|
55
|
+
let mut r = String::new();
|
56
|
+
let odd = (0..)
|
57
|
+
.filter(|x| x % 2 != 0)
|
58
|
+
.nth(ABC.find(char_in_abc).unwrap())
|
59
|
+
.unwrap();
|
60
|
+
for i in 0..odd {
|
61
|
+
if i == 0 || i == odd - 1 {
|
62
|
+
r.push(char_in_abc);
|
63
|
+
} else {
|
64
|
+
r.push(' ');
|
65
|
+
}
|
66
|
+
}
|
67
|
+
r
|
68
|
+
}
|
@@ -0,0 +1,100 @@
|
|
1
|
+
extern crate diamond;
|
2
|
+
use diamond::*;
|
3
|
+
|
4
|
+
#[test]
|
5
|
+
fn test_a() {
|
6
|
+
assert_eq!(get_diamond('A'), vec!["A"]);
|
7
|
+
}
|
8
|
+
|
9
|
+
#[test]
|
10
|
+
#[ignore]
|
11
|
+
fn test_b() {
|
12
|
+
assert_eq!(get_diamond('B'), vec![" A ", "B B", " A "]);
|
13
|
+
}
|
14
|
+
|
15
|
+
#[test]
|
16
|
+
#[ignore]
|
17
|
+
fn test_c() {
|
18
|
+
assert_eq!(
|
19
|
+
get_diamond('C'),
|
20
|
+
vec![" A ", " B B ", "C C", " B B ", " A "]
|
21
|
+
);
|
22
|
+
}
|
23
|
+
|
24
|
+
#[test]
|
25
|
+
#[ignore]
|
26
|
+
fn test_d() {
|
27
|
+
assert_eq!(
|
28
|
+
get_diamond('D'),
|
29
|
+
vec![
|
30
|
+
" A ",
|
31
|
+
" B B ",
|
32
|
+
" C C ",
|
33
|
+
"D D",
|
34
|
+
" C C ",
|
35
|
+
" B B ",
|
36
|
+
" A ",
|
37
|
+
]
|
38
|
+
);
|
39
|
+
}
|
40
|
+
|
41
|
+
#[test]
|
42
|
+
#[ignore]
|
43
|
+
fn test_e() {
|
44
|
+
assert_eq!(
|
45
|
+
get_diamond('Z'),
|
46
|
+
vec![
|
47
|
+
" A ",
|
48
|
+
" B B ",
|
49
|
+
" C C ",
|
50
|
+
" D D ",
|
51
|
+
" E E ",
|
52
|
+
" F F ",
|
53
|
+
" G G ",
|
54
|
+
" H H ",
|
55
|
+
" I I ",
|
56
|
+
" J J ",
|
57
|
+
" K K ",
|
58
|
+
" L L ",
|
59
|
+
" M M ",
|
60
|
+
" N N ",
|
61
|
+
" O O ",
|
62
|
+
" P P ",
|
63
|
+
" Q Q ",
|
64
|
+
" R R ",
|
65
|
+
" S S ",
|
66
|
+
" T T ",
|
67
|
+
" U U ",
|
68
|
+
" V V ",
|
69
|
+
" W W ",
|
70
|
+
" X X ",
|
71
|
+
" Y Y ",
|
72
|
+
"Z Z",
|
73
|
+
" Y Y ",
|
74
|
+
" X X ",
|
75
|
+
" W W ",
|
76
|
+
" V V ",
|
77
|
+
" U U ",
|
78
|
+
" T T ",
|
79
|
+
" S S ",
|
80
|
+
" R R ",
|
81
|
+
" Q Q ",
|
82
|
+
" P P ",
|
83
|
+
" O O ",
|
84
|
+
" N N ",
|
85
|
+
" M M ",
|
86
|
+
" L L ",
|
87
|
+
" K K ",
|
88
|
+
" J J ",
|
89
|
+
" I I ",
|
90
|
+
" H H ",
|
91
|
+
" G G ",
|
92
|
+
" F F ",
|
93
|
+
" E E ",
|
94
|
+
" D D ",
|
95
|
+
" C C ",
|
96
|
+
" B B ",
|
97
|
+
" A ",
|
98
|
+
]
|
99
|
+
);
|
100
|
+
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Spiral Matrix
|
2
|
+
|
3
|
+
Given the size, return a square matrix of numbers in spiral order.
|
4
|
+
|
5
|
+
The matrix should be filled with natural numbers, starting from 1
|
6
|
+
in the top-left corner, increasing in an inward, clockwise spiral order,
|
7
|
+
like these examples:
|
8
|
+
|
9
|
+
###### Spiral matrix of size 3
|
10
|
+
|
11
|
+
```text
|
12
|
+
1 2 3
|
13
|
+
8 9 4
|
14
|
+
7 6 5
|
15
|
+
```
|
16
|
+
|
17
|
+
###### Spiral matrix of size 4
|
18
|
+
|
19
|
+
```text
|
20
|
+
1 2 3 4
|
21
|
+
12 13 14 5
|
22
|
+
11 16 15 6
|
23
|
+
10 9 8 7
|
24
|
+
```
|
25
|
+
|
26
|
+
## Rust Installation
|
27
|
+
|
28
|
+
Refer to the [exercism help page][help-page] for Rust installation and learning
|
29
|
+
resources.
|
30
|
+
|
31
|
+
## Writing the Code
|
32
|
+
|
33
|
+
Execute the tests with:
|
34
|
+
|
35
|
+
```bash
|
36
|
+
$ cargo test
|
37
|
+
```
|
38
|
+
|
39
|
+
All but the first test have been ignored. After you get the first test to
|
40
|
+
pass, remove the ignore flag (`#[ignore]`) from the next test and get the tests
|
41
|
+
to pass again. The test file is located in the `tests` directory. You can
|
42
|
+
also remove the ignore flag from all the tests to get them to run all at once
|
43
|
+
if you wish.
|
44
|
+
|
45
|
+
Make sure to read the [Modules](https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html) chapter if you
|
46
|
+
haven't already, it will help you with organizing your files.
|
47
|
+
|
48
|
+
## Feedback, Issues, Pull Requests
|
49
|
+
|
50
|
+
The [exercism/rust](https://github.com/exercism/rust) repository on GitHub is the home for all of the Rust exercises. If you have feedback about an exercise, or want to help implement new exercises, head over there and create an issue. Members of the rust track team are happy to help!
|
51
|
+
|
52
|
+
If you want to know more about Exercism, take a look at the [contribution guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md).
|
53
|
+
|
54
|
+
[help-page]: http://exercism.io/languages/rust
|
55
|
+
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
56
|
+
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
57
|
+
|
58
|
+
## Source
|
59
|
+
|
60
|
+
Reddit r/dailyprogrammer challenge #320 [Easy] Spiral Ascension. [https://www.reddit.com/r/dailyprogrammer/comments/6i60lr/20170619_challenge_320_easy_spiral_ascension/](https://www.reddit.com/r/dailyprogrammer/comments/6i60lr/20170619_challenge_320_easy_spiral_ascension/)
|
61
|
+
|
62
|
+
## Submitting Incomplete Solutions
|
63
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,35 @@
|
|
1
|
+
pub fn spiral_matrix(size: usize) -> Vec<Vec<usize>> {
|
2
|
+
let mut matrix: Vec<Vec<usize>> = vec![vec![0; size]; size];
|
3
|
+
let num_concentric_squares: usize = (size as f64 / 2.0).ceil() as usize;
|
4
|
+
let mut counter: usize = 1;
|
5
|
+
let mut sidelen = size;
|
6
|
+
for i in 0..num_concentric_squares {
|
7
|
+
|
8
|
+
for j in 0..sidelen {
|
9
|
+
matrix[i][i + j] = counter;
|
10
|
+
counter += 1;
|
11
|
+
}
|
12
|
+
|
13
|
+
for j in 1..sidelen {
|
14
|
+
matrix[i + j][size - 1 - i] = counter;
|
15
|
+
counter += 1;
|
16
|
+
}
|
17
|
+
|
18
|
+
for j in (0..sidelen - 1).rev() {
|
19
|
+
matrix[size - 1 - i][i + j] = counter;
|
20
|
+
counter += 1;
|
21
|
+
}
|
22
|
+
|
23
|
+
for j in (1..sidelen - 1).rev() {
|
24
|
+
matrix[i + j][i] = counter;
|
25
|
+
|
26
|
+
counter += 1;
|
27
|
+
}
|
28
|
+
if sidelen >= 2 {
|
29
|
+
sidelen -= 2;
|
30
|
+
} else {
|
31
|
+
sidelen -= 1;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
matrix
|
35
|
+
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
extern crate spiral_matrix;
|
2
|
+
use spiral_matrix::*;
|
3
|
+
|
4
|
+
#[test]
|
5
|
+
fn empty_spiral() {
|
6
|
+
let expected: Vec<Vec<usize>> = Vec::new();
|
7
|
+
assert_eq!(spiral_matrix(0), expected);
|
8
|
+
}
|
9
|
+
|
10
|
+
#[test]
|
11
|
+
#[ignore]
|
12
|
+
fn size_one_spiral() {
|
13
|
+
let mut expected: Vec<Vec<usize>> = Vec::new();
|
14
|
+
expected.push(vec![1]);
|
15
|
+
assert_eq!(spiral_matrix(1), expected);
|
16
|
+
}
|
17
|
+
#[test]
|
18
|
+
#[ignore]
|
19
|
+
fn size_two_spiral() {
|
20
|
+
let mut expected: Vec<Vec<usize>> = Vec::new();
|
21
|
+
expected.push(vec![1, 2]);
|
22
|
+
expected.push(vec![4, 3]);
|
23
|
+
assert_eq!(spiral_matrix(2), expected);
|
24
|
+
}
|
25
|
+
|
26
|
+
#[test]
|
27
|
+
#[ignore]
|
28
|
+
fn size_three_spiral() {
|
29
|
+
let mut expected: Vec<Vec<usize>> = Vec::new();
|
30
|
+
expected.push(vec![1, 2, 3]);
|
31
|
+
expected.push(vec![8, 9, 4]);
|
32
|
+
expected.push(vec![7, 6, 5]);
|
33
|
+
assert_eq!(spiral_matrix(3), expected);
|
34
|
+
}
|
35
|
+
#[test]
|
36
|
+
#[ignore]
|
37
|
+
fn size_four_spiral() {
|
38
|
+
let mut expected: Vec<Vec<usize>> = Vec::new();
|
39
|
+
expected.push(vec![1, 2, 3, 4]);
|
40
|
+
expected.push(vec![12, 13, 14, 5]);
|
41
|
+
expected.push(vec![11, 16, 15, 6]);
|
42
|
+
expected.push(vec![10, 9, 8, 7]);
|
43
|
+
assert_eq!(spiral_matrix(4), expected);
|
44
|
+
}
|
45
|
+
#[test]
|
46
|
+
#[ignore]
|
47
|
+
fn size_five_spiral() {
|
48
|
+
let mut expected: Vec<Vec<usize>> = Vec::new();
|
49
|
+
expected.push(vec![1, 2, 3, 4, 5]);
|
50
|
+
expected.push(vec![16, 17, 18, 19, 6]);
|
51
|
+
expected.push(vec![15, 24, 25, 20, 7]);
|
52
|
+
expected.push(vec![14, 23, 22, 21, 8]);
|
53
|
+
expected.push(vec![13, 12, 11, 10, 9]);
|
54
|
+
assert_eq!(spiral_matrix(5), expected);
|
55
|
+
}
|
@@ -2,6 +2,10 @@ import XCTest
|
|
2
2
|
@testable import IsbnVerifier
|
3
3
|
|
4
4
|
class IsbnVerifierTests: XCTestCase {
|
5
|
+
|
6
|
+
func testEmptyString() {
|
7
|
+
XCTAssertFalse(IsbnVerifier.isValid(""))
|
8
|
+
}
|
5
9
|
|
6
10
|
func testValidIsbnNumber() {
|
7
11
|
XCTAssertTrue(IsbnVerifier.isValid("3-598-21508-8"))
|
@@ -57,6 +61,7 @@ class IsbnVerifierTests: XCTestCase {
|
|
57
61
|
|
58
62
|
static var allTests: [(String, (IsbnVerifierTests) -> () throws -> Void)] {
|
59
63
|
return [
|
64
|
+
("testEmptyString", testEmptyString),
|
60
65
|
("testValidIsbnNumber", testValidIsbnNumber),
|
61
66
|
("testInvalidIsbnCheckDigit", testInvalidIsbnCheckDigit),
|
62
67
|
("testValidIsbnNumberWithACheckDigitOf10", testValidIsbnNumberWithACheckDigitOf10),
|
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: 2.2.1.
|
4
|
+
version: 2.2.1.144
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -11351,8 +11351,13 @@ files:
|
|
11351
11351
|
- tracks/powershell/config.json
|
11352
11352
|
- tracks/powershell/config/exercise_readme.go.tmpl
|
11353
11353
|
- tracks/powershell/config/maintainers.json
|
11354
|
-
- tracks/powershell/docs/
|
11354
|
+
- tracks/powershell/docs/ABOUT.md
|
11355
|
+
- tracks/powershell/docs/INSTALLATION.md
|
11356
|
+
- tracks/powershell/docs/LEARNING.md
|
11357
|
+
- tracks/powershell/docs/RESOURCES.md
|
11355
11358
|
- tracks/powershell/docs/SNIPPET.txt
|
11359
|
+
- tracks/powershell/docs/TESTS.md
|
11360
|
+
- tracks/powershell/docs/img
|
11356
11361
|
- tracks/powershell/exercises/hamming/.version
|
11357
11362
|
- tracks/powershell/exercises/hamming/README.md
|
11358
11363
|
- tracks/powershell/exercises/hamming/hamming-example.ps1
|
@@ -11360,13 +11365,18 @@ files:
|
|
11360
11365
|
- tracks/powershell/exercises/hello-world/.version
|
11361
11366
|
- tracks/powershell/exercises/hello-world/GETTING_STARTED.md
|
11362
11367
|
- tracks/powershell/exercises/hello-world/README.md
|
11368
|
+
- tracks/powershell/exercises/hello-world/hello-world-example.ps1
|
11363
11369
|
- tracks/powershell/exercises/hello-world/hello-world.tests.ps1
|
11364
|
-
- tracks/powershell/exercises/hello-world/hello-world_example.ps1
|
11365
11370
|
- tracks/powershell/exercises/leap/.gitignore
|
11366
11371
|
- tracks/powershell/exercises/leap/.version
|
11367
11372
|
- tracks/powershell/exercises/leap/README.md
|
11368
11373
|
- tracks/powershell/exercises/leap/leap-example.ps1
|
11369
11374
|
- tracks/powershell/exercises/leap/leap.tests.ps1
|
11375
|
+
- tracks/powershell/exercises/two-fer/.version
|
11376
|
+
- tracks/powershell/exercises/two-fer/README.md
|
11377
|
+
- tracks/powershell/exercises/two-fer/TwoFer.example.ps1
|
11378
|
+
- tracks/powershell/exercises/two-fer/TwoFer.ps1
|
11379
|
+
- tracks/powershell/exercises/two-fer/TwoFer.tests.ps1
|
11370
11380
|
- tracks/powershell/img/icon.png
|
11371
11381
|
- tracks/prolog/.git
|
11372
11382
|
- tracks/prolog/.github/stale.yml
|
@@ -13015,6 +13025,11 @@ files:
|
|
13015
13025
|
- tracks/rust/exercises/decimal/example.rs
|
13016
13026
|
- tracks/rust/exercises/decimal/src/lib.rs
|
13017
13027
|
- tracks/rust/exercises/decimal/tests/decimal.rs
|
13028
|
+
- tracks/rust/exercises/diamond/Cargo.toml
|
13029
|
+
- tracks/rust/exercises/diamond/README.md
|
13030
|
+
- tracks/rust/exercises/diamond/example.rs
|
13031
|
+
- tracks/rust/exercises/diamond/src/lib.rs
|
13032
|
+
- tracks/rust/exercises/diamond/tests/diamond.rs
|
13018
13033
|
- tracks/rust/exercises/difference-of-squares/.gitignore
|
13019
13034
|
- tracks/rust/exercises/difference-of-squares/Cargo.toml
|
13020
13035
|
- tracks/rust/exercises/difference-of-squares/README.md
|
@@ -13361,6 +13376,11 @@ files:
|
|
13361
13376
|
- tracks/rust/exercises/space-age/example.rs
|
13362
13377
|
- tracks/rust/exercises/space-age/src/lib.rs
|
13363
13378
|
- tracks/rust/exercises/space-age/tests/space-age.rs
|
13379
|
+
- tracks/rust/exercises/spiral-matrix/Cargo.toml
|
13380
|
+
- tracks/rust/exercises/spiral-matrix/README.md
|
13381
|
+
- tracks/rust/exercises/spiral-matrix/example.rs
|
13382
|
+
- tracks/rust/exercises/spiral-matrix/src/lib.rs
|
13383
|
+
- tracks/rust/exercises/spiral-matrix/tests/spiral-matrix.rs
|
13364
13384
|
- tracks/rust/exercises/sublist/.gitignore
|
13365
13385
|
- tracks/rust/exercises/sublist/Cargo.toml
|
13366
13386
|
- tracks/rust/exercises/sublist/README.md
|
@@ -1,14 +0,0 @@
|
|
1
|
-
### Installing Windows PowerShell
|
2
|
-
|
3
|
-
PowerShell comes pre-installed on all Windows operating systems from Windows 7 SP1 onward.
|
4
|
-
|
5
|
-
You can find the latest version of PowerShell and installation instructions for all platforms [here](https://github.com/PowerShell/PowerShell/blob/master/README.md#get-powershell).
|
6
|
-
|
7
|
-
### Using an IDE
|
8
|
-
|
9
|
-
If you want a more full-featured editing experience, you probably want to use an IDE. These are the most popular IDE's that support building PowerShell projects:
|
10
|
-
|
11
|
-
##### All platforms
|
12
|
-
* [Visual Studio Code](https://code.visualstudio.com/download) with the [PowerShell extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell)
|
13
|
-
* [Atom](https://atom.io/) with the [PowerShell package](https://atom.io/packages/language-powershell)
|
14
|
-
* [Sublime Text 3](https://www.sublimetext.com/3) with the [PowerShell package](https://packagecontrol.io/packages/PowerShell)
|