इंटरलेस्ड रोटेशन


25

चुनौती

वर्णों के एक वर्ग मैट्रिक्स (एकल-बाइट मुद्रण योग्य ASCII वर्ण) को देखते हुए, विपरीत दिशाओं में मैट्रिक्स के प्रत्येक "रिंग" को घुमाएं।

आइए एक उदाहरण लेते हैं:

1 2 3 4 5
6 7 8 9 A
B C D E F
G H I J K
L M N O P

फिर, सबसे बाहरी वलय को दक्षिणावर्त 90 डिग्री घुमाया जाता है, जैसे:

1 2 3 4 5    L G B 6 1
6       A    M       2
B       F => N       3
G       K    O       4
L M N O P    P K F A 5

दूसरी अंगूठी 90 डिग्री पर वामावर्त घुमाई जाती है:

7 8 9    9 E J
C   E => 8   I
H I J    7 C H

अंतिम अंगूठी को 90 डिग्री पर दक्षिणावर्त घुमाया जाता है, लेकिन चूंकि यह एक एकल संख्या (हमारे उदाहरण में पत्र) है, तो यह वास्तव में प्रभावित नहीं है।

अंतिम परिणाम है:

L G B 6 1
M 9 E J 2
N 8 D I 3
O 7 C H 4
P K F A 5

यदि मैट्रिक्स की एक समान लंबाई है, तो अंतरतम रिंग 2x2 वर्ग की होगी और इसे अभी भी घुमाया जाना चाहिए।

इनपुट

किसी भी उचित मानक प्रारूप में सूचियों की एक सूची। उदाहरण के लिए, एक नईलाइन-सीमांकित स्पेस-सीमांकित स्ट्रिंग या स्पेस-सीमांकित स्ट्रिंग्स की सूची स्वीकार्य है, लेकिन मैट्रिक्स के चारों ओर के छल्ले के रूप में मूल्यों की एक सूची स्वीकार्य नहीं है। पात्र जरूरी नहीं कि अनूठे हों।

उत्पादन

किसी भी उचित मानक प्रारूप में सूचियों की एक सूची। इनपुट के समान नियम।

परीक्षण के मामलों

1 2 3    7 4 1
4 5 6 => 8 5 2
7 8 9    9 6 3

1 2 3 4 5 6    Y S M G A 1
A B C D E F    Z E K Q W 2
G H I J K L => ! D O I V 3
M N O P Q R    @ C P J U 4
S T U V W X    # B H N T 5
Y Z ! @ # $    $ X R L F 6

क्रेडिट

भारी रूप से एक संबंधित चुनौती से प्रेरित है जो प्रत्येक तत्व वामावर्त एक स्थिति (90 डिग्री से नहीं) को घुमाता है।



@ rahnema1 सही, मुझे वह पोस्ट याद है। यह पोस्ट ज्यादातर उसी से प्रेरित है; मैं श्रेय लूंगा। धन्यवाद!
HyperNeutrino

@ Mr.Xcoder व्हाट्स। आप सही हैं, धन्यवाद।
HyperNeutrino

@ हैपरनेट्रिनो क्या हम मैट्रिक्स के आयाम को इनपुट के एक भाग के रूप में ले सकते हैं?
उरेल

आपके उदाहरणों में सभी वर्ण अद्वितीय हैं। क्या हमेशा ऐसा ही रहेगा?
डेनिस

जवाबों:


9

हास्केल , 94 बाइट्स

अनाम सूची लेने और वापस करने की सूची String

के रूप में उपयोग करें (cycle[t.r,r.t,r.t,r.t]?)["123", "456", "789"]

(cycle[t.r,r.t,r.t,r.t]?)
(g:h)?(a:b)=g$a:h?t(r b)
_?a=a
r=reverse;t=zipWith(:)`foldr`repeat[]

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

  • rहै reversetएक बाइट आयात करने से कम है Data.List.transposet.r90 डिग्री की सूचियों की सूची को r.tघुमाता है , और इसे वामावर्त घुमाता है।
  • ऑपरेटर ?दो तर्क लेता है, कार्यों की एक सूची और तार की एक सूची के रूप में एक मैट्रिक्स।
    • एक खाली मैट्रिक्स अभी लौटा है।
    • अन्यथा, ?फ़ंक्शन fकी सूची से पहला फ़ंक्शन स्ट्रिप्स , और aमैट्रिक्स से पहली पंक्ति ।
    • फिर यह bमैट्रिक्स के शेष को दक्षिणावर्त घुमाता है , और उस और शेष कार्यों के साथ पुनरावृत्ति करता है। यह धीरे-धीरे बाहर से मैट्रिक्स को स्ट्रिप करता है, प्रत्येक चार चरणों में एक रिंग करता है।
    • फिर यह aपरिणाम के लिए मूल रेखा को प्रस्तुत करता है, और fमैट्रिक्स के उन्मुखीकरण को समायोजित करने के लिए फ़ंक्शन पर लागू होता है ।
  • अनाम फ़ंक्शन ?इनपुट मैट्रिक्स के साथ तार की एक सूची के रूप में कहता है , और कार्यों की एक अनंत सूची है, जो हर चार चरणों में चक्रीय रूप से दोहराता है।
    • फ़ंक्शन के अधिकांश चरणों के लिए वामावर्त घुमाव है, जो पुनरावृत्ति करते ?समय किए गए निहित दक्षिणावर्त रोटेशन को पूर्ववत करता है ।
    • हालांकि, पहले चरण और बाद में हर चौथे चरण को दक्षिणावर्त रोटेशन के बजाय किया जाता है।
      • यह फ़ंक्शन मैट्रिक्स के एक रिंग के पूरा होने पर लागू होता है, जिससे प्रत्येक रिंग को अगले एक के संबंध में 180 डिग्री घुमाया जा सकता है।
      • भाग्य से, अंतिम परिणाम प्राप्त करने के लिए अंतिम, पूर्ण मैट्रिक्स पर लागू करने के लिए यह सही परिवर्तन है।

6

पायथन 2 , 104 बाइट्स

def f(x):l=len(x)-1;r=range(l+1);return[[[x[l-i][j],x[i][l-j]][min(i,j,l-i,l-j)%2]for i in r]for j in r]

इसे ऑनलाइन आज़माएं!

x[l-i][j]एक क्लॉकवाइज़ टर्न के निर्देशांक हैं, x[i][l-j]एक काउंटरक्लाइज़ टर्न के लिए। min(i,j,l-i,l-j)%2का उपयोग सही दिशा चुनने के लिए किया जाता है


पुनरावर्ती घुमाव।
tuskiomi

@tuskiomi हम्म ??
रॉड

@tuskiomi मैंने ES6 में पुनरावर्ती दृष्टिकोण की कोशिश की। यह इस उत्तर के एक साधारण बंदरगाह के रूप में दो बार के बारे में था ...
नील

4

गणितज्ञ, 113 बाइट्स

r=Reverse;(l=Length[s=#];Table[s[[i+1;;l-i,i+1;;l-i]]=r/@r@s[[i+1;;l-i,i+1;;l-i]],{i,⌊l/2⌋}];r/@Transpose@s)&


ई, आई जैसे विशेष अक्षरों के लिए "ई" जैसे चार स्ट्रिंग के रूप में इनपुट करना बेहतर है ...

इनपुट

[{{१, २, ३, ४, ५, ६}, {ए, बी, सी, डी, "ई", एफ}, {जी, एच, "आई", जे, के, एल}, {एम , N, O, P, Q, R}, {S, T, U, V, W, X}, {Y, Z, "!", "@", "#", "&"}}]

उत्पादन

{{Y, S, M, G, A, 1}, {Z, "E", K, Q, W, 2}, {"!", D, O, "I", V, 3}, {! "@", C, P, J, U, 4}, {"#", B, H, N, T, 5}, {"&", X, R, L, F, 6}}।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.