## K Palindromes puzzle

Here we have the K Palindromes puzzle from Javalobby:

You probably already know what a palindrome is: a string to results in the same word, whether read left to right, or right to left. A K Palindrome is when a string can be tranformed into a palindrome by changing K characters at most. Regular palindromes have K=0.

Your challenge today is to write a method which takes a string and a value for k and returns true if it the string qualifies as a K palindrome.

Below is the code in Ruby. Our input string is `omississimo` and it’s a `0 palindrome String`.

```def isKPalindrome(s, k)
chars = s.chars.to_a
limit = chars.size - 1
count = chars[0...chars.size / 2].each_index.count {|i| !chars[i].eql?(chars[limit - i])}
k == count ? true : false
end

puts(isKPalindrome("omississimo", 0)) #true
```

The output is `true`. Do you have another solution? Drop your comments here!

## Minimum difference puzzle in Ruby

Folks, here we are for another puzzle from Javalobby:

Given two arrays, sorted and exactly the same length, write a function that finds a pair of numbers – one from each of the arrays – such that the difference between both is as small as possible.

Suppose our input arrays are `[1,2,3,4,5]` and `[6,7,8,9,10]`. Below is my solution in Ruby, it’s a one liner code :-):

`[1,2,3,4,5].product([6,7,8,9,10]).map {|x, y| [x, y, (x-y).abs]}.sort { |a, b| a.last<=> b.last }.first.take(2)`

The output is `[5, 6]`.

Have another solution? Leave your comments here!

## Balancing arrays puzzle in Ruby

Here we are for another puzzle from Javalobby:

Given an array of numbers, return the index at which the array can be balanced by all numbers on the left side add up the the sum of all numbers of the right side.

For example, an array with [1,5,6,7,9,10] can be balanced by splitting the array at position 4

Here is the solution in Ruby:

`v=[1,5,6,7,9,10];sum = v.reduce(:+);count=0;index = (0...v.size).detect { |i| count += v[i]; count * 2 == sum};index == nil ? nil : index + 1`

The input array `[1,5,6,7,9,10]` will split the array at position 4, as stated above.

Any other solutions? Drop comments here 🙂

## Finding the second highest frequency

It’s been a long time since I posted for the last time, but I promise I’ll try to keep this blog up-to-date 🙂

One of the purposes of this blog is to explore new technologies and recently I’ve been studying Ruby solving some puzzles posted by on JavaLobby.

The problem is about finding the second highest frequency of a character in a String. Below is the Ruby code, using the powerful concept of Ruby closures.

`v="aabbbc".chars;h=Hash[v.map{|k| [k, v.count(k)] }];max=h.values.max;found=h.select { |k, v| v < max};found.keys.first if found`

For the input String `"aabbbc"`, the result is `"a"`. I could done it in a more OOP style, but I chose a more concise solution 🙂

If you have another version in Ruby, feel free to post a comment!