Skip to content

Latest commit

 

History

History
43 lines (37 loc) · 1.21 KB

wordchain.md

File metadata and controls

43 lines (37 loc) · 1.21 KB

Wordchain

function wordchain(words) {
  const result = {}
  for (let word of words) {
    const [key, value] = word.split('>')
    result[key] = value
  }
  const allCharacters = [...new Set(Object.keys(result).concat(Object.values(result)))]

  const rightValues = new Set(Object.values(result))
  const firstCharacter = allCharacters.find((character) => !rightValues.has(character))

  let word = firstCharacter
  while (result[word[word.length - 1]]) {
    word += result[word[word.length - 1]]
  }
  return word
}

function wordchain2(pairs) {
  const reverseWordMap = {}
  const wordMap = {}
  for (let pair of pairs) {
    const [left, right] = pair.split('>')
    wordMap[left] = right
    reverseWordMap[right] = left
  }
  const allCharacters = Array.from(new Set([...Object.keys(reverseWordMap), ...Object.values(reverseWordMap)]))
  const firstCharacter = allCharacters.find((character) => !reverseWordMap[character])

  let word = firstCharacter
  while (wordMap[word[word.length - 1]]) {
    word += wordMap[word[word.length - 1]]
  }
  return word
}

console.log(wordchain2(['A>N', 'O>I', 'N>O', 'H>A'])) // => HANOI
console.log(wordchain2(['P>O', 'R>E', 'S>I', 'G>A', 'N>G', 'O>R', 'A>P', 'I>N']))
// => SINGAPORE