2017-03-03 10 views
5

आप जवाब का एक बहुत "वर्ग दो आयामी सरणी बारी बारी से" के लिए मिल सकता है, लेकिन "गैर वर्ग दो आयामी सरणी बारी बारी से", और कुछ जवाब इस तरह काम करते हैं, भले ही:सभी संभव घूर्णन के लिए गैर वर्ग दो आयामी सरणी को दो बार घुमाने के लिए कैसे?

rotate(tab) {                
     return tab[0].map(function(col, i) {         
      return tab.map(function(lig) {         
       return lig[i];            
      })                
     });                 
    } 

वे केवल काम पहली बार आप घूमते हैं। यदि आप दोबारा घूमते हैं, तो आप पहले सरणी पर वापस जाते हैं, जो मैं नहीं चाहता हूं, मैं चाहता हूं कि 90 से घूर्णन वाली सरणी के सभी 3 संभावित संयोजन।

उत्तर

1

आप नई स्थिति की गणना के लिए सरणी की लंबाई का उपयोग कर सकते हैं।

original left right 
-------- -------- -------- 
1 2 3 4 1  3 6 
4 5 6 5 2  2 5 
      6 3  1 4 

function rotateRight(array) { 
 
    var result = []; 
 
    array.forEach(function (a, i, aa) { 
 
     a.forEach(function (b, j, bb) { 
 
      result[bb.length - j - 1] = result[bb.length - j - 1] || []; 
 
      result[bb.length - j - 1][i] = b; 
 
     }); 
 
    }); 
 
    return result; 
 
} 
 

 
function rotateLeft(array) { 
 
    var result = []; 
 
    array.forEach(function (a, i, aa) { 
 
     a.forEach(function (b, j, bb) { 
 
      result[j] = result[j] || []; 
 
      result[j][aa.length - i - 1] = b; 
 
     }); 
 
    }); 
 
    return result; 
 
} 
 

 
var array = [[1, 2, 3], [4, 5, 6]]; 
 

 
console.log(rotateLeft(array)); 
 
console.log(rotateRight(array));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

बस एक त्वरित सवाल: अपने कोड दोषरहित काम करता है ... क्यों rotateLeft() दो बार फोन नहीं? –

+0

@ ओलिवियरपन्स, आप इसे सही तरीके से कर सकते हैं, आप तीन बार बाएं कॉल करने के लिए उत्सुक हैं, लेकिन मुझे चुनने के लिए दोनों दिशाएं पसंद हैं। –

0

आप 2 डी ग्रिड संचालन का समर्थन करने के एक छोटा सा पुस्तकालय मैं क्रम में लिखा है इस्तेमाल कर सकते हैं (https://github.com/klattiation/gridl)। यह रोटेशन का भी समर्थन करता है।

const arr = [ 
    [1, 2, 3], 
    [4, 5, 6], 
]; 
const rotatedArray = gridl(arr).rotate(1).data(); 

// rotatedArray would look like this: 
// [ 
//  [4, 1], 
//  [5, 2], 
//  [6, 3], 
// ] 

तुम भी आसानी से शांत अन्य दिशाओं में बारी बारी से कर सकते हैं:

gridl(data).rotate(1); // rotates 90 degrees 
gridl(data).rotate(2); // rotates 180 degrees 
gridl(data).rotate(3); // rotates 270 degrees 
gridl(data).rotate(-1); // rotates -90 degrees 
gridl(data).rotate(-2); // rotates -180 degrees 
gridl(data).rotate(-3); // rotates -270 degrees 
संबंधित मुद्दे