PeterCcT

PeterCcT

Hi guys!

I’m super new to Elixir, and my English can be a little bad, so I’m sorry about that.

Well, I’m here to get some advice on my code, it works well, but I don’t know if there’s anything I can do to make it more like the “Elixir way of things”. So if anyone can rate it and give me some tips :slight_smile:

Ps: The challenge is only for numbers up to 3000

Here’s the code

defmodule Converter do

  @one "I"
  @five "V"
  @ten "X"
  @fifty "L"
  @onehundread "C"
  @fivehundread "D"
  @onethousand "M"

  def to_roman_number(number,roman_number \\ "",n \\ 3)

  def to_roman_number(number,roman_number,_n) when number == 4,do: roman_number<>@one<>@five

  def to_roman_number(number,roman_number,_n) when div(number,10) == 4 do
    roman_conversion  = roman_number<>@ten<>@fifty
    rest = rem(number,10)
    to_roman_number(rest,roman_conversion,0)
  end
  def to_roman_number(number,roman_number,_n) when div(number,100) == 4 do
    roman_conversion  = roman_number<>@onehundread<>@fivehundread
    rest = rem(number,100)
    to_roman_number(rest,roman_conversion,1)
  end

  def to_roman_number(number,roman_number,_n) when number == 5, do: roman_number<>@five

  def to_roman_number(number,roman_number,_n) when div(number,10) == 5 do
    roman_conversion  = roman_number<>@fifty
    rest = rem(number,10)
    to_roman_number(rest,roman_conversion,0)
  end
  def to_roman_number(number,roman_number,_n) when div(number,100) == 5 do
    roman_conversion  = roman_number<>@fivehundread
    rest = rem(number,100)
    to_roman_number(rest,roman_conversion,1)
  end

  def to_roman_number(number,roman_number,_n) when number == 9,do: roman_number<>@one<>@ten

  def to_roman_number(number,roman_number,_n) when div(number,10) == 9 do
    roman_conversion  = roman_number<>@ten<>@onehundread
    rest = rem(number,10)
    to_roman_number(rest,roman_conversion,0)
  end
  def to_roman_number(number,roman_number,_n) when div(number,100) == 9 do
    roman_conversion  = roman_number<>@onehundread<>@onethousand
    rest = rem(number,100)
    to_roman_number(rest,roman_conversion,1)
  end


  def to_roman_number(number,roman_number,n) do
    base = trunc(:math.pow(10,n))
    quotient = div(number,base)
    rest = rem(number,base)
    cond do
      n == 3 ->
        roman_conversion = roman_number<>String.duplicate(@onethousand,quotient)
        to_roman_number(rest,roman_conversion,n-1)
      n == 2 ->
        roman_conversion = roman_number<>String.duplicate(@onehundread,quotient)
        to_roman_number(rest,roman_conversion,n-1)
      n == 1 ->
        roman_conversion = roman_number<>String.duplicate(@ten,quotient)
        to_roman_number(rest,roman_conversion,n-1)
      n == 0 ->
        roman_conversion = roman_number<>String.duplicate(@one,quotient)
        IO.puts "The converted number is "<>roman_conversion
    end
  end
end


Showing Posts 1 to 4

hauleth

hauleth

It is repeating topic there, as I believe this is task in Exercism or other project like that. So check out if any other topic on that task helps you.

yreuvekamp

yreuvekamp

Since this is Exercism, I suggest requesting a mentor there to look at your code for some tips. That’s why they’re there :wink: Besides that, take a look at the most upvoted solutions for some inspiration. That really helped me think differently.

Edit: having said that, your code could definitely be more concise. Make use of the fact that you know all the possible mappings.

PeterCcT

PeterCcT OP

Sorry for the delay to answer hahahaha

I will check the other answers, thanks brother!

PeterCcT

PeterCcT OP

Sorry for the delay in responding too my brother

Thank you very much for the tip, the solution is a bit verbose, I’ll try to improve it!

— All posts loaded —

Where Next? Top

Trending in Challenges Top

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New
webofbits
Aludel - LLM Evaluation Workbench Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews