DEV Community

Cover image for Exercism Ruby - Acronym
Juan Vasquez
Juan Vasquez

Posted on • Edited on

Exercism Ruby - Acronym

Alt Text

Convert a phrase to its acronym.

Techies love their TLA (Three Letter Acronyms)!

Help generate some jargon by writing a program that converts a long name like Portable Network Graphics to its acronym (PNG).

Test suite

require 'minitest/autorun'
require_relative 'acronym'

# Common test data version: 1.7.0 cacf1f1
class AcronymTest < Minitest::Test
  def test_basic
    assert_equal "PNG", Acronym.abbreviate('Portable Network Graphics')
  end

  def test_lowercase_words
    assert_equal "ROR", Acronym.abbreviate('Ruby on Rails')
  end

  def test_punctuation
    assert_equal "FIFO", Acronym.abbreviate('First In, First Out')
  end

  def test_all_caps_word
    assert_equal "GIMP", Acronym.abbreviate('GNU Image Manipulation Program')
  end

  def test_punctuation_without_whitespace
    assert_equal "CMOS", Acronym.abbreviate('Complementary metal-oxide semiconductor')
  end

  def test_very_long_abbreviation
    assert_equal "ROTFLSHTMDCOALM", Acronym.abbreviate('Rolling On The Floor Laughing So Hard That My Dogs Came Over And Licked Me')
  end

  def test_consecutive_delimiters
    assert_equal "SIMUFTA", Acronym.abbreviate('Something - I made up from thin air')
  end
end
Enter fullscreen mode Exit fullscreen mode

My answer was:

class Acronym
  def self.abbreviate(phrase)
    phrase.split("-").join(" ").split.map(&:chr).join.upcase
  end
end
Enter fullscreen mode Exit fullscreen mode

I saw other important answers like those:

  • I don't like the scan content because it is hard to understand but it's a short answer.
  • I didn't know the tr method, it replace the first param with the secound param 🤘
class Acronym
  def self.abbreviate(string)
    string.scan(/(\b\w)/).join.upcase
  end
end

class Acronym
  def self.abbreviate(name)
    name.tr('-', ' ')
        .split
        .map { |x| x.slice(0) }.join.upcase
  end
end
Enter fullscreen mode Exit fullscreen mode

This was fun!

Top comments (0)