DEV Community

dev.to staff
dev.to staff

Posted on

Daily Challenge #245 - Sort Santa's Reindeer

Now, Dasher! Now, Dancer! Now, Prancer, and Vixen! On, Comet! On, Cupid! On, Donder and Blitzen! That's the order Santa wanted his reindeer...right? What do you mean he wants them in order by their last names!? Looks like we need your help!

Write a function that accepts a sequence of Reindeer names, and returns a sequence with the Reindeer names sorted by their last names.

Example

for this input:

 [
  "Dasher Tonoyan", 
  "Dancer Moore", 
  "Prancer Chua", 
  "Vixen Hall", 
  "Comet Karavani",        
  "Cupid Foroutan", 
  "Donder Jonker", 
  "Blitzen Claus"
] 

you should return this output:

 [
  "Prancer Chua",
  "Blitzen Claus",
  "Cupid Foroutan", 
  "Vixen Hall", 
  "Donder Jonker", 
  "Comet Karavani",
  "Dancer Moore", 
  "Dasher Tonoyan",
] 

Tests

sort_reindeer(['Kenjiro Mori', 'Susumu Tokugawa', 'Juzo Okita', 'Akira Sanada']),['Kenjiro Mori', 'Juzo Okita', 'Akira Sanada', 'Susumu Tokugawa'])

sort_reindeer(['Yasuo Kodai', 'Kenjiro Sado', 'Daisuke Aihara', 'Susumu Shima', 'Akira Sanada', 'Yoshikazu Okita', 'Shiro Yabu', 'Sukeharu Nanbu', 'Sakezo Yamamoto', 'Hikozaemon Ohta', 'Juzo Mori', 'Saburo Tokugawa']),['Daisuke Aihara', 'Yasuo Kodai', 'Juzo Mori', 'Sukeharu Nanbu', 'Hikozaemon Ohta', 'Yoshikazu Okita', 'Kenjiro Sado', 'Akira Sanada', 'Susumu Shima', 'Saburo Tokugawa', 'Shiro Yabu', 'Sakezo Yamamoto'])


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

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

Top comments (9)

Collapse
 
aminnairi profile image
Amin

Elm

reverseWords : String -> String
reverseWords text =
    text
        |> String.words
        |> List.reverse
        |> String.join " "


sortReindeers : List String -> List String
sortReindeers reindeers =
    List.sortBy reverseWords reindeers
Collapse
 
kometen profile image
Claus Guttesen

Can use sort on the command line with the parameter k (key), in this example with the value 2. Echo the text and pipe it to sort.

$ echo "Dasher Tonoyan
Dancer Moore
Prancer Chua
Vixen Hall
Comet Karavani
Cupid Foroutan
Donder Jonker
Blitzen Claus" | sort -k 2

Prancer Chua
Blitzen Claus
Cupid Foroutan
Vixen Hall
Donder Jonker
Comet Karavani
Dancer Moore
Dasher Tonoyan

Collapse
 
agtoever profile image
agtoever

Python 3 solution

    # solution
    sort_reindeer = lambda r: sorted(r, key=lambda n: n.split(" ")[-1])

    # test cases
    cases = [
     ["Dasher Tonoyan", "Dancer Moore", "Prancer Chua", "Vixen Hall", "Comet Karavani", "Cupid Foroutan", "Donder Jonker", "Blitzen Claus"],
     ['Kenjiro Mori', 'Susumu Tokugawa', 'Juzo Okita', 'Akira Sanada'],
     ['Kenjiro Mori', 'Juzo Okita', 'Akira Sanada', 'Susumu Tokugawa'],
     ['Yasuo Kodai', 'Kenjiro Sado', 'Daisuke Aihara', 'Susumu Shima', 'Akira Sanada', 'Yoshikazu Okita', 'Shiro Yabu', 'Sukeharu Nanbu', 'Sakezo Yamamoto', 'Hikozaemon Ohta', 'Juzo Mori', 'Saburo Tokugawa'],
     ['Daisuke Aihara', 'Yasuo Kodai', 'Juzo Mori', 'Sukeharu Nanbu', 'Hikozaemon Ohta', 'Yoshikazu Okita', 'Kenjiro Sado', 'Akira Sanada', 'Susumu Shima', 'Saburo Tokugawa', 'Shiro Yabu', 'Sakezo Yamamoto']
    ]

    for i, case in enumerate(cases):
     print(f'Test case {1+i}; sorted reindeer:\n{sort_reindeer(case)}\n')

Try it online!

Collapse
 
_bkeren profile image
''

ES6


const sort_reindeer = (list)  => [...list].sort((a,b) => {
 const [, surname1] = a.split(" ")
 const [, surname2] = b.split(" ")

 if(surname1 > surname2) return 1;
 if(surname2 > surname1) return -1;
 return 0;

})


Collapse
 
miketalbot profile image
Mike Talbot ⭐ • Edited

Javascript

var sorted = [...cases].sort((a,b)=>a.split(' ')[1].localeCompare(b.split(' ')[1]))
 
jsn1nj4 profile image
Elliot Derhay • Edited

🤯

I think last time I saw @ben post a response, it was in Ruby and reactions were pretty much the same.

I think it was combining arrays into 1?

arr1 + arr2
Collapse
 
jpantunes profile image
JP Antunes

JS

const sort_reindeer = lst => lst.sort((a,b) => a.substring(a.indexOf(' ')).localeCompare(b.substring(b.indexOf(' '))))
 
jsn1nj4 profile image
Elliot Derhay

😐

Collapse
 
jsn1nj4 profile image
Elliot Derhay

This looks like cheating