MATL, 70 बाइट्स (कुल)
f'(.{'iV'})(.{1,'2GqqV'})'5$h'$1'0'$2'0K$hYX2Get2LZ)P2LZ(!tg)i?&S]1Gw)
MATL ऑनलाइन पर इसे
आज़माएं कई परीक्षण मामलों की कोशिश करें
तीसरे इनपुट के रूप में एक झंडे को लेता है, F
स्ट्रिंग T
को मढ़ने के लिए , इसे समझने के लिए ( उस विचार के लिए केविन क्रूज़सेन का धन्यवाद )।
यह एक जूलिया उत्तर के रूप में शुरू हुआ जब तक कि मुझे एहसास नहीं हुआ कि सख्त टाइपिंग बहुत अधिक हो गई है, विशेष रूप से व्याख्या के लिए। यहाँ पर जूलिया कोड मेरे पास था (टीआईओ के लिए v0.6 के लिए वापस लाया गया):
!M=(M[2:2:end,:]=flipdim(M[2:2:end,:],2);M)
s|n=replace(String((!permutedims(reshape([rpad(replace(s,Regex("(.{$n})(.{1,$(n-2)})"),s"\1ø\2ø"),length(s)*n,'ø')...],n,:),(2,1)))[:]),"ø","")
इसे ऑनलाइन आज़माएं!
स्पष्टीकरण:
रेल बाड़ संचालन
F . . . A . . . Z . . . .
O . B . R . A . Q . X
O . . . B . . . U
r = इनपुट के 3 वर्णों को पढ़ने के रूप में देखा जा सकता है, फिर r-2 वर्णों को पढ़ना और उपसर्ग करना और प्रत्यय देना कि डमी मानों (नल) के साथ, फिर r वर्णों को फिर से पढ़ना, आदि, हर बार एक नया स्तंभ बनाते हुए:
F.A.Z.
OBRAQX
O.B.U.
फिर हर दूसरे कॉलम को उलटते हैं (क्योंकि ज़िगज़ैग का ज़ैग हिस्सा नीचे की बजाय ऊपर जाता है, जिससे r> 3) का फर्क पड़ता है, फिर पंक्तियों के साथ इस मैट्रिक्स को पढ़ते हैं, और डमी पात्रों को हटाते हैं।
इस तरह के किसी भी स्पष्ट पैटर्न की घोषणा नहीं हुई थी, लेकिन जब मैं इस पोस्ट के बारे में आया, तो इस बारे में खोज करते हुए , जिसने मुझे बताया कि (ए) यह एक प्रसिद्ध और (संभवतः?) रेल सिफर के लिए प्रकाशित एल्गोरिथ्म था, और ( ख) स्पष्टीकरण एक ही विधि का एक सरल पुन: उपयोग किया गया था, यह स्ट्रिंग के सूचकांकों दे रही है और हो रही है के सूचकांकों कूटलेखन के बाद उन सूचकांक, और उन स्थानों पर सिफर पढ़ने।
चूंकि सूचकांकों पर काम करने से चीजों को करने की आवश्यकता होती है, यह कोड स्ट्रिंग के सूचकांकों को छाँटकर भी करता है, और फिर इस मामले में उन पुन: व्यवस्थित सूचकांकों को अनुक्रमित करता है।
% implicit first input, say 'FOOBARBAZQUX'
f % indices of input string (i.e. range 1 to length(input)
'(.{'iV'})(.{1,'2GqqV'})'5$h
% Take implicit second input, say r = 3
% Create regular expression '(.{$r})(.{1,$(r-2)})'
% matches r characters, then 1 to r-2 characters
% (to allow for < r-2 characters at end of string)
'$1'0'$2'0K$h % Create replacement expression, '$1\0$2\0'
YX % Do the regex replacement
2Ge % reshape the result to have r rows (padding 0s if necessary)
t2LZ) % extract out the even columns of that
P % flip them upside down
2LZ( % assign them back into the matrix
! % transpose
tg) % index into the non-zero places (i.e. remove dummy 0s)
i? % read third input, check if it's true or false
&S] % if it's true, decipherment needed, so get the indices of the
% rearranged indices
1Gw) % index the input string at those positions