GNU सेड , 178 158 132 + 1 = 133 बाइट्स
-r
झंडे के लिए +1 बाइट ।
s/(.)(.*)(.)/ \1\n\2;\3/
:
s/( *)(.\n.)(.*)(...);(.*)(.)/\1\2\1 \6\n\3;\4\5/m
t
:A
s/(.*\n)( *)(.*);/ \2;\1\2\3/m
tA
s/. (.)$/\1/gm
इसे ऑनलाइन आज़माएं!
व्याख्या
में पिछला पुनरीक्षण मैं गणित, विशेष मामलों, और सफाई के साथ काम कर बाइट्स का एक बहुत उपयोग किया जाता है, भले ही सहज मुझे यकीन है कि वे बचा जा सकता है किया गया था। जब से मैं ऐसा करने में कामयाब हुआ हूं, ज्यादातर।
मान लीजिए हमारे पास इनपुट है abcdEFGHIJKLMnop
। पत्रEFGHIJKLM
त्रिकोण के नीचे होंगे, इसलिए मैंने उन्हें दृश्य सहायता के रूप में कैपिटल किया है।
पहले हम पहले वर्ण को अपनी पंक्ति में रखते हुए (एक स्थान से पहले) और ;
अंतिम वर्ण से पहले एक कर्सर ( ) सम्मिलित करके इनपुट तैयार करते हैं :
s/(.)(.*)(.)/ \1\n\2;\3/
अब हमारे पास है:
a
bcdEFGHIJKLMno;p
अब, एक लूप में, हम अंतिम पंक्ति में कुछ चीजें करने जा रहे हैं: 1. पिछली पंक्ति से रिक्त स्थान की प्रतिलिपि बनाएँ और उन्हें पहले वर्ण, प्लस दो के बाद डालें; 2. रिक्त स्थान के बाद अंतिम चरित्र को स्थानांतरित करें, इसके बाद एक नई रेखा; और 3. कर्सर को तीन वर्ण बाईं ओर ले जाएं।
:
s/( *)(.\n.)(.*)(...);(.*)(.)/\1\2\1 \6\n\3;\4\5/m
t
यहां प्रत्येक पुनरावृत्ति का परिणाम है:
a
b p
cdEFGHIJKL;Mno
a
b p
c o
dEFGHI;JKLMn
a
b p
c o
d n
EF;GHIJKLM
आप देख सकते हैं कि पिरामिड आकार लेना शुरू कर रहा है। आप यह भी देख सकते हैं कि कर्सर क्या था: प्रत्येक पुनरावृत्ति में यह तीन वर्णों को छोड़ता है, और जब इसके बाईं ओर तीन वर्ण नहीं रह जाते हैं, तो यह लूप को तोड़ देता है, जो तब होता है जब हम "नीचे" तक पहुंच जाते हैं पिरामिड का।
अब हम एक समान ऑपरेशन करने जा रहे हैं लेकिन रिवर्स में। एक लूप में, हम कर्सर के साथ लाइन की शुरुआत से रिक्त स्थान को कॉपी करेंगे, पूर्ववर्ती लाइन की शुरुआत में प्लस एक, उस पंक्ति में कर्सर को स्थानांतरित करने की प्रक्रिया में।
:A
s/(.*\n)( *)(.*);/ \2;\1\2\3/m
tA
यहाँ कुछ पुनरावृत्तियों और अंतिम परिणाम हैं:
a
b p
c o
;d n
EFGHIJKLM
a
b p
;c o
d n
EFGHIJKLM
...
; a
b p
c o
d n
EFGHIJKLM
अभी हम सब कुछ अतिरिक्त वर्णों को छोड़कर कर रहे हैं: ;
पहली पंक्ति पर एक अतिरिक्त जगह और अगली तीन पंक्तियों पर पिरामिड के "बीच" में दो स्थान। एक साधारण प्रतिस्थापन से छुटकारा मिल जाता है:
s/. (.)$/\1/gm
सब कुछ कर दिया!
a
b p
c o
d n
EFGHIJKLM
✂
हैं?