Guest User

Untitled

a guest
Nov 21st, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. // You will be given a 2-dimensional grid of letters. Write a method to find the length of the longest path of consecutive
  2. // letters, starting at 'A'. Paths can step from one letter in the grid to any adjacent letter (horizontally, vertically,
  3. // or diagonally).
  4.  
  5. // For example, in the following grid, there are several paths from 'A' to 'D', but none from 'A' to 'E':
  6.  
  7. function abcLongestPath(matrix) {
  8. let maxPath = 0;
  9. const initPos = [];
  10.  
  11. const isPossible = (a, b) => (
  12. a >= 0 && a < matrix.length &&
  13. b >= 0 && b < matrix[a].length
  14. );
  15.  
  16. const dfs = (x, y) => {
  17. const steps = [[0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [-1, -1], [-1, 0], [-1, 1]];
  18. let path = 0;
  19.  
  20. for (let s = 0; s < steps.length; s++) {
  21. const [a, b] = steps[s];
  22. const sibling = [x + a, y + b];
  23.  
  24. if (isPossible(...sibling)) {
  25. if (matrix[sibling[0]][sibling[1]].charCodeAt(0) - matrix[x][y].charCodeAt(0) === 1) {
  26. path = 1 + dfs(...sibling);
  27. }
  28. }
  29. }
  30.  
  31. return path;
  32. }
  33.  
  34. for (let i = 0; i < matrix.length; i++) {
  35. for (let j = 0; j < matrix[i].length; j++) {
  36. if (matrix[i][j] === 'A') initPos.push([i, j]);
  37. }
  38. }
  39.  
  40. for (let i = 0; i < initPos.length; i++) {
  41. const currPath = dfs(...initPos[i]);
  42.  
  43. if (currPath > maxPath) {
  44. maxPath = currPath;
  45. }
  46. }
  47.  
  48. return maxPath + 1;
  49. }
  50.  
  51. const m = [ "ABE", "CFG", "BDH", "ABC" ];
  52. // const m = ['A'];
  53. // const m = ['BCDEFGHIJKLMNOPQRSTUVWXYZ'];
  54. // const m = [ "C", "D", "B", "A" ];
  55. // const m = ["KCBVNRXSPVEGUEUFCODMOAXZYWEEWNYAAXRBKGACSLKYRVRKIO", "DIMCZDMFLAKUUEPMPGRKXSUUDFYETKYQGQHNFFEXFPXNYEFYEX", "DMFRPZCBOWGGHYAPRMXKZPYCSLMWVGMINAVRYUHJKBBRONQEXX", "ORGCBHXWMTIKYNLFHYBVHLZFYRPOLLAMBOPMNODWZUBLSQSDZQ", "QQXUAIPSCEXZTTINEOFTJDAOBVLXZJLYOQREADUWWSRSSJXDBV", "PEDHBZOVMFQQDUCOWVXZELSEBAMBRIKBTJSVMLCAABHAQGBWRP", "FUSMGCSCDLYQNIXTSTPJGZKDIAZGHXIOVGAZHYTMIWAIKPMHTJ", "QMUEDLXSREWNSMEWWRAUBFANSTOOJGFECBIROYCQTVEYGWPMTU", "FFATSKGRQJRIQXGAPLTSXELIHXOPUXIDWZHWNYUMXQEOJIAJDH", "LPUTCFHYQIWIYCVOEYHGQGAYRBTRZINKBOJULGYCULRMEOAOFP", "YOBMTVIKVJOSGRLKTBHEJPKVYNLJQEWNWARPRMZLDPTAVFIDTE", "OOBFZFOXIOZFWNIMLKOTFHGKQAXFCRZHPMPKGZIDFNBGMEAXIJ", "VQQFYCNJDQGJPYBVGESDIAJOBOLFPAOVXKPOVODGPFIYGEWITS", "AGVBSRLBUYOULWGFOFFYAAONJTLUWRGTYWDIXDXTMDTUYESDPK", "AAJOYGCBYTMXQSYSPTBWCSVUMNPRGPOEAVVBGMNHBXCVIQQINJ", "SPEDOAHYIDYUJXGLWGVEBGQSNKCURWYDPNXBZCDKVNRVEMRRXC", "DVESXKXPJBPSJFSZTGTWGAGCXINUXTICUCWLIBCVYDYUPBUKTS", "LPOWAPFNDRJLBUZTHYVFHVUIPOMMPUZFYTVUVDQREFKVWBPQFS", "QEASCLDOHJFTWMUODRKVCOTMUJUNNUYXZEPRHYOPUIKNGXYGBF", "XQUPBSNYOXBPTLOYUJIHFUICVQNAWFMZAQZLTXKBPIAKXGBHXX"]
  56. // const m = ["EDCCBA", "EDCCBA"];
  57. // const m = ["AMNOPA", "ALEFQR", "KDABGS", "AJCHUT", "AAIWVA", "AZYXAA"];
  58.  
  59. log(abcLongestPath(m));
Add Comment
Please, Sign In to add comment