बेस -10 में आउटपुट एन


18

चुनौती:

अपनी पसंद की प्रोग्रामिंग भाषा में, आधार 10 में एक पूर्णांक को इनपुट के रूप में स्वीकार करते हैं , और इसे नेगेडिमल नोटेशन में आउटपुट करते हैं , जिसे बेस -10 के रूप में भी जाना जाता है

उदाहरण एल्गोरिथ्म:

यह VB.NET में किसी भी नकारात्मक आधार को आधार 10 में बदलने के लिए विकिपीडिया से लिया गया एक एल्गोरिथम है :

Function toNegativeBase(Number As Integer , base As Integer) As System.Collections.Generic.List(Of Integer)

    Dim digits As New System.Collections.Generic.List(Of Integer)
    while Number <> 0
        Dim remainder As Integer= Number Mod base
        Number = CInt(Number / base)

        if remainder < 0 then
            remainder += system.math.abs(base)
            Number+=1
        end if

        digits.Insert(0, remainder)
    end while

    return digits
end function

जाहिर है, आप किसी भी एल्गोरिथ्म का उपयोग कर सकते हैं, जब तक यह चुनौती पूरी करता है

उदाहरण इनपुट / आउटपुट:

इनपुट:

12

आउटपुट:

192

एक और उदाहरण:

इनपुट:

2048

आउटपुट:

18168

नियम:

आपको अपनी प्रोग्रामिंग भाषा में मौजूद इस समस्या को हल करने वाले किसी भी अंतर्निहित तरीकों का उपयोग नहीं करना चाहिए

यह एक कोड-गोल्फ है , इसलिए सबसे छोटा कोड जीतता है!


3
मुझे लगता है कि आप केवल बिल्ट-इन को ही बनाना चाहते हैं जो इस विशिष्ट समस्या को हल करें और सभी मौजूदा builltins को नहीं।
डेनकर

संबंधित OEIS: A039723
devRicher

6
आपको एक नकारात्मक परीक्षण मामला जोड़ना चाहिए।
xnor

1
[0, 1, 8, 1, 6, 8]इनपुट के लिए एक स्वीकार्य आउटपुट होगा 2048?
डेनिस

2
यह कल्पना में ध्यान देने योग्य हो सकता है। आपका VB कोड ऐसा लगता है जैसे यह एक सूची देता है।
डेनिस

जवाबों:


12

जावास्क्रिप्ट (ईएस 6), 51 45 37 बाइट्स

f=n=>n&&n%10+((k=n<0)+f(k-n/10|0))*10

परीक्षण के मामलों


क्या इस एल्गोरिथम का कोई संदर्भ है?
डेफरन

@ डफरन मैं वास्तव में नहीं जानता। यह सुझाव दिया एल्गोरिथ्म के साथ शुरू होने वाले कई गोल्फ पुनरावृत्तियों का परिणाम है।
अर्नुलद Ar

5

जाप , 11 बाइट्स

_ì ìAn)¥U}a

इसे ऑनलाइन टेस्ट करें!

व्याख्या

_ì ìAn)¥U}a  // Implicit: U = input integer, A = 10
_        }a  // Return the smallest non-negative integer Z that returns a truthy value
             // when run through this function:
 ì           //   Convert Z to a list of its base 10 digits.
   ìAn)      //   Interpret this as a list of base -10 digits and convert to a base 10 integer.
       ¥U    //   Return (the result == U).
             // Implicit: output result of last expression

4

बैच, 82 बाइट्स

@set/a"d=%1%%10,n=%1/-10-(a=d>>4),d-=a*10
@if %n% neq 0 %0 %n% %d%%2
@echo %d%%2

बैच का विभाजन शून्य से कम हो जाता है, इसलिए यदि शेष ऋणात्मक है, तो मुझे क्षतिपूर्ति करने के लिए 1 (और शेष में 10 भी जोड़ना होगा) जोड़ना होगा। अंक तब %2तक जमा होते हैं जब तक कि परिणाम शून्य नहीं हो जाता।


4

जेली , 9 बाइट्स

Dḅ-10=ð1#

यह नकारात्मक-से-पूर्णांक रूपांतरण का एक जानवर-बल व्युत्क्रम है।

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

यह काम किस प्रकार करता है

Dḅ-10=ð1#  Main link. Argument: n

      ð    Combine the links to the left into a chain and start a new, dyadic
           chain with left and right argument n.
       1#  Repeatedly execute the chain with left argument k = n, n + 1, ... and
           right argument n until the first match is found.
D          Convert k to decimal.
 ḅ-10      Convert the result from base -10 to integer.
     =     Compare the result with n.

3

पायथ - 9 बाइट्स

लेल इसमें रोते हुए इमोजी हैं।

fqQijT;_;

टेस्ट सूट


1
क्यों रो रही हो?? आप बराबर हैं!
NoOneIsHere

क्योंकि पाइथ के जवाब पर उनके पास रोने वाली इमोजी है।
15:75 पर user75200

3

पायथन 3, 35 बाइट्स

f=lambda n:n and n%10+f(0-n//10)*10

अरनॉल्ड के एल्गोरिथ्म का पायथन पोर्ट ।

वैकल्पिक रूप से, 102 बाइट्स के लिए मूल पोस्ट के एल्गोरिथ्म का उपयोग करके एक सामान्य कार्य:

def f(n,b,r=0):
 if n:
  r,n=n%b,n//b
  if r<0:r+=abs(b);n+=1
  return f(n,b,r)+str(r)
 else:return ""

पायथन आपको एक डिफ़ॉल्ट इनपुट घोषित करने की अनुमति नहीं देता है जो किसी अन्य इनपुट पर निर्भर करता है।
xnor

@xnor यह मेरे पायथन इंस्टॉलेशन पर काम करता है Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44):।
21

आप इसे कैसे बुला रहे हैं? मैं यह कर रहा हूं (3.5.2 में)। क्या आप कोड में कहीं और घोषित kकर रहे nहैं?
xnor

1
अच्छा लग रहा है, अच्छा सुधार! आपको फ़ंक्शन कॉल के आसपास के पार्न्स की आवश्यकता नहीं है।
xnor

1
पिछले एक मैं ऑपरेटर पूर्वता के रूप में समझा सकता हूं। -n//10करता है -(n//10): नकारात्मक n, फिर फर्श से विभाजित 10, जो नकारात्मक अनंत की ओर चक्कर लगाता है, न कि 0. इसके विपरीत, 0-n//10करता है 0-(n//10), जो पहली मंजिल को 10 से विभाजित करता है, फिर नकारात्मक हो जाता है । जो भी कारण के लिए, पायथन बाइनरी माइनस की तुलना में अधिक पूर्वता के साथ एकात्मक नकार का व्यवहार करता है। इस पूर्ववर्ती तालिका को देखें । मैं गोल्फ में पहले भी इसी स्थिति में दौड़ चुका हूं।
xnor

2

जेली , 10 बाइट्स

:⁵NµÐĿ%⁵ṚḌ

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

पृष्ठभूमि

बेस बी से पूर्णांक तक गैर-नकारात्मक की एक सूची को परिवर्तित करके फ़ंक्शन x, y। Bx + y द्वारा बाईं ओर मोड़कर प्राप्त किया जा सकता है । बेस बी में कनवर्ट करने और पूर्णांक बनाने के लिए , हमें बस उस फ़ंक्शन को उल्टा करना चाहिए, अर्थात, bx + yX, y के लिए एक अभिव्यक्ति ज्ञात करें

पायथन में (और, विस्तार से, जेली), मॉडुलो ऑपरेटर का परिणाम हमेशा गैर-नकारात्मक होता है, इसलिए (bx + y)% | b | = य

इसके अलावा, पूर्णांक विभाजन हमेशा गोल होता है, यह सुनिश्चित करता है कि यदि q = n / d और r = n% d , तो समानता n = qd + r धारण करता है। यदि s , b का चिन्ह है , तो (sx) | b | + y = bx + y , इसलिए sx = (bx + y) / | b | और, इसलिए, s ((bx + y) / | b |) = x

यह काम किस प्रकार करता है

:⁵NµÐĿ%⁵ṚḌ  Main link. Argument: n

   µ        Combine the links to the left into a monadic chain.
    ÐĿ      Iteratively apply the chain until the results are no longer unique.
            Collect all unique results in an array.
:⁵            Divide the previous return value (initially n) by 10.
  N           Negate; multiply the result by -1.
      %⁵    Take all results modulo 10.
        Ṛ   Reverse the results.
         Ḍ  Convert from base 10 to integer.

2

SimpleTemplate , 147 बाइट्स

यह एक टेम्पलेट भाषा है जिस पर मैं काम कर रहा हूं।
किसी भी तरह से यह गोल्फ के लिए नहीं है।
यहां तक ​​कि इसमें पूर्ण बुनियादी गणित का भी अभाव है, लेकिन यह PHP के छोटे स्निपेट को सीधे लिखने की अनुमति देता है।
यह उस मुद्दे के आसपास काम करता है।

{@setN argv.0}{@whileN}{@setM N}{@php$DATA[N]=($DATA[M]/-10)|0;$DATA[R]=$DATA[M]%-10}{@ifR is lower0}{@incby10 R}{@incN}{@/}{@setD R,D}{@/}{@echoD}

यह चेतावनी का एक गुच्छा फेंकता है।
कोड PHP में "संकलित" है।

कचरा रहित व्हाट्सएप के साथ: अनगुल्फेड

{@set no argv.0}
{@while no}
    {@set temp_no no}
    {@php $DATA["no"] = ($DATA["temp_no"] / -10) | 0}
    {@php $DATA["remainder"] = $DATA["temp_no"] % 10}

    {@if remainder is lower than 0}
        {@inc by 10 remainder}
        {@inc no}
    {@/}
    {@set digits remainder, digits}
{@/}
{@echo digits}

यदि आवश्यक हो, तो एक सेट-बाय-स्टेप स्पष्टीकरण जोड़ा जा सकता है, लेकिन मेरा मानना ​​है कि यह बहुत सीधा है।


अस्वीकरण :

अंतिम उत्तर, जैसा कि इस उत्तर को लिखने के समय था, 2017-01-07 20:36 UTC + 00: 00 पर था।
पर यह काम करता है के लिए प्रतिबद्ध 140e56ff38f45fa4fd40fd3ec382094e707b1bad 00: 2017/01/06 23:27 UTC + 00 से।
यह इस उत्तर को चलाने के लिए प्रयुक्त संस्करण है।

PHP कोड https://raw.githubusercontent.com/ismael-miguel/SimpleTemplate/140e56ff38f45fa4fd40fd3ec382094e707bbbb/SimpleTemplate.php पर उपलब्ध है।

मैं अंतिम संस्करण के साथ इसे चलाने की सलाह देता हूं, लेकिन यह इस प्रश्न के लिए ठीक काम करता है।


कैसे चलाना है?

कोड के साथ एक फ़ाइल बनाएं और इसे इस तरह से चलाएं:

<?php

    include 'path/to/SimpleTemplate.php';

    $template = new SimpleTemplate('<code>');

    $template->render(<number>);

फिर मूल्य स्क्रीन पर प्रदर्शित किया जाएगा।



1

गणितज्ञ, 49 बाइट्स

d@0="";d@n_:=d[-Floor[n/10]]<>ToString[n~Mod~10];

dएक पूर्णांक तर्क लेने वाले फ़ंक्शन को परिभाषित करता है , और एक स्ट्रिंग लौटाता है। एक पुनरावर्ती एल्गोरिथ्म - अरनॉल्ड के उत्तर में समान एल्गोरिथ्म जैसा दिखता है । यह नकारात्मक संख्याओं पर भी काम करता है। (यदि इनपुट 0. है तो यह "0" के खाली स्ट्रिंग को लौटाता है।) गणितज्ञ गोल्फर्स के लिए ध्यान दें: उपयोग ±करने के लिए कोष्ठकों के एक अतिरिक्त सेट की आवश्यकता होती है और इस प्रकार कोई छोटा नहीं लगता है।


0

सी, 68 बाइट्स

main(f,a){f&&scanf("%d",&a);f=a?a%10+((f=a<0)+main(0,f-a/10))*10:0;}

परिणामी संख्या को प्रिंट करने के बजाय प्रोग्राम इसे वापस लौटा देता है। जाहिर है कि यह अरनॉल्ड का उत्तर है , केवल अंतर यह है कि चूंकि सी की व्याख्या की गई भाषा नहीं है, इसलिए मुझे ऐसा लगा कि मुझे इसे केवल एक फ़ंक्शन के विपरीत एक पूर्ण कार्यक्रम बनाना चाहिए।


1
इसे कैसे लौटा रहा है? fजब मैं वास्तव में गूंगा हो रहा हूं तो फ़ंक्शन वापस आ जाता है।
अबलह

@ बार आप वास्तव में गूंगे नहीं हो रहे हैं, यह सिर्फ जीसीसी वास्तव में गूंगा है। यदि कोई गैर-शून्य फ़ंक्शन बिना किसी रिटर्न के समाप्त हो जाता है तो यह अंतिम असाइनमेंट का उपयोग करेगा।
एट्टोइन श्रदालु

0

जंग, 88 बाइट्स

fn g(mut n:i32)->i32{let mut r=n%10;n/=-10;if r<0{r+=10;n+=1;}if n==0{r}else{r+g(n)*10}}

यह प्रश्न में उपलब्ध एल्गोरिथ्म का सिर्फ एक पुनरावर्ती संस्करण है।

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