আমাকে আমার নম্বর গল্ফ সাহায্য করুন!


25

প্রোগ্রাম লেখার সময় , আমি সাধারণত কিছু সংখ্যার ধ্রুবক ব্যবহার করে শেষ করি। আমি সবসময় এগুলিকে দশমিক স্থানে রেখেছি কারণ এটি আমার মতামত, তবে আমি কেবল বুঝতে পেরেছিলাম যে আমার ভাষা অন্যান্য নম্বর ফর্ম্যাটকে সমর্থন করে যা আমার কোডটি কিছুটা ছোট করতে পারে।

চ্যালেঞ্জ

একটি ^ণাত্মক পূর্ণসংখ্যার 2 ^ 53-1 এর চেয়ে কম দেওয়া, সিদ্ধান্ত নিন যে সেই পূর্ণসংখ্যার মধ্যে সবচেয়ে কম প্রতিনিধিত্ব আছে কিনা:

  • দশমিক
  • হেক্সাডেসিমেল
  • বৈজ্ঞানিক স্বরলিপি

দশমিক

যেহেতু এটি আমার ভাষার ডিফল্ট ফর্ম্যাট, তাই এই বিন্যাসের জন্য কোনও অতিরিক্ত স্বরলিপি প্রয়োজন নেই। দশমিকের জন্য প্রতিটি সংখ্যা যথারীতি উপস্থাপিত হয়।

হেক্সাডেসিমেল

আমার ভাষাগুলি 0xহেক্সাডেসিমাল ধ্রুবকগুলির জন্য উপসর্গ ব্যবহার করে । এর অর্থ হ'ল যদি কোনও সংখ্যার 4 টি হেক্সাডেসিমাল অঙ্ক থাকে তবে সেই সংখ্যাটি উপস্থাপন করতে 6 বাইট লাগবে।

বৈজ্ঞানিক স্বরলিপি

আমার ভাষাটি বৈজ্ঞানিক স্বরলিপি দেওয়ার জন্য নিম্নলিখিত ফর্ম্যাটটি ব্যবহার করে:

[আসল বেস] ই [10 এর পূর্ণসংখ্যার এক্সপোঞ্জার]

উদাহরণস্বরূপ, 700হিসাবে উপস্থাপিত হবে 7e3, এবং 699এটি হিসাবে উপস্থাপিত হবে 6.99e3, কারণ বেসটি অবশ্যই -10 এবং 10 (অ-অন্তর্ভুক্ত) এর মধ্যে হওয়া আবশ্যক । এই চ্যালেঞ্জের উদ্দেশ্যে, বেসটি সর্বদা সর্বনিম্ন 0 হবে, যেহেতু ইনপুটযুক্ত নম্বরটি অ-নেতিবাচক।

আউটপুট

কোন ফর্ম্যাটটি সবচেয়ে সংক্ষিপ্ত তা শনাক্ত করার একটি উপায় আপনাকে ফিরিয়ে আনতে হবে (অর্থাত্ দশমিকের জন্য 0, হেক্সের জন্য 1, বৈজ্ঞানিক জন্য 2)। বিকল্পভাবে, আপনি নিজেরাই সংখ্যার ক্ষুদ্রতম প্রতিনিধিত্ব করতে পারেন।

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

Decimal       | Hexadecimal  | Scientific        | Winner
--------------|--------------|-------------------|-------------
0             | 0x0          | 0e0               | Decimal
15            | 0xF          | 1.5e1             | Decimal
6999          | 0x1B57       | 6.999e3           | Decimal
7000          | 0x1B58       | 7e3               | Scientific
1000000000000 | 0xE8D4A51000 | 1e12              | Scientific
1000000000001 | 0xE8D4A51001 | 1.000000000001e12 | Hexadecimal
1000000001000 | 0xE8D4A513E8 | 1.000000001e12    | Hexadecimal
1000001000000 | 0xE8D4B45240 | 1.000001e12       | Scientific

স্কোরিং

এটি , সুতরাং প্রতিটি ভাষার জন্য সবচেয়ে কম বাইটে উত্তর জিততে পারে।


1
2^63-1কিছু ভাষার পক্ষে যেতে প্রয়োজনীয় হতে পারে। স্বাচ্ছন্দ্যের বিষয়টি বিবেচনা করুন যেমন একটি নিম্ন মানের 2^32-1( যেমন মানগুলি একটি ডাবল ভাসমান পয়েন্টের ডেটা টাইপের সাথে ফিট করে)
লুইস মেন্ডো

1
আমি দেখি. কিভাবে প্রায় 2 ^ 52-1? যে এখনও ফিট double। শুধু একটি পরামর্শ; আপনি যেমন উপযুক্ত দেখেন তেমন করুন
লুইস মেন্ডো

1
1000001000000হিসাবে লেখা যেতে পারে 1000001e6
এরিক আউটগল্ফার

1
@ জোনাথান অ্যালান হ্যাঁ, এটি আপনিই ছিলেন, দুঃখিত এবং না, আপনি আদেশযুক্ত তালিকা আউটপুট নাও পেতে পারেন; যেহেতু এটি সিদ্ধান্ত-সমস্যা , তাই আপনাকে একটি একক আউটপুট নিয়ে সিদ্ধান্ত নেওয়া উচিত। (তবে আপনার বাস্তবায়ন তালিকাকে বাছাই করতে পারে এবং প্রথম আইটেম আউটপুট দেয়))
সঙ্গীতকার 523

1
সংজ্ঞা অনুসারে কোনও সিদ্ধান্ত-সমস্যা কি কেবল দুটি সম্ভাব্য আউটপুট থাকার কথা নয়?
mbomb007

উত্তর:


5

05 এ বি 1 ই , 23 বাইট

hg̹gD<g>¹ÀðìÁ0ÜðÜg+)Wk

এটি অনলাইন চেষ্টা করুন!

-1 এমিনগাকে ধন্যবাদ ।

0হেক্সাডেসিমালের 1জন্য, দশমিকের 2জন্য, বৈজ্ঞানিক জন্য।


সাথে একটি বাইট সংরক্ষণ করুন '.ìÁ0
এমিগানা

@ এমিগনা ওহ যে সর্বদা গল্ফ স্টাফগুলিকে প্রিপেন্ড করে।
এরিক আউটগল্ফার

4

05 এ বি 1 ই , 27 বাইট

Dg<¹À'.ìÁ0Ü'.Ü…ÿeÿIh…0xÿ)é¬

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

D                            # duplicate input, one copy will be used as decimal notation
 g<                          # len(input)-1
   ¹À                        # push input and rotate left
     '.ìÁ                    # prepend a dot and rotate right
         0Ü'.Ü               # remove trailing zeroes and then any trailing dot
              …ÿeÿ           # format scientific notation
                  Ih         # input converted to hex
                    …0xÿ     # format hex
                        )    # wrap in a list
                         é   # sort by length
                          ¬  # get the first (shortest) item

হ্যাঁ, এখানে ছোট কিছু হওয়া উচিত।
এরিক আউটগলফার

@ এরিকথ আউটগল্ফার: সম্ভবত। আমি বৈজ্ঞানিক স্বরলিপি দিয়ে অনেকগুলি বাইট ব্যয় করি। প্রকৃত মান তৈরি না করা এবং এর পরিবর্তে কেবল দৈর্ঘ্যগুলি পরীক্ষা করা সম্ভবত সংক্ষিপ্ত হবে।
এমিগানা

হেক্স দৈর্ঘ্য len(hex(input)) + 2, যদি এটি সাহায্য করে।
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার: হ্যাঁ, দৈর্ঘ্য হেক্স এবং দশমিকের জন্য পেতে 5 বাইট । এটি বৈজ্ঞানিক স্বরলিপি যা বাইটস পড়বে। সম্ভবত এটি বীট হবে।
এমিগানা

2
@ এরিকথ আউটগল্ফার: এর ¹পরিবর্তে ব্যবহার করছেন Ds:g¹hgÌ
এমিগানা

3

জেলি , 28 বাইট

TṀµỊ¬+‘
DµL’DL+Ç,L
b⁴L+2;ÇỤḢ

একটি মোনাডিক লিঙ্ক প্রত্যাবর্তন 1, 2বা 3হেক্সাডেসিমাল, বৈজ্ঞানিক বা দশমিকের জন্য যথাক্রমে।

এটি অনলাইন চেষ্টা করুন! অথবা একটি পরীক্ষা স্যুট দেখুন

আমি ভেবেছিলাম এটি আরও খাটো হবে তবে আমি এটি পোস্ট করতে পারছি না।

কীভাবে এই একত্ববাদ কাজ করে ...

TṀµỊ¬+‘    - Link 1, length of mantissa + "e": list of decimal digits  e.g. [7,0,1,0]
T          - truthy indexes                                                 [1,  3  ]
 Ṁ         - maximum                                                             3
  µ        - monadic chain separation, call that m
   Ị       - insignificant? (abs(m)<=1) -- here: 1 for m=1, 0 otherwise          0
    ¬      - logical not                  i.e. 1 if a "." will be used           1
     +     - add m                                                               4
      ‘    - increment                    always uses an 'e'                     5

DµL’DL+Ç,L - Link 2, lengths of scientific and decimal notations: non-negative-integer, n
D          - cast to decimal list
 µ         - monadic chain separation, call that d
  L        - length of d (number of decimal digits of n)
   ’       - decrement (value of exponent)
    D      - cast to decimal list (exponent's digits)
     L     - length (number of characters in the exponent)
       Ç   - call last link (1) as a monad(d) (number of characters in mantissa + "e")
         L - length of d (number of decimal digits of n)
        ,  - pair

b⁴L+2;ÇỤḢ - Main link: non-negative-integer, n
 ⁴        - literal 16
b         - convert n to base 16
  L       - length (number of hexadecimal digits)
   +2     - add two (number of characters including the "0x")
      Ç   - call the last link (2) as a monad (characters in scientific and decimal)
     ;    - concatenate ([charsInHexadecimal, charsInScientific, charsInDecimal])
       Ụ  - sort indexes by value
        Ḣ - head (1-based-index in the above list of (one of) the shortest)

1
28 বাইট !? পাশাপাশি সি ব্যবহার করতে পারেন ...: পি
TheLethalCoder

1
@ দ্য লেথলকোডার অবশ্যই একটি বিভ্রান্তিমূলক চ্যালেঞ্জ - সেখানে অবশ্যই একটি জিএল থাকতে হবে যা কেবলমাত্র বৈজ্ঞানিক স্বরলিপিতে সংখ্যার ফর্ম্যাট করতে পারে!
জোনাথন অ্যালান

@ দ্য লেথলকোডার আরও একটি প্রশ্নে একটি 75 বাইট জেলি উত্তর পোস্ট করেছেন যা খুব বেশি আগে নয়। কোনটা মনে নেই। আহ এটি ছিল এই এক , কিন্তু এই এক 83. হয়
Draco18s

@ ড্রাকো 18 আমার উভয়ই দেখছি! মন্তব্য আমার দিকে তাকাও প্রণীত এই এক যা 8 মাস আগে থেকে 91 দাঁড়িয়ে ছিল; আমি এটি 85 তে নামিয়ে দিয়েছি :)
জোনাথন অ্যালান

"দীর্ঘতম জেলি" বাক্যাংশটি কোডগলফ.স্ট্যাকেক্সেক্সঞ্জ.কম এ সীমাবদ্ধ করে সেগুলি খুঁজে পেতে আমাকে গুগল করতে হয়েছিল। : পি সেখানে তৃতীয়টি ছিল, তবে এটি ছিল মাত্র 57 টি বাইটের পালট্রি .... এছাড়াও আপনার
ড্রাকো 18s

2

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

দশমিকের জন্য 0, হেক্সাডেসিমালের জন্য 1, বৈজ্ঞানিক জন্য -1 প্রদান করে।

n=>(l=Math.log,D=l(n)/l(10),H=l(n)/l(16)+2,S=n.toExponential().length-1,S<H?-(S<D):+(H<D))

ব্যাখ্যা

  • log(n) / log(10): বেস -10 লোগারিদম এর n; nদশমিক হিসাবে দৈর্ঘ্য প্রায় ।

  • log(n) / log(16) + 2: nপ্লাস 2 এর বেস -16 লোগারিদম ; মোটামুটি nএকটি হেক্সাডেসিমাল প্লাস প্রিপেন্ডেড হিসাবে দৈর্ঘ্য 0x

  • n.toExponential().length - 1: বৈজ্ঞানিক বিন্যাসে (যেমন ) n.toExponential()স্ট্রিং প্রদান করে তবে আমরা এর দৈর্ঘ্য থেকে বহিরাগতের জন্য অ্যাকাউন্টে 1 টি বিয়োগ করি ।n7e+3+

এখন আমরা 3 উপস্থাপনা লেন্থ আছে D, Hএবং S, আমরা তুলনা করুন:
S<H?-(S<D):+(H<D)


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

এটির সংক্ষিপ্ত দৈর্ঘ্যের সাথে ফর্ম্যাটে সংখ্যাটি আউটপুট করে। @ শ্যাগির মুছে ফেলার চেষ্টা থেকে অনুপ্রাণিত ।

n=>[n+'','0x'+n.toString(16),n.toExponential().replace('+','')].sort((x,y)=>x.length-y.length)[0]


ভাল লাগল :) আমি অবাক হয়েছি যে আপনি আরও কিছুটা গল্ফের সমাধানের জন্য আমার পরিত্যক্ত প্রয়াস থেকে কিছুটা থামিয়ে দিতে পারেন? আপনি এটি পৃষ্ঠার শেষে মুছে ফেলা পোস্টগুলিতে পাবেন।
শেগি

@ শেগি ইয়ার্স মূলত পৃথক, যেহেতু এটি বিন্যাসিত সংখ্যাটি আউটপুট করে। পরিবর্তে আমি এর পরিবর্তে পৃথক উত্তর যুক্ত করেছি। :)
darrylyeo

1

সি #, 106 97 96 143 132 বাইট

using System.Linq;n=>new[]{n+"",$"0x{n:X}",(n+"").Insert(1,".").TrimEnd('0','.')+"e"+((n+"").Length-1)}.OrderBy(s=>s.Length).First()

বিরক্তিকরভাবে সি # এ ulong.ToStringফর্ম্যাট স্পেসিফায়ার eউচ্চ সংখ্যার উপর নির্ভুলতা হারিয়ে ফেলেছে তাই আমাকে নিজেই এটি করতে হয়েছিল। এটি করার খুব সম্ভবত একটি ছোট উপায় আছে তবে এটি আপাতত কাজ করে। এটি এই চ্যালেঞ্জটির জন্য এটিও ভুলভাবে ফর্ম্যাট করে তাই আমাকে যেকোনভাবেই এর আউটপুটটিকে ম্যানুয়ালি স্ট্রিপ করতে হবে।

যদি আমি মূল্য একটি স্ট্রিং সেট nহিসাবে var s=n+"";এটা স্পষ্ট প্রত্যাবর্তন এবং অতিরিক্ত কোঁকড়া ধনুর্বন্ধনী কারণ আর কাজ।

এটি প্রতিটি পৃথক মানের অ্যারে থেকে সংক্ষিপ্ততম মানটি দেয় যেখানে [0] = decimal, [1] = hexadecimal, [2] = scientific

সম্পূর্ণ / ফর্ম্যাট সংস্করণ:

using System.Linq;
Func<ulong, string> f = n =>
    new[]
    {
        n + "",
        $"0x{n:X}",
        (n + "").Insert(1, ".").TrimEnd('0', '.') + "e" + ((n + "").Length - 1)
    }.OrderBy(s => s.Length).First();

বৈজ্ঞানিক আউটপুট গণনা করার সঠিক উপায় হ'ল:

(n < 1 ? n + "" : (n + "").Insert(1, ".").TrimEnd('0', '.')) + "e" + ((n + "").Length - 1)

তবে আমার 0চেয়ে খাটো হিসাবে দেখা 0e0বিশেষ বিশেষ কেসটি সরাতে পারে।


1

পাইথন 2, 83 77 বাইট

সংখ্যার ক্ষুদ্রতম উপস্থাপনা আউটপুট করে।

import re
lambda n:min(`n`,hex(n),re.sub('\.?0*e\+0?','e','%.15e'%n),key=len)

এটি অনলাইনে চেষ্টা করুন

Ungolfed:

import re
n=input()
d=`n`
h=hex(n)
s=re.sub('(.)\.?0*e\+0?',r'\1e','%.15e'%n)
print min(d,h,s,key=len)

রেজেক্সটি প্রয়োজন অনুসারে পিছনের শূন্যগুলি এবং দশমিক বিন্দু, সেইসাথে যোগ চিহ্ন এবং এক্সপোনেন্ট থেকে শূন্যের একটি উপস্থিত থাকলে অপসারণ করে।


আমি মনে করি ব্যাকটিকগুলি Lইনপুট সীমার মধ্যে বৃহত্তর সংখ্যায় সংযোজন করবে । strযে এড়ানো হবে।
xnor

@xnor আমাদের সর্বাধিক পূর্ণসংখ্যাটি পাইথনের intপ্রতিনিধিত্বের মধ্যে। লং প্রায় শুরু হয় 2**63
mbomb007

আপনার কি রেজেক্স সাব্বিং করা দরকার? আপনি কি এর +সাথে অক্ষরগুলি সরাতে পারবেন str.replace?
musicman523

1
@ musicman523 এটি অনেক দীর্ঘ হবে। জিরোস এবং ডেসিমাল পয়েন্টটি অপসারণের জন্য রেজেক্স সাববিং যেভাবেই করা দরকার, এবং +আমি যখন থাকি তখন এটি সরাতে কেবল 2 বাইট হয় tes
mbomb007

1

ওহম , 35 বাইট

l┼xl2+┼DRîsRl≥al≤Dla°┼îa/ì\?≥;+WD╤k

এটি অনলাইন চেষ্টা করুন!

দশমিকের জন্য আউটপুট 0, হেক্সের জন্য 1 এবং বৈজ্ঞানিক জন্য 2।

ব্যাখ্যা:

l                                      Implicit input, get length                                          
 ┼                                     Input again
  x                                    To hex
   l                                   Get length
    2+                                 Add 2 because of "0x"
      ┼                                Get input again
       D                               Duplicate on the stack
        RîsR                           Remove zeroes at the end (reverse, to int, to string, reverse)
            l                          Get length (= length of base)
             ≥                         Add 1 because to count "e" in the scientific notation
              a                        Swap top two values on the stack
               l≤                      Get length - 1 ( = get the exponent of 10 in scientific notation)
                 D                     Duplicate on the stack
                  l                    Get length ( = length of the exponent)
                   a                   Swap. Now on top of the stack we have the exponent again
                    °                  10^exponent
                     Ō                Get input for the fourth time
                       a/              Divide input by the 10^exp calculated earlier
                         ì\?           If this thing is not an integer...
                            ≥;         ...add one to count the "."
                              +        Sum base length ( + "e") + exponent length ( + ".")
                               W       Wrap stack in array
                                D      Duplicate
                                 ╤k    Get index of min value

0

পিএইচপি , 90 বাইট

দশমিকের জন্য 0, হেক্সাডেসিমালের জন্য 1 এবং বৈজ্ঞানিক জন্য 2 টি মুদ্রণ করে

টাই এর ক্ষেত্রে সর্বাধিক নম্বর মুদ্রণ করা হবে

<?=array_flip($m=[$l=log10($a=$argn)^0,2+(log($a,16)^0),strlen(($a/10**$l).$l)])[min($m)];

এটি অনলাইন চেষ্টা করুন!

পিএইচপি , 91 বাইট

দশমিকের জন্য 0, হেক্সাডেসিমালের জন্য 1 এবং বৈজ্ঞানিক জন্য 2 টি মুদ্রণ করে

টাইয়ের ক্ষেত্রে সর্বনিম্ন সংখ্যাটি মুদ্রণযোগ্য হবে

<?=array_search(min($m=[$l=log10($a=$argn)^0,2+(log($a,16)^0),strlen(($a/10**$l).$l)]),$m);

এটি অনলাইন চেষ্টা করুন!

পিএইচপি , 103 বাইট

দশমিকের জন্য 0, হেক্সাডেসিমালের জন্য 1 এবং বৈজ্ঞানিক জন্য 2 টি মুদ্রণ করে

টাই করার ক্ষেত্রে সমস্ত সংখ্যা মুদ্রণযোগ্য হবে

foreach($m=[$l=log10($a=$argn)^0,2+(log($a,16)^0),strlen(($a/10**$l).$l)]as$k=>$v)echo$v-min($m)?"":$k;

এটি অনলাইন চেষ্টা করুন!

পিএইচপি , 109 বাইট

সংক্ষিপ্ততম সমাধানগুলির সাথে একটি অ্যারের আউটপুট করুন

for(;!$p=preg_grep("#^.{".++$i."}$#",[$a=$argn,"0x".dechex($a),$a/10**($l=log10($a)^0)."e$l"]););print_r($p);

এটি অনলাইন চেষ্টা করুন!


0

সি, 187 185 বাইট

main(){long long N;scanf("%lli",&N);long long D=log10(N)+1,H=log(N)/log(16)+3,F,S,i=1;while(N>i&&!(N%i))i*=10,F++;S=ceil(log10(D-1))+1+D-F+(D-F>1);printf("%i",N?H>D?2*(D>S):1+(H>S):N);}

decompressed:

void main(){
    long long N;
    scans("%lli", &N);
    long long D = log10(N) + 1; // Length of number (decimal)
    long long H = log(N)/log(16) + 3; // Length of number (hexadecimal)
    long long F; // Number of 0s at the end of decimal number
    long long S; // Length of number (scientific notation)
    long long i; // Counter (more or less)
    // Get number of zeros at the end of decimal number
    while(N > i && (N % i) == 0){
        i = i * 10;
        F++;
    }
    S = ceil(log10(D - 1)) + 1 + D - F + (D-F>1); // (Power) + (e) + (multiplier + (1 if len(multiplier) > 1))
    printf("%i", N!=0 ?
                (H > D ? 2 * (D > S) : 1 + (H > S)) 
              : 0); // Print the shortest number
}

দশমিকের জন্য 0 টি, হেক্সের জন্য 1 টি, বৈজ্ঞানিক স্বরলিপির জন্য 2 টি মুদ্রণ করুন।


0

টিআই-বেসিক, 130 বাইট

Input N:If not(N:Goto 0:1+int(log(N→D:3+int(logBASE(N,16→H:0→F:1→I:While N>I and not(fPart(N/I:10I→I:F+1→F:End:log(D-1→L:1+D-F+(D-F>1):Ans+int(L)+(0≠fPart(L→S:(H>D)2(D>S)+(H≤D)(1+(H>S)→N:Lbl 0:N

অথবা, বিকল্পভাবে:

�N>θN>�0>1p��ND>3p�������BASEN+16H>0F>1I>�NlI@��N�I>10II>Fp1F>�>�Dq1L>1pDqFpDqFl1>rp�Lp0o�LS>HlD2DlSpHmD1pHlSN>�0>N

বা, হেক্সে:

dc4e3eceb84e3ed7303e3170b1c04e04443e3370b1bbbcbbbfbbb642415345104e2b313604483e3004463e3104493ed14e6c4940b8ba4e83493e31304904493e46703104463ed43ec0447131044c3e317044714670104471466c31113e7270b14c117010306fba4c04533e10486c44113210446c53117010486d441110317010486c5311044e3ed6303e4e

দশমিকের জন্য 0 টি, হেক্সের জন্য 1 টি, বৈজ্ঞানিক স্বরলিপির জন্য 2 টি মুদ্রণ করুন

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