আমি কত পৃষ্ঠা ছিন্ন করেছি?


34

গত মাসে আমি গ্রন্থাগার থেকে প্রচুর বই ধার করেছিলাম। তারা সমস্তই ছিল ভাল বই, সংবেদন এবং প্লট-টুইস্টে ভরা। দুর্ভাগ্যক্রমে, কিছু পয়েন্টে আমি খুব ক্রুদ্ধ / দু: খিত / হতাশ হয়ে পড়েছি, তাই আমি কয়েকটি পৃষ্ঠা ছিঁড়ে ফেলেছি।

এখন গ্রন্থাগারটি জানতে চায় যে প্রতিটি বইয়ের জন্য আমি কত পৃষ্ঠা ছড়িয়ে দিয়েছি।

আপনার লক্ষ্যটি হ'ল একটি প্রোগ্রাম লিখুন, যা ইনপুট হিসাবে সংখ্যার একটি সাজানো, কমা-বিস্মৃত তালিকা গ্রহণ করে এবং ন্যূনতম এবং সর্বাধিক সম্ভাব্য পৃষ্ঠা গণনাটি ছুঁড়ে ফেলেছি torn প্রতিটি লাইন একটি বই উপস্থাপন করে, প্রতিটি সংখ্যা বই থেকে অনুপস্থিত পৃষ্ঠা উপস্থাপন করে।

উদাহরণ ইনপুট:

7,8,100,101,222,223
2,3,88,89,90,103,177
2,3,6,7,10,11
1
1,2

উদাহরণ আউটপুট:

4/5
5/6
3/6
1/1
1/2

4/5এর অর্থ, বইটির পৃষ্ঠা নম্বরটি কোন দিকে শুরু হয় তার উপর নির্ভর করে আমি 4 বা 5 পৃষ্ঠাগুলি ছড়িয়ে ফেলেছি। একটি পৃষ্ঠা 6/7 পৃষ্ঠা 8/9, পৃষ্ঠা 100/101 পৃষ্ঠা এবং 222/223 পৃষ্ঠা (4 পৃষ্ঠা) ছিন্ন করতে পারে। বিকল্পভাবে, কেউ পৃষ্ঠা 7/8, পৃষ্ঠা 99/100, পৃষ্ঠা 101-102, পৃষ্ঠা 221/222 এবং পৃষ্ঠা 223/224 (5 পৃষ্ঠা) ছিঁড়ে ফেলতে পারত।

মনে রাখবেন যে কোনও বইয়ের পৃষ্ঠায় সর্বদা সামনে এবং পিছনের দিক থাকে। এছাড়াও পৃষ্ঠা নম্বরটি বইয়ের চেয়ে আলাদা হয় to কিছু বইয়ের বাম পৃষ্ঠায় পৃষ্ঠাগুলির সংখ্যাও রয়েছে; ডান পৃষ্ঠায় কিছু। সমস্ত বই বাম থেকে ডানে পড়ে are

বাইট জিতে সংক্ষিপ্ত কোড। কঠোর ইনপুট / আউটপুট ফরম্যাট না প্রয়োজন। আপনার প্রোগ্রামগুলি ইনপুট হিসাবে এক বা একাধিক বই নিতে সক্ষম হতে হবে। আনন্দ কর.


3
আউটপুট মানগুলি বাছাইয়ের গ্যারান্টি না দিলে কি তা গ্রহণযোগ্য হবে? (যেমন 4/5এবং 5/4)
অ্যারনল্ড

আউটপুট ক্রমটি সমস্ত min/maxবা সমস্ত ক্ষেত্রেই সামঞ্জস্যপূর্ণ হতে হবে তা নির্দিষ্ট করতে চ্যালেঞ্জগুলিতে আপডেট করতে ভুলবেন না max/min। (যদিও, ব্যক্তিগতভাবে, আমি এটিকে অনুমানের অংশ না হওয়ার পছন্দ করব!)
শেগি

2
programs must be able to take one or more books as inputশাসনের কারণ কী হবে ? বেশিরভাগ (সমস্ত না থাকলে) কেবলমাত্র একটি লিপকে কোনও লুপ বা কোনও কিছুর মধ্যে যাচাই করার জন্য কোডটি लपेटবে। এটি কেবল চ্যালেঞ্জের কোনও লাভ না করে উত্তরে একটি ওভারহেড যুক্ত করুন। এই প্রশ্নগুলির ইতিমধ্যে প্রচুর উত্তর পেয়েছে, সুতরাং এটি যেমনটি রাখা ভাল তবে ভবিষ্যতের চ্যালেঞ্জগুলির জন্য এটি আপনার মনে রাখবেন।
রড

প্রস্তাবিত পরীক্ষার কেস (@ আর্নল্ডের সৌজন্যে): 1,3,5,7,9,11,13,15,17,18- ভাষাগুলির জন্য বিল্ট-ইন sortপদ্ধতিটি ডিফল্টরূপে লিক্সোগ্রাফিকভাবে সাজান এমন ভাষার সুবিধার জন্য (ধারাবাহিকভাবে সাজানো আউটপুটের প্রয়োজনীয়তাটি অনুমানের সাথে যুক্ত করা হয়)।
শেগি

উত্তর:


6

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

εD>)ÅÈε€θγg}{

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

এমাইকাকে ধন্যবাদ পরিবর্তনের বিষয়ে মাথা উঁচু করার জন্য।

ব্যাখ্যা

εD>)ÅÈε€θγg}{ – Full program.
ε             – For each book...
 D            – Push two copies of it.
  >           – Increment all the elements of the second copy.
   )          – Wrap the whole stack into a list.
    ÅÈ        – Produces the lists of even natural numbers lower or equal to each element.
      ε       – For each (the modified copies of the book):
       €θ     – Get the last item of each.
         γg   – And split into chunks of equal adjacent elements.
           }  – Close the loop.
            { – Sort the resulting list.

ভাল জমা। আমি 2 অতিরিক্ত ইনপুট / আউটপুট লাইন দিয়ে চ্যালেঞ্জটি আপডেট করেছি। এছাড়াও কঠোর আই / ও প্রয়োজন হয় না।
আর্মিনব

বিটিডব্লিউ, আপনার প্রোগ্রামটি ইনপুট হিসাবে একাধিক বই নেয় না।
আর্মিনব

@ এমিগনা মাথা উঁচু করার জন্য ধন্যবাদ। সেই অনুসারে আমার উত্তর সম্পাদনা করেছেন।
মিঃ এক্সকডার

@ আরমিনব এটি এখনই ঠিক করা উচিত।
মিঃ এক্সকডার

4

পাইথন 2 , 72 56 68 67 বাইট

lambda b:[map(len,map(set,zip(*[[p/2,-p/2]for p in t])))for t in b]

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


আপনার প্রোগ্রাম একাধিক লাইন ইনপুট (একাধিক বই) গ্রহণ করে না। আমি 2 অতিরিক্ত ইনপুট / আউটপুট লাইন দিয়ে চ্যালেঞ্জটি আপডেট করেছি। এছাড়াও কঠোর আই / ও প্রয়োজন হয় না।
আর্মিনব

1
রান প্রতি একাধিক ইনপুট কি কঠোর আই / ও তে পড়বে না?
রড

1
কেউ তর্ক করতে পারে।
আর্মিনব

আপনি কীভাবে বই এবং তাদের পৃষ্ঠাগুলিকে ইনপুট হিসাবে গ্রহণ করবেন তা I / O স্পেস দ্বারা আচ্ছাদিত। প্রয়োজন যে আপনার কি একাধিক বই নিতে ইনপুট হিসাবে চ্যালেঞ্জ বৈশিষ্ট অংশ।
শেগি

4

জাভাস্ক্রিপ্ট, 104 93 92 85 80 79 74 বাইট

যদি অপ্রয়োজনীয় (আমার মতে) প্রয়োজনের জন্য না হয় তবে 57 বাইট হতে হবে আউটপুটে প্রতিটি জোড় সংখ্যার ধারাবাহিকভাবে বাছাই করা উচিত, বা 47 বাইট যদি আমাদের কেবল ইনপুট হিসাবে একটি বই নেওয়ার প্রয়োজন হয়।

ইনপুট এবং আউটপুট উভয়ই অ্যারের অ্যারে।

a=>a.map(x=>[0,1].map(n=>new Set(x.map(y=>y+n>>1)).size).sort((x,y)=>x-y))
  • প্রাথমিকভাবে অলিভিয়ার জাভা সমাধান এবং আমার নিজস্ব (বর্তমানে মুছে ফেলা) জাপট সমাধান দ্বারা অনুপ্রাণিত ।
  • 2 বাইট সংরক্ষিত ধন্যবাদ Arnauld (প্লাস অন্য 3 আমরা উভয় একই সময়ে বিক্ষোভ) এবং 10 বাইট যোগ তাকে ধন্যবাদ ভাঙ্গা বাছাই আমি আশা চাই কেউ কিছু spotting যখন প্রয়োজন আলোচ্য এখনও ছিল লক্ষ্য হবে!

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

পরীক্ষার কেসগুলি শেষের ক্ষেত্রে আরও ভাল পঠনযোগ্যতার জন্য পৃথক বইগুলিতে বিভক্ত হয় (এতে [1,2]প্রান্তের কেস অন্তর্ভুক্ত রয়েছে ) যা বোঝায় যে এই সমাধানটি ইনপুটটিতে একাধিক বইকে সমর্থন করে।

f=
a=>a.map(x=>[0,1].map(n=>new Set(x.map(y=>y+n>>1)).size).sort((x,y)=>x-y))
o.innerText=` Input                         | Output\n${`-`.repeat(31)}|${`-`.repeat(21)}\n`+[[[7,8,100,101,222,223]],[[2,3,88,89,90,103,177]],[[2,3,6,7,10,11]],[[1,3,5,7,9,11,13,15,17,18]],[[1],[1,2],[8,10]]].map(b=>` `+JSON.stringify(b).padEnd(30)+"| "+JSON.stringify(f(b))).join`\n`
<pre id=o></pre>


ইতিহাস


এটি কোথাও লেখা নেই যে আউটপুটটি ন্যূনতম থেকে সর্বোচ্চ পর্যন্ত বাছাই করতে হবে। প্রশ্নটি কেবল বলে যে ইনপুটটি বাছাই করা হবে।
অলিভিয়ার গ্রাগোয়ার

@ OlivierGrégoire; যখন সত্য যে আউটপুট সামঞ্জস্যপূর্ণ শ্রেণীবিভাজন বর্তমানে বৈশিষ্ট অন্তর্ভুক্ত করা হয় না, arminb জানায় যে এটা সমাধানের একটি দম্পতি মন্তব্য করে হয় প্রকৃতপক্ষে একটি প্রয়োজন। আমি ইতিমধ্যে আছে মন্তব্য এটা অন্তর্ভুক্ত করা জন্য জিজ্ঞাসা এবং এটি বিরুদ্ধে আমার পক্ষপাত জানায় চ্যালেঞ্জ - সব পরে, আমাকে দাও, যেন কঠোর ইনপুট / আউটপুট আওতায় ফেলা হয়।
শেগি

1
আমি মনে করি এটি 64 বাইটের জন্য কাজ করা উচিত । তবে কোনও কলব্যাক ছাড়াই আপনার বর্তমান সাজানোর পদ্ধতিটি ত্রুটিযুক্ত। এটি যেমন ব্যর্থ হবে [1,3,5,7,9,11,13,15,17,18]
আরনাউল্ড

ধন্যবাদ, @ আরনাউল্ড আমি যখন আপনার মন্তব্যটি স্পষ্ট করেছিলাম তখন [0,.5]ব্যবহার করার পরিবর্তে মানচিত্রটিতে একটি আপডেট লেখা সবেমাত্র শেষ করে gদিয়েছি। বিটওয়াইজ অপারেটরদের সাথে কেন আমার এমন মানসিক অবরুদ্ধতা আছে তা জানেন না! আমি আশা করছিলাম আউটপুট বাছাই করা কোনও প্রয়োজনীয়তা হয়ে উঠবে না এবং এর মধ্যে কেউ আমার ভাঙ্গাটি লক্ষ্য করবে sort()না;) কিছু কাজ করা দরকার তাই আপডেট করার জন্য কিছুক্ষণের মধ্যে ফিরে আসবে।
শেগি

@ শেগি মূল উদ্দেশ্যটি কী y/2? এই অ্যালগরিদমের জন্য পৃষ্ঠা নম্বরটি অর্ধেক ভাগ করার যুক্তি কী?
মাইকফিন

2

রেটিনা 0.8.2 , 60 বাইট

\d+
$*
.+
$&,/$&,
,(?=.*/)
1,
((11)+,)1\1|1+,
1
%O`1+
1+
$.&

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

\d+
$*

পৃষ্ঠাগুলির সংখ্যাগুলিকে অবিচ্ছিন্ন করে তুলুন।

.+
$&,/$&,

ইন্টারপোস করে তালিকার সদৃশ করুন /

,(?=.*/)
1,

তালিকার একটি অনুলিপিতে পৃষ্ঠা নম্বর বৃদ্ধি করুন।

((11)+,)1\1|1+,
1

পৃষ্ঠাগুলির সংখ্যা গণনা করুন, তবে একটানা সমান এবং বিজোড় সংখ্যাগুলি কেবল একটি পৃষ্ঠা হিসাবে গণনা করা হয়।

%O`1+

গণনাগুলিকে ক্রম অনুসারে বাছাই করুন।

1+
$.&

গণনাগুলিকে দশমিক দশকে রূপান্তর করুন।


ভাল জমা! আমি 2 অতিরিক্ত ইনপুট / আউটপুট লাইন দিয়ে চ্যালেঞ্জটি আপডেট করেছি। এছাড়াও কঠোর আই / ও প্রয়োজন হয় না। মনে হচ্ছে আপনার প্রোগ্রামটি এখনই একমাত্র যা সমস্ত পরীক্ষার কেস পাস করে।
আর্মিনব

পরিবর্তে ,(?=.*/)¶1,কিছু হতে পারে না ,.*/¶1$&?
ভেন

@ ভেন না, এটি কেবলমাত্র একটি সংখ্যা বাড়িয়ে তুলবে, তবে আমার সবগুলি বাড়ানো দরকার।
নীল

ঠিক আছে, এবং ওভারল্যাপিং ব্যবহার করে এটি আবার একই বাইট গণনাতে নিয়ে যায়, তাই ন্যায্য নফ
ভেন

2

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

import Data.List
p t=sort[length$nub[div(p+o)2|p<-t]|o<-[0,1]]

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


1
আমি এটি প্রযুক্তিগতভাবে বৈধ বলে মনে করি না, কারণ প্রশ্নের একটি পূর্ণ প্রোগ্রাম প্রয়োজন ( Your goal is to write a program, which takes a sorted, comma-delimmited list of numbers as input )
ousurous

@ আমাদের অধিকারী ' 2 টি অতিরিক্ত ইনপুট / আউটপুট লাইন সহ আমি চ্যালেঞ্জটি আপডেট করেছি। এছাড়াও কঠোর আই / ও প্রয়োজন হয় না।
আর্মিনব

2

জাভা (ওপেনজেডিকে 9) , 163 বাইট

import java.util.*;
n->{for(int i=n.length;i-->0;){Set s=new HashSet(),t=new HashSet();for(int p:n[i]){s.add(p/2);t.add(++p/2);}n[i]=new int[]{s.size(),t.size()};}}

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

ব্যাখ্যা

n->{                                   // Input-output of int[][]
 for(int i=n.length;i-->0;){           // Iterate on books
  Set s=new HashSet(),t=new HashSet(); // Create two hashsets
  for (int p:n[i]) {                   // Iterate over each page
   s.add(p/2);                         // Add the sheet-of-page of books [ even | odd ] to one set.
   t.add(++p/2);                       // Add the sheet-of-page of books [ odd | even ] to the other set.
  }
  n[i]=new int[] {                     // change the input to the number of sheets used.
   s.size(),
   t.size()
  };
 }
}

দ্রষ্টব্য: যেহেতু এটি সম্পর্কে কোনও প্রয়োজনীয়তা নেই, তাই ন্যূনতম এবং সর্বাধিক সংখ্যক পৃষ্ঠাগুলি অর্ডার করা হয় না।


আপনি কয়েকটি বাইট সংরক্ষণ করতে জাভা sizeদিয়ে চেইন করতে পারেন add? যেমন s.add(p/2).size,।
শেগি

1
@Shaggy নং আমি স্ট্রিম সঙ্গে শৃঙ্খল কাপড় পারে, কিন্তু যে হবে যোগ একটি <গুলি> কয়েক </ সেকেন্ড> বাইটের অনেক, না রক্ষা ;-)
অলিভিয়ের Gregoire

2

এপিএল (ডায়ালগ ইউনিকোড) , 37 বাইট

{(≢⍵)≤2:⌽≢∘∪¨⌊⍵(1+⍵)÷2⋄≢∘∪¨⌊⍵(1+⍵)÷2}

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

পৃষ্ঠাগুলির আউটপুট ক্রম কোনও বিবেচনা না করে যদি এটি অর্ধেকেরও কম বাইট গণনার জন্য করা যায়:

{≢∘∪¨⌊⍵(1+⍵)÷2}

কিভাবে?

{(≢⍵)≤2:⌽≢∘∪¨⌊⍵(1+⍵)÷2⋄≢∘∪¨⌊⍵(1+⍵)÷2}⍝ Prefix dfn
{(≢⍵)≤2:                                If argument length 2 
                    ÷2                  Divide by 2
              ⍵(1+⍵)                    Both the argument and 1+argument
                                       Round down to the nearest integer
           ∪¨                           Get the unique values of each
                                       And then
                                       Get the tally of elements of each
                                       And reverse the result
                                       Else
                       ≢∘∪¨⌊⍵(1+⍵)÷2}  Same as above, without reverting the result.


2

পার্ল 5 , 95 + 1 ( -a) = 96 বাইট

@0=@1=0;map{$i=-1;$F[$i]+1==$F[$i+1]&&$F[$i]%2==$_&&$i++while++$i<@F&&++@{$_}[0]}0,1;say"@0/@1"

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


এমন কিছু ঘটনা রয়েছে যা আপনার প্রোগ্রামটি সঠিকভাবে সম্পাদন করে না। আমি 2 অতিরিক্ত ইনপুট / আউটপুট লাইন দিয়ে চ্যালেঞ্জটি আপডেট করেছি। এছাড়াও কঠোর আই / ও প্রয়োজন হয় না।
আর্মিনব

আমি দেখছি না যেখানে আপনার পরীক্ষার কোনও মামলা ব্যর্থ হচ্ছে are একমাত্র জিনিস যা কাজ করছে না তা হ'ল একাধিক কেস, যা আমি আমার সমাধান পোস্ট করার পরে আপনি যুক্ত করেছেন। যাই হোক না কেন, আমি একাধিক পরীক্ষা পরিচালনা করার সমাধানটি আপডেট করেছি।
এক্সকালি

2

ওল্ফ্রাম ভাষা (গণিত) , 37 বাইট

8 মার্টিনের জন্য @ মার্টিনইেন্ডারকে ধন্যবাদ!

Sort[Length@*Split/@{#,#+1}~Floor~2]&

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

ব্যাখ্যা

ইন: {3, 4, 5}

{#,#+1}

(ইনপুট) এবং (ইনপুট + 1) নিন। {{3, 4, 5}, {4, 5, 6}}

... ~Floor~2

উপরের প্রতিটি সংখ্যার জন্য, এটি সবচেয়ে কম সংখ্যক কম নিন। {{2, 4, 4}, {4, 4, 6}}

Length@*Split/@

উপরে থেকে প্রতিটি তালিকার জন্য, তালিকাটিকে একই উপাদান দ্বারা বিভক্ত করুন {{{2}, {4, 4}}, {{4, 4}, {6}}}

এবং প্রতিটি দৈর্ঘ্য নিতে: {2, 2}

Sort[ ... ]

আউটপুট বাছাই করুন।


1
আপনার প্রয়োজন নেই SplitBy: Length@Split@⌊#/2⌋&/@{#,#+1}&কাজ করে। কিন্তু তারপর এটা মানচিত্র সামনে মেঝে করতে এমনকি খাটো আছে: Length@*Split/@⌊{#,#+1}/2⌋&। এবং যদি আপনি পছন্দ করেন তবে আপনি ইউনিকোড ছাড়াই একই বাইট গণনাটি পেতে পারেন:Length@*Split/@{#,#+1}~Floor~2&
মার্টিন ইন্ডার

আহ, আমি মনে করি চ্যালেঞ্জটির জন্য কঠোর আই / ও ফর্ম্যাট দরকার।
এরিক আউটগল্ফার

1

পরিষ্কার , 222 210 204 196 বাইট

import StdEnv,ArgEnv,Data.Maybe,qualified GenLib as G
Start=tl[let(Just l)='G'.parseString i;?s=sum[1\\n<-[s,s+2..last(sort l)]|isAnyMember[n,n+1]l]in zip2(sort[?0,?1])['/\n']\\i<-:getCommandLine]

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

সম্পূর্ণ প্রোগ্রামের প্রয়োজনীয়তা একেবারে খুন ক্লিনের প্রতিযোগিতা করার ক্ষমতা।

যারা ক্লিনে আমার উত্তরগুলিতে মনোযোগ দিচ্ছেন তাদের জন্য আপনি খেয়াল করবেন import qualified , যা একসাথে ব্যবহার করা উচিত নয় এমন মডিউলগুলি ব্যবহার করে ঘুরে দেখার জন্য এটি একটি কুশ্রী হ্যাক - যা কেবল অন্য কুৎসিত হ্যাকের কারণেই এখানে প্রয়োজনীয় is সঙ্গে GenLibতার উপর নির্ভর করে Data.Maybeএর পরিবর্তে StdMaybe, যার ফলে এখনও অন্য লাইব্রেরি Haskell, এর থেকে অনুবাদ মধ্যে কুশ্রী হ্যাক Dataকার্যকারিতা পেতে আগে ক্লিন নিজস্ব লাইব্রেরি সমানভাবে সম্পূর্ণ হয়।

কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে ইনপুট নেয়।


ভাল জমা। আমি 2 অতিরিক্ত ইনপুট / আউটপুট লাইন দিয়ে চ্যালেঞ্জটি আপডেট করেছি। এছাড়াও কঠোর আই / ও প্রয়োজন হয় না।
আর্মিনব

@ আরমিনব ধন্যবাদ! সে ক্ষেত্রে আমি আগামীকাল এটি অনেকটা ছোট করতে সক্ষম হব।
01urous

@ আরমিনব আমি এটি আপডেট করেছি তাই এটি নতুন ক্ষেত্রে কার্যকর হবে। আমি যে আই / ও ব্যবহার করেছি তা যদি গ্রহণযোগ্য না হয় তবে আমি সকালে আবার এটি সংশোধন করব।
18urous

0

পার্ল, 40 বাইট

Inludes +1জন্যa

perl -aE 'say/$/*grep${$.}{$_*$`|1}^=1,@F for-1,1' <<< "7 8 100 101 222 223"

আউটপুট অর্ডার করা হয় না।

ধনাত্মক পৃষ্ঠা নম্বর ধরে (বিশেষত কোনও পৃষ্ঠা নেই) 0 )। অনুমান পাতাগুলি কেবল একবার উল্লেখ করা হয়েছে। ইনপুট অর্ডার করা হয়েছে কিনা তা যত্নশীল নয়।

রান করার 3জন্য কেবল একটি বইয়ের প্রসেসিং এর জন্য বাইট সংরক্ষণ করে 37:

perl -aE 'say/$/*grep$z{$_*$`|1}^=1,@F for-1,1' <<< "7 8 100 101 222 223"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.