diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 51f2e99043..aefc10325e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,8 +17,8 @@ jobs: runs-on: ubuntu-20.04 strategy: matrix: - elixir: [1.17] - otp: [27.0] + elixir: [1.18.1] + otp: [27.2] steps: - name: Checkout code @@ -76,8 +76,6 @@ jobs: strategy: matrix: include: - - elixir: '1.13.0' - otp: '24.1' - elixir: '1.14.0' otp: '25.0' - elixir: '1.15.0' @@ -86,6 +84,8 @@ jobs: otp: '26.2' - elixir: '1.17.0' otp: '27.0' + - elixir: '1.18.1' + otp: '27.2' steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 diff --git a/README.md b/README.md index 958c2d7b66..4ca00df874 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ## Setup -The exercises currently target Elixir versions from 1.13 to 1.17 and Erlang/OTP versions from 24 to 27. Detailed installation instructions can be found at +The exercises currently target Elixir versions from 1.14 to 1.18 and Erlang/OTP versions from 25 to 27. Detailed installation instructions can be found at [https://elixir-lang.org/install.html](https://elixir-lang.org/install.html). We recommend using the [asdf version manager](https://github.com/asdf-vm/asdf) to manage multiple Elixir versions. ## Testing diff --git a/concepts/cond/about.md b/concepts/cond/about.md index 68fb30e32a..09b9acc2c6 100644 --- a/concepts/cond/about.md +++ b/concepts/cond/about.md @@ -16,4 +16,4 @@ The `cond` conditional is usually used when there are more than two logical bran [cond]: https://hexdocs.pm/elixir/case-cond-and-if.html#cond [case]: https://hexdocs.pm/elixir/case-cond-and-if.html#case -[if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if-unless +[if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if diff --git a/concepts/if/about.md b/concepts/if/about.md index aa8aae4a99..0cfd50e2ff 100644 --- a/concepts/if/about.md +++ b/concepts/if/about.md @@ -66,7 +66,7 @@ truthy?.(nil) # => true ``` -[getting-started-if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if-unless +[getting-started-if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if [kernel-if]: https://hexdocs.pm/elixir/Kernel.html#if/2 [kernel-boolean-and]: https://hexdocs.pm/elixir/Kernel.html#and/2 [kernel-boolean-or]: https://hexdocs.pm/elixir/Kernel.html#or/2 diff --git a/concepts/if/introduction.md b/concepts/if/introduction.md index b40fc84531..9e10803920 100644 --- a/concepts/if/introduction.md +++ b/concepts/if/introduction.md @@ -28,5 +28,5 @@ This syntax is helpful for very short expressions, but should be avoided if the In Elixir, all datatypes evaluate to a _truthy_ or _falsy_ value when they are encountered in a boolean context (like an `if` expression). All data is considered _truthy_ **except** for `false` and `nil`. In particular, empty strings, the integer `0`, and empty lists are all considered _truthy_ in Elixir. -[getting-started-if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if-unless +[getting-started-if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if [kernel-if]: https://hexdocs.pm/elixir/Kernel.html#if/2 diff --git a/concepts/if/links.json b/concepts/if/links.json index 08d0f5306d..4d214c2d94 100644 --- a/concepts/if/links.json +++ b/concepts/if/links.json @@ -1,6 +1,6 @@ [ { - "url": "https://hexdocs.pm/elixir/case-cond-and-if.html#if-unless", + "url": "https://hexdocs.pm/elixir/case-cond-and-if.html#if", "description": "Getting Started: `if`" }, { diff --git a/exercises/concept/file-sniffer/.docs/hints.md b/exercises/concept/file-sniffer/.docs/hints.md index 897bf918a0..5984aa03a5 100644 --- a/exercises/concept/file-sniffer/.docs/hints.md +++ b/exercises/concept/file-sniffer/.docs/hints.md @@ -21,7 +21,7 @@ - You can use the [`if` macro conditional][if] for binary conditions. [binary-matching]: https://hexdocs.pm/elixir/binaries-strings-and-charlists.html#binaries -[if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if-unless +[if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if [mfc]: https://hexdocs.pm/elixir/modules-and-functions.html#function-definition [mimetype]: https://en.wikipedia.org/wiki/Media_type [pattern-matching]: https://hexdocs.pm/elixir/pattern-matching.html#pattern-matching diff --git a/exercises/concept/name-badge/.docs/hints.md b/exercises/concept/name-badge/.docs/hints.md index f20a4b6722..2c9ba1455c 100644 --- a/exercises/concept/name-badge/.docs/hints.md +++ b/exercises/concept/name-badge/.docs/hints.md @@ -21,5 +21,5 @@ [kernel-if]: https://hexdocs.pm/elixir/Kernel.html#if/2 [getting-started-basic-strings]: https://hexdocs.pm/elixir/basic-types.html#strings -[getting-started-if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if-unless +[getting-started-if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if [elixirschool-if]: https://elixirschool.com/en/lessons/basics/control-structures/#if-and-unless-0 diff --git a/exercises/concept/name-badge/.docs/introduction.md b/exercises/concept/name-badge/.docs/introduction.md index adbabec9af..ffdb380821 100644 --- a/exercises/concept/name-badge/.docs/introduction.md +++ b/exercises/concept/name-badge/.docs/introduction.md @@ -42,5 +42,5 @@ This syntax is helpful for very short expressions, but should be avoided if the In Elixir, all datatypes evaluate to a _truthy_ or _falsy_ value when they are encountered in a boolean context (like an `if` expression). All data is considered _truthy_ **except** for `false` and `nil`. In particular, empty strings, the integer `0`, and empty lists are all considered _truthy_ in Elixir. [nil-dictionary]: https://www.merriam-webster.com/dictionary/nil -[getting-started-if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if-unless +[getting-started-if]: https://hexdocs.pm/elixir/case-cond-and-if.html#if [kernel-if]: https://hexdocs.pm/elixir/Kernel.html#if/2 diff --git a/exercises/practice/crypto-square/.meta/example.ex b/exercises/practice/crypto-square/.meta/example.ex index 01d9388d04..53f2604494 100644 --- a/exercises/practice/crypto-square/.meta/example.ex +++ b/exercises/practice/crypto-square/.meta/example.ex @@ -19,7 +19,7 @@ defmodule CryptoSquare do normalized |> String.graphemes() |> Enum.chunk_every(section_length, section_length, List.duplicate(" ", section_length)) - |> List.zip() + |> Enum.zip() |> Enum.map(&Tuple.to_list/1) |> Enum.join(" ") end diff --git a/exercises/practice/matrix/.meta/example.ex b/exercises/practice/matrix/.meta/example.ex index f307e9050c..76c5de059e 100644 --- a/exercises/practice/matrix/.meta/example.ex +++ b/exercises/practice/matrix/.meta/example.ex @@ -14,7 +14,7 @@ defmodule Matrix do %Matrix{ matrix: rows, - transposed_matrix: rows |> List.zip() |> Enum.map(&Tuple.to_list/1) + transposed_matrix: rows |> Enum.zip() |> Enum.map(&Tuple.to_list/1) } end diff --git a/exercises/practice/saddle-points/.meta/example.ex b/exercises/practice/saddle-points/.meta/example.ex index f6afcb2927..f07e52bcea 100644 --- a/exercises/practice/saddle-points/.meta/example.ex +++ b/exercises/practice/saddle-points/.meta/example.ex @@ -24,7 +24,7 @@ defmodule SaddlePoints do def columns(str) do str |> rows - |> List.zip() + |> Enum.zip() |> Enum.map(&Tuple.to_list/1) end diff --git a/exercises/practice/spiral-matrix/.meta/example.ex b/exercises/practice/spiral-matrix/.meta/example.ex index 95a35b154c..7ece1db17a 100644 --- a/exercises/practice/spiral-matrix/.meta/example.ex +++ b/exercises/practice/spiral-matrix/.meta/example.ex @@ -27,6 +27,6 @@ defmodule Spiral do end defp transpose(matrix) do - matrix |> List.zip() |> Enum.map(&Tuple.to_list/1) + matrix |> Enum.zip() |> Enum.map(&Tuple.to_list/1) end end diff --git a/exercises/practice/transpose/.meta/example.ex b/exercises/practice/transpose/.meta/example.ex index ce42023405..56653c1b58 100644 --- a/exercises/practice/transpose/.meta/example.ex +++ b/exercises/practice/transpose/.meta/example.ex @@ -26,7 +26,7 @@ defmodule Transpose do rows |> Enum.map(fn x -> get_padded_row(x, max_length) end) |> Enum.map(&String.to_charlist/1) - |> List.zip() + |> Enum.zip() |> Enum.map(&Tuple.to_list/1) |> Enum.map(&List.to_string/1) |> Enum.map(fn x -> x |> String.trim_trailing("*") |> String.replace("*", " ") end)