সময় ট্র্যাভেলিং স্টক ব্যবসায়ী


21

গল্প
অনেক দিন আগে ববি 1 সটোশি (1e-8 বিটিসি, ক্ষুদ্রতম মুদ্রা ইউনিট) সহ একটি বিটকয়েন ওয়ালেট তৈরি করেছিল এবং এটি সম্পর্কে ভুলে গিয়েছিল। অন্য অনেকের মতো তিনি পরে যদিও "ধিক্কার, যদি কেবল আমি আরও বেশি বিনিয়োগ করি তবে ..."।
দিবাস্বপ্নে থামছে না, সে তার সময় এবং অর্থের সমস্তটাই একটি সময় মেশিন তৈরিতে উত্সর্গ করে। তিনি তার বেশিরভাগ সময় তার গ্যারেজে ব্যয় করেন, পার্থিব বিষয়গুলি সম্পর্কে অসচেতন এবং তাঁর সম্পর্কে প্রচারিত গুজবগুলি। মিস পেমেন্টের কারণে বিদ্যুৎ বন্ধ হওয়ার প্রায় একদিন আগে তিনি প্রোটোটাইপটি সম্পূর্ণ করেন। তার ওয়ার্কবেঞ্চ থেকে তাকিয়ে তিনি দেখতে পান একটি পুলিশ ভ্যান তার বাড়ির দিকে টানছে, দেখে মনে হচ্ছে দুর্বল প্রতিবেশীরা ভেবেছিল যে সে তার গ্যারেজে মেথ ল্যাব চালাচ্ছে এবং পুলিশকে ডেকেছে।
পরীক্ষা চালানোর কোনও সময় না দিয়ে সে বিগত বছরগুলির এক্সচেঞ্জ রেট ডেটার সাথে একটি ইউএসবি-স্টিক আঁকড়ে ধরে, ফ্লাক্স ক্যাপাসিটরকে কোয়ান্টাম ডিস্কোমোবুলেটরটির সাথে সংযুক্ত করে এবং যখন সে তার ওয়ালেট তৈরি করেছিল তখন সে নিজেকে আবার ফিরিয়ে নিয়ে যায় finds

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

ইনপুট
ফ্লোটস> 0 এর একটি তালিকা, একটি স্ট্রিং হিসাবে একক অক্ষর দ্বারা পৃথক (নিউলাইন, ট্যাব, স্পেস, সেমিকোলন, আপনি যা পছন্দ করেন) প্রোগ্রামে কমান্ড লাইন আর্গুমেন্ট হিসাবে পাস হয়েছে, একটি টেক্সটফাইল বা এসটিডিআইএন থেকে পড়া বা প্যারামিটার হিসাবে পাস হয়েছে একটি ফাংশন। আপনি স্ট্রিংয়ের পরিবর্তে সংখ্যাসূচক ডেটাটাইপ বা অ্যারে ব্যবহার করতে পারেন কারণ এটি বন্ধনীর সাথে মূলত কেবল একটি স্ট্রিং।

আউটপুট
যে বিষয়টির সাহায্যে ববিস মূলধন ট্রেডিংয়ের শেষে গুন করেছে।

উদাহরণ

Input:  0.48 0.4 0.24 0.39 0.74 1.31 1.71 2.1 2.24 2.07 2.41

বিনিময় হার: 0.48 B / বিটিসি, যেহেতু এটি ড্রপ হতে চলেছে আমরা সমস্ত বিটকয়েনগুলি 4.8 ন্যানোডোল্লারে বিক্রি করি। ফ্যাক্টর = 1 এক্সচেঞ্জ রেট: 0.4, কিছুই করবেন না
এক্সচেঞ্জ রেট: 0.24 B / বিটিসি এবং ক্রমবর্ধমান: সমস্ত $ কে 2 সন্তোষে রূপান্তর করুন। ফ্যাক্টর = 1 (ডলারের মান এখনও অপরিবর্তিত)
বিনিময় হার: 0.39 - 2.1 $ / বিটিসি: কিছুই করবেন না
এক্সচেঞ্জ রেট: 2.24 2. / বিটিসি: ড্রপের আগে সমস্ত কিছু বিক্রয় করুন। 44.8 ন্যানোডোল্লার, ফ্যাক্টর = 9.33
এক্সচেঞ্জ রেট: 2.07 $ / বিটিসি: কিনুন 2.164 সন্তোষ, ফ্যাক্টর = 9.33
এক্সচেঞ্জ রেট: 2.41 $ / বিটিসি: 52.15 ন্যানোডোল্লার কিনুন, ফ্যাক্টর = 10.86

Output: 10.86

অতিরিক্ত বিশদ
আপনি অদ্ভুত প্রান্তের ক্ষেত্রে যেমন অবিরত ইনপুট, শূন্য- বা নেতিবাচক মান, কেবল একটি ইনপুট নম্বর ইত্যাদি উপেক্ষা করতে পারেন
। প্রকৃত স্টক চার্ট পরীক্ষা করার জন্য বা ব্যবহারের জন্য আপনার নিজস্ব এলোমেলো সংখ্যা উত্পন্ন করতে নির্দ্বিধায় বোধ করবেন। এখানে পরীক্ষার জন্য দীর্ঘতর ইনপুট রয়েছে (প্রত্যাশিত আউটপুট আনুমানিক 321903884.638)
আপনার কোড
গ্রাফগুলি কী প্রশংসা করে তবে প্রয়োজনীয় নয় তা সংক্ষেপে ব্যাখ্যা করুন


আমরা যদি ফাংশন আর্গুমেন্টের মাধ্যমে নম্বরগুলি গ্রহণ করি, এটি কি এখনও একটি স্ট্রিং হতে হবে, বা আমরা সরাসরি একটি অ্যারে নিতে পারি?
মার্টিন এন্ডার

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

অসীম ইমপ্রোবিলিটি ড্রাইভের কী হবে? :)
ডুরকনব

2
সমস্যা ফিরে পেতে, আমাদের প্রতিটি পুনরাবৃত্তির উপর বিটিসি এবং / বা $ একটি নির্দিষ্ট নির্ভুলতায় মানগুলি বৃত্তাকার করা দরকার? উদাহরণস্বরূপ, বাস্তব বিশ্বে কারোর বিটিসি ওয়ালেটটি অবশ্যই সাতোশীতে গোল করতে হবে। এটি একটি পার্থক্য করে, কারণ আপনার উদাহরণস্বরূপ, 2.07 এ আপনি কেবল 2s (2.164 নয়) কিনতে পারবেন; তারপরে 2.41 এ আপনার 2s আপনাকে 48.2 n buy (52.15 নয়) কিনে তাই ফ্যাক্টরটি 10.04 (10.86 নয়)। পরিবর্তন না করে আপনি আলাদা $ ওয়ালেট না রাখলে এবং প্রতিবার এটি যুক্ত করার প্রয়োজন নেই। ডলারের কী হবে? আজ কেউ কি ন্যানোডোলার থাকার দাবি করতে পারে? আমি বিশ্বাস করি যে সবচেয়ে কম পরিমাণে রাখা যায় তা 1 ¢ ¢
টোবিয়া

1
@ কর্টআ্যামমন: আপনি বলছেন যে বিটিসি ট্রেডিং বিশৃঙ্খলা নয় ? ;-)
স্টিভ জেসপ

উত্তর:


10

এপিএল, ১rs টি চর

{×/1⌈÷/⊃⍵,¨¯1⌽⍵}

এই সংস্করণ ব্যবহার @Frxstrem এর সহজ অ্যালগরিদম এবং @xnor এর max(r,1)ধারণা।

এটি ধরেও নিয়েছে যে সিরিজটি সামগ্রিকভাবে বৃদ্ধি পাচ্ছে, অর্থাৎ, প্রথম বিটকয়েনের মান সর্বশেষের চেয়ে ছোট is এটি সমস্যার বর্ণনার সাথে সামঞ্জস্যপূর্ণ। আরও সাধারণ সূত্র পেতে, প্রথমে দুটি হার বাদ দিতে হবে, ২ টি চর যোগ করে:{×/1⌈÷/⊃1↓⍵,¨¯1⌽⍵}

উদাহরণ:

    {×/1⌈÷/⊃⍵,¨¯1⌽⍵}  0.48 0.4 0.24 0.39 0.74 1.31 1.71 2.1 2.24 2.07 2.41
10.86634461
    {×/1⌈÷/⊃⍵,¨¯1⌽⍵}  (the 1000 array from pastebin)
321903884.6

ব্যাখ্যা:

এক্সচেঞ্জ রেট ডেটা দিয়ে শুরু করুন:

    A←0.48 0.4 0.24 0.39 0.74 1.31 1.71 2.1 2.24 2.07 2.41

প্রতিটি সংখ্যাকে পূর্ববর্তী একের সাথে জুড়ুন (প্রথমটি শেষের সাথে যুক্ত করা হবে) এবং এগুলি একটি ম্যাট্রিক্সে রাখুন:

    ⎕←M←⊃A,¨¯1⌽A
0.48 2.41
0.4  0.48
0.24 0.4
0.39 0.24
0.74 0.39
1.31 0.74
1.71 1.31
2.1  1.71
2.24 2.1
2.07 2.24
2.41 2.07

প্রতিটি সারি বিভাগ দ্বারা হ্রাস করুন, অনুপাত> 1 সহ এগুলি রাখুন এবং গুণন দ্বারা অনুপাত একত্রিত করুন। এটি ক্রমান্বয়ে ক্রমবর্ধমান হারের সারিতে যে কোনও পুনরাবৃত্তিকারী উপাদানগুলি, পাশাপাশি প্রথম এবং শেষ এক্সচেঞ্জ হারের মধ্যে উত্সাহিত অনুপাতকে দূর করবে:

    ×/1⌈÷/M
10.86634461

আপনার ধারণাটি যে আপনাকে সর্বদা প্রথম অবস্থানে বিক্রি করা উচিত দীর্ঘতর ইনপুটটিকে ব্যর্থ করে তোলে এবং 1 এর চেয়ে কম সংখ্যক নম্বর দেয় (যা সম্ভবত অসম্ভব)।
ফ্রেক্সট্রেম

@ ফ্রেক্সস্ট্রিম ধন্যবাদ, স্থির। এখন এটি আপনার স্ক্রিপ্টের মতো একই ফলাফল দেয়। যদি ওপি আমাদের ফলাফল সহ কয়েকটি পরীক্ষার মামলা দিত তবে এটি আরও সহায়ক হত!
টোবিয়া

1
আমি ভাল এপিএল সমাধানগুলি পছন্দ করি কারণ, যখনই আমি তাদের দিকে তাকাই, তারা আমার "এটি বাইনারি ফাইল গিব্বারিশ" ফিল্টারটি ট্রিগার করে এবং কীভাবে এটি খুলতে হয় তা নির্ধারণ করার জন্য আমি কোনও ফাইল এক্সটেনশান সন্ধান করতে শুরু করি।
কর্ট অ্যামোন - মনিকা

@ কর্টআ্যামমন এটি মোটেও ভিত্তিহীন নয়: এপিএলে অনেক ডজন ডজন গ্রাফিক অপারেটর নিযুক্ত করে; পৃষ্ঠে তারা 8 বিট ডস অক্ষর সেট থেকে প্রতীকগুলি আপনাকে স্মরণ করিয়ে দিতে পারে। এটি খুব সংক্ষিপ্ত ভাষা, এর অর্থ এপিএল এর একটি লাইনে খুব উচ্চ তথ্য এনট্রপি রয়েছে। এই দুটি বৈশিষ্ট্যটি ডস উইন্ডোতে ফেলে দেওয়া বাইনারি ফাইলটির অনুভূতি ট্রিগার করতে একত্রিত। আপনি কেবল এপিএলের প্রতীক এবং সিনট্যাক্সের সৌন্দর্যের প্রশংসা করতে শিখলে তা কেবল স্থায়ী হয়।
টোবিয়া

6

পাইথন, 47

f=lambda t:2>len(t)or max(t[1]/t[0],1)*f(t[1:])

উদাহরণ পরীক্ষার ক্ষেত্রে চালানো

ফ্লোটের একটি তালিকা নিন। প্রথম দুটি উপাদান থেকে দু'বারেরও কম উপাদান অব্যাহত না হওয়া পর্যন্ত মুনাফার ফ্যাক্টারে অবিচ্ছিন্নভাবে গুণিত হয়। বেস কেস জন্য, Trueসমান যা দেয় 1

ব্যবহার popএকই পরিমাণে চরগুলি দেয়।

f=lambda t:2>len(t)or max(t[1]/t.pop(0),1)*f(t)

সুতরাং তালিকার শেষ থেকে যাচ্ছে।

f=lambda t:2>len(t)or max(t.pop()/t[-1],1)*f(t)

তুলনা করার জন্য, পাইথন 2 এ আমার পুনরাবৃত্ত কোডটি 49 টি অক্ষর, 2 টি দীর্ঘতর

p=c=-1
for x in input():p*=max(x/c,1);c=x
print-p

c=-1কল্পিত প্রথম "পদক্ষেপ" কখনও লাভ না দেখানোর জন্য শুরু করা হ্যাক। -1পরিবর্তে পণ্য শুরু করা 1আমাদের উভয় উপাদানকে একসাথে বরাদ্দ করতে দেয় এবং প্রিন্ট করার আগে আমরা এটি নেতিবাচকভাবে ফিরিয়ে দেয়।


আর দীর্ঘ টেস্টকেস ডিফল্ট পুনরাবৃত্তি সীমাটি ১ দ্বারা ছাড়িয়ে গেছে (চ [x [: 999]) এখনও সঠিক ফলাফল দেয়। দীর্ঘ ইনপুট জন্য আপনি এটিকে কিছু অংশে বিভক্ত করতে পারেন ([n:(n+1)*500 + 1] for n in range(N_elem/500) )এবং আংশিক কারণগুলি গুণ করতে পারেন
DenDenDo

পুনরাবৃত্তি সীমা বাস্তবায়ন নির্ভর; এড়াতে আপনি স্ট্যাকলেস পাইথন ব্যবহার করতে পারেন ।
xnor

অথবা কেবলমাত্র sys.setrecursionlimit(
সিপিথনে

3

পাইথন, 79 81 76 77 বাইট

f=lambda x:reduce(float.__mul__,(a/b for a,b in zip(x[1:],x[:-1]) if a>b),1.)

xতালিকা হিসাবে এনকোড করা ইনপুট। ফাংশনটি ফ্যাক্টর দেয়।


হতে পারে এটি কেবলমাত্র আমার পাইথন সংস্করণ, তবে ফাংশন শেষে আমাকে এর 1.পরিবর্তে ব্যবহার করতে হবে 1, অন্যথায় আমি টাইপ - এরর পেয়েছি : বর্ণনাকারী ' মুল ' এর জন্য 'ফ্লোট' অবজেক্ট প্রয়োজন তবে একটি 'ইনট' পেয়েছে
টোবিয়া

বিটিডাব্লু, স্মার্ট অ্যালগরিদম!
টোবিয়া

আপনার সেই f=অংশের দরকার নেই ।
wizzwizz4

2

সিজেম, 33 বাইট

q~{X1$3$-:X*0>{\;}*}*](g\2/{~//}/

এটি আরও গল্ফ করা যেতে পারে।

এসটিডিআইএন থেকে ইনপুট নেয়

[0.48 0.4 0.24 0.39 0.74 1.31 1.71 2.1 2.24 2.07 2.41]

এবং ফ্যাক্টরটি STDOUT- এ আউটপুট করে

10.866344605475046

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


1

পাইথ , 18

u*GeS,1ceHhHC,QtQ1

ব্যাখ্যা:

u                 reduce, G is accumulator, H iterates over sequence
 *G               multiply G by
   eS             max(               
     ,1               1,
       ceHhH            H[1]/H[0])
 C                H iterates over zip(
  ,QtQ                                Q,Q[1:])
 1                G is initialized to 1

max(H[1]/H[0],1) @xnor ধারণা ধারণা


1

সি #, 333 , 313

আমার প্রথম প্রচেষ্টা। সম্ভবত এটি আরও অনুকূলিত করতে পারে তবে আমি যেমন বলেছিলাম প্রথম প্রচেষ্টা তাই এটির হ্যাঙ্গ পাবে!

double a(double [] b){var c=0.0;var d=1;for(int i=0;i<b.Count();i++){c=(d==1)?(((i+1)<b.Count()&&b[i+1]<=b[i]&&d==1)?((c==0)?b[i]:b[i]*c):((i+1)>=b.Count()?(c*b[i])/b[0]:c)):((i+1)<b.Count()&&b[i+1]>b[i]&&d==0)?c/b[i]:c;d=((i+1)<b.Count()&&b[i+1]<b[i]&&d==1)?0:((i+1)<b.Count()&&b[i+1]>b[i]&&d==0)?1:d;}return c;}

ইনপুট

0.48, 0.4, 0.24, 0.39, 0.74, 1.31, 1.71, 2.1, 2.24, 2.07, 2.41

আউটপুট

10.86

সম্পাদনা করুন: ড্যানডেনডোর ধন্যবাদ গণিত.ফ্লুরটি বৃত্তাকারে ব্যবহার না করার জন্য এবং চরগুলি কাটাতে বোলের পরিবর্তে ইন্ট ব্যবহার করার পরামর্শ দিয়েছেন। ভবিষ্যতের ধাঁধা জন্য মনে রাখবেন যে!


হিয়া, টিপস জন্য ধন্যবাদ। আমি প্রস্তাবিত হিসাবে আপডেট।
ড্যারেন ব্রেন

দেখে মনে হচ্ছে আপনি দুটি অঙ্কের সাথে গোল করছেন Math.Floor(...)যা প্রয়োজন নেই with এছাড়াও, আমি কিনা C # তার সম্ভাব্য জানি না, কিন্তু সাধারণত জন্য 1 এবং 0 ব্যবহার করতে পারেন trueএবং false
ডেনডেনডো

দুঃখিত, 2 এ রাউন্ডিংয়ের জন্য প্রত্যেকের 10.86 মুদ্রণ করা দরকার ছিল এবং আমি 10.866 পেয়েছিলাম এবং গোল করছি। আপনি অন্যান্য সি ভাষার জন্য কিন্তু সি # এর জন্য নয়। যদিও এটি আমাকে ধারণা দেয় তাই এখন আমার বুলিয়ান চেকগুলির জন্য 1 এবং 0 ব্যবহার করছি। এটি আরও কিছুটা কমিয়েছে। ধন্যবাদ!
ড্যারেন ব্রেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.