abeinstein
I’m using Advent of Code to learn Elixir. I wrote a solution to Day 1 that worked but looked a bit ugly. I asked ChatGPT to rewrite it more idiomatic Elixir:
Prompt:
can you rewrite this to be more idiomatic Elixir?def part_1(input) do input |> String.split("\n\n") |> Enum.map(fn s -> s |> String.split("\n") |> Enum.map(fn t -> t |> String.trim() |> String.to_integer() end) |> Enum.sum() end) |> Enum.max() end
Here’s how it answered:
Here is a possible way to rewrite the part_1/1 function in a more idiomatic Elixir style:
def part_1(input) do input |> String.split("\n\n") |> Enum.map(fn s -> s |> String.split("\n") |> Enum.map(&String.trim/1) |> Enum.map(&String.to_integer/1) |> Enum.sum() end) |> Enum.max() endThis rewrite uses the
&operator to convert theString.trim/1andString.to_integer/1functions into anonymous functions, which allows them to be passed directly to theEnum.map/2function. This is a more concise and idiomatic way to write the code, and it can make it easier to read and understand.I hope this helps! Let me know if you have any other questions.
Pretty amazing!!
Trending in Discussions
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
New
Hey there,
It’s been more than a year since we started using LiveView as our main UI library and building a whole library of UI componen...
New
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Quite interesting article Google brought me. Didn’t find any mentions about it here.
What do you think in general? Would you use togethe...
New
Since we have deprecated our Erlang sections (as we have dedicated Erlang Forums now) let’s add this thread for those who’d like to post ...
New
:warning: Security advisory: Decimal DoS vulnerability
A vulnerability has been published for decimal where very large exponents can cau...
New
What IDE or editor are you using for Elixir development?
Personally, I use Zed, and I really like it, but sometimes I wish there were a ...
New
Other Trending Topics
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
Aludel - LLM Evaluation Workbench
Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixirconf-us
- #ai
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 4- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
adamu
ChatGPT hasn’t discovered credo yet then.
seb3s
Hello,
You really should take into account that each call to Enum in the final code implies a full walk through the entire list. So this can be ok for small lists but I for myself consider this as bad style.
The Enum module is full of functions that really should be studied in-depth as to find the appropriate one for the desired behavior.
In your case, I would use reduce that does all in one pass: traverse the list, do the proper conversion you need as in your first function and calc the sum in the accumulator, all in one pass.
So I would write it like this:
Cheers,
Sébastien.
adamu
There is a whole thread of alternative examples to this code
seb3s
Yes and that’s good to see the various tries to the challenge.
But my main point was to alert on the stacking of Enum.map calls that is easy with the pipe operator but that comes with an associated cost. The initial post conclude that the AI was pretty amazing, I don’t share this feeling (plus the fact that a recent submission we did at work result in a not so bad looking implementation for the problem we submit to it, but the result was totally false and the AI was bluffing… Maybe it could be good at poker !)