স্টক টাইম মেশিন


35

স্টক টাইম মেশিন

আপনি একটি ডেটাসেটে অ্যাক্সেস অর্জন করেছেন tomorrowStocks, যা আপনার ন্যাসডাকের উপর আপনার প্রিয় ব্যবসা থেকে স্টক মূল্য রয়েছে। এই ডেটাসেটটি এমন একটি ধারক যা সূচনাতে কয়েক মিনিট আগে খোলার পরে। প্রতিটি সূচীতে সেই সময়ে স্টকের দাম থাকে।

// Assume the stock market opens at 9:30AM EDT
// tomorrowStocks[] contains the prices of your target stock.
// If the stock is $22 @ 10:30AM EDT
tomorrowStocks[60] == 22

আউটপুট

আপনার কাজটি প্রদত্ত ডেটাसेट থেকে 1 purchaseএবং 1 saleএর সর্বোত্তম সম্ভাব্য ফলাফল নির্ধারণ করা 1 stock

Gotchas

  • আপনাকে অবশ্যই 1 টি স্টক কিনতে হবে এবং বিক্রি করতে হবে।
  • আপনি কিনতে নাও করতে পারে এবং একই টাইম স্লটে বিক্রি করে।
  • বিক্রয়ের আগে আপনাকে অবশ্যই কিনতে হবে ।

পরীক্ষার ডেটা

[1,2,3,4,5]    # 4
[1,99,2,105]   # 104
[99,1,99,100]  # 99
[99,1,1,2,1,3] # 2
[5,4,3,3,1]    # 0
[5,4,3,1]      # -1
[5,2,1]        # -1
[5,4,1]        # -1
[55,45,20,1]   # -10
[5,1]          # -4
[10,7,5,1]     # -2
[7]            # Invalid input -- assume size >= 2

এটি একটি ; আপনার প্রিয় ভাষায় স্বল্পতম উত্তর জমা দিন!


11
পিপিসিজিতে স্বাগতম, প্রথম প্রথম প্রশ্ন! :)
FryAmTheEggman

আমরা কি অনুমান করতে পারি যে আউটপুটটি নির্ধারিত (যেমন সর্বদা একটি সমাধান রয়েছে যা অবশ্যই সর্বোত্তম, এবং কোনও সম্পর্ক নেই)
মেয়রমন্তি

1
আমি যে ভাষায় বিল্ডিং করছি তার অনুবাদকের পক্ষে খুব খারাপ কাজ এখনও শেষ হয়নি, কারণ এটি 4 বাইটে সমাধান করতে সক্ষম হওয়া উচিত ... তাই আমাকে এত ভাল প্রশ্ন শেষ করতে হবে যাতে আমি এত ভাল প্রশ্ন মিস করতে পারি না!
স্টিভেন এইচ।

1
@ স্পিডিনিঞ্জা এটি আসলে পরীক্ষার ক্ষেত্রে। পরীক্ষার ক্ষেত্রে [5,4,3,1]আপনি তবে সর্বোত্তম ফলাফল পাওয়ার জন্য বিক্রি করতে পারেন বা 5বিক্রি করতে পারেন এবং বিক্রি করতে পারবেন । 443-1
মার্টিন ইন্ডার

1
@ ফাউফুল আপনি নিজের উত্তরটি পরে প্রতিদ্বন্দ্বী হিসাবে যুক্ত করতে পারেন। আমি অবশ্যই এটি দেখতে আগ্রহী
হব

উত্তর:


14

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

ব্যবহার FryAmTheEggman এর পদ্ধতির । কোড:

¥ŒOà

ব্যাখ্যা:

¥     # Calculate the increments of the array.
 Œ    # Get all substring of the array.
  O   # Sum the arrays in the array.
   à  # Get the largest sum and implicitly print that.

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


2
দামিমিট আমি 4 গল্ফিং ভাষা চেষ্টা করেছিলাম এবং 05AB1E সম্পর্কে ভুলে গিয়েছি। এটি পরের বারের জন্য আমাকে শিখবে: পি
ফ্রাইআম দ্য এজিগম্যান

19

পাইথন 2, 46 বাইট

f=lambda x:-min(x.pop(0)-max(x),x[1:]and-f(x))

আইডিয়নে এটি পরীক্ষা করুন ।

কিভাবে এটা কাজ করে

এটি একটি পুনরাবৃত্ত দৃষ্টিভঙ্গি যা পাইথন 2 এর সুন্দর বিভ্রান্ত মিশ্র-প্রকারের তুলনাগুলির সুবিধা গ্রহণ করে।

সেরা সম্ভাব্য ফলাফলটি হয় তালিকার সর্বাধিক পার্থক্যের সাথে তার প্রথম উপাদানটি সরিয়ে নেওয়া হয় এবং সেই প্রথম উপাদানটি হয়, অথবা অন্য কোনও পার্থক্য যা প্রথম উপাদানকে অন্তর্ভুক্ত করে না।

প্রথম উপাদানটি বের করার পরে x.pop(0)(যা এটি স্থায়ীভাবে x থেকে সরিয়ে দেয় ), আমরা গণনা করি x.pop(0)-max(x)। মনে রাখবেন যে এই পার্থক্যের "ভুল" চিহ্ন রয়েছে।

যদি আপডেট তালিকার এক্সটিতে এখনও কমপক্ষে দুটি উপাদান থাকে, x[1:]একটি খালি নয় খালি তালিকা সরবরাহ করে এবং andএটি পুনরাবৃত্ত কলের নেতিবাচক সাথে প্রতিস্থাপন করে, হিসাবে গণনা করা হয় -f(x)। চালিয়ে যাওয়ার জন্য খুব কম উপাদান উপস্থিত হয়ে গেলে, x[1:]and-f(x)খালি তালিকায় মূল্যায়ন করুন।

সর্বাধিক ফলাফল বাছাই করতে, আমরা পার্থক্যটির সর্বনিম্ন এবং পুনরাবৃত্ত কল (বা []) এর নেতিবাচক গ্রহণ করি । যেহেতু সমস্ত পূর্ণসংখ্যার চেয়ে কঠোরভাবে কম [], ডানটি minহলে কেবল তার বাম আর্গুমেন্টটি ফিরিয়ে দেবে []

অবশেষে, আনারি মাইনাস -গণিত ফলাফলের সাইনকে সংশোধন করে।


এটি অদ্ভুত সুন্দর।
মিঃডুক

11

এমএটিএল , 7 বাইট

2XN!dX>

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

2XN  % Take input implicitly. Two-column 2D array with all combinations of 2 elements.
     % Each combination is a row. Elements in each row are in increasing order
!    % Transpose
d    % Difference of the two numbers in each column
X>   % Maximum value. Display implicitly


1
ওও ... আমাকে মারো!
ডিজেএমসিএমহেম

8

জেলি , 5 বাইট

Œcḅ-Ṁ

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

কিভাবে এটা কাজ করে

Œcḅ-Ṁ  Main link. Argument: A (integer array)

Œc     Generate all combinations of two elements of A, in order.
  ḅ-   Convert each pair from base -1 to integer.
       This maps [a, b] to b - a.
    Ṁ  Take the maximum of all computed differences.

IŒṡS€Ṁপ্রায় একই দৈর্ঘ্য, এটা খুব খারাপ ব্যবহার করছে সামনে মাঝে মাঝে summing ভুল উত্তর দেয় ...
FryAmTheEggman

7

পাইথ, ৯

eSsM.:-Vt

এটি এখানে চেষ্টা করুন বা একটি টেস্ট স্যুট চালান

প্রতিটি উপাদানের মধ্যে ক্রমাগত পার্থক্য সন্ধান করে, তারপরে সেই অ্যারের প্রতিটি স্তরকে খুঁজে বের করে। অবশেষে, উপাদানগুলি যোগ করুন এবং সর্বোচ্চটি প্রদান করুন return

ব্যাখ্যা:

eSsM.:-Vt
eSsM.:-VtQQ   ## Auto-fill variables
      -VtQQ   ## Splat subtraction on each element of zip(Q[1:], Q)
    .:        ## Get all substrings
  sM          ## Sum each list
eS            ## Take the largest number

আমার কাছে উল্লেখ করা হয়েছিল যে এই অ্যালগরিদম কাজগুলি সম্পূর্ণ স্বজ্ঞাত নয়। আশা করি এই উদাহরণটি এই অ্যালগরিদমটি কেন কাজ করে তা চিত্রিত করবে:

[a, b, c, d]
difference between each element (reversed because of how Pyth does this)
[b-a, c-b, d-c]
"substrings" or each continuous slice
[b-a], [c-b], [d-c], [b-a, c-b], [c-b, d-c], [b-a, c-b, d-c]
sum each
[b-a], [c-b], [d-c], [b-a+c-b], [c-b+d-c], [b-a+c-b+d-c]
simplify
[b-a], [c-b], [d-c], [c-a], [d-b], [d-a]

5

পাইথ, ৯

_hS-M.cQ2

ইয়ে পিএফএনএস!

_hS-M.cQ2

     .cQ2 # generate all 2-elements combinations of Q (argument)
   -M     # map-splat with -: for each combination, substract the elements together
  S       # tort
 h        # take the first
_         # absolute value

আমি বিশ্বাস করি _hS-M.cQ2সমান।
FryAmTheEggman

@ ফ্রাইএ্যামডিজম্যান আহ, ধন্যবাদ এখন আমি কীভাবে -যুক্তির আদেশটিকে বিপরীত করতে পারি তা ভেবে দেখার চেষ্টা করছি ... যেহেতু আমাকে ব্যবহার করতে হবে _hSএবং ব্যবহার করতে পারছি নাeS
ভেন

4

পাওয়ারশেল ভি 2 +, 58 বাইট

param($n)($n|%{($n[++$i..$n.count]|sort)[-1]-$_}|sort)[-1]

ইনপুট নেয় $n, প্রতিটি উপাদানকে একটি লুপে পাইপ দেয় |%{...}। প্রতিটি পুনরাবৃত্তি, আমরা ইনপুট অ্যারের শেষ $nপ্রি-ইনক্রিমেন্টের ভিত্তিতে টুকরো টুকরো করি এবং এটি সর্বাধিক গ্রহণ করি , তারপরে বর্তমান উপাদানটি বিয়োগ করে । আমরা তখন সেই সমস্ত পার্থক্যগুলি আবারও সর্বাধিক গ্রহণ করি ।++$i|sort[-1]$_|sort[-1]

একটি ভার্বোস অ্যারে-ইনডেক্স ত্রুটিটি খুঁজে বের করে, কারণ আমরা অ্যারের শেষের পরে টুকরো টুকরো করার চেষ্টা করি। কিন্তু, যেহেতু এসটিডিআরআর ডিফল্টরূপে উপেক্ষা করা হয় , তাই আমরা যত্ন করি না।


4

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

a=>(m=Math.max)(...a.map((x,i)=>m(...a.slice(i+1))-x))

জাভাস্ক্রিপ্টে অ্যারের অবশিষ্টাংশের সর্বাধিক নেওয়া এবং বর্তমান উপাদানটি বিয়োগ করা সহজ। (শেষ উপাদানটির ক্ষেত্রে ফলাফলটি এখনও হবে - ইনফিনিটি)) সম্পাদনা করুন: @ চার্লিউইনকে 3 বাইট সংরক্ষণ করা হয়েছে।


আমি মনে করি (এম = ম্যাথ.ম্যাক্স) এবং এম পরে ব্যবহার করা আপনাকে 3 বাইট সাশ্রয় করবে
চার্লি উইন

@ চর্লিউইন ধন্যবাদ, আমি কেবল চেষ্টা করেছি with(যা এই ক্ষেত্রে সাহায্য করে না)।
নিল

3

জে, 21 বাইট

[:>./@;i.@#<@{."_1-/~

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

ব্যাখ্যা

[:>./@;i.@#<@{."_1-/~  Input: p
                  -/~  Make a table of all differences between every pair
          #            Get the count of values in p
       i.@             Create a range [0, 1, ..., len(p)-1]
             {."_1     Take that many values from each row of the table
           <@          Box each row of selected values
[:    ;                Unbox and concatenate them
  >./@                 Reduce it by the max and return

2

জাভা, 141 বাইট

a->java.util.stream.IntStream.range(0,a.size()-1).map(i->a.subList(i+1,a.size()).stream().reduce(Math::max).get()-a.get(i)).max().getAsInt();

ল্যাম্বদা একটি অ্যারেলিস্ট গ্রহণ করে এবং একটি পূর্ণসংখ্যা ফেরত দেয়।

পরীক্ষার কেসগুলির সাথে বর্ণহীন কোড:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Function;
import java.util.stream.IntStream;

class Test {

    public static void main(String[] args) {
        Function<ArrayList<Integer>, Integer> f = a -> IntStream
            .range(0, a.size()-1)
            .map(i -> a.subList(i+1, a.size()).stream().reduce(Math::max).get() - a.get(i))
            .max()
            .getAsInt();

        System.out.println(f.apply(new ArrayList<>(Arrays.asList(1,2,3,4,5))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(1,99,2,105))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(99,1,99,100))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(99,1,1,2,1,3))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(5,4,3,3,1))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(5,4,3,1))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(5,2,1))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(5,4,1))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(55,45,20,1))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(5,1))));
        System.out.println(f.apply(new ArrayList<>(Arrays.asList(10,7,5,1))));
    }
}

যতদূর আমি জানি, জাভাতে কোনও স্ট্রিমের অপেক্ষায় থাকার উপায় নেই এবং যে পদ্ধতি থেকে স্ট্রিমটি উত্পন্ন হয় তা পরিচালনা করে আজব ফলাফল। সুতরাং a.remove(0)কোনও মানচিত্রের অভ্যন্তরে মারাত্মকভাবে স্ট্রিমটি ভাঙ্গা।


1

ভিবিএ, 154

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

Sub s
i = Selection.Row
r = "B1:B" + i-1
Range(r).FormulaArray = "MAX(A2:A$" + i + "-A1)"
Range(r).FillDown
Range("C1").Formula = "MAX(" + r + ")"
End Sub

1

জাভা, 116

আর একটি জাভা সমাধান, আমি এটি প্রমাণ করার জন্য এটি ব্যবহার করেছি, স্ট্রিমগুলি দেখতে সুন্দর লাগতে পারে তবে গল্ফ করার জন্য সবসময় কার্যকর হয় না।

int a(int[]a){int t,d=a[1]-a[0],i,j,l=a.length;for(i=0;i<l;i++)for(j=i+1;j<l;j++){t=a[j]-a[i];d=d<t?t:d;}return d;}

এই সমাধানে উন্নতির জন্য অনেক জায়গা আছে


1

Clojure, 99 বাইট

(fn[x](apply max(map #(-(apply max(% 1))(apply min(% 0)))(map #(split-at % x)(range 1(count x))))))

প্রথম অবস্থানে ইনপুট তালিকাটি বিভক্ত করে তারপরে দ্বিতীয় এবং এই জাতীয়, তাই আমরা একটি তালিকা পাই যা দেখতে দেখতে এটি:

[[[n1][n2 ... nk]][[n1 n2][n3 ... nk]]...[[n1...n(k-1)][nk]]]তারপরে প্রতিটি জুটির জন্য দ্বিতীয় উপাদানটির সর্বোচ্চ থেকে প্রথম উপাদানগুলির সর্বনিম্ন বিয়োগ করা হয় এবং তারপরে সেগুলি সর্বাধিক সন্ধান করে। ক্লোজুর যদি min maxকোনও সংখ্যক যুক্তি না দিয়ে ক্রম গ্রহণ করে তবে সংক্ষিপ্ত হবে ।

এটি অনলাইনে দেখুন: https://ideone.com/b2nllT


1

রুবি, 52 বাইট

->a{b=[];(x=a.pop;b+=a.map{|v|x-v})while a[0];b.max}

পপস সম্ভাব্য দাম বিক্রয় করতে এবং লাভের সন্ধানের জন্য পূর্বের সমস্তগুলি দেখুন। তারপরে সর্বোচ্চ লাভ হয় profit


1

সি, 101 99 বাইট

int i,j,m,h;int f(int*a){m=1<<31;for(;a[i];i++){for(j=i+1;a[j];h=a[j++]-a[i],m=h<m?m:h);}return m;}

ইনপুট: নাল টার্মিনেটেড অ্যারে। যেমন {1,2,3,4,5,0}
আউটপুট: সেরা ফলাফলটি দেয়

আপনি যদি কখনও অর্থ হারাতে না চান তবে আপনি 8 বাইট ( মোট 93 91) সঞ্চয় করতে পারবেন :

int i,j,m,h;int f(int*a){for(;a[i];i++){for(j=i+1;a[j];h=a[j++]-a[i],m=h<m?m:h);}return m;}

1

আর, 58 44 বাইট

max(unlist(sapply(seq(y<-scan()),diff,x=y)))

ungolfed

y=scan()                #input
s=1:length(y)           #sequence of same length from 1
l = sapply(s,diff,x=y)  #applies the function diff to each 'lag' in sequence s
                        #and differencing on y
max(unlist(l))          #reforms as vector and finds maximum

সম্পাদনা: ফাংশন পরিবর্তিত হয়েছে। মূল নীচে।

f=function(x)max(max(x[-1]-x[1]),if(length(x)-2)f(x[-1]))

অথবা, আপনি যদি সতর্কতা বার্তাগুলির একটি গোছা রাখতে চান তবে 56 বাইটের জন্য দৈর্ঘ্যের পরে -2 থেকে মুক্তি পান।

f=function(x)max(max(x[-1]-x[1]),if(length(x))f(x[-1]))

এবং যদি আপনার যদি মনে হয় যদি বাণিজ্য না করে এবং অর্থ হারাতে পারে যখন একমাত্র সম্ভাবনা থাকে তবে আপনি 52 এ নামতে পারেন

f=function(x)max(max(x-x[1]),if(length(x))f(x[-1]))

f=দরকার নেই
NoOneIsHere

এখানে কোন পুনরুক্তি এটি ছাড়া কাজ করবে না। আমি রিকাল ব্যবহার করতে পারি, তবে এটি আমার হারের চেয়ে আরও বেশি চিঠি তুলেছে।
ব্যবহারকারী5957401

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