5 kyu

Directions Reduction

29,694 of 91,234g964

Description:

Once upon a time, on a way through the old wild mountainous west,…

… a man was given directions to go from one point to another. The directions were "NORTH", "SOUTH", "WEST", "EAST". Clearly "NORTH" and "SOUTH" are opposite, "WEST" and "EAST" too.

Going to one direction and coming back the opposite direction right away is a needless effort. Since this is the wild west, with dreadful weather and not much water, it's important to save yourself some energy, otherwise you might die of thirst!

How I crossed a mountainous desert the smart way.

The directions given to the man are, for example, the following (depending on the language):

["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"].
or
{ "NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST" };
or
[North, South, South, East, West, North, West]

You can immediately see that going "NORTH" and immediately "SOUTH" is not reasonable, better stay to the same place! So the task is to give to the man a simplified version of the plan. A better plan in this case is simply:

["WEST"]
or
{ "WEST" }
or
[West]

Other examples:

In ["NORTH", "SOUTH", "EAST", "WEST"], the direction "NORTH" + "SOUTH" is going north and coming back right away.

The path becomes ["EAST", "WEST"], now "EAST" and "WEST" annihilate each other, therefore, the final result is [] (nil in Clojure).

In ["NORTH", "EAST", "WEST", "SOUTH", "WEST", "WEST"], "NORTH" and "SOUTH" are not directly opposite but they become directly opposite after the reduction of "EAST" and "WEST" so the whole path is reducible to ["WEST", "WEST"].

Task

Write a function dirReduc which will take an array of strings and returns an array of strings with the needless directions removed (W<->E or S<->N side by side).

  • The Haskell version takes a list of directions with data Direction = North | East | West | South.
  • The Clojure version returns nil when the path is reduced to nothing.
  • The Rust version takes a slice of enum Direction {North, East, West, South}.
  • The OCaml version takes a list of type direction = | North | South | East | West.

See more examples in "Sample Tests:"

Notes

  • Not all paths can be made simpler. The path ["NORTH", "WEST", "SOUTH", "EAST"] is not reducible. "NORTH" and "WEST", "WEST" and "SOUTH", "SOUTH" and "EAST" are not directly opposite of each other and can't become such. Hence the result path is itself : ["NORTH", "WEST", "SOUTH", "EAST"].
  • if you want to translate, please ask before translating.
Fundamentals

More By Author:

Check out these other kata created by g964

Stats:

CreatedMar 22, 2015
PublishedMar 22, 2015
Warriors Trained221069
Total Skips45229
Total Code Submissions555031
Total Times Completed91234
Ruby Completions2718
JavaScript Completions29694
Haskell Completions1121
Python Completions33070
Java Completions7943
CoffeeScript Completions71
C# Completions5344
Clojure Completions292
C++ Completions3792
PHP Completions1646
Crystal Completions30
F# Completions121
Rust Completions1230
C Completions879
TypeScript Completions1702
Swift Completions594
Shell Completions107
R Completions135
Objective-C Completions21
OCaml Completions58
Elixir Completions198
Lua Completions167
Julia Completions70
Scala Completions372
PowerShell Completions58
Go Completions1298
Nim Completions17
Racket Completions34
Reason Completions5
Kotlin Completions569
Prolog Completions29
Haxe Completions11
Pascal Completions13
Perl Completions22
Elm Completions8
COBOL Completions11
D Completions8
Erlang Completions14
Total Stars5250
% of votes with a positive feedback rating89% of 8368
Total "Very Satisfied" Votes6802
Total "Somewhat Satisfied" Votes1296
Total "Not Satisfied" Votes270
Ad
Contributors
  • g964 Avatar
  • jhoffner Avatar
  • dnolan Avatar
  • mortonfox Avatar
  • ZozoFouchtra Avatar
  • bkaes Avatar
  • donaldsebleung Avatar
  • ParanoidUser Avatar
  • imjasonmiller Avatar
  • kazk Avatar
  • White-Oak Avatar
  • Voile Avatar
  • YiFenZ Avatar
  • monadius Avatar
  • hobovsky Avatar
  • trashy_incel Avatar
  • akar-0 Avatar
  • KayleighWasTaken Avatar
  • saudiGuy Avatar
Ad