সমস্ত সম্ভাব্য বেস উপস্থাপনার যোগফল সন্ধান করুন


20

এই চ্যালেঞ্জের উদ্দেশ্যটি হ'ল 2 এবং 36 এর মধ্যে যতগুলি বেস থেকে কেবল অক্ষর এবং সংখ্যা রয়েছে বলে মনে করা যেতে পারে তার ইনপুট স্ট্রিংকে রূপান্তর করতে একটি প্রোগ্রাম লিখুন এবং ফলাফলগুলির 10 টি যোগফলটি সন্ধান করুন।

ইনপুট স্ট্রিংটি সমস্ত ঘাঁটিতে রূপান্তরিত হবে যেখানে 36 পর্যন্ত বেসগুলির জন্য স্ট্যান্ডার্ড বর্ণমালা অনুযায়ী সংখ্যার সংজ্ঞা দেওয়া হবে 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ। উদাহরণস্বরূপ, ইনপুটটি 2Tকেবলমাত্র 30 এবং উচ্চতর বেসগুলিতে বৈধ হবে। প্রোগ্রামটি 30 টি বেস থেকে 2 টিকে 36 এর মধ্যে দশমিকের মধ্যে রূপান্তর করবে এবং ফলাফলগুলি যোগ করবে।

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


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

নমুনা ইনপুট: 2T

সম্ভাব্য ঘাঁটিগুলির তালিকা

Base   Value
30     89
31     91
32     93
33     95
34     97
35     99
36     101

আউটপুট: 665

নমুনা ইনপুট: 1012

সম্ভাব্য ঘাঁটিগুলির তালিকা:

Base   Value
3      32
4      70
5      132
6      224
7      352
8      522
9      740
10     1012
11     1344
12     1742
13     2212
14     2760
15     3392
16     4114
17     4932
18     5852
19     6880
20     8022
21     9284
22     10672
23     12192
24     13850
25     15652
26     17604
27     19712
28     21982
29     24420
30     27032
31     29824
32     32802
33     35972
34     39340
35     42912
36     46694

আউটপুট: 444278

নমুনা ইনপুট: HELLOworld

সম্ভাব্য ঘাঁটিগুলির তালিকা

Base   Value
33     809608041709942
34     1058326557132355
35     1372783151310948
36     1767707668033969

আউটপুট: 5008425418187214

ইনপুট 2 এবং 36 এর মধ্যে সমস্ত বেসের 0মতো পড়বে 0। বেস 1 এর মতো জিনিস নেই।


এটি কোড গল্ফ। স্ট্যান্ডার্ড বিধি প্রয়োগ। বাইটস মধ্যে সংক্ষিপ্ত কোড।


5
বেস রূপান্তরকরণের জন্য বিল্টিনগুলি কি অনুমোদিত?
lirtosiast

2
গুরুত্বপূর্ণ পরীক্ষার কেস:0
মার্টিন এেন্ডার

এটি ডাং, আমি একটি খুব অনুরূপ চ্যালেঞ্জ পোস্ট করতে যাচ্ছি।
DanTheMan

3
@ মার্টিনবাটনার কেন 0একটি গুরুত্বপূর্ণ পরীক্ষার মামলা? 0হয় 0যে বেস, এবং সেখানে বেস 1. যেমন জিনিস আছে
Arcturus

3
@ এরিডান কারণ কিছু ভাষা সম্ভবত এটি বেস 1 থেকে রূপান্তর করার চেষ্টা করতে পারে এবং ব্যর্থ হয়।
মার্টিন এন্ডার

উত্তর:


12

পাইথন 3, 72 71 69 বাইট

একটি বাইট সংরক্ষণের জন্য FryAmTheEggman কে ধন্যবাদ!

2 বাইট সংরক্ষণের জন্য ডিএসএমকে ধন্যবাদ!

N=x=0
y=input()
while N<36:
 N+=1
 try:x+=int(y,N)
 except:0
print(x)

@ থমাসকওয়া এটি একটি শূন্য যোগ করবে, যা খাঁটি সংখ্যাগত ইনপুটগুলির জন্য কাজ করবে না কারণ এটি 10 ​​এর বেস (যা কিছু ফলাফল খুব বেশি বড় করবে) তা পরীক্ষা করে দেখাবে
কেভিন ডব্লিউ।

@ ফ্রাইএইমডিজম্যান ধন্যবাদ! আমি এটি সামঞ্জস্য করেছি
আদনান

শুধু আপনার জন্য চেক করা হয়েছে। try exceptআপনাকে যা করতে দেওয়া হবে range(37)। দুই বাইট!
শার্লক 9

@ শার্লক ৯ এটি খাঁটি অঙ্কের ইনপুটগুলির জন্য কাজ করবে না, এগুলিকে বেস 10 নম্বর হিসাবে ব্যাখ্যা করা হবে।
আদনান

ওহ, ডার্ন। @ আদনান
শার্লক 9

10

পাইথ, 20 19 11 বাইট

sm.xizd0S36

সুস্পষ্টভাবে তার পাইথন উত্তর থেকে আদনান এর ধারণা চুরি।

এখানে চেষ্টা করুন


@orlp আপনি অপসারণ করতে পারেন Sগৃহস্থালির কাজ
নীল

নাঃ। পরীক্ষা 1012
orlp

4

খাঁটি বাশ (কোনও উপযোগ নেই), 38

ধরে নেওয়া অন্তর্নির্মিত বেস রূপান্তরগুলি অনুমোদিত:

for((b=36;s+=$b#$1;b--));{ :;}
echo $s

এটি STDERR এ ত্রুটি আউটপুট দেবে। আমি ধরে নিচ্ছি এই মেটা উত্তর অনুসারে এটি ঠিক আছে ।

পরীক্ষার আউটপুট:

$ for t in 0 2T 1012 HELLOworld; do ./basesum.sh $t; done 2> /dev/null
0
665
444278
5008425418187214
$ 

3

গণিত, 57 বাইট

#~Sum~{x,Max@CoefficientList[#,x]+1,36}&@FromDigits[#,x]&

আপনি জন্য infix ফর্ম ব্যবহার করতে পারেন FromDigits
LegionMammal978

3

গুরুতরভাবে, 65 বাইট

,û;╗rk`"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"íu`MSd:37:@x`╜¿`MΣ.

প্রিন্টেবলস, হেক্সডাম্প সমন্বিত:

2c963bbb726b6022303132333435363738394142434445464748494a4b4c4d4e4f505152535455565758595a22a175604d53643a33373a407860bda8604de42e7f

দুর্ভাগ্যক্রমে আমার কাছে টাইপের উপর ভিত্তি করে তালিকা থেকে ফিল্টার করার ভাল উপায় নেই। স্ব নোট: এটি যোগ করুন।

ইনপুট লাগে "2T"

এটি অনলাইনে চেষ্টা করুন (আপনাকে ম্যানুয়ালি ইনপুট প্রবেশ করতে হবে)

ব্যাখ্যা:

,û    get input and convert to uppercase
;╗    make a copy and save to register 0
rk    explode string into list
`"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"íu`M  map the function over the list:
    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"íu    get the character's index in the string and add one to get a value in [1,36]
Sd    get maximum element (maximum base aka max_base) from list by sorting and popping the last element off and pushing it to the stack
:37:@x  push range(max_base,37)
`╜¿`M  map the function over the list:
    ╜¿    convert value in register 0 to an int, interpreting it as a base-n int (n is value from list)
Σ.    sum and print
0x7f  quit

সম্ভবত সিরিয়াসলি এমন একটি আদেশ থাকতে হবে যা বর্ণমালা এবং / অথবা সংখ্যা 0-9 তৈরি করে?
আর্কটরাস

@ এরিডান এটি গুরুত্ব সহকারে হওয়া উচিত - এই সূচকটি পেতে অর্ধেক বাইট খরচ হয়।
মেগো


2

অক্টাভা, 75 73 বাইট

function v=u(a) m([48:57 65:90])=0:35;v=sum(polyval(t=m(a),max(t)+1:36));

ব্যাখ্যা:

function v=u(a) 
   m([48:57 65:90])=0:35; %// create a map: '0'-'9' = 0-9
                          %//               'A'-'Z' = 10-35
   t=m(a);                %// convert string to mapped values
   b=max(t)+1;            %// find minimum base
   p=polyval(t,b:36);     %// calculate polynomial for each base (vectorized)
   v=sum(p);              %// and return the sum of the resulting vector

polyvalএটি base2decভেক্টরাইজড হওয়ার চেয়ে আরও বেশি সুবিধা রয়েছে , সুতরাং কোনও forলুপের প্রয়োজন নেই।

কেবল '0' .. '9' এবং উচ্চ-কেস 'এ' .. 'জেড' ইনপুট হিসাবে সমর্থিত।


polyvalভেক্টরাইজ করতে খুব চতুর ব্যবহার !
লুইস মেন্ডো

1

জাপট , 26 বাইট

1+U¬r@XwYn36}0)o37 £UnX} x

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

অবহেলিত এবং ব্যাখ্যা

1+U¬ r@   XwYn36}0)o37 £    UnX} x
1+Uq rXYZ{XwYn36}0)o37 mXYZ{UnX} x

           // Implicit: U = input string
Uq rXYZ{   // Split U into chars, and reduce each item Y and previous value X by:
XwYn36     //  Choosing the larger of X and parseInt(Y,36),
}0         // starting at 0.
1+   )o37  // Add 1 and create a range from this number to 36.
mXYZ{UnX}  // Map each item X in this range to parseInt(U,X)
x          // and sum.
           // Implicit: output last expression


1

সিজেম, 28 27 বাইট

রেটো কোরাদি ধন্যবাদ 1 বাইট সংরক্ষণ করার জন্য

এটা দারুণ ভয়ঙ্কর ...

qA,s'[,65>+f#_:e>)37,>\fb:+

বড় হাতের অক্ষর প্রয়োজন।

এটি এখানে পরীক্ষা করুন।

সিজেমে স্ট্রিংগুলি থেকে অন্তর্নির্মিত বেস -৩ convers রূপান্তর নেই, সুতরাং আমাদের নিজেরাই স্ট্রিংগুলি চিঠি লিখতে হবে। আমি বিভিন্ন ধরণের ডিভোড শেনিনিগান চেষ্টা করছি, তবে সমস্ত 36 টি সংখ্যার একটি স্ট্রিং তৈরি করা সবচেয়ে কম বলে মনে হচ্ছে এবং সেই স্ট্রিংয়ের প্রতিটি অক্ষরের সূচকটি সন্ধান করতে হবে।


q{'0-_9>7*-}%ঠিক যেমন সংক্ষিপ্ত।
পিটার টেলর

@ পিটারটেলর ওহ, ঠিক আছে ...
মার্টিন এন্ডার

1

সি ফাংশন, 93 (শুধুমাত্র 32 বিট পূর্ণসংখ্যার আউটপুট)

কেবলমাত্র INT_MAX এ আউটপুট যেতে হবে তা ধরে নিচ্ছি, তবে আমরা এটি করতে পারি:

i,n,x;f(char *s){char *e;for(i=36,x=0;n=strtol(s,&e,i--),!*e&&i;)x+=*e?0:n;printf("%d\n",x);}

শেষ টেস্টকেস সূচিত করে যে এটি সম্ভবত যথেষ্ট নয়। যদি তা হয় তবে আমাদের সাথে 64৪-বিট পূর্ণসংখ্যার সাথে:

সি ফাংশন, 122

#include<stdlib.h>
f(char *s){long long i=36,n,x=0;char *e;for(;n=strtoll(s,&e,i--),!*e&&i;)x+=*e?0:n;printf("%lld\n",x);}

দুর্ভাগ্যক্রমে #include <stdlib.h>প্রয়োজনীয় প্রয়োজন তাই রিটার্নের ধরণটি strtoll()সঠিক। টেস্টকেস long longপরিচালনা করতে আমাদের ব্যবহার করা দরকার to HELLOworldঅন্যথায় এটি মোটামুটি কিছুটা ছোট হতে পারে।

পরীক্ষামূলক চালক:

#include<stdlib.h>
f(char *s){long long i=36,n,x=0;char *e;for(;n=strtoll(s,&e,i--),!*e&&i;)x+=*e?0:n;printf("%lld\n",x);}

int main (int argc, char **argv)
{
    f("0");
    f("2T");
    f("1012");
    f("HELLOworld");
}

পরীক্ষার আউটপুট:

$ ./basesum
0
665
444278
5008425418187214
$ 

সি-তে আপনি #include <stdlib.h>কি সি ++ এর মতো জায়গাগুলি সরাতে পারবেন?
অ্যালেক্স এ।

@AlexA। হ্যাঁ - আমি এটি জানতাম না - ধন্যবাদ!
ডিজিটাল ট্রমা

0

পাইথন 3, 142 বাইট

তাদের সমাধানের সাথে আদনান আমাকে মারধর করেছে, তবে আমি নিজের চেষ্টাটি যোগ করতে চাইনি।

def f(s):
 t=0
 for x in range(37):
  n=0
  for i in s:
   try:m=int(i)
   except:m=ord(i)-55
   if x<=m:n=0;break
   n=n*x+m
  t+=n
 return t

এই ফাংশনটি কেবল বড় হাতের ইনপুটগুলি পরিচালনা করে। যোগ .upper()করার জন্য for i in s, এবং এটি উভয় বড় হাতের এবং ছোট হাতের হ্যান্ডেল করবে।


0

স্কেল 2.11, 93 বাইট

এটি স্কালা কনসোলে চালানো হয়।

val i=readLine
var s=0
for(j<-2 to 36)try{s=s+Integer.parseInt(i,j)}catch{case _:Exception=>}

0

হাস্কেল, 97 বাইট

i c|'_'<c=fromEnum c-87|1<2=read[c]
f s=sum$map((`foldl1`map i s).((+).).(*))[1+i(maximum s)..36]

শুধুমাত্র ছোট হাতের অক্ষর সমর্থন করে। ব্যবহারের উদাহরণ:

f "2t"           -> 665
f "helloworld"   -> 5008425418187214

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

এটি কীভাবে কাজ করে: iএকটি অক্ষরকে cএটির ডিজিটের মানতে রূপান্তর করে (যেমন i 't'-> 29)। fপ্রতিটি সম্ভাব্য বেসের জন্য ইনপুট স্ট্রিংয়ের মান গণনা করে এবং এটির যোগফল। ভেতরের লুপ একটি অ pointfree সংস্করণ map (\base -> foldl1 (\value digit -> value*base + digit) (map i s)) [ ...bases... ]


0

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

s=>eval(`p=parseInt;b=2;[...s].map(d=>(v=p(d,36))>b?b=v:0);for(r=0;++b<37;)r+=p(s,b)`)

ব্যাখ্যা

s=>
  eval(`                     // use eval to enable for loop without return keyword or {}
    p=parseInt;
    b=2;                     // b = minimum base of s
    [...s].map(d=>           // iterate through each digit d
      (v=p(d,36))            // get it's base-36 value
        >b?b=v:0             // set b to the max value
    );
    for(r=0;++b<37;)         // r = sum of all base values
      r+=p(s,b)              // add each base value from b to 36 to r
  `)                         // implicit: return r

পরীক্ষা


&&b=v1 বাইট ওভার সাশ্রয় করে ?b=v:0
নীল

@ নীল আপনি কি এটি পরীক্ষা করেছেন? আমি নিশ্চিত যে এটি একটি অবৈধ কাজ বরাদ্দ হবে।
ব্যবহারকারী 81655

দুঃখিত, আমি এটি অন্য গল্ফের অনুরূপ কেস দিয়ে বিভ্রান্ত করেছিলাম
নীল


0

সিলোন, 100 96 বাইট

Integer b(String s)=>sum(((any(s*.letter)then 11else 2)..36).map((r)=>parseInteger(s,r)else 0));

আমি প্রথম এই সহজ সংস্করণটি পেয়েছিলাম মাত্র 69 বাইট:

Integer b(String s)=>sum((2..36).map((r)=>parseInteger(s,r)else 0));

তবে এটি প্রথম পরীক্ষার ক্ষেত্রে ব্যর্থ হয়, 2000000000665পরিবর্তে ফিরে 665। ( কারণ হ'লT মধ্যে 2T, তেরা যেমন পার্স করা হয় অর্থাত তা বৃদ্ধি পায় 2 10 ^ 12, সঙ্গে র্যাডিক্স 10. যখন ) তাই আমরা এই ক্ষেত্রে আলাদাভাবে ধরা প্রয়োজন। নীলকে এটির জন্য আলাদা উপায় প্রস্তাব করার জন্য ধন্যবাদ যা 4 বাইট সংরক্ষণ করেছে।

বিন্যাসকৃত:

// Find sum of all possible base representations.
//
// Question:  /codegolf//q/65748/2338
// My Answer: /codegolf//a/65836/2338

Integer b(String s) =>
// take the sum of ...
        sum(
    // span from 2 to 36. (Though
    // if there are letters in there, we start at 11,
    // because the other ones can't be valid.
    // Also, parseInteger(s, 10) behaves a bit strange in Ceylon.)
    ((any(s*.letter) then 11 else 2) .. 36)
    // map each r of them to ...
        .map((r) =>
            // try parsing s as a number using base r
            parseInteger(s, r)
            // if that didn't succeed, use 0.
                    else 0
    )
);

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