আপনি এই স্ট্রিংটি কত টুকরো টুকরো টুকরো করতে পারবেন?


45

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

উদাহরণ হিসাবে ধরুন [-1, 3, 1, -2, 5, 2, 3, 4](নোট করুন যে প্রতিটি এন্ট্রি একটি ভাঁজকে বোঝায় না):

এখানে চিত্র বর্ণনা লিখুন

উল্লম্ব দিকটি বর্ধমান স্ট্রিংটি কেবলমাত্র ভিজ্যুয়ালাইজেশনের উদ্দেশ্যে। স্ট্রিংটি বাস্তব লাইনের উপরে চ্যাপ্টা কল্পনা করুন।

এখন এখানে প্রশ্ন: একক কাটা দিয়ে এই স্ট্রিংটি কেটে নেওয়া যায় তার বৃহত্তম সংখ্যাটি কী (যা উপরের ছবিতে উল্লম্ব হতে হবে)। এই ক্ষেত্রে, উত্তর 6 মধ্যে একটি কাটা যে কোন জায়গায় সঙ্গে 2এবং 3:

এখানে চিত্র বর্ণনা লিখুন

এড়ানোর অস্পষ্টতা করার জন্য, কাটা হয়েছে একটি অ-পূর্ণসংখ্যা অবস্থানে সঞ্চালিত হবে।

চ্যালেঞ্জ

পূর্ণসংখ্যার পজিশনের একটি স্ট্রিং দিয়ে একটি স্ট্রিংটি ভাঁজ করা হয়েছে, আপনি নির্ধারণ করতে পারেন যে স্ট্রিংটি একটি অ-পূর্ণসংখ্যা অবস্থানে একক কাট দিয়ে কাটতে পারে pieces

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। আপনি STDIN, কমান্ড-লাইন আর্গুমেন্ট, প্রম্পট বা ফাংশন প্যারামিটারের মাধ্যমে ইনপুট নিতে পারেন। আপনি STDOUT এ আউটপুট লিখতে পারেন, এটি একটি ডায়ালগ বক্সে প্রদর্শন করতে পারেন বা এটি ফাংশন থেকে ফিরে আসতে পারেন।

আপনি ধরে নিতে পারেন যে তালিকাটি কোনও সুবিধাজনক তালিকা বা স্ট্রিং বিন্যাসে রয়েছে।

তালিকায় কমপক্ষে 2 এবং 100 টির বেশি এন্ট্রি থাকবে। এন্ট্রিগুলি প্রতিটি -2 31 ≤ পি i <2 31 এর মধ্যে থাকা পূর্ণসংখ্যা হবে । আপনি ধরে নিতে পারেন যে পর পর দু'টি প্রবেশপত্র অভিন্ন নয়।

আপনার কোডটি অবশ্যই যুক্তিসঙ্গত ডেস্কটপ পিসিতে 10 সেকেন্ডেরও কম সময়ে (নীচে পরীক্ষার কেস সহ) এরকম কোনও ইনপুট প্রক্রিয়া করতে হবে।

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

সমস্ত পরীক্ষার কেসগুলি কেবল আউটপুট অনুসরণ করে ইনপুট হয়।

[0, 1]
2

[2147483647, -2147483648]
2

[0, 1, -1]
3

[1, 0, -1]
2

[-1, 3, 1, -2, 5, 2, 3, 4]
6

[-1122432493, -1297520062, 1893305528, 1165360246, -1888929223, 385040723, -80352673, 1372936505, 2115121074, -1856246962, 1501350808, -183583125, 2134014610, 720827868,  -1915801069, -829434432, 444418495, -207928085, -764106377, -180766255, 429579526,  -1887092002, -1139248992, -1967220622, -541417291, -1617463896, 517511661, -1781260846,  -804604982, 834431625, 1800360467, 603678316, 557395424, -763031007, -1336769888,  -1871888929, 1594598244, 1789292665, 962604079, -1185224024, 199953143, -1078097556, 1286821852, -1441858782, -1050367058, 956106641, -1792710927, -417329507, 1298074488,  -2081642949, -1142130252, 2069006433, -889029611, 2083629927, 1621142867, -1340561463,  676558478, 78265900, -1317128172, 1763225513, 1783160195, 483383997, -1548533202,  2122113423, -1197641704, 319428736, -116274800, -888049925, -798148170, 1768740405,  473572890, -1931167061, -298056529, 1602950715, -412370479, -2044658831, -1165885212,  -865307089, -969908936, 203868919, 278855174, -729662598, -1950547957, 679003141,  1423171080, 1870799802, 1978532600, 107162612, -1482878754, -1512232885, 1595639326,  1848766908, -321446009, -1491438272, 1619109855, 351277170, 1034981600, 421097157,  1072577364, -538901064]
53

[-2142140080, -2066313811, -2015945568, -2013211927, -1988504811, -1884073403, -1860777718,  -1852780618, -1829202121, -1754543670, -1589422902, -1557970039, -1507704627, -1410033893,  -1313864752, -1191655050, -1183729403, -1155076106, -1150685547, -1148162179, -1143013543,  -1012615847, -914543424, -898063429, -831941836, -808337369, -807593292, -775755312, -682786953, -679343381, -657346098, -616936747, -545017823, -522339238, -501194053,  -473081322, -376141541, -350526016, -344380659, -341195356, -303406389, -285611307, -282860017, -156809093, -127312384, -24161190, -420036, 50190256, 74000721, 84358785,  102958758, 124538981, 131053395, 280688418, 281444103, 303002802, 309255004, 360083648,  400920491, 429956579, 478710051, 500159683, 518335017, 559645553, 560041153, 638459051,  640161676, 643850364, 671996492, 733068514, 743285502, 1027514169, 1142193844, 1145750868,  1187862077, 1219366484, 1347996225, 1357239296, 1384342636, 1387532909, 1408330157,  1490584236, 1496234950, 1515355210, 1567464831, 1790076258, 1829519996, 1889752281,  1903484827, 1904323014, 1912488777, 1939200260, 2061174784, 2074677533, 2080731335, 2111876929, 2115658011, 2118089950, 2127342676, 2145430585]
2

আমরা কি ধরে নিতে পারি যে আপনি কাটা এমন জায়গায় থাকতে চান যা সর্বাধিক সংখ্যক টুকরোর গ্যারান্টি দেয়?
ডেভিডসি

2
আমি সম্ভবত বলব, "কত টুকরো নির্ধারণ করুন" এর পরিবর্তে "সর্বাধিক সংখ্যক টুকরো নির্ধারণ করুন"।
ডেভিডসি

1
নয় a reasonable desktop PCবরং দ্ব্যর্থক?
globby

3
@globby রানটাইম যখন বিজয়ী মানদণ্ডের অংশ না হয় তবে এটি ব্যবহার করা আমাদের পক্ষে মোটামুটি একটি সাধারণ বাক্যাংশ (তবে কেবল সমাধানগুলি নিষ্ঠুর শক্তি ব্যবহার করছে না তা নিশ্চিত করার জন্য ব্যবহৃত হয়)। এর বেশিরভাগ অর্থ সীমাটি 100% কঠোর নয়। যদি এটি আপনার মেশিনে 15 সেকেন্ড সময় নেয় (এবং আপনি একটি সুপার কম্পিউটার ব্যবহার করছেন না), সম্ভাবনা রয়েছে, কাছাকাছি কারও কাছে একটি ডেস্কটপ পিসি রয়েছে যেখানে এটি 10 ​​সেকেন্ডের মধ্যে শেষ হয়। তবে এটি যদি আপনার মেশিনে এক মিনিট সময় নেয় তবে এর সম্ভাবনা কম থাকে, তাই আপনাকে অন্য পদ্ধতির বিষয়ে ভাবতে হবে। এছাড়াও, সীমাটি এমনভাবে বেছে নেওয়া হয়েছে যে একটি দক্ষ অ্যালগরিদম সহজেই 10 সেকেন্ডের নীচে ভালভাবে পূর্ণ হয়ে যায়।
মার্টিন ইন্ডার

উত্তর:


16

এপিএল, 16 14 বাইট

1+⌈/+/2≠/∘.≤⍨⎕

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

আসলে একটি বক্স চরিত্র, না একটি অনুপস্থিত ফন্ট ত্রুটি। আপনি প্রোগ্রামটি চেষ্টা করে দেখতে পারেন tryapl.org এ , তবে যেহেতু সেখানে পুরোপুরি সমর্থিত নয়, আপনাকে এটি ইনপুট মান দ্বারা প্রতিস্থাপন করতে হবে:

    1+⌈/+/2≠/∘.≤⍨ ¯1 3 1 ¯2 5 2 3 4
6

ব্যাখ্যা

প্রোগ্রামটি সর্বোত্তমভাবে উদাহরণ ইনপুট দিয়ে ব্যাখ্যা করা হয়েছে s = ¯1 3 1 ¯2 5 2 3 4, যা এসটিডিএন থেকে নেওয়া হয়েছে । প্রথমত, আমরা নিজের ব্যবহার করে -আউটার পণ্যটি গণনা করি । এটি বুলিয়ান ম্যাট্রিক্সে ফল দেয় যার তম সারিটি বলে যে কোন উপাদানগুলির চেয়ে কম বা সমান :s∘.≤⍨iss[i]

1 1 1 0 1 1 1 1
0 1 0 0 1 0 1 1
0 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 1 0 0 0
0 1 0 0 1 1 1 1
0 1 0 0 1 0 1 1
0 0 0 0 1 0 0 1

এর ঘটনার 0 1এবং 1 0সারিতে iচিহ্ন জায়গায় যেখানে স্ট্রিং বিন্দু পাসের s[i] + 0.52≠/"এই দ্বারা 2-সাবলিস্টগুলি হ্রাস করুন" ব্যবহার করে আমরা প্রতিটি সারিতে মিলিয়ে থাকি :

0 0 1 1 0 0 0
1 1 0 1 1 1 0
1 0 1 1 0 0 0
0 0 0 0 0 0 0
0 0 0 1 1 0 0
1 1 0 1 0 0 0
1 1 0 1 1 1 0
0 0 0 1 1 0 1

যা অবশিষ্ট রয়েছে তা হ'ল সারিগুলির যোগফল নেওয়া +/

2 5 3 0 2 3 5 3

এবং এর সাথে একের সাথে সর্বাধিক 1+⌈/:

6

ফলাফলটি বেশিরভাগ এপিএল বাস্তবায়নে স্বয়ংক্রিয়ভাবে STDOUT এ মুদ্রিত হয়।


@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ আমার খারাপ - প্রত্যাশিত ফলাফলটি টুকরো সংখ্যা, এটি উত্পাদন করার জায়গা নয়।
জে ...

প্রযুক্তিগতভাবে এটি 16 অক্ষর, 28 বাইট। ইউনিকোড এটি আপনার কাছে করবে = পি
কেচালোক্স

1
@KChaloux কেবলমাত্র যদি আপনি utf8 বাইটে গণনা করেন, যা আপনি এপিএল-এর জন্য চান না। এখানে একটি একক-বাইট কোড পৃষ্ঠা রয়েছে যা এপিএল দ্বারা ব্যবহৃত পুরো অক্ষর সেট করে, সুতরাং এটি গণনা করার জন্য এটি কেবল ন্যায়সঙ্গত।
মার্টিন এেন্ডার

@ মার্টিনব্যাটনার একটি নির্ভরযোগ্য উত্স লিঙ্কটি দুর্দান্ত হবে। অন্যথায়, কেউ বাইট গণনা হ্রাস করতে যে কোনও ভাষার জন্য ব্যবহৃত অক্ষরের সেট দ্বারা নিজের একটি স্বেচ্ছাসেবী ওয়েব পৃষ্ঠা তৈরি করতে পারে।
agweber

1
@ গুইলাউম লেথুইলিয়ার এপিএল কমপক্ষে এমন পর্যায়ে শেখার পক্ষে আসলেই শিখতে সহজ যেখানে আপনি এর মতো সাধারণ গল্ফিং উত্তর লিখতে পারেন। সহজেই মনে রাখার মতো নামগুলি সহ ×বহু গুণ এবং খুব সহজ বাক্য গঠন নিয়ম সহ কয়েকটি ডজন ফাংশন রয়েছে । গুগল একটি ভাল গাইডের জন্য "মাস্টারিং ডায়ালগ এপিএল"।
Zgarb

16

পাইথন, 88 75 73 বাইট

lambda x:max(sum((a+.5-m)*(a+.5-n)<0for m,n in zip(x,x[1:]))for a in x)+1

খালি সোজা ল্যাম্বদা


কেবল অন্য পদ্ধতি দেখানোর জন্য:

পাইথ, 28 27 বাইট

heSmsmq@S+k(d)1dC,QtQm+b.5Q

এটার মোটামুটি সমান

lambda x:max(sum(a+.5==sorted(n+(a+.5,))[1]for n in zip(x,x[1:]))for a in x)+1

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


এমনকি আপনি একই পরিমাণে def f(x):max(sum((a+.5-m)*(a+.5-n)<0for m,n in zip(x,x[1:]))for a in x)+1
অক্ষরে

4
@ ক্রিশ্চিয়ন্সসন আপনার ফাংশনটি কোনও কিছুই ফেরায় না।
জাকুবে

গুলি করুন, আপনি ঠিক @ জাকুবে
খ্রিস্টান

এটি কীভাবে কাজ করে তা সম্পর্কে আমি পুরোপুরি নিশ্চিত নই, তবে আমি মনে করি +.5কিছু অক্ষর সংরক্ষণ করতে আপনি গুলি মুছে ফেলতে পারেন । আমি বুঝতে পারি যে তারা আমার কাছে অর্থহীন।
কেএসএফটি

@ কেএসএফটি এটি স্ট্রিংটিকে বিরতিতে বিভক্ত করে, প্রতিটিটির উপরে পুনরাবৃত্তি করে a = point + .5এবং কঠোরভাবে অন্তর্ভুক্ত হওয়া অন্তরগুলির সংখ্যা গণনা করে a। ছাড়া .5আপনার মত ক্ষেত্রে সমস্যা রয়েছে করব [1, 0, -1]উদাহরণ।
Sp3000

16

পাইথ : 31 30 29 28 24 23 অক্ষর (পাইথন 68 টি অক্ষর)

heSmsm&<hSkdgeSkdC,tQQQ

এটি এখানে চেষ্টা করুন: পাইথ সংকলক / নির্বাহক

এটি ইনপুট হিসাবে পূর্ণসংখ্যার একটি তালিকা প্রত্যাশা করে [-1, 3, 1, -2, 5, 2, 3, 4]

এটি আমার পাইথন প্রোগ্রামটির একটি সরল অনুবাদ:

lambda s:1+max(sum(min(a)<i<=max(a)for a in zip(s,s[1:]))for i in s)

পুরানো সমাধান: পাইথ 28 চর

শুধু সংরক্ষণাগার কারণে।

heSmsm<*-dhk-dek0C,tQQm+b.5Q

সম্পর্কিত পাইথন কোডটি হ'ল:

f=lambda x:1+max(sum((i-a)*(i-b)<0for a,b in zip(x,x[1:]))for i in [j+.5 for j in x])

খুব নিশ্চিত যে আপনি এর ,QtQপরিবর্তে ব্যবহার করতে পারবেন[QtQ)
FryAmTheEggman

iছেদ লাইন নয়, i - 0.5হয়। এবং সুতরাং 1 (প্রকৃতপক্ষে 1 - 0.5 = 0.5) ভিতরে আছে (-1, 1)min(a)<i<=max(a)সমতূল্য min(a) < i - 0.5 < max(a), যার Pyth সমাধান করা হয় min(a) < i < max(a)+1(নোটিশ hমধ্যে heSk)।
জাকুব

আমার মনে হয় আপনি ঠিক এখানে আছেন বা কমপক্ষে আমি এই যুক্তিটি ব্যর্থ হয় এমন কোনও ক্ষেত্রে এখনও খুঁজে পাচ্ছি না ...
অপ্টিমাইজার

আপনি ব্যবহার করে একটি চরিত্র রক্ষা করতে পারে g, যা >=, যদি আপনি প্রতিস্থাপন <dheSkসঙ্গে geSkd
isaacg

2
ধন্যবাদ @ আইস্যাক তবে কেন আপনি সর্বদা আমার সমাধানটি নষ্ট করেন, যখন আমি সত্যিই খুশি এবং এ সম্পর্কে আত্মবিশ্বাসী? ;-)
জাকুবে

10

সিজেম, 36 34 33 30 বাইট

q~[__(+]zW<f{f{1$+$#1=}1b}$W=)

আমি বিশ্বাস করি যে বন্যের মধ্যে আরও ভাল একটি অ্যালগরিদম আছে। তবুও, এটি সমস্ত পরীক্ষার ক্ষেত্রে প্রয়োজনীয় সীমাবদ্ধতার অধীনে কাজ করে (এমনকি অনলাইন সংকলকটিতেও)

ইনপুট মত

[-2142140080 -2066313811 -2015945568 -2013211927 -1988504811 -1884073403 -1860777718  -1852780618 -1829202121 -1754543670 -1589422902 -1557970039 -1507704627 -1410033893  -1313864752 -1191655050 -1183729403 -1155076106 -1150685547 -1148162179 -1143013543  -1012615847 -914543424 -898063429 -831941836 -808337369 -807593292 -775755312 -682786953 -679343381 -657346098 -616936747 -545017823 -522339238 -501194053  -473081322 -376141541 -350526016 -344380659 -341195356 -303406389 -285611307 -282860017 -156809093 -127312384 -24161190 -420036 50190256 74000721 84358785  102958758 124538981 131053395 280688418 281444103 303002802 309255004 360083648  400920491 429956579 478710051 500159683 518335017 559645553 560041153 638459051  640161676 643850364 671996492 733068514 743285502 1027514169 1142193844 1145750868  1187862077 1219366484 1347996225 1357239296 1384342636 1387532909 1408330157  1490584236 1496234950 1515355210 1567464831 1790076258 1829519996 1889752281  1903484827 1904323014 1912488777 1939200260 2061174784 2074677533 2080731335 2111876929 2115658011 2118089950 2127342676 2145430585]

আউটপুট (উপরের কেস জন্য) হয়

2

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

q~[__(+]zW<f{f{1$+$#1=}1b}$W=)
q~                                "Evaluate input string as array";
  [__                             "Put two copies of it in an array";
     (+]                          "Shift first element of second copy to its end";
        z                         "Zip together the two arrays. This creates";
                                  "pair of adjacent elements of the input.";
         W<                       "Remove the last pair";
           f{            }        "For each element of input array, take the zipped";
                                  "array and run the code block";
             f{       }           "For each element of the zipped array along with";
                                  "the current element from input array, run this block";
               1$+                "Copy the current number and add it to the pair";
                  $#              "Sort the pair and find index of current number";;
                    1=            "check if index == 1 for a < I <= b check";
                       1b         "Get how many pairs have this number inside of them";
                          $W=)    "Get the maximum parts the rope can be cut into";

এখন ধরা যাক ইনপুট অ্যারেটি [-1 3 1 -2 5 2 3 4], জিপিং পদক্ষেপগুলি দেখতে এমন দেখাচ্ছে:

[-1 3 1 -2 5 2 3 4] [[-1 3 1 -2 5 2 3 4] [-1 3 1 -2 5 2 3 4]
[-1 3 1 -2 5 2 3 4] [[-1 3 1 -2 5 2 3 4] [3 1 -2 5 2 3 4 -1]
[-1 3 1 -2 5 2 3 4] [[-1 3] [3 1] [1 -2] [-2 5] [5 2] [2 3] [3 4]]]

শেষ লাইনের দ্বিতীয় অ্যারে হ'ল স্ট্রিংয়ের ভাঁজ।

এখন আমরা পুনরাবৃত্তি করি [-1 3 1 -2 5 2 3 4]এবং সেগুলির প্রত্যেকটিতে থাকা সেটগুলির সংখ্যা গণনা করি that সংখ্যাটি থেকে সর্বাধিক পান, এটি বৃদ্ধি করুন এবং আমাদের কাছে আমাদের উত্তর রয়েছে।

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


10

মতলব (123) (97) (85)

হ্যাঁ, অবশেষে এক্সএনওআর =) এর জন্য একটি ব্যবহার আমি নিশ্চিত যে এটি আরও গল্ফ করা যেতে পারে।

তবে সত্যি বলতে আমি কিছুটা বিব্রত হচ্ছি যে মাতলাব আমি যে ভাষাটি সবচেয়ে ভাল জানি তার ভাষা হয়ে উঠছে = /

আনুমানিক রানটাইম হয় O(n^2)

EDIT2:

a=input();v=2:nnz(a);disp(max(arrayfun(@(e)sum(~xor(a(v-1)<e,e<a(v))),sort(a)-.5))+1)

সম্পাদনা: নতুন আরও গল্ফযুক্ত সংস্করণ (@ ডেনিসজাহেরউদ্দিনের ইঙ্গিত সহ, ধন্যবাদ!)

a=input();c=sort(a)-.5;n=0;v=2:nnz(c);for e=c;n=[n,sum(~xor(a(v-1)<e,e<a(v)))];end;disp(max(n)+1)

পুরাতন রুপ:

a=input();
c=conv(sort(a),[.5,.5],'valid');' %find all cutting positions by taking the mean of two successive points
k=numel(c);
for e=1:k %iterate over all 'cuts'
    n(e)=sum(~xor(a(1:k)<c(e),c(e)<a(2:k+1)));%find the number of threads the cut cuts
end
disp(max(n)+1) %output the max

@ মার্টিনবাটনার: আমি বিছানায়-বিছানায় চ্যালেঞ্জের ঠিক আগে আপনার সুন্দর সামান্য উপভোগ করছি!


10
আমার স্ত্রী এক্সএনওরিং
জিনব্লার

9
@ এক্সনরের নোট নেওয়ার সময় =)
flawr

আমি ভাবি যে আপনি কাটা পয়েন্টগুলি সন্ধান করতে কিছু সংরক্ষণ করতে পারেন কারণ ভাঁজগুলি সর্বদা পূর্ণসংখ্যার হয়: c=sort(a)-.5অবশ্যই প্রথম পয়েন্টটি তখন সীমা ছাড়িয়ে যায় তবে অবশ্যই এটি মোকাবেলা করা সহজ। সবচেয়ে খারাপ ক্ষেত্রে আপনি করতে পারেন c(1)=[];। - এছাড়াও আপনি ডিসপ্লে কমান্ডটি ছিনিয়ে নিতে পারেন, কেবল কোনও কিছু গণনা করলে তা স্টাডাউটকে লিখতে পারে ---- অবশেষে এই ক্ষেত্রে numelপ্রতিস্থাপন করা যেতে পারেnnz
ডেনিস জাহেরউদ্দিন

তবে আমি আমার convপদ্ধতির জন্য খুব গর্বিত ছিলাম ... = D। আমি সর্বদা ভুলে যাই nnz, আপনাকে অনেক ধন্যবাদ!
flawr

আমি এটিকে আরও ছোট করে তোলার বেশ কয়েকটি উপায় খুঁজে পেতে পারি! আমি dispযেহেতু কেউ একবার সমালোচনা করেছিলাম যে আপনি প্রস্তাবিত পদ্ধতির সাহায্যে আপনি অন্যান্য অক্ষর ( ans
ভের

9

গণিত 134 133 104

কোডটির আকার সত্ত্বেও সমাধান করতে মজা। আরও গল্ফিং এর IntervalMemberQ[Interval[a,b],n]সাথে ধারণার পরিবর্তে এখনও অর্জন করা যেতে পারে a<n<b

n_~f~i_:=Count[IntervalMemberQ[#,n]&/@i,1>0];
g@l_:=Max[f[#,Interval/@Partition[l,2,1]]&/@(Union@l+.5)]+1

g[{-1, 3, 1, -2, 5, 2, 3, 4}]

6


ব্যাখ্যা

list1পয়েন্টগুলির প্রদত্ত তালিকাটি list2হ'ল একটি সংক্ষিপ্ত তালিকা যা ভাঁজগুলিতে ছিল না এমন সংখ্যাগুলি সরিয়ে দেয়; তারা অপ্রাসঙ্গিক। এটি করার প্রয়োজন হয় না, তবে এটি আরও পরিষ্কার এবং আরও কার্যকর সমাধানের দিকে নিয়ে যায়।

list1 = {-1, 3, 1, -2, 5, 2, 3, 4};
list2 = {-1, 3, 1, -2, 5,2, 3, 4} //. {beg___, a_, b_, c_, end___} /; (a <= b <= c) 
 \[Or] (a >= b >= c) :> {beg, a, c, end}

অন্তরগুলি list1এবং list2নীচের প্লটগুলিতে প্রদর্শিত হয়:

NumberLinePlot[Interval /@ Partition[list1, 2, 1]]
NumberLinePlot[intervalsArrangedVertically = Interval /@ Partition[list2, 2, 1]]

অন্তর, মাঝে মাঝে


আমাদের কেবল ফোল্ড পয়েন্ট দ্বারা নির্ধারিত প্রতিটি বিরতিতে একটি একক লাইন পরীক্ষা করতে হবে। পরীক্ষার লাইনগুলি প্লটের ড্যাশযুক্ত উল্লম্ব লাইন।

delimitersLeftToRight = Union[list2]
testLines = delimitersLeftToRight + .5
NumberLinePlot[
 intervalsArrangedVertically = Interval /@ Partition[list2, 2, 1], 
 GridLines -> {testLines, {}}, 
 GridLinesStyle -> Directive[Gray, Dashed]]

পরীক্ষার লাইন


fপ্রতিটি পরীক্ষার লাইনের কাটা বা ক্রসিংয়ের সংখ্যা সন্ধান করে। X = 2.5 এ রেখাটি 5 ক্রসিং করে। যে স্ট্রিং 5 + 1 টুকরা ছেড়ে।

f[num_, ints_] := Count[IntervalMemberQ[#, num] & /@ ints, True]
f[#, intervalsArrangedVertically] & /@ testLines
Max[%] + 1

{2, 3, 5, 3, 2, 0}
6


8

পাইথ, 21 বাইট

heSmsmq1xS+dSkdC,tQQQ

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

পাইথন-শৈলীর তালিকা হিসাবে ইনপুট দিন [-1, 3, 1, -2, 5, 2, 3, 4]

@ জাকুবের প্রোগ্রামটি ঘনিষ্ঠভাবে ভিত্তিক, তবে একটি উন্নত কেন্দ্রীয় অ্যালগরিদম সহ। একটি >চেক এবং চেক করার পরিবর্তে >=, আমি .index()তিনটি সংযুক্ত করে একটি করে করলাম এবং নিশ্চিত করলাম সূচকটি 1, মানে এটি সর্বনিম্নের চেয়ে বড় এবং সর্বোচ্চের চেয়ে কম বা সমান।


7

আর, 86 83

এটির মাধ্যমে কাজ করে যাচ্ছিল এবং তখন বুঝতে পেরেছিলাম যে আমি অপটিমাইজার এবং অন্যদের সন্দেহের মতো একই সমাধানটি নিয়ে এসেছি।

যাইহোক এখানে এটি একটি ফাংশন হিসাবে যা ভেক্টর নেয়

f=function(l)max(colSums(mapply(function(n)c(l[-1],NA,l)<=n&c(l,l[-1],NA)>=n,l),T))

ঠিক আছে, তাই আমি পক্ষপাতদুষ্ট এবং ঠিক মত R। FWIW আপনি T"সত্য" ব্যবহার করে 3 টি অক্ষর বাঁচাতে পারলেন
কার্ল উইথথফট

@ কার্লভিটথফট টিপটির জন্য ধন্যবাদ
মিকিটি

4

গল্ফস্ক্রিপ্ট (৪৩ বাইট)

~[.(;]zip);{$}%:x{0=:y;x{{y>}%2,=},,}%$-1=)

দক্ষতার দিক থেকে, এটি ও (n ^ 2) ধরে নেওয়া হয় যে তুলনাগুলি O (1) সময় নেয়। এটি লাইন বিভাগগুলিতে ইনপুটটি ভেঙে দেয় এবং প্রতিটি সূচনা পয়েন্টের জন্য এটি অর্ধ-খোলা লাইন বিভাগগুলিকে গণনা করে যা এটি অতিক্রম করে।

অনলাইন ডেমো


4

পাইথন - 161

এটি সম্ভবত আরও গল্ফ করা যেতে পারে। gnibbler গল্ফ এটাকে অনেক সাহায্য করেছিল।

l=input()
d={}
for i in zip(l,l[1:]):d[sum(i)/2.]=0
for i,k in zip(l,l[1:]):
 for j in[m for m in d.keys()if min(i,k)<m<max(i,k)]:d[j]+=1
print max(d.values())+1

1
@ মার্টিনব্যাটনার / জাকুব আমি এটি স্থির করেছি। এটি এখন দশ সেকেন্ডের নীচে সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে।
কেএসএফটি

কেন এখানে দুটি ডাউনভোট আছে?
কেএসএফটি

3

রুবি, 63

ধারণাটিতে পাইথন সমাধানগুলির অনুরূপ।

->a{a.map{|x|a.each_cons(2).count{|v|v.min<x&&x<=v.max}}.max+1}

কোডের আগে 2 টি অক্ষর যুক্ত করুন যেমন f=আপনি কোনও নামযুক্ত ফাংশন চান। থ্যাক্স টু মার্করিড


খালি proc এটি একটি ভেরিয়েবলের জন্য নিযুক্ত না করে একটি গ্রহণযোগ্য উত্তর বলে মনে হয়। দুটি চরিত্র সংরক্ষণ করে।
মার্ক রিড

3

সি #, 73 65 বাইট

N=>1+N.Max(i=>N.Zip(N.Skip(1),(f,s)=>f<i+.5==i+.5<s).Count(b=>b))

নিয়মগুলি পড়ে আমি ভেবেছিলাম একটি সি # ল্যাম্বডা বেশ ভালভাবে করা উচিত।

সম্পাদনা করুন: সবেমাত্র পাওয়া Countগেছে ফিল্টারিংয়ের জন্য একটি দরকারী ওভারলোড!

আপনি উপযুক্ত delegateপ্রকারটি নির্ধারণ করে এটি পরীক্ষা করতে পারেন :

delegate int solver(int[] l);

এবং তারপর

var l = new int[] { -1, 3, 1, -2, 5, 2, 3, 4 };
solver s = N=>1+N.Max(i=>N.Zip(N.Skip(1),(f,s)=>f<i+.5==i+.5<s).Count(b=>b));

Console.WriteLine(s(l));

3

মতলব ( 43৩ 43)

ফাংশনে পাস করা সারি ভেক্টর হিসাবে ইনপুট দেওয়া হয় f। সুতরাং উদাহরণস্বরূপ f([-1, 3, 1, -2, 5, 2, 3, 4])রিটার্ন 6

f=@(x)max(sum(diff(bsxfun(@le,2*x',x(1:end-1)+x(2:end)))~=0))+1

সংক্ষিপ্ত সংস্করণ:

f=@(x)max(sum(diff(bsxfun(@lt,x',x))~=0))+1

অক্টোটা (31)

অক্টোবায় bsxfunস্বয়ংক্রিয় সম্প্রচারের জন্য ধন্যবাদ সরানো যেতে পারে:

f=@(x)max(sum(diff(x'<x)~=0))+1

2

জাভাস্ক্রিপ্ট (ES6) 80 82

মন্তব্য দেখুন - বাইট গণনা এফ বরাদ্দ করা হয় না (এটি এখনও পরীক্ষা করার প্রয়োজন)

F=l=>Math.max(...l.map(v=>l.map(t=>(n+=t>u?v<t&v>=u:v>=t&v<u,u=t),n=1,u=l[0])&&n))

টেস্ট ফায়ারফক্স / ফায়ারবাগ কনসোলটি

;[
 F([0, 1])
,F([2147483647, -2147483648])
,F([0, 1, -1])
,F([1, 0, -1])
,F([-1, 3, 1, -2, 5, 2, 3, 4])  
,F([-1122432493, -1297520062, 1893305528, 1165360246, -1888929223, 385040723, -80352673, 1372936505, 2115121074, -1856246962, 1501350808, -183583125, 2134014610, 720827868, -1915801069, -829434432, 444418495, -207928085, -764106377, -180766255, 429579526, -1887092002, -1139248992, -1967220622, -541417291, -1617463896, 517511661, -1781260846, -804604982, 834431625, 1800360467, 603678316, 557395424, -763031007, -1336769888, -1871888929, 1594598244, 1789292665, 962604079, -1185224024, 199953143, -1078097556, 1286821852, -1441858782, -1050367058, 956106641, -1792710927, -417329507, 1298074488, -2081642949, -1142130252, 2069006433, -889029611, 2083629927, 1621142867, -1340561463, 676558478, 78265900, -1317128172, 1763225513, 1783160195, 483383997, -1548533202, 2122113423, -1197641704, 319428736, -116274800, -888049925, -798148170, 1768740405,  473572890, -1931167061, -298056529, 1602950715, -412370479, -2044658831, -1165885212, -865307089, -969908936, 203868919, 278855174, -729662598, -1950547957, 679003141,  1423171080, 1870799802, 1978532600, 107162612, -1482878754, -1512232885, 1595639326, 1848766908, -321446009, -1491438272, 1619109855, 351277170, 1034981600, 421097157, 1072577364, -538901064])
,F([-2142140080, -2066313811, -2015945568, -2013211927, -1988504811, -1884073403, -1860777718, -1852780618, -1829202121, -1754543670, -1589422902, -1557970039, -1507704627, -1410033893,  -1313864752, -1191655050, -1183729403, -1155076106, -1150685547, -1148162179, -1143013543,  -1012615847, -914543424, -898063429, -831941836, -808337369, -807593292, -775755312, -682786953, -679343381, -657346098, -616936747, -545017823, -522339238, -501194053,  -473081322, -376141541, -350526016, -344380659, -341195356, -303406389, -285611307, -282860017, -156809093, -127312384, -24161190, -420036, 50190256, 74000721, 84358785,  102958758, 124538981, 131053395, 280688418, 281444103, 303002802, 309255004, 360083648,  400920491, 429956579, 478710051, 500159683, 518335017, 559645553, 560041153, 638459051,  640161676, 643850364, 671996492, 733068514, 743285502, 1027514169, 1142193844, 1145750868,  1187862077, 1219366484, 1347996225, 1357239296, 1384342636, 1387532909, 1408330157,  1490584236, 1496234950, 1515355210, 1567464831, 1790076258, 1829519996, 1889752281,  1903484827, 1904323014, 1912488777, 1939200260, 2061174784, 2074677533, 2080731335, 2111876929, 2115658011, 2118089950, 2127342676, 2145430585])
]

আউটপুট

[2, 2, 3, 2, 6, 53, 2]


2
পাইথন lambdaসমাধানগুলির উপর ভিত্তি করে , আপনাকে ফাংশনের মানটি একটি আসল ভেরিয়েবলের জন্য বরাদ্দ করতে হবে না, যাতে আপনি দুটি অক্ষর ছুঁড়ে ফেলতে পারেন।
মার্ক রিড

1
হাঁ। চ্যালেঞ্জের অন্যথায় বর্ণিত না হলে নামবিহীন ফাংশনগুলি পুরোপুরি ভাল।
মার্টিন ইন্ডার

1

জেলি , 10 বাইট

>þ`^ƝS$€Ṁ‘

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

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

>þ`^ƝS$€Ṁ‘ - Main link. 1 argument        e.g.   [1, 0, -1]
>þ`        - Greater than outer product          [[0, 0, 0], [1, 0, 0], [1, 1, 0]]
      $€   - Over each sublist:           e.g.   [1, 1, 0]
    Ɲ      -   Over each overlapping pair e.g.   [1, 0]
   ^       -     Perform XOR                     1
     S     -   Take the sums                     [0, 1, 1]
        Ṁ  - Take the maximum                    1
         ‘ - Increment                           2



0

++ , 27 বাইট যুক্ত করুন

D,w,@@,VbUG€<ÑBxs
L~,A€wM1+

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

তাদের এপিএল উত্তরের জন্য জাগর্বকে ধন্যবাদ জানাই

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

একটি সাধারণ "টেবিল" ফাংশনটি এরকম কিছু দেখায়:

D,func,@@,+

D,iter,@@*, VbUG €{func}
D,table,@@, $ bRbU @ €{iter} B]

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

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

সাধারণ টেবিল ফাংশনটি কীভাবে আচ দ্রুত ডায়াডিক ফাংশনগুলির কাছে আসে তার সুবিধা গ্রহণ করে । যদি স্ট্যাকটি দেখতে ভাল লাগে

 [a b c d e]

যখন €{func}মুখোমুখি হয়, পপস e, এটি ডায়াডের বাম আর্গুমেন্ট হিসাবে আবদ্ধ করে এবং আংশিক ফাংশনটিকে মানচিত্র করে a, b, c, d। তবে তালিকাগুলির চেয়ে পুরো স্ট্যাকের উপরে দ্রুত মানচিত্র। সুতরাং আমাদের প্রথমে আর্গুমেন্ট হিসাবে পাস করা অ্যারে সমতল করতে হবে।

টেবিল ফাংশন ভালো সামগ্রিক কাজ করে

D,func,@@,+

D,iter,		; Define our helper function iter
		;   This takes an array as its left argument
		;   And a single integer as its right argument
	@@	; Dyadic arguments - take two arguments and push to the stack
	*,	; After execution, return the entire stack, rather then just the top element
		;
		; Example arguments:	[5 6 7 8] 1
		; 
	VbUG	; Unpack the array;	[5 6 7 8 1]
		;
	€{func}	; Map func over the stack
		; As func is dyadic, this pops the right argument
		;   and binds that to a monadic func
		; This then maps the remaining elements, [5 6 7 8]
		;   over the monadic call of func, yielding [6 7 8 9]
		; Now, as the * flag was defined, we return the entire array
		;   rather than just the last element.
		; We'd achieve the same behaviour by removing the flag and appending B]

D,table,	; Define the main table function
		;   This takes two arrays as arguments
		;   Returns a single 2D array representing their outer product with func
	@@,	; Take the two arrays and push to the stack
		; 
		; Example arguments:	[[1 2 3 4] [5 6 7 8]]
		;
	$	; Swap;		STACK = [[5 6 7 8] [1 2 3 4]]
	bR	; Reverse last;	STACK = [[5 6 7 8] [4 3 2 1]]
	bU	; Unpack;	STACK = [[5 6 7 8] 4 3 2 1]
	@	; Reverse;	STACK = [1 2 3 4 [5 6 7 8]]
		; 
		; This allows us to place the stack so that each element of
		;   the first array is iterated over with the second array
		;
	€{iter}	; Map iter;	STACK = [[6 7 8 9] [7 8 9 10] [8 9 10 11] [9 10 11 12]]
		;
	B]	; Return the whole stack;

$table>?>?
O

যাইহোক, আমরা আমাদের বাইরের টেবিলটি monadic হওয়ার প্রয়োজন এবং এটি কেবল পাস হওয়া আর্গুমেন্টের জন্য প্রয়োগ করা প্রয়োজন এই কারণে আমরা এটি অনেকটা ছোট করতে পারি । Aকমান্ড স্বতন্ত্রভাবে স্ট্যাকের প্রতিটি যুক্তি পাহাড় জমে তাই আমরা কোন স্ট্যাক ম্যানিপুলেশন সঙ্গে জগাখিচুড়ি প্রায় প্রয়োজন হবে না। সংক্ষেপে, আমাদের যুক্তি যদি অ্যারে হয় তবে আমাদের [a b c d]স্ট্যাকটি তৈরি করা দরকার

[a b c d [a b c d]]

শীর্ষ মান, অবশ্যই, argument.You সাধারণ উদাহরণ থেকে লক্ষ্য করে হতে পারে হয় bUহয় আনপ্যাক কমান্ড অর্থাত এটা স্ট্যাকের শীর্ষ অ্যারের splats। সুতরাং উপরের কনফিগারেশনটি করতে, আমরা কোডটি ব্যবহার করতে পারি

L,bUA

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

তবে এটি একটি বাইট দ্বারা সংক্ষিপ্ত করা যেতে পারে। এর একটি নাম হিসাবে L,bU, আমরা ~পতাকাটি ব্যবহার করতে পারি , স্ট্যাকের আগে যুক্তিগুলি ছড়িয়ে দেওয়ার জন্য, আমাদের কনফিগারেশনের উদাহরণ তৈরি করে

L~,A

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

যা প্রোগ্রামের দ্বিতীয় লাইনের শুরু। এখন আমরা monadic বাইরের পণ্য বাস্তবায়ন করেছি, আমাদের কেবলমাত্র বাকি অ্যালগোরিদমটি প্রয়োগ করা দরকার। ফলে পুনরুদ্ধারের একবার টেবিল সঙ্গে <(কম), এবং সংখ্যা গণনা [0 1]এবং [1 0]প্রত্যেক সারিতে জোড়া। অবশেষে, আমরা এই গণনাগুলির সর্বাধিক গ্রহণ করি এবং এটি বৃদ্ধি করি।

পদক্ষেপের মাধ্যমে সম্পূর্ণ পদক্ষেপটি হ'ল

D,w,		; Define a function w
		;   This takes an array and an integer as arguments
		;   First, it produces the outer product with less than
		;   Then reduce overlapping pairs by XOR
		;   Finally, sum the rows
	@@,	; Take two arguments
		;
		; Example arguments:		[[0 1 2 3] 0]
		;
	VbUG€<	; Map < over the array;	STACK = [0 1 1 1]
	ÑBx	; Equals [1 0];		STACK = [1 0 0]
	s	; Sum;			STACK = [1]

L		; Define a lambda function
		;   This takes one argument, an array
	~,	;   Splat the array to the stack before doing anything
		;
		; Example argument:		[0 1 2 3]
		;
	A€w	; Map with w;		STACK = [1 1 1 0]
	M	; Maximum;		STACK = [1]
	1+	; Increment;		STACK = [2]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.