trackler 2.0.8.38 → 2.0.8.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,33 +11,62 @@ import unittest
11
11
  from largest_series_product import largest_product
12
12
 
13
13
 
14
+ # test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
15
+
14
16
  class SeriesTest(unittest.TestCase):
15
- def test_largest_product_of_2(self):
17
+ def test_finds_the_largest_product_if_span_equals_length(self):
18
+ self.assertEqual(largest_product("29", 2), 18)
19
+
20
+ def test_can_find_the_largest_product_of_2_with_numbers_in_order(self):
16
21
  self.assertEqual(largest_product("0123456789", 2), 72)
17
22
 
18
- def test_largest_product_of_2_unordered(self):
23
+ def test_can_find_the_largest_product_of_2(self):
19
24
  self.assertEqual(largest_product("576802143", 2), 48)
20
25
 
21
- def test__largest_product_span_equals_length(self):
22
- self.assertEqual(largest_product("29", 2), 18)
23
-
24
- def test_largest_product_of_3(self):
26
+ def test_can_find_the_largest_product_of_3_with_numbers_in_order(self):
25
27
  self.assertEqual(largest_product("0123456789", 3), 504)
26
28
 
27
- def test_largest_product_of_3_unordered(self):
29
+ def test_can_find_the_largest_product_of_3(self):
28
30
  self.assertEqual(largest_product("1027839564", 3), 270)
29
31
 
30
- def test_largest_product_of_5(self):
32
+ def test_can_find_the_largest_product_of_5_with_numbers_in_order(self):
31
33
  self.assertEqual(largest_product("0123456789", 5), 15120)
32
34
 
33
- def test_big_number(self):
34
- series = "73167176531330624919225119674426574742355349194934"
35
- self.assertEqual(largest_product(series, 6), 23520)
35
+ def test_can_get_the_largest_product_of_a_big_number(self):
36
+ self.assertEqual(
37
+ largest_product(
38
+ "73167176531330624919225119674426574742355349194934", 6),
39
+ 23520)
40
+
41
+ def test_reports_zero_if_the_only_digits_are_zero(self):
42
+ self.assertEqual(largest_product("0000", 2), 0)
43
+
44
+ def test_reports_zero_if_all_spans_include_zero(self):
45
+ self.assertEqual(largest_product("99099", 3), 0)
46
+
47
+ def test_rejects_span_longer_than_string_length(self):
48
+ with self.assertRaises(ValueError):
49
+ largest_product("123", 4)
50
+
51
+ def test_reports_1_for_empty_string_and_empty_product_0_span(self):
52
+ self.assertEqual(largest_product("", 0), 1)
53
+
54
+ def test_reports_1_for_nonempty_string_and_empty_product_0_span(self):
55
+ self.assertEqual(largest_product("123", 0), 1)
56
+
57
+ def test_rejects_empty_string_and_nonzero_span(self):
58
+ with self.assertRaises(ValueError):
59
+ largest_product("", 1)
60
+
61
+ def test_rejects_invalid_character_in_digits(self):
62
+ with self.assertRaises(ValueError):
63
+ largest_product("1234a5", 2)
36
64
 
37
- def test_another_big_number(self):
38
- series = "52677741234314237566414902593461595376319419139427"
39
- self.assertEqual(largest_product(series, 6), 28350)
65
+ def test_rejects_negative_span(self):
66
+ with self.assertRaises(ValueError):
67
+ largest_product("12345", -1)
40
68
 
69
+ @unittest.skip("extra-credit")
41
70
  def test_project_euler_big_number(self):
42
71
  series = (
43
72
  "73167176531330624919225119674426574742355349194934969835203127745"
@@ -58,34 +87,6 @@ class SeriesTest(unittest.TestCase):
58
87
  "3600823257530420752963450")
59
88
  self.assertEqual(largest_product(series, 13), 23514624000)
60
89
 
61
- def test_all_digits_zero(self):
62
- self.assertEqual(largest_product("0000", 2), 0)
63
-
64
- def test_all_spans_contain_zero(self):
65
- self.assertEqual(largest_product("99099", 3), 0)
66
-
67
- def test_identity_with_empty_string(self):
68
- self.assertEqual(largest_product("", 0), 1)
69
-
70
- def test_identity_with_nonempty_string(self):
71
- self.assertEqual(largest_product("123", 0), 1)
72
-
73
- def test_span_long_than_number(self):
74
- with self.assertRaises(ValueError):
75
- largest_product("123", 4)
76
-
77
- def test_nonzero_span_and_empty_string(self):
78
- with self.assertRaises(ValueError):
79
- largest_product("", 1)
80
-
81
- def test_digits_with_invalid_character(self):
82
- with self.assertRaises(ValueError):
83
- largest_product("1234a5", 2)
84
-
85
- def test_negative_span(self):
86
- with self.assertRaises(ValueError):
87
- largest_product("12345", -1)
88
-
89
90
 
90
91
  if __name__ == '__main__':
91
92
  unittest.main()
@@ -3,6 +3,9 @@ from math import sqrt
3
3
 
4
4
 
5
5
  def nth_prime(n):
6
+ if n < 1:
7
+ raise ValueError('The parameter `n` has to be a positive number.')
8
+
6
9
  known = []
7
10
  candidates = prime_candidates()
8
11
 
@@ -3,21 +3,31 @@ import unittest
3
3
  from nth_prime import nth_prime
4
4
 
5
5
 
6
+ # test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
7
+
6
8
  class NthPrimeTests(unittest.TestCase):
7
9
  def test_first_prime(self):
8
- self.assertEqual(2, nth_prime(1))
10
+ self.assertEqual(nth_prime(1), 2)
11
+
12
+ def test_second_prime(self):
13
+ self.assertEqual(nth_prime(2), 3)
9
14
 
10
15
  def test_sixth_prime(self):
11
- self.assertEqual(13, nth_prime(6))
16
+ self.assertEqual(nth_prime(6), 13)
17
+
18
+ def test_big_prime(self):
19
+ self.assertEqual(nth_prime(10001), 104743)
12
20
 
21
+ def test_there_is_no_zeroth_prime(self):
22
+ with self.assertRaises(ValueError):
23
+ nth_prime(0)
24
+
25
+ # additional track specific test
13
26
  def test_first_twenty_primes(self):
14
27
  self.assertEqual([2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31,
15
28
  37, 41, 43, 47, 53, 59, 61, 67, 71],
16
29
  [nth_prime(n) for n in range(1, 21)])
17
30
 
18
- def test_prime_no_10000(self):
19
- self.assertEqual(104729, nth_prime(10000))
20
-
21
31
 
22
32
  if __name__ == '__main__':
23
33
  unittest.main()
@@ -0,0 +1,14 @@
1
+ from string import ascii_lowercase as alpha_lower
2
+ from string import ascii_uppercase as alpha_upper
3
+ ALPHA_LEN = len(alpha_lower)
4
+
5
+
6
+ def rotate(message, key):
7
+ coded_message = ""
8
+ for char in message:
9
+ if char in alpha_lower:
10
+ char = alpha_lower[(alpha_lower.index(char) + key) % ALPHA_LEN]
11
+ elif char in alpha_upper:
12
+ char = alpha_upper[(alpha_upper.index(char) + key) % ALPHA_LEN]
13
+ coded_message += char
14
+ return coded_message
@@ -0,0 +1,53 @@
1
+ import unittest
2
+
3
+ import rotational_cipher
4
+
5
+
6
+ class RotationalCipher(unittest.TestCase):
7
+ def test_rotate_a_by_1(self):
8
+ self.assertEqual(rotational_cipher.rotate('a', 1), 'b')
9
+
10
+ def test_rotate_a_by_26(self):
11
+ self.assertEqual(rotational_cipher.rotate('a', 26), 'a')
12
+
13
+ def test_rotate_a_by_0(self):
14
+ self.assertEqual(rotational_cipher.rotate('a', 0), 'a')
15
+
16
+ def test_rotate_m_by_13(self):
17
+ self.assertEqual(rotational_cipher.rotate('m', 13), 'z')
18
+
19
+ def test_rotate_n_by_13_with_wrap_around_alphabet(self):
20
+ self.assertEqual(rotational_cipher.rotate('n', 13), 'a')
21
+
22
+ def test_rotate_capital_letters(self):
23
+ self.assertEqual(rotational_cipher.rotate('OMG', 5), 'TRL')
24
+
25
+ def test_rotate_spaces(self):
26
+ self.assertEqual(rotational_cipher.rotate('O M G', 5),
27
+ 'T R L')
28
+
29
+ def test_rotate_numbers(self):
30
+ self.assertEqual(
31
+ rotational_cipher.rotate(
32
+ 'Testing 1 2 3 testing',
33
+ 4),
34
+ 'Xiwxmrk 1 2 3 xiwxmrk')
35
+
36
+ def test_rotate_punctuation(self):
37
+ self.assertEqual(
38
+ rotational_cipher.rotate(
39
+ "Let's eat, Grandma!",
40
+ 21),
41
+ "Gzo'n zvo, Bmviyhv!")
42
+
43
+ def test_rotate_all_letters(self):
44
+ self.assertEqual(
45
+ rotational_cipher.rotate(
46
+ "The quick brown fox jumps"
47
+ " over the lazy dog.",
48
+ 13),
49
+ "Gur dhvpx oebja sbk whzcf bire gur ynml qbt.")
50
+
51
+
52
+ if __name__ == '__main__':
53
+ unittest.main()
@@ -19,7 +19,7 @@ class Point(object):
19
19
  return self.x == other.x and self.y == other.y
20
20
 
21
21
  def __ne__(self, other):
22
- return not(self == other)
22
+ return not (self == other)
23
23
 
24
24
 
25
25
  DIRECTIONS = (Point(1, 0), Point(1, -1), Point(1, 1), Point(-1, -1),
@@ -40,15 +40,16 @@ class WordSearch(object):
40
40
  return self.rows[coordinate.y][coordinate.x]
41
41
 
42
42
  def find(self, word, position, direction):
43
- current = copy.copy(position)
44
- for letter in word:
45
- if self.find_char(current) != letter:
46
- return
47
- current += direction
48
- return position, current - direction
43
+ current = copy.copy(position)
44
+ for letter in word:
45
+ if self.find_char(current) != letter:
46
+ return
47
+ current += direction
48
+ return position, current - direction
49
49
 
50
50
  def search(self, word):
51
- positions = (Point(x, y) for x in range(self.width) for y in range(self.height))
51
+ positions = (Point(x, y)
52
+ for x in range(self.width) for y in range(self.height))
52
53
  for pos in positions:
53
54
  for d in DIRECTIONS:
54
55
  result = self.find(word, pos, d)
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.0.8.38
4
+ version: 2.0.8.39
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-01 00:00:00.000000000 Z
11
+ date: 2017-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -1645,6 +1645,7 @@ files:
1645
1645
  - tracks/csharp/exercises/nth-prime/NthPrime.csproj
1646
1646
  - tracks/csharp/exercises/nth-prime/NthPrimeTest.cs
1647
1647
  - tracks/csharp/exercises/nucleotide-count/Example.cs
1648
+ - tracks/csharp/exercises/nucleotide-count/HINTS.md
1648
1649
  - tracks/csharp/exercises/nucleotide-count/NucleotideCount.cs
1649
1650
  - tracks/csharp/exercises/nucleotide-count/NucleotideCount.csproj
1650
1651
  - tracks/csharp/exercises/nucleotide-count/NucleotideCountTest.cs
@@ -3365,6 +3366,10 @@ files:
3365
3366
  - tracks/go/exercises/bob/cases_test.go
3366
3367
  - tracks/go/exercises/bob/example.go
3367
3368
  - tracks/go/exercises/bob/example_gen.go
3369
+ - tracks/go/exercises/bowling/bowling_test.go
3370
+ - tracks/go/exercises/bowling/cases_test.go
3371
+ - tracks/go/exercises/bowling/example.go
3372
+ - tracks/go/exercises/bowling/example_gen.go
3368
3373
  - tracks/go/exercises/bracket-push/bracket_push_test.go
3369
3374
  - tracks/go/exercises/bracket-push/example.go
3370
3375
  - tracks/go/exercises/change/cases_test.go
@@ -6185,6 +6190,8 @@ files:
6185
6190
  - tracks/perl6/LICENSE
6186
6191
  - tracks/perl6/README.md
6187
6192
  - tracks/perl6/SETUP.md
6193
+ - tracks/perl6/bin/README.md
6194
+ - tracks/perl6/bin/exercise-gen.pl6
6188
6195
  - tracks/perl6/bin/fetch-configlet
6189
6196
  - tracks/perl6/config.json
6190
6197
  - tracks/perl6/docs/ABOUT.md
@@ -6220,6 +6227,7 @@ files:
6220
6227
  - tracks/perl6/exercises/grains/grains.t
6221
6228
  - tracks/perl6/exercises/hello-world/Example.pm
6222
6229
  - tracks/perl6/exercises/hello-world/HelloWorld.pm6
6230
+ - tracks/perl6/exercises/hello-world/example.yaml
6223
6231
  - tracks/perl6/exercises/hello-world/hello-world.t
6224
6232
  - tracks/perl6/exercises/leap/Example.pm
6225
6233
  - tracks/perl6/exercises/leap/Leap.pm6
@@ -6254,6 +6262,7 @@ files:
6254
6262
  - tracks/perl6/exercises/wordy/Wordy.pm6
6255
6263
  - tracks/perl6/exercises/wordy/wordy.t
6256
6264
  - tracks/perl6/img/icon.png
6265
+ - tracks/perl6/templates/test.mustache
6257
6266
  - tracks/php/.editorconfig
6258
6267
  - tracks/php/.git
6259
6268
  - tracks/php/.gitignore
@@ -6770,6 +6779,9 @@ files:
6770
6779
  - tracks/python/exercises/roman-numerals/example.py
6771
6780
  - tracks/python/exercises/roman-numerals/roman_numerals.py
6772
6781
  - tracks/python/exercises/roman-numerals/roman_numerals_test.py
6782
+ - tracks/python/exercises/rotational-cipher/example.py
6783
+ - tracks/python/exercises/rotational-cipher/rotational_cipher.py
6784
+ - tracks/python/exercises/rotational-cipher/rotational_cipher_test.py
6773
6785
  - tracks/python/exercises/run-length-encoding/example.py
6774
6786
  - tracks/python/exercises/run-length-encoding/run_length_encoding.py
6775
6787
  - tracks/python/exercises/run-length-encoding/run_length_encoding_test.py
@@ -7354,6 +7366,7 @@ files:
7354
7366
  - tracks/rust/exercises/acronym/Cargo.lock
7355
7367
  - tracks/rust/exercises/acronym/Cargo.toml
7356
7368
  - tracks/rust/exercises/acronym/example.rs
7369
+ - tracks/rust/exercises/acronym/src/lib.rs
7357
7370
  - tracks/rust/exercises/acronym/tests/acronym.rs
7358
7371
  - tracks/rust/exercises/all-your-base/Cargo.lock
7359
7372
  - tracks/rust/exercises/all-your-base/Cargo.toml
@@ -7364,6 +7377,7 @@ files:
7364
7377
  - tracks/rust/exercises/allergies/Cargo.lock
7365
7378
  - tracks/rust/exercises/allergies/Cargo.toml
7366
7379
  - tracks/rust/exercises/allergies/example.rs
7380
+ - tracks/rust/exercises/allergies/src/lib.rs
7367
7381
  - tracks/rust/exercises/allergies/tests/allergies.rs
7368
7382
  - tracks/rust/exercises/alphametics/Cargo-example.toml
7369
7383
  - tracks/rust/exercises/alphametics/Cargo.lock
@@ -7375,55 +7389,66 @@ files:
7375
7389
  - tracks/rust/exercises/anagram/Cargo.lock
7376
7390
  - tracks/rust/exercises/anagram/Cargo.toml
7377
7391
  - tracks/rust/exercises/anagram/example.rs
7392
+ - tracks/rust/exercises/anagram/src/lib.rs
7378
7393
  - tracks/rust/exercises/anagram/tests/anagram.rs
7379
7394
  - tracks/rust/exercises/atbash-cipher/Cargo.lock
7380
7395
  - tracks/rust/exercises/atbash-cipher/Cargo.toml
7381
7396
  - tracks/rust/exercises/atbash-cipher/example.rs
7397
+ - tracks/rust/exercises/atbash-cipher/src/lib.rs
7382
7398
  - tracks/rust/exercises/atbash-cipher/tests/atbash-cipher.rs
7383
7399
  - tracks/rust/exercises/beer-song/.gitignore
7384
7400
  - tracks/rust/exercises/beer-song/Cargo.lock
7385
7401
  - tracks/rust/exercises/beer-song/Cargo.toml
7386
7402
  - tracks/rust/exercises/beer-song/example.rs
7403
+ - tracks/rust/exercises/beer-song/src/lib.rs
7387
7404
  - tracks/rust/exercises/beer-song/tests/beer-song.rs
7388
7405
  - tracks/rust/exercises/bob/.gitignore
7389
7406
  - tracks/rust/exercises/bob/Cargo.lock
7390
7407
  - tracks/rust/exercises/bob/Cargo.toml
7391
7408
  - tracks/rust/exercises/bob/example.rs
7409
+ - tracks/rust/exercises/bob/src/lib.rs
7392
7410
  - tracks/rust/exercises/bob/tests/bob.rs
7393
7411
  - tracks/rust/exercises/bowling/.gitignore
7394
7412
  - tracks/rust/exercises/bowling/Cargo.toml
7395
7413
  - tracks/rust/exercises/bowling/example.rs
7414
+ - tracks/rust/exercises/bowling/src/lib.rs
7396
7415
  - tracks/rust/exercises/bowling/tests/bowling.rs
7397
7416
  - tracks/rust/exercises/bracket-push/.gitignore
7398
7417
  - tracks/rust/exercises/bracket-push/Cargo.lock
7399
7418
  - tracks/rust/exercises/bracket-push/Cargo.toml
7400
7419
  - tracks/rust/exercises/bracket-push/HINTS.md
7401
7420
  - tracks/rust/exercises/bracket-push/example.rs
7421
+ - tracks/rust/exercises/bracket-push/src/lib.rs
7402
7422
  - tracks/rust/exercises/bracket-push/tests/bracket-push.rs
7403
7423
  - tracks/rust/exercises/circular-buffer/.gitignore
7404
7424
  - tracks/rust/exercises/circular-buffer/Cargo.lock
7405
7425
  - tracks/rust/exercises/circular-buffer/Cargo.toml
7406
7426
  - tracks/rust/exercises/circular-buffer/example.rs
7427
+ - tracks/rust/exercises/circular-buffer/src/lib.rs
7407
7428
  - tracks/rust/exercises/circular-buffer/tests/circular-buffer.rs
7408
7429
  - tracks/rust/exercises/custom-set/.gitignore
7409
7430
  - tracks/rust/exercises/custom-set/Cargo.lock
7410
7431
  - tracks/rust/exercises/custom-set/Cargo.toml
7411
7432
  - tracks/rust/exercises/custom-set/example.rs
7433
+ - tracks/rust/exercises/custom-set/src/lib.rs
7412
7434
  - tracks/rust/exercises/custom-set/tests/custom-set.rs
7413
7435
  - tracks/rust/exercises/difference-of-squares/.gitignore
7414
7436
  - tracks/rust/exercises/difference-of-squares/Cargo.lock
7415
7437
  - tracks/rust/exercises/difference-of-squares/Cargo.toml
7416
7438
  - tracks/rust/exercises/difference-of-squares/example.rs
7439
+ - tracks/rust/exercises/difference-of-squares/src/lib.rs
7417
7440
  - tracks/rust/exercises/difference-of-squares/tests/difference-of-square.rs
7418
7441
  - tracks/rust/exercises/dominoes/.gitignore
7419
7442
  - tracks/rust/exercises/dominoes/Cargo.lock
7420
7443
  - tracks/rust/exercises/dominoes/Cargo.toml
7421
7444
  - tracks/rust/exercises/dominoes/example.rs
7445
+ - tracks/rust/exercises/dominoes/src/lib.rs
7422
7446
  - tracks/rust/exercises/dominoes/tests/dominoes.rs
7423
7447
  - tracks/rust/exercises/etl/.gitignore
7424
7448
  - tracks/rust/exercises/etl/Cargo.lock
7425
7449
  - tracks/rust/exercises/etl/Cargo.toml
7426
7450
  - tracks/rust/exercises/etl/example.rs
7451
+ - tracks/rust/exercises/etl/src/lib.rs
7427
7452
  - tracks/rust/exercises/etl/tests/etl.rs
7428
7453
  - tracks/rust/exercises/forth/.gitignore
7429
7454
  - tracks/rust/exercises/forth/Cargo.lock
@@ -7435,6 +7460,7 @@ files:
7435
7460
  - tracks/rust/exercises/gigasecond/Cargo.lock
7436
7461
  - tracks/rust/exercises/gigasecond/Cargo.toml
7437
7462
  - tracks/rust/exercises/gigasecond/example.rs
7463
+ - tracks/rust/exercises/gigasecond/src/lib.rs
7438
7464
  - tracks/rust/exercises/gigasecond/tests/gigasecond.rs
7439
7465
  - tracks/rust/exercises/grade-school/.gitignore
7440
7466
  - tracks/rust/exercises/grade-school/Cargo.lock
@@ -7451,6 +7477,7 @@ files:
7451
7477
  - tracks/rust/exercises/hamming/Cargo.lock
7452
7478
  - tracks/rust/exercises/hamming/Cargo.toml
7453
7479
  - tracks/rust/exercises/hamming/example.rs
7480
+ - tracks/rust/exercises/hamming/src/lib.rs
7454
7481
  - tracks/rust/exercises/hamming/tests/hamming.rs
7455
7482
  - tracks/rust/exercises/hello-world/.gitignore
7456
7483
  - tracks/rust/exercises/hello-world/Cargo.lock
@@ -7463,47 +7490,56 @@ files:
7463
7490
  - tracks/rust/exercises/hexadecimal/Cargo.lock
7464
7491
  - tracks/rust/exercises/hexadecimal/Cargo.toml
7465
7492
  - tracks/rust/exercises/hexadecimal/example.rs
7493
+ - tracks/rust/exercises/hexadecimal/src/lib.rs
7466
7494
  - tracks/rust/exercises/hexadecimal/tests/hexadecimal.rs
7467
7495
  - tracks/rust/exercises/largest-series-product/.gitignore
7468
7496
  - tracks/rust/exercises/largest-series-product/Cargo.toml
7469
7497
  - tracks/rust/exercises/largest-series-product/HINTS.md
7470
7498
  - tracks/rust/exercises/largest-series-product/example.rs
7499
+ - tracks/rust/exercises/largest-series-product/src/lib.rs
7471
7500
  - tracks/rust/exercises/largest-series-product/tests/largest-series-product.rs
7472
7501
  - tracks/rust/exercises/leap/.gitignore
7473
7502
  - tracks/rust/exercises/leap/Cargo.lock
7474
7503
  - tracks/rust/exercises/leap/Cargo.toml
7475
7504
  - tracks/rust/exercises/leap/example.rs
7505
+ - tracks/rust/exercises/leap/src/lib.rs
7476
7506
  - tracks/rust/exercises/leap/tests/leap.rs
7477
7507
  - tracks/rust/exercises/luhn-from/.gitignore
7478
7508
  - tracks/rust/exercises/luhn-from/Cargo.toml
7479
7509
  - tracks/rust/exercises/luhn-from/description.md
7480
7510
  - tracks/rust/exercises/luhn-from/example.rs
7481
7511
  - tracks/rust/exercises/luhn-from/metadata.yml
7512
+ - tracks/rust/exercises/luhn-from/src/lib.rs
7482
7513
  - tracks/rust/exercises/luhn-from/tests/luhn-from.rs
7483
7514
  - tracks/rust/exercises/luhn-trait/.gitignore
7484
7515
  - tracks/rust/exercises/luhn-trait/Cargo.toml
7485
7516
  - tracks/rust/exercises/luhn-trait/description.md
7486
7517
  - tracks/rust/exercises/luhn-trait/example.rs
7487
7518
  - tracks/rust/exercises/luhn-trait/metadata.yml
7519
+ - tracks/rust/exercises/luhn-trait/src/lib.rs
7488
7520
  - tracks/rust/exercises/luhn-trait/tests/luhn-trait.rs
7489
7521
  - tracks/rust/exercises/luhn/.gitignore
7490
7522
  - tracks/rust/exercises/luhn/Cargo.toml
7491
7523
  - tracks/rust/exercises/luhn/example.rs
7524
+ - tracks/rust/exercises/luhn/src/lib.rs
7492
7525
  - tracks/rust/exercises/luhn/tests/luhn.rs
7493
7526
  - tracks/rust/exercises/minesweeper/.gitignore
7494
7527
  - tracks/rust/exercises/minesweeper/Cargo.lock
7495
7528
  - tracks/rust/exercises/minesweeper/Cargo.toml
7496
7529
  - tracks/rust/exercises/minesweeper/example.rs
7530
+ - tracks/rust/exercises/minesweeper/src/lib.rs
7497
7531
  - tracks/rust/exercises/minesweeper/tests/minesweeper.rs
7498
7532
  - tracks/rust/exercises/nucleotide-codons/.gitignore
7499
7533
  - tracks/rust/exercises/nucleotide-codons/Cargo.lock
7500
7534
  - tracks/rust/exercises/nucleotide-codons/Cargo.toml
7501
7535
  - tracks/rust/exercises/nucleotide-codons/example.rs
7536
+ - tracks/rust/exercises/nucleotide-codons/src/lib.rs
7502
7537
  - tracks/rust/exercises/nucleotide-codons/tests/codons.rs
7503
7538
  - tracks/rust/exercises/nucleotide-count/.gitignore
7504
7539
  - tracks/rust/exercises/nucleotide-count/Cargo.lock
7505
7540
  - tracks/rust/exercises/nucleotide-count/Cargo.toml
7506
7541
  - tracks/rust/exercises/nucleotide-count/example.rs
7542
+ - tracks/rust/exercises/nucleotide-count/src/lib.rs
7507
7543
  - tracks/rust/exercises/nucleotide-count/tests/nucleotide-count.rs
7508
7544
  - tracks/rust/exercises/ocr-numbers/.gitignore
7509
7545
  - tracks/rust/exercises/ocr-numbers/Cargo.lock
@@ -7515,6 +7551,7 @@ files:
7515
7551
  - tracks/rust/exercises/pangram/Cargo.lock
7516
7552
  - tracks/rust/exercises/pangram/Cargo.toml
7517
7553
  - tracks/rust/exercises/pangram/example.rs
7554
+ - tracks/rust/exercises/pangram/src/lib.rs
7518
7555
  - tracks/rust/exercises/pangram/tests/pangram.rs
7519
7556
  - tracks/rust/exercises/parallel-letter-frequency/.gitignore
7520
7557
  - tracks/rust/exercises/parallel-letter-frequency/Cargo.lock
@@ -7522,6 +7559,7 @@ files:
7522
7559
  - tracks/rust/exercises/parallel-letter-frequency/HINTS.md
7523
7560
  - tracks/rust/exercises/parallel-letter-frequency/benches/benchmark.rs
7524
7561
  - tracks/rust/exercises/parallel-letter-frequency/example.rs
7562
+ - tracks/rust/exercises/parallel-letter-frequency/src/lib.rs
7525
7563
  - tracks/rust/exercises/parallel-letter-frequency/tests/parallel-letter-frequency.rs
7526
7564
  - tracks/rust/exercises/pascals-triangle/.gitignore
7527
7565
  - tracks/rust/exercises/pascals-triangle/Cargo.toml
@@ -7532,20 +7570,24 @@ files:
7532
7570
  - tracks/rust/exercises/phone-number/Cargo.lock
7533
7571
  - tracks/rust/exercises/phone-number/Cargo.toml
7534
7572
  - tracks/rust/exercises/phone-number/example.rs
7573
+ - tracks/rust/exercises/phone-number/src/lib.rs
7535
7574
  - tracks/rust/exercises/phone-number/tests/phone-number.rs
7536
7575
  - tracks/rust/exercises/protein-translation/Cargo.lock
7537
7576
  - tracks/rust/exercises/protein-translation/Cargo.toml
7538
7577
  - tracks/rust/exercises/protein-translation/example.rs
7578
+ - tracks/rust/exercises/protein-translation/src/lib.rs
7539
7579
  - tracks/rust/exercises/protein-translation/tests/proteins.rs
7540
7580
  - tracks/rust/exercises/queen-attack/.gitignore
7541
7581
  - tracks/rust/exercises/queen-attack/Cargo.lock
7542
7582
  - tracks/rust/exercises/queen-attack/Cargo.toml
7543
7583
  - tracks/rust/exercises/queen-attack/example.rs
7584
+ - tracks/rust/exercises/queen-attack/src/lib.rs
7544
7585
  - tracks/rust/exercises/queen-attack/tests/queen-attack.rs
7545
7586
  - tracks/rust/exercises/raindrops/.gitignore
7546
7587
  - tracks/rust/exercises/raindrops/Cargo.lock
7547
7588
  - tracks/rust/exercises/raindrops/Cargo.toml
7548
7589
  - tracks/rust/exercises/raindrops/example.rs
7590
+ - tracks/rust/exercises/raindrops/src/lib.rs
7549
7591
  - tracks/rust/exercises/raindrops/tests/raindrops.rs
7550
7592
  - tracks/rust/exercises/react/Cargo.lock
7551
7593
  - tracks/rust/exercises/react/Cargo.toml
@@ -7556,16 +7598,19 @@ files:
7556
7598
  - tracks/rust/exercises/rectangles/Cargo.lock
7557
7599
  - tracks/rust/exercises/rectangles/Cargo.toml
7558
7600
  - tracks/rust/exercises/rectangles/example.rs
7601
+ - tracks/rust/exercises/rectangles/src/lib.rs
7559
7602
  - tracks/rust/exercises/rectangles/tests/rectangles.rs
7560
7603
  - tracks/rust/exercises/rna-transcription/.gitignore
7561
7604
  - tracks/rust/exercises/rna-transcription/Cargo.lock
7562
7605
  - tracks/rust/exercises/rna-transcription/Cargo.toml
7563
7606
  - tracks/rust/exercises/rna-transcription/example.rs
7607
+ - tracks/rust/exercises/rna-transcription/src/lib.rs
7564
7608
  - tracks/rust/exercises/rna-transcription/tests/rna-transcription.rs
7565
7609
  - tracks/rust/exercises/robot-name/.gitignore
7566
7610
  - tracks/rust/exercises/robot-name/Cargo.lock
7567
7611
  - tracks/rust/exercises/robot-name/Cargo.toml
7568
7612
  - tracks/rust/exercises/robot-name/example.rs
7613
+ - tracks/rust/exercises/robot-name/src/lib.rs
7569
7614
  - tracks/rust/exercises/robot-name/tests/robot-name.rs
7570
7615
  - tracks/rust/exercises/robot-simulator/.gitignore
7571
7616
  - tracks/rust/exercises/robot-simulator/Cargo.lock
@@ -7577,20 +7622,24 @@ files:
7577
7622
  - tracks/rust/exercises/roman-numerals/Cargo.lock
7578
7623
  - tracks/rust/exercises/roman-numerals/Cargo.toml
7579
7624
  - tracks/rust/exercises/roman-numerals/example.rs
7625
+ - tracks/rust/exercises/roman-numerals/src/lib.rs
7580
7626
  - tracks/rust/exercises/roman-numerals/tests/roman-numerals.rs
7581
7627
  - tracks/rust/exercises/rotational-cipher/Cargo.lock
7582
7628
  - tracks/rust/exercises/rotational-cipher/Cargo.toml
7583
7629
  - tracks/rust/exercises/rotational-cipher/example.rs
7630
+ - tracks/rust/exercises/rotational-cipher/src/lib.rs
7584
7631
  - tracks/rust/exercises/rotational-cipher/tests/rotational-cipher.rs
7585
7632
  - tracks/rust/exercises/scrabble-score/.gitignore
7586
7633
  - tracks/rust/exercises/scrabble-score/Cargo.lock
7587
7634
  - tracks/rust/exercises/scrabble-score/Cargo.toml
7588
7635
  - tracks/rust/exercises/scrabble-score/example.rs
7636
+ - tracks/rust/exercises/scrabble-score/src/lib.rs
7589
7637
  - tracks/rust/exercises/scrabble-score/tests/scrabble-score.rs
7590
7638
  - tracks/rust/exercises/sieve/.gitignore
7591
7639
  - tracks/rust/exercises/sieve/Cargo.lock
7592
7640
  - tracks/rust/exercises/sieve/Cargo.toml
7593
7641
  - tracks/rust/exercises/sieve/example.rs
7642
+ - tracks/rust/exercises/sieve/src/lib.rs
7594
7643
  - tracks/rust/exercises/sieve/tests/sieve.rs
7595
7644
  - tracks/rust/exercises/space-age/.gitignore
7596
7645
  - tracks/rust/exercises/space-age/Cargo.lock
@@ -7603,21 +7652,25 @@ files:
7603
7652
  - tracks/rust/exercises/sublist/Cargo.lock
7604
7653
  - tracks/rust/exercises/sublist/Cargo.toml
7605
7654
  - tracks/rust/exercises/sublist/example.rs
7655
+ - tracks/rust/exercises/sublist/src/lib.rs
7606
7656
  - tracks/rust/exercises/sublist/tests/sublist.rs
7607
7657
  - tracks/rust/exercises/sum-of-multiples/.gitignore
7608
7658
  - tracks/rust/exercises/sum-of-multiples/Cargo.toml
7609
7659
  - tracks/rust/exercises/sum-of-multiples/example.rs
7660
+ - tracks/rust/exercises/sum-of-multiples/src/lib.rs
7610
7661
  - tracks/rust/exercises/sum-of-multiples/tests/sum-of-multiples.rs
7611
7662
  - tracks/rust/exercises/tournament/.gitignore
7612
7663
  - tracks/rust/exercises/tournament/Cargo.lock
7613
7664
  - tracks/rust/exercises/tournament/Cargo.toml
7614
7665
  - tracks/rust/exercises/tournament/example.rs
7666
+ - tracks/rust/exercises/tournament/src/lib.rs
7615
7667
  - tracks/rust/exercises/tournament/tests/tournament.rs
7616
7668
  - tracks/rust/exercises/triangle/.gitignore
7617
7669
  - tracks/rust/exercises/triangle/Cargo.toml
7618
7670
  - tracks/rust/exercises/triangle/HINTS.md
7619
7671
  - tracks/rust/exercises/triangle/example.rs
7620
7672
  - tracks/rust/exercises/triangle/float_example.rs
7673
+ - tracks/rust/exercises/triangle/src/lib.rs
7621
7674
  - tracks/rust/exercises/triangle/tests/triangle.rs
7622
7675
  - tracks/rust/exercises/variable-length-quantity/.gitignore
7623
7676
  - tracks/rust/exercises/variable-length-quantity/Cargo.lock
@@ -7629,11 +7682,13 @@ files:
7629
7682
  - tracks/rust/exercises/word-count/Cargo.lock
7630
7683
  - tracks/rust/exercises/word-count/Cargo.toml
7631
7684
  - tracks/rust/exercises/word-count/example.rs
7685
+ - tracks/rust/exercises/word-count/src/lib.rs
7632
7686
  - tracks/rust/exercises/word-count/tests/word-count.rs
7633
7687
  - tracks/rust/exercises/wordy/.gitignore
7634
7688
  - tracks/rust/exercises/wordy/Cargo.lock
7635
7689
  - tracks/rust/exercises/wordy/Cargo.toml
7636
7690
  - tracks/rust/exercises/wordy/example.rs
7691
+ - tracks/rust/exercises/wordy/src/lib.rs
7637
7692
  - tracks/rust/exercises/wordy/tests/wordy.rs
7638
7693
  - tracks/rust/img/icon.png
7639
7694
  - tracks/rust/problem_ordering.md