loading...
Cover image for #2 Live Kata Report

#2 Live Kata Report

pixari profile image Raffaele Pizzari Updated on ・2 min read

2 Live Kata Report

With the JS Learning community I am running we use to solve "JS Katas" together during "live coding" sessions.
I'll use this blog to share the "Live Kata" reports.

We solved together a "kata" found on "CodeWars.com".

Key takeaway points:

• Learn how String.prototype.slice() works
• Learn how Array.prototype.join() works
• Learn how Array.prototype.reduce() works
• Learn how "Destructuring assignment" works

Docs:

Array.prototype.reduce()
String.prototype.slice()
Array.prototype.join()
Destructuring assignment
• A website full of katas

The Kata is the following:

Requirements:

Move the first letter of each word to the end of it, then add "ay" to the end of the word.

Example

'Pig latin is cool' => igPay atinlay siay oolcay
'Hello world' => elloHay orldway

Our solutions

Solution 1

function doKata(str) {
  const arr = str.split(' ');
  const sentence = arr.map((e) => {
    const rest = e.slice(1);
    const first = e[0]
    const suffix = 'ay';
    const word = `${rest}${first}${suffix}`;
    return word;
  }).join(' ');

  return sentence;
}

Solution 2

const reducer = (acc, curr) => {
  const [first, ...rest] = curr.split('');
  const resWord = [...rest,first, 'ay'].join('');
  return acc = acc ? `${acc} ${resWord}` : resWord;
}
const doKata => str => str.split(' ').reduce(reducer, '');

Extra exercise

Try to solve the kata adding the following rule: "leave punctuation marks untouched".

'Pig latin is cool' => igPay atinlay siay oolcay
'Hello world' => elloHay orldway
'Hello, world? How are you, world??!' => elloHay, orldway? owHay eraay ouyay, orldway??!

You can post the solution here as a comment. :)

About this post

I'm am running a free JavaScript Learning Group on [pixari.slack.com] and I use this blog as official blog of the community.
I pick some of the questions from the #questions-answer channel and answer via blog post. This way my answers will stay indefinitely visible for everyone."

If you want to join the community feel free to click here or contact me:

Posted on by:

pixari profile

Raffaele Pizzari

@pixari

Front-End Developer based in Munich, Germany.

Discussion

markdown guide
 

Hello Raffaele,

Here is my solution :) BTW, I really like, how you solved with array destruction. Well done :)

const strManipulation = (str) => {
  let strArr = str.split(' ');
  const appendStr = 'ay';
  let finalText = "";
  let regex = new RegExp('[^a-zA-Z\d\s: ]', 'g');

  strArr.forEach((item) => {
    let nonAlphabetStartIndex = item.search(regex);
    if(nonAlphabetStartIndex){
        finalText += `${item.slice(1, nonAlphabetStartIndex)}${item.charAt(0)}${appendStr}${item.slice(nonAlphabetStartIndex)} `;
    }
    else{
      finalText += `${item.slice(1)}${item.charAt(0)}${appendStr} `;
    }
  });

  return finalText.trimEnd();

};