जीएनयू सेड, 236 बाइट्स
/^0/bV
:
s/\b9/;8/
s/\b8/;7/
s/\b7/;6/
s/\b6/;5/
s/\b5/;4/
s/\b4/;3/
s/\b3/;2/
s/\b2/;1/
s/\b1/;0/
s/\b0//
/[^;-]/s/;/&&&&&&&&&&/g
t
y/;/1/
:V
s/111/3/g
s/3\b/3:/
s/311/33!/
s/31/3+/
y/3/1/
tV
s/1/+/
y/1:/!0/
/-/{s/-//
y/+!/!+/
}
y/!/-/
इसे ऑनलाइन आज़माएं!
व्याख्या
कोड की पहली छमाही (पहली पंक्ति से कम) दशमलव को यूनरी में अनुवादित करता है और सीधे " सेड में गोल्फिंग के लिए टिप्स " से आता है । तब यह एक समय में एक ट्रिनरी को संतुलित करने के लिए यूनिरी का अनुवाद करता है, जिसे मैं स्वयं एक उदाहरण देकर काम करूंगा।
अंतिम आउटपुट से पहले, त्रिगुट अंक -
, 0
, और +
प्रतिनिधित्व कर रहे हैं !
, :
और +
क्रमश:।
एक दिलचस्प परिणाम के लिए, हम साथ शुरू करते हैं -48
, जिसे यूनाइटरी ( -
अक्षत के साथ ) में बदल दिया गया है । पहले (दाएं-सबसे) ट्रिट की गणना करने के लिए, हमें शेष 48 first 3 की गणना करनी होगी। हम इसे 111
s की जगह s से बदल सकते हैं 3
:
-111111111111111111111111111111111111111111111111 │ s/111/3/g
# => -3333333333333333
48, 3 का कोई शेष नहीं है, इसलिए कोई भी शेष नहीं 1
है, और हम जानते हैं कि हमारी पहली विशेषता है :
(0 के लिए), इसलिए हम इसे प्रतिस्थापित करते हैं:
-3333333333333333 │ s/3\b/3:/
# => -3333333333333333:
अब हमारे पास "अपने स्थान" हैं, इसलिए हम जानते हैं कि शेष 3
एस का प्रतिनिधित्व करते हैं। गणित को काम करते रहने के लिए हमें उन्हें 3 से विभाजित करना होगा, अर्थात उन्हें 1
s से बदलना होगा :
-3333333333333333: │ y/3/1/
# => -1111111111111111:
आइए अपने गणित की दोबारा जांच करें: हमारे पास 1111111111111111
थ्रेस प्लेस में 16 (अनरी ) हैं और :
उन लोगों की जगह पर शून्य ( ) है। वह 3 That's16 + 1✕0 = 48 है। अब तक बहुत अच्छा है।
अब हम फिर से शुरू करते हैं। 111
एस के साथ बदलें 3
:
-1111111111111111: │ s/111/3/g
# => -333331:
इस बार हमारा शेष भाग है 1
, इसलिए हमने +
थ्रस्ट प्लेस में रखा और शेष 3
एस को 1
एस के साथ बदल दिया :
-333331: │ s/31/3+/; y/3/1/
# => -11111+:
पवित्रता की जाँच का समय: हमारे पास एक ५ (यूनीरी 11111
) नाइन जगह में, १ ( +
) जगह में, और ० ( :
) वाले स्थान में: ९✕५ + ३✕१ + १✕० = ४.! फिर से हम 111
s को 3
s से बदलते हैं :
-11111+: │ s/111/3/g
# => -311+:
इस बार हमारा शेष 2 ( 11
) है। इसमें दो ट्रिट ( +!
) लगते हैं , जिसका मतलब है कि हमारे पास एक कैरी है। जैसे दशमलव अंकगणित में इसका मतलब है कि हम सबसे सही अंक लेते हैं और शेष कॉलम को बाईं ओर जोड़ते हैं। हमारी प्रणाली में, इसका मतलब है कि हम !
निन्स स्थान में रखते हैं और इसके बाईं ओर एक और तीन जोड़ते हैं, फिर 27 वें स्थान का प्रतिनिधित्व करने के लिए 3
एस के साथ सभी को प्रतिस्थापित करें 1
:
-311+: │ s/311/33!/; y/3/1/
# => -11!+:
अब हमारे पास कोई 3s शेष नहीं है, इसलिए हम किसी भी शेष अयोग्य अंकों को उनके अनुरूप ट्रिट के साथ बदल सकते हैं। दो ( 11
) है +!
:
-11!+: │ s/11/+!/
# => -+!!+:
वास्तविक कोड में यह दो चरणों में किया जाता है, s/1/+/
और y/1:/!0/
, बाइट्स को बचाने के लिए। दूसरा चरण :
एस के साथ भी बदलता है 0
, इसलिए यह वास्तव में ऐसा करता है:
-11!+: │ s/1/+/; y/1:/+0/
# => -+!!+0
अब हम जांचते हैं कि हमारे पास ऋणात्मक संख्या है या नहीं। हम करते हैं, इसलिए हमें साइन से छुटकारा पाना होगा और फिर प्रत्येक ट्रिट को पलटना होगा:
-+!!+0 │ /-/ { s/-//; y/+!/!+/; }
# => !++!0
अंत में, हम !
s को -
s से प्रतिस्थापित करते हैं :
!++!0 │ y/!/-/
# => -++-0
बस!