DEV Community

dev.to staff
dev.to staff

Posted on

Daily Challenge #37 - Name Swap

In today's challenge, we ask that you to write a function that returns a string in which an individual's first name is swapped with their last name.

Example: nameShuffler('Emma McClane'); => "McClane Emma"

Good luck!


This challenge comes from debri on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge for a future post? Email yo+challenge@dev.to with your suggestions!

Latest comments (25)

Collapse
 
mrdulin profile image
official_dulin

JavaScript:

function nameShuffler(str){
  return str.split(' ').reverse().join(" ");
}
Collapse
 
peter279k profile image
peter279k

Here is the simple solution with Python:

def name_shuffler(string):
    string_array = string.split(' ')

    return string_array[1] + ' ' + string_array[0]
Collapse
 
kvharish profile image
K.V.Harish

My solution in js


const nameShuffler = (name) => `${name}`.split(' ').reverse().join(' ');

Collapse
 
craigmc08 profile image
Craig McIlwrath
nameShuffler = unwords . reverse . words

Seems pretty simple (Haskell)

Collapse
 
mangelsnc profile image
Miguel Ángel Sánchez Chordi
 <?php

 echo implode(' ', array_reverse(explode(' ', $argv[1])));
Collapse
 
hectorpascual profile image

Python :

def name_shuffler(name): return ' '.join([name.split()[1], name.split()[0]])
Collapse
 
qm3ster profile image
Mihail Malo

Buffer goes buf-buf

const rename = name => {
    const inBuf = Buffer.from(name, 'utf8')
    const len = inBuf.length
    const outBuf = Buffer.alloc(len, 0x20)
    let prev = 0
  for (let i = 0; i < len; i++) {
    if (inBuf[i] !== 0x20) continue
    inBuf.copy(outBuf, len - i, prev, i)
    prev = i + 1
  }
  inBuf.copy(outBuf, 0, prev)
    return outBuf.toString('utf8')
}
Collapse
 
badrecordlength profile image
Henry 👨‍💻 • Edited

Nice and simple python implementation 😁

def nameShuffler(name):
    name = name.split()
    name.reverse()
    print(str(name))
Collapse
 
diek profile image
diek

There is my python solution

Collapse
 
jay profile image
Jay

Rust Playground

fn name_shuffler(name: &str) -> String {
    name.split_whitespace().rev().collect::<Vec<&str>>().join(" ")
}
Collapse
 
jeremy profile image
Jeremy Schuurmans

Ruby!

def name_shuffler(str)
  str.split(" ").reverse.join(" ")
end
Collapse
 
asg5704 profile image
Alexander Garcia

Just because I'm lazy

const nameShuffler = (name) => {

  const [first, last] = [...name.split(' ')]

  return `${last} ${first}`

}
Collapse
 
alvaromontoro profile image
Alvaro Montoro • Edited

There are a few answers in JavaScript already, so let's try some things in CSS 🤩

We could separate the words into <span> and, using Flexbox, change the order in which they are displayed within the parent container using the order property. It can be easily expanded to more than 2 words, but it requires that wrapping to work.

div {
  display: inline-flex;
}

div > span {
  margin-right: 1ch;
}

div span:nth-child(1) { order: 2; }
div span:nth-child(2) { order: 1; }

Without having to add any additional tags, we can use data-attributes to have the name and last name, and use the ::before and ::after to display them in inverted order. It is really simple to implement but not too extendable:

<div data-first="Name" data-last="Surname"></div>

div::before {
  content: attr(data-last) ' ';
}

div::after {
  content: attr(data-first);
}

Also without having any additional tags, we can play with multiple text-shadows and positioning to replicate the words in inverted order. For this solution, you need to know the size of each word, and it doesn't work for more than two words... still it is a cool approach too.

<div>Name Surname</div>

div {
  box-sizing: border-box;
  display: inline-block;
  font-family: monospace;
  font-size: 1rem;
  height: 1rem;
  overflow: hidden;
  padding-top: 1rem;
  text-shadow: -5ch -1rem, 8ch -1rem;
}

You can see a demo of all of them on CodePen:

Collapse
 
coreyja profile image
Corey Alexander

Oh damn! That box Shadow solution is pretty damn impressive!

Collapse
 
moopet profile image
Ben Sinclair

I think I may have gone overboard with the ol' backslashes for escaping, but...

sed 's/\s*\([^ ]\+\)\s\+\([^ ]\+\)\s*/\2 \1/' <<<"  Emma McClean"
Enter fullscreen mode Exit fullscreen mode
Collapse
 
hanachin profile image
Seiei Miyagi

ruby 2.7

def nameShuffler(s)
  s |> split ' ', 2 |> then { "#@2 #@1" }
end
p nameShuffler('Emma McClane')