-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
231 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
*.beam | ||
*.ez | ||
build | ||
erl_crash.dump |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# Help | ||
|
||
## Running the tests | ||
|
||
To run the tests, run the command `gleam test` from within the exercise directory. | ||
|
||
## Submitting your solution | ||
|
||
You can submit your solution using the `exercism submit src/flatten_array.gleam` command. | ||
This command will upload your solution to the Exercism website and print the solution page's URL. | ||
|
||
It's possible to submit an incomplete solution which allows you to: | ||
|
||
- See how others have completed the exercise | ||
- Request help from a mentor | ||
|
||
## Need to get help? | ||
|
||
If you'd like help solving the exercise, check the following pages: | ||
|
||
- The [Gleam track's documentation](https://exercism.org/docs/tracks/gleam) | ||
- The [Gleam track's programming category on the forum](https://forum.exercism.org/c/programming/gleam) | ||
- [Exercism's programming category on the forum](https://forum.exercism.org/c/programming/5) | ||
- The [Frequently Asked Questions](https://exercism.org/docs/using/faqs) | ||
|
||
Should those resources not suffice, you could submit your (incomplete) solution to request mentoring. | ||
|
||
To get help if you're having trouble, you can use one of the following resources: | ||
|
||
- [gleam.run](https://gleam.run/documentation/) is the gleam official documentation. | ||
- [Discord](https://discord.gg/Fm8Pwmy) is the discord channel. | ||
- [StackOverflow](https://stackoverflow.com/questions/tagged/gleam) can be used to search for your problem and see if it has been answered already. You can also ask and answer questions. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# Flatten Array | ||
|
||
Welcome to Flatten Array on Exercism's Gleam Track. | ||
If you need help running the tests or submitting your code, check out `HELP.md`. | ||
|
||
## Instructions | ||
|
||
Take a nested list and return a single flattened list with all values except nil/null. | ||
|
||
The challenge is to write a function that accepts an arbitrarily-deep nested list-like structure and returns a flattened structure without any nil/null values. | ||
|
||
For example: | ||
|
||
input: [1,[2,3,null,4],[null],5] | ||
|
||
output: [1,2,3,4,5] | ||
|
||
## Source | ||
|
||
### Created by | ||
|
||
- @jiegillet | ||
|
||
### Based on | ||
|
||
Interview Question - https://reference.wolfram.com/language/ref/Flatten.html |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
name = "flatten_array" | ||
version = "0.1.0" | ||
|
||
[dependencies] | ||
gleam_bitwise = "~> 1.2" | ||
gleam_otp = "~> 0.7 or ~> 1.0" | ||
gleam_stdlib = "~> 0.32 or ~> 1.0" | ||
simplifile = "~> 1.0" | ||
gleam_erlang = ">= 0.25.0 and < 1.0.0" | ||
|
||
[dev-dependencies] | ||
exercism_test_runner = "~> 1.4" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# This file was generated by Gleam | ||
# You typically do not need to edit this file | ||
|
||
packages = [ | ||
{ name = "argv", version = "1.0.1", build_tools = ["gleam"], requirements = [], otp_app = "argv", source = "hex", outer_checksum = "A6E9009E50BBE863EB37D963E4315398D41A3D87D0075480FC244125808F964A" }, | ||
{ name = "exercism_test_runner", version = "1.7.0", build_tools = ["gleam"], requirements = ["argv", "gap", "glance", "gleam_community_ansi", "gleam_erlang", "gleam_json", "gleam_stdlib", "simplifile"], otp_app = "exercism_test_runner", source = "hex", outer_checksum = "2FC1BADB19BEC2AE77BFD2D3A606A014C85412A7B874CAFC4BA8CF04B0B257CD" }, | ||
{ name = "gap", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_community_ansi", "gleam_stdlib"], otp_app = "gap", source = "hex", outer_checksum = "2EE1B0A17E85CF73A0C1D29DA315A2699117A8F549C8E8D89FA8261BE41EDEB1" }, | ||
{ name = "glance", version = "0.8.2", build_tools = ["gleam"], requirements = ["gleam_stdlib", "glexer"], otp_app = "glance", source = "hex", outer_checksum = "ACF09457E8B564AD7A0D823DAFDD326F58263C01ACB0D432A9BEFDEDD1DA8E73" }, | ||
{ name = "gleam_bitwise", version = "1.3.1", build_tools = ["gleam"], requirements = [], otp_app = "gleam_bitwise", source = "hex", outer_checksum = "B36E1D3188D7F594C7FD4F43D0D2CE17561DE896202017548578B16FE1FE9EFC" }, | ||
{ name = "gleam_community_ansi", version = "1.4.0", build_tools = ["gleam"], requirements = ["gleam_community_colour", "gleam_stdlib"], otp_app = "gleam_community_ansi", source = "hex", outer_checksum = "FE79E08BF97009729259B6357EC058315B6FBB916FAD1C2FF9355115FEB0D3A4" }, | ||
{ name = "gleam_community_colour", version = "1.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_community_colour", source = "hex", outer_checksum = "A49A5E3AE8B637A5ACBA80ECB9B1AFE89FD3D5351FF6410A42B84F666D40D7D5" }, | ||
{ name = "gleam_erlang", version = "0.25.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_erlang", source = "hex", outer_checksum = "054D571A7092D2A9727B3E5D183B7507DAB0DA41556EC9133606F09C15497373" }, | ||
{ name = "gleam_json", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "thoas"], otp_app = "gleam_json", source = "hex", outer_checksum = "8B197DD5D578EA6AC2C0D4BDC634C71A5BCA8E7DB5F47091C263ECB411A60DF3" }, | ||
{ name = "gleam_otp", version = "0.10.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "0B04FE915ACECE539B317F9652CAADBBC0F000184D586AAAF2D94C100945D72B" }, | ||
{ name = "gleam_stdlib", version = "0.36.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "C0D14D807FEC6F8A08A7C9EF8DFDE6AE5C10E40E21325B2B29365965D82EB3D4" }, | ||
{ name = "glexer", version = "0.7.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "glexer", source = "hex", outer_checksum = "4484942A465482A0A100936E1E5F12314DB4B5AC0D87575A7B9E9062090B96BE" }, | ||
{ name = "simplifile", version = "1.5.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "EB9AA8E65E5C1E3E0FDCFC81BC363FD433CB122D7D062750FFDF24DE4AC40116" }, | ||
{ name = "thoas", version = "0.4.1", build_tools = ["rebar3"], requirements = [], otp_app = "thoas", source = "hex", outer_checksum = "4918D50026C073C4AB1388437132C77A6F6F7C8AC43C60C13758CC0ADCE2134E" }, | ||
] | ||
|
||
[requirements] | ||
exercism_test_runner = { version = "~> 1.4" } | ||
gleam_bitwise = { version = "~> 1.2" } | ||
gleam_erlang = { version = ">= 0.25.0 and < 1.0.0"} | ||
gleam_otp = { version = "~> 0.7 or ~> 1.0" } | ||
gleam_stdlib = { version = "~> 0.32 or ~> 1.0" } | ||
simplifile = { version = "~> 1.0" } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import gleam/list | ||
|
||
pub type NestedList(a) { | ||
Null | ||
Value(a) | ||
List(List(NestedList(a))) | ||
} | ||
|
||
pub fn flatten(nested_list: NestedList(a)) -> List(a) { | ||
case nested_list { | ||
Null -> [] | ||
Value(a) -> [a] | ||
List(l) -> list.flat_map(l, flatten) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
import exercism/should | ||
import exercism/test_runner | ||
import flatten_array.{List, Null, Value} | ||
|
||
pub fn main() { | ||
test_runner.main() | ||
} | ||
|
||
pub fn empty_test() { | ||
flatten_array.flatten(List([])) | ||
|> should.equal([]) | ||
} | ||
|
||
pub fn no_nesting_test() { | ||
flatten_array.flatten(List([Value(0), Value(1), Value(2)])) | ||
|> should.equal([0, 1, 2]) | ||
} | ||
|
||
pub fn flattens_a_nested_array_test() { | ||
flatten_array.flatten(List([List([List([])])])) | ||
|> should.equal([]) | ||
} | ||
|
||
pub fn flattens_array_with_just_integers_present_test() { | ||
flatten_array.flatten( | ||
List([ | ||
Value(1), | ||
List([Value(2), Value(3), Value(4), Value(5), Value(6), Value(7)]), | ||
Value(8), | ||
]), | ||
) | ||
|> should.equal([1, 2, 3, 4, 5, 6, 7, 8]) | ||
} | ||
|
||
pub fn five_level_nesting_test() { | ||
flatten_array.flatten( | ||
List([ | ||
Value(0), | ||
Value(2), | ||
List([ | ||
List([Value(2), Value(3)]), | ||
Value(8), | ||
Value(100), | ||
Value(4), | ||
List([List([List([Value(50)])])]), | ||
]), | ||
Value(-2), | ||
]), | ||
) | ||
|> should.equal([0, 2, 2, 3, 8, 100, 4, 50, -2]) | ||
} | ||
|
||
pub fn six_level_nesting_test() { | ||
flatten_array.flatten( | ||
List([ | ||
Value(1), | ||
List([ | ||
Value(2), | ||
List([List([Value(3)])]), | ||
List([Value(4), List([List([Value(5)])])]), | ||
Value(6), | ||
Value(7), | ||
]), | ||
Value(8), | ||
]), | ||
) | ||
|> should.equal([1, 2, 3, 4, 5, 6, 7, 8]) | ||
} | ||
|
||
pub fn null_values_are_omitted_from_the_final_result_test() { | ||
flatten_array.flatten(List([Value(1), Value(2), Null])) | ||
|> should.equal([1, 2]) | ||
} | ||
|
||
pub fn consecutive_null_values_at_the_front_of_the_list_are_omitted_from_the_final_result_test() { | ||
flatten_array.flatten(List([Null, Null, Value(3)])) | ||
|> should.equal([3]) | ||
} | ||
|
||
pub fn consecutive_null_values_in_the_middle_of_the_list_are_omitted_from_the_final_result_test() { | ||
flatten_array.flatten(List([Value(1), Null, Null, Value(4)])) | ||
|> should.equal([1, 4]) | ||
} | ||
|
||
pub fn six_level_nest_list_with_null_values_test() { | ||
flatten_array.flatten( | ||
List([ | ||
Value(0), | ||
Value(2), | ||
List([ | ||
List([Value(2), Value(3)]), | ||
Value(8), | ||
List([List([Value(100)])]), | ||
Null, | ||
List([List([Null])]), | ||
]), | ||
Value(-2), | ||
]), | ||
) | ||
|> should.equal([0, 2, 2, 3, 8, 100, -2]) | ||
} | ||
|
||
pub fn all_values_in_nested_list_are_null_test() { | ||
flatten_array.flatten( | ||
List([ | ||
Null, | ||
List([List([List([Null])])]), | ||
Null, | ||
Null, | ||
List([List([Null, Null]), Null]), | ||
Null, | ||
]), | ||
) | ||
|> should.equal([]) | ||
} |