বেস -10 এ আউটপুট এন


18

চ্যালেঞ্জ:

আপনার পছন্দের প্রোগ্রামিং ভাষার ক্ষেত্রে, বেস 10-এ ইনপুট হিসাবে কোনও পূর্ণসংখ্যা গ্রহণ করুন এবং এটি নেগাদেসিমাল নোটেশনে আউটপুট করুন , যা বেস -10 নামেও পরিচিত

উদাহরণ অ্যালগরিদম:

ভিবিপি.এনইটি-তে যে কোনও নেতিবাচক বেসে বেস 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
আমি মনে করি আপনি কেবল বিল্ট-ইনগুলিই ব্যর্থ করতে চান যা এই নির্দিষ্ট সমস্যাটি সমাধান করে এবং সমস্ত বিদ্যমান বিলিটিনগুলি নয় not
ডেনকার 15

সম্পর্কিত ওইআইএস
devRicher

6
আপনার একটি নেতিবাচক পরীক্ষার কেস যুক্ত করা উচিত।
xnor

1
চান [0, 1, 8, 1, 6, 8]ইনপুট জন্য একটি গ্রহণযোগ্য আউটপুট হতে 2048?
ডেনিস

2
এটি অনুমান করা উচিত। আপনার ভিবি কোড দেখে মনে হচ্ছে এটি কোনও তালিকা প্রত্যাবর্তন করবে।
ডেনিস

উত্তর:


12

জাভাস্ক্রিপ্ট (ES6), 51 45 37 বাইট

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

পরীক্ষার মামলা


এই অ্যালগরিদমের জন্য কোনও রেফারেন্স আছে?
ডিফরানান

পছন্দ করেছেন প্রস্তাবিত অ্যালগরিদম দিয়ে শুরু করে এটি বেশ কয়েকটি গল্ফিং পুনরাবৃত্তির ফলাফল।
আর্নল্ড

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

পাইথন 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)
ডিফরানান

কীভাবে ডাকছেন? আমি করছি এই (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 + Y ↦ X, Y

পাইথনে (এবং, এক্সটেনশনের মাধ্যমে, জেলি), মডিউল অপারেটরের ফলাফল সর্বদা নেতিবাচক থাকে, সুতরাং (বিএক্স + ওয়াই)% | বি | = Y

এছাড়াও, পূর্ণসংখ্যা বিভাগ সর্বদা গোল হয়, এটি নিশ্চিত করে যে যদি q = n / d এবং r = n% d হয় তবে সমানতা n = qd + r হ'ল। S যদি b এর চিহ্ন হয় তবে (sx) | b | + y = বিএক্স + ওয়াই , তাই এসএক্স = (বিএক্স + ই) / | বি | এবং, অতএব, 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

সিম্পিম্পেল্পলেট , 147 বাইট

এটি একটি টেম্পলেট ভাষা যা আমি কাজ করছি।
কোনওভাবেই এটি গল্ফিংয়ের জন্য বোঝানো হয়নি।
এমনকি এটিতে সম্পূর্ণ বেসিক গণিতের অভাব রয়েছে তবে এটি পিএইচপি এর ছোট ছোট স্নিপেটগুলি সরাসরি লিখতে দেয়।
এটি এই সমস্যাটিকে ঘিরে কাজ করে।

{@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}

এটি সতর্কতাগুলির একটি গোছা ফেলে দেয়।
কোডটি পিএইচপি-তে "সংকলিত" হয়।

জঞ্জালযুক্ত, ট্র্যাশ হোয়াইটস্পেস সহ:

{@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 ইউটিসি + 00: 00।
এটি প্রতিশ্রুতিবদ্ধভাবে 140e56ff38f45fa4fd40fd3ec382094e707b1bad থেকে 2017-01-06 23:27 ইউটিসি + 00: 00 এ কাজ করে।
এই উত্তরটি চালানোর জন্য এটি ব্যবহৃত সংস্করণ।

পিএইচপি কোড https://raw.githubusercontent.com/ismael-miguel/SimpleTemplate/140e56ff38f45fa4fd40fd3ec382094e707b1bad/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পূর্ণসংখ্যার যুক্তি গ্রহণ করে এবং একটি স্ট্রিং ফিরিয়ে ফাংশনকে সংজ্ঞায়িত করে । একটি পুনরাবৃত্ত আলগোরিদিম Ar আরনাউল্ডের উত্তরে একই অ্যালগরিদমের মতো দেখায় । এটি নেতিবাচক সংখ্যাগুলিতেও কাজ করে। (এটি যদি ইনপুট 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যখন আমি সত্যিই বোবা না হয়ে ফাংশনটি ফিরে আসে তখন সুযোগের বাইরে চলে যায়।
abligh

@ অলিগ আপনি সত্যিই বোবা হচ্ছেন না, কেবল জিসিসি সত্যিই বোবা হচ্ছে। যদি কোনও অ-শূন্য ফাংশন কোনও রিটার্ন ছাড়াই শেষ হয় তবে এটি কেবল সর্বশেষ অ্যাসাইনমেন্টটি ব্যবহার করবে।
এতাoinইন শারদলু

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}}

এটি প্রশ্নের মধ্যে সরবরাহ করা অ্যালগরিদমের কেবল একটি পুনরাবৃত্ত সংস্করণ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.