Paste Search Dynamic
Recent pastes
console.reset
  1. console.reset = _ => process.stdout.write('33c');
  2. console.reset()
  3.  
  4. const { readFileSync } = require('fs');
  5.  
  6. //Fonctions utilitaires
  7. const maxXY = ([a,b],[x,y]) => [Math.max(a,x),Math.max(b,y)] //retour le max sur 2 axes entre deux coordonnées
  8. const range = d => [...Array(d)] //Créé un array de taille d
  9. const maxOnAxis = axe => (ref,valeur) => Math.max(ref,valeur[axe])
  10. const to1d = k => ([x,y]) => x+k*y
  11. const to2d = k => x => [x%k,x/k|0]
  12. const unique = liste => [...new Set(liste)]
  13.  
  14. //Générateur de fonctions de plie (x/y => axe, n => coordonnée de plie, x => coordonnée 1d à plier)
  15. const foldGen = {
  16.     x: n => x => k*(x/k|0) + Math.min(x%k,n-(x%k-n)),  
  17.     y: n => x => x%k + k*Math.min(x/k|0,n-((x/k|0)-n))
  18. }
  19.  
  20.  //Entrée
  21. let input = readFileSync('input.txt').toString()
  22.  
  23. // liste de coordonnées ([1,2] , [3,4] ...)
  24. let points = input.match(/d+,d+/ig).map(e=>e.split`,`.map(Number))
  25.  
  26. //liste de fonction (foldY(7), foldX(3) ....)
  27. let folds = input.match(/[xy]=d+/ig).map(e=>e.split`=`).map(([f,v])=>foldGen[f](+v))
  28.  
  29. //Max des X
  30. let k=points.reduce(maxOnAxis(0),0)+1;
  31.  
  32. // liste  des coords1d : si k=1000 [1,4] => 4001
  33. let nodes1d = points.map(to1d(k));
  34.  
  35. //liste après fold
  36. let afterFold = folds.reduce((c,e)=>c.map(e),nodes1d);
  37. // suppression des duplications grâce au Set => transformation inverse 4001 => [1,4]
  38. let node2dAfterFold = unique(afterFold).map(to2d(k))
  39.  
  40. //max des Axes X/Y [maxX,maxY]
  41. let max = node2dAfterFold.reduce(maxXY,[0,0])
  42.  
  43. //Carte 2d des points
  44. let Arr = range(max[1]+1).map(_=>range(max[0]+1).map(_=>' '))
  45.  
  46. //pour chaque coordonnées de la liste on remplace le caractère dans la carte 2d
  47. node2dAfterFold.forEach(([x,y])=>Arr[y][x]='#')
  48.  
  49. //On Affiche le résultat
  50. console.log(Arr.map(e=>e.join``).join`n`)
Parsed in 0.008 seconds