पर्ल 69 बाइट्स
s;.;y/XVI60-9/CLXVIX/dfor$a[$_].="32e$&"%72726;gefor 1..100;print"@a"
जादू फार्मूला के माध्यम से काम करता है। अभिव्यक्ति "32e$&"%72726
प्रत्येक अंक को निम्नलिखित तरीके से रूपांतरित करती है: 0
3.32, 1 3.320, 2 इंक .3200, 3 3.32000, 4 इंक .29096, 5 इंक। 56, 6 इंक। 560, 7 इंक। 5600, 8. इंक। 56000, 9।
अनुवाद लागू करने के बाद y/016/IXV/
, हम इस के बजाय:
0⇒32, 1⇒32 मैं , 2⇒32 द्वितीय , 3⇒32 तृतीय , 4⇒29 मैं 9 वी , 5⇒5 वी , 6⇒5 छठी , 7⇒5 सातवीं , 8⇒5 आठवीं , 9⇒5 मैं 9 एक्स 8
शेष अंक ( 2-57-9
) हटा दिए गए हैं। ध्यान दें कि यह एक बाइट द्वारा एक सूत्र का उपयोग करके सुधार किया जा सकता है जो 012
इसके बजाय 016
, सरल /XVI60-9/
करने के लिए अनुवाद करता है /XVI0-9/
। मैं एक खोजने में सक्षम नहीं था, लेकिन शायद आपके पास बेहतर भाग्य होगा।
एक बार एक अंक को इस तरीके से बदलने के बाद, प्रक्रिया अगले अंक के लिए दोहराती है, परिणाम को जोड़ती है, और पिछले XVI
s का CLX
उसी समय अनुवाद करते हुए नए अंक का अनुवाद होता है।
अद्यतन
व्यापक खोज ने कुछ भी छोटा नहीं दिखाया। हालाँकि, मैंने एक वैकल्पिक 69 बाइट समाधान खोजा था:
s;.;y/XVI0-9/CLXIXV/dfor$a[$_].="57e$&"%474976;gefor 1..100;print"@a"
यह एक के लिए एक 0-2
प्रतिस्थापन का उपयोग करता है IXV
, लेकिन एक मॉड्यूल है जो अब एक अंक है।
अपडेट: 66 65 बाइट्स
यह संस्करण उल्लेखनीय रूप से भिन्न है, इसलिए मुझे शायद इसके बारे में कुछ शब्द कहना चाहिए। यह जिस सूत्र का उपयोग करता है वह वास्तव में एक बाइट है!
फॉर्मूला को छोटा करने में असमर्थ, इससे अधिक, मैंने यह तय करने का निर्णय लिया कि मेरे पास क्या था। जब तक मैं अपने पुराने दोस्त को याद नहीं करता तब तक यह लंबा नहीं था $\
। जब एक print
स्टेटमेंट जारी किया जाता है, $\
तो आउटपुट के अंत में स्वचालित रूप से जोड़ा जाता है। मैं $a[$_]
एक दो बाइट सुधार के लिए अजीब निर्माण से छुटकारा पाने में सक्षम था :
s;.;y/XVI60-9/CLXVIX/dfor$\.="32e$&"%72726;ge,$\=!print$"for 1..100
बहुत बेहतर, लेकिन यह $\=!print$"
अभी भी थोड़ा वर्बोज़ दिख रहा था। फिर मुझे एक वैकल्पिक, समान लंबाई का सूत्र याद आया जो मैंने पाया था कि 3
उसके किसी भी अंक के रूपांतरण में संख्या नहीं थी । इसलिए, इसके $\=2+print
बजाय इसका उपयोग करना संभव होना चाहिए , और परिणामस्वरूप 3
एक स्थान के साथ स्थानापन्न करना चाहिए :
s;.;y/XVI0-9/CLXIIX V/dfor$\.="8e$&"%61535;ge,$\=2+print for 1..100
इसके अलावा print
और के बीच आवश्यक व्हाट्सएप के कारण 67 बाइट्स for
।
संपादित करें : इसे एक बाइट द्वारा print
, मोर्चे पर ले जाकर सुधारा जा सकता है :
$\=2+print!s;.;y/XVI0-9/CLXIIX V/dfor$\.="8e$&"%61535;gefor 1..100
क्योंकि प्रतिस्थापन के लिए पूरी तरह से मूल्यांकन करने की आवश्यकता है print
, असाइनमेंट $\
अभी भी अंतिम होगा। के बीच सफेद स्थान को निकाल ge
और for
एक प्रतिवाद चेतावनी जारी करेगी, लेकिन अन्यथा मान्य है।
लेकिन, अगर कोई ऐसा फॉर्मूला था जो 1
कहीं भी इस्तेमाल नहीं हुआ, तो बचत के लायक दो बाइट्स $\=2+print
बन जाती हैं $\=print
। यहां तक कि अगर यह एक बाइट लंबा था, तो भी यह एक सुधार होगा।
जैसा कि यह पता चला है, इस तरह का एक सूत्र मौजूद है, लेकिन यह मूल की तुलना में एक बाइट है, जिसके परिणामस्वरूप 65 बाइट्स का अंतिम स्कोर होता है :
$\=print!s;.;y/XVI60-9/CLXXI V/dfor$\.="37e$&"%97366;gefor 1..100
क्रियाविधि
सवाल पूछा गया था कि कोई ऐसा फॉर्मूला खोजने के बारे में कैसे जा सकता है। सामान्य तौर पर, डेटा के किसी भी सेट को सामान्य बनाने के लिए एक जादू फार्मूला खोजना संभावना की बात है। यही है, आप एक ऐसा रूप चुनना चाहते हैं जो वांछित परिणाम के समान कुछ बनाने की संभावना है।
पहले कुछ रोमन अंकों को छोड़कर:
0:
1: I
2: II
3: III
4: IV
5: V
6: VI
7: VII
8: VIII
9: IX
देखा जाए तो कुछ नियमितता है। विशेष रूप से, 0-3 से और फिर 5-8 से , प्रत्येक क्रमिक अवधि एक अंक से लंबाई में बढ़ जाती है। अगर हम अंकों के अंक से एक मानचित्रण बनाना चाहता था, हम एक अभिव्यक्ति है चाहेगा भी प्रत्येक अगली अवधि के लिए एक अंक से लंबाई में बढ़ जाती है। एक तार्किक विकल्प k • 10 d है जहां d इसी अंक का है, और k किसी भी पूर्णांक स्थिर है।
यह 0-3 के लिए काम करता है , लेकिन 4 को पैटर्न को तोड़ने की जरूरत है। हम यहाँ क्या कर सकते हैं एक मॉड्यूल पर काम कर रहा है:
k • 10 d % m , जहाँ m k के बीच कहीं है • 10 3 और k • 10 4 । यह सीमा 0-3 से अछूता रहेगा , और 4 को संशोधित करेगा जिसमें यह चार नहीं होगा I
। यदि हम अपने खोज एल्गोरिथ्म को अतिरिक्त रूप से बाधित करते हैं जैसे कि 5 का मॉड्यूलर अवशेष , तो इसे j कहते हैं, यह m / 1000 से कम है , यह सुनिश्चित करेगा कि हमारे पास 5-8 से भी नियमितता है । परिणाम कुछ इस प्रकार है:
0: k
1: k0
2: k00
3: k000
4: ????
5: j
6: j0
7: j00
8: j000
9: ????
जैसा कि आप देख सकते हैं, अगर हम प्रतिस्थापित 0
करते हैं I
, तो 0-3 और 5-8 सभी को सही ढंग से मैप करने की गारंटी है! हालांकि, 4 और 9 के मूल्यों के लिए मजबूर होना जरूरी है। विशेष रूप से, 4 को एक 0
और एक j
(उस क्रम में) को शामिल करने की आवश्यकता होती है , और 9 को एक को शामिल करने की आवश्यकता होती है 0
, इसके बाद एक और अंक होता है जो कहीं और दिखाई नहीं देता है। निश्चित रूप से, कई अन्य सूत्र हैं, जो कुछ संयोग से वांछित परिणाम उत्पन्न कर सकते हैं। उनमें से कुछ छोटे भी हो सकते हैं। लेकिन मुझे नहीं लगता कि ऐसा कोई भी है जो इस एक के रूप में सफल होने की संभावना है।
मैंने कई प्रतिस्थापनों के साथ I
और / या V
कुछ सफलता के साथ प्रयोग किया । लेकिन अफसोस, मेरे पास पहले से कुछ भी कम नहीं है। यहां सबसे छोटे समाधानों की एक सूची दी गई है जो (1-2 बाइट्स भारी समाधानों की संख्या सूची के लिए बहुत अधिक हैं):
y/XVI60-9/CLXVIX/dfor$\.="32e$&"%72726
y/XVI0-9/CLXIXV/dfor$\.="57e$&"%474976
y/XVI0-9/CLXIVXI/dfor$\.="49e$&"%87971
y/XVI0-9/CLXIIXIV/dfor$\.="7e$&"%10606 #
y/XVI0-9/CLXIIXIV/dfor$\.="7e$&"%15909 # These are all essentially the same
y/XVI0-9/CLXIIXIV/dfor$\.="7e$&"%31818 #
y/XVI0-9/CLXIIX V/dfor$\.="8e$&"%61535 # Doesn't contain 3 anywhere
y/XVI60-9/CLXXI V/dfor$\.="37e$&"%97366 # Doesn't contain 1 anywhere