I am trying to learn some elixir with this years advent of code (no spoilers please).
Ex: I have in a file
four9one
bbzhsmnmtf8kftwosevenxfkssgrcjthree
6pkkcddsixsixjgnjvdtjtwo
4four45seven7nine7two
rcssix4
When I run my function I see the expected numbers individually but not as a List.
iex(69)> AdventOfCode2023.day_one
99
88
66
47
44
cXB/, # What is this? In my head I think it should be [99, 88, 66, 47, 44]
I am just confused at what is happening in my function. I don’t just want a solution to the problem itself.
def day_one do
numbers =
File.read!(Path.expand("./lib/data/day1.data"))
|> String.split("\r\n", trim: true)
|> Enum.take(5)
|> Enum.map(fn raw ->
word = String.replace(raw, ~r/\D/, "")
if String.length(word) === 1 do
IO.puts(String.to_integer(word <> word))
String.to_integer(word <> word)
else
IO.puts(String.to_integer(String.first(word) <> String.last(word)))
String.to_integer(String.first(word) <> String.last(word))
end
end)
IO.puts(numbers)
end
Marzdor:
# What is this? In my head I think it should be [99, 88, 66, 47, 44]
Charlist . It is just different representation, just like 0xFF == 255
.
1 Like
I guess my next question would be why is it a charlist and not [99, 88, 66, 47, 44]
You have it described in the link I have posted. It is exactly the same thing, just different representation.
2 Likes
Every newcomer is confused by this notation…
iex> 'hello world' |> IO.inspect(charlists: :as_list)
[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
~c"hello world"
It’s coming from Erlang… where charlist is used as “string”
Every time there is a list that could potentially be something readable, it will print it like this
4 Likes
I see, I miss understood the first time I read it.
FWIW @Marzdor you can override this behaviour in IEx by adding this to your $HOME/.iex.exs
file:
IEx.configure(inspect: [charlists: :as_lists])
You can also pass charlists: :as_lists
to any IO.inspect/2
call, or set this project-wide by adding this code somewhere:
inspect_opts_default_inspect_fun = Inspect.Opts.default_inspect_fun()
Inspect.Opts.default_inspect_fun(fn value, opts ->
opts = Map.put(opts, :charlists, :as_lists)
inspect_opts_default_inspect_fun.(value, opts)
end)
2 Likes