बाइनरी से नकारात्मक में परिवर्तित करें


15

इनपुट के रूप में 0और 1111111111111111(यानी 16-बिट अहस्ताक्षरित पूर्णांक) के बीच एक द्विआधारी पूर्णांक को देखते हुए, एक ही पूर्णांक को नकारात्मक में आउटपुट करता है ।

इनपुट आपकी भाषा के लिए सबसे सुविधाजनक है जो भी हो सकता है; उदाहरण के लिए, यदि प्रोग्राम के लिए इनपुट को 16 अंकों के साथ संभालना आसान है, जैसे कि 0000000000000101, केवल के बजाय101 , आप प्रोग्राम को केवल उस तरह से इनपुट स्वीकार करने के लिए लिख सकते हैं।

नमूना I / O

> 1
1
> 10
110
> 1010
11110
> 110111001111000
11011001110001000
> 1001001
1011001

यहां एक नमूना कार्यक्रम मैंने लिखा है जो नकारात्मक और गैर-पूर्णांक आधारों सहित आधार रूपांतरण करता है। आप इसका उपयोग अपने काम की जांच के लिए कर सकते हैं।


बस थोड़ा और स्पष्ट करने के लिए, इनपुट और आउटपुट बाइनरी होना चाहिए, है ना? मेरा मतलब है: 0एस और 1एस के चरित्र तार । मुझे स्पष्ट लगता है, लेकिन एक उत्तर ने मुझे हल्के से संदेह में डाल दिया ...
जोनिस

@ M.Joanis इनपुट बाइनरी है, आउटपुट निगेटिव है (जो बिल्कुल बाइनरी जैसा दिखता है - जीरो का एक स्ट्रिंग और जो - लेकिन जिस तरह से संख्या की व्याख्या की जाती है वह अलग है।)
पीटर ओल्सन

2
लिंक नीचे दिखाई देता है, जो इन दिनों हमें स्व-निहित होने के लिए प्रश्नों की आवश्यकता का एक प्रमुख कारण है
जो किंग

जवाबों:


6

एपीएल, 21 अक्षर

'01'[-(16/¯2)⊤-2⊥⍎¨⍞]

मैंने इसके लिए Dyalog APL का उपयोग किया ⎕IO 0 से सेट किया गया था, जिससे हमें 1 के बजाय 0 से शुरू होने वाले इंडेक्स एरे की अनुमति ।

स्पष्टीकरण, दाएं से बाएं

  • हमें एक चरित्र वेक्टर के रूप में उपयोगकर्ता का इनपुट देता है।
  • ⍎¨पूर्वोक्त वर्णों के प्रत्येक ( ) को निष्पादित फ़ंक्शन ( ) लागू करता है ¨, जिसके परिणामस्वरूप पूर्णांक 1 और 0-के वेक्टर का परिणाम होता है।
  • 2⊥ वेक्टर को बेस 2 से दशमलव में विभाजित करता है।
  • - परिणामी दशमलव पूर्णांक को नकारता है।
  • (16/¯2)⊤दशमलव पूर्णांक को आधार ¯2(ऋणात्मक 2) में कूटबद्ध करता है । ( 16/¯2प्रतिकृति ¯2, 16समय, हमारी नकारात्मक संख्या में 16 अंकों की पैदावार।)
  • - हमारे नए एन्कोड किए गए नंबर के प्रत्येक तत्व को नकारता है (इससे पहले, इसमें -1 और 0 का समावेश होता है), ताकि हम इसे अपने चरित्र वेक्टर को इंडेक्स करने के लिए उपयोग कर सकें।
  • '01'[ ... ]वर्णों को अनुक्रमित करता है ( '01') 0 और 1 का उपयोग नकारात्मक ऋणात्मक वेक्टर करता है। ऐसा इसलिए होता है क्योंकि हमें एक प्रीटियर आउटपुट मिलता है।

उदाहरण:

      '01'[-(16/¯2)⊤-2⊥⍎¨⍞]
10111010001
0001101011010001

4

रूबी, 32 31 अक्षर

m=43690
'%b'%(gets.to_i(2)+m^m)

नकारात्मक गणना शॉर्टकट का उपयोग करता है ।


इनपुट को हार्ड कोडित नहीं किया गया है। 0xAAAA इनपुट नहीं है, इसका मास्क इनपुट को बदलने वाला है। 0xAAAA 1010101010101010 के बराबर है, जो बाइनरी को नकारात्मक में बदलने के लिए XOR ऑपरेशन में उपयोग किया जाता है। इनपुट स्वयं getsकीवर्ड से आता है , जो STDIN से प्राप्त होता है।
स्टेफानो डायम बेनात्ती

0xAAAA से बदलकर 43690 (जो दशमलव में समान संख्या है) 1. चरित्र की गिनती को कम करने के लिए। यह समझने में मुश्किल होती है कि wtf क्या हो रहा है।
स्टेफानो डायम बेनात्ती

आह ठीक है। मैं अच्छा नहीं रूबी इसलिए मुझे यकीन नहीं था। उसके लिए माफ़ करना।
R

3

गोल्फस्क्रिप्ट, 34 29 27 अक्षर

n*~]2base{.2%\(-2/.}do;]-1%

एक सादा straigt- आगे दृष्टिकोण। यह काफी दिलचस्प है कि सबसे छोटा संस्करण वह है जो पहले संख्या में परिवर्तित होता है और फिर बेस -2 (कम से कम सबसे छोटा संस्करण जो मैं अब तक पा सकता था) में बदल देता हूं। लेकिन इस बारे में एक अच्छी बात यह है कि इसमें लगभग 15% हैं%

1 संपादित करें: आधार 2 के लिए हम एक मोडुलो ऑपरेशन को बचा सकते हैं और दोनों छोरों को भी जोड़ सकते हैं।

संपादन 2: मुझे बाइनरी स्ट्रिंग को पूर्णांक में बदलने के लिए एक और भी छोटा कोड मिला।


3

हास्केल, 86 83 बाइट्स

import Data.Bits
import Data.Digits
c n|m<-0xAAAAAAAA=digits 2$xor(unDigits 2 n+m)m

सी का उपयोग करके कॉल करें और फिर अंकों के लिए एक पूर्णांक सरणी, जैसे

c [1,1]

PS: मैं नया हूं, क्या मैंने इसे सही तरीके से सबमिट किया है?

EDIT: लाईकोनी की बदौलत कुछ बाइट्स बचाए और कुछ टाइपो भी तय किए

EDIT2: वैकल्पिक रूप से, c :: स्ट्रिंग -> स्ट्रिंग:

import Data.Bits
import Data.Digits
c n|m<-0xAAAAAAAA=concatMap show.digits 2$xor(unDigits 2(map(read.(:[]))n)+m)m

114 बाइट्स के लिए (लेकिन आप इसे स्ट्रिंग के साथ कहते हैं: c "11")


हाँ तुमने किया! साइट पर आपका स्वागत है! आशा है कि आप चारों ओर चिपकेंगे!
आर

PPCG में आपका स्वागत है! आप कोष्ठकों को चारों ओर छोड़ सकते हैंundigits 2 n , क्योंकि फ़ंक्शन अनुप्रयोग की तुलना में अधिक मजबूत है +m। आप कुछ बाइट्स mको एक गार्ड में बांधकर भी बचा सकते हैं c n|m<-0xAAAAAAAA= ...:।
लकोनी

2

पायथन (2.x), 77 वर्ण

(आधार को मैन्युअल रूप से स्विच करने की आवश्यकता के कारण अन्य समाधान जितना छोटा नहीं है ...) आवश्यकताओं को पूरा करना चाहिए।

i=input();d=""
while i:i,r=i//-2,i%-2;i+=r<0;d+=`r+[0,2][r<0]`
print d[::-1]

आगे के सुधारों के सुझावों का स्वागत है!

इसे इस तरह से मानों के साथ फ़ीड करें: 0b1001001


2

जावास्क्रिप्ट, 68 बाइट्स

function(b){for(r='',n=parseInt(b,2);r=(n&1)+r,n>>=1;n=-n);return r}

ES6 में 52 बाइट्स होंगे, लेकिन यह चुनौती के बाद की तारीखें हैं:

b=>eval(`for(r='',n=0b${b};r=(n&1)+r,n>>=1;n=-n);r`)

2

जेली , 4 बाइट्स, भाषा चुनौती देती है

Ḅb-2

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

अंकों की सूची के रूप में इनपुट लेता है, और आउटपुट तैयार करता है।

व्याख्या

Ḅb-2
Ḅ     Convert binary to integer
 b-2  Convert integer to base -2

यह विनिर्देशन का प्रत्यक्ष अनुवाद मात्र है।


क्या यह गैर-प्रतिस्पर्धा नहीं है? यह चुनौती '11 ...
NoOneIsHere

मैंने यह खो दिया। मैं हेडर में एक नोट डालूँगा।

1

k, 17 बाइट्स नॉनकंपेटिंग

उपयोग की जाने वाली कुछ सुविधाएँ संभवतः चुनौती को स्थगित कर देती हैं।

1_|2!{_.5+x%-2}\2/

इनपुट 1 और 0 की सूची है, और आउटपुट भी 1 और 0 की सूची है।

काम कर रहे कार्यक्रम के उदाहरण हैं।





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