উল্লম্ব টুকরা নির্ধারণ করা হচ্ছে


23

একটি চিত্র দেওয়া হয়েছে, আউটপুট [সম্পূর্ণ উল্লম্ব বিভাগের পিক্সেল প্রস্থ] 1 (যদি বিদ্যমান থাকে)। যদি কোনও উল্লম্ব বিভাগ উপস্থিত না থাকে তবে আউটপুট 0

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

1. সামঞ্জস্যপূর্ণ, সমস্ত সাদা কলামগুলির সংখ্যা


আপনি ধরে নিতে পারেন

  • কোনও চিত্র 1000 বর্গ পিক্সেলের চেয়ে বড় হবে না

  • প্রতি ছবিতে একাধিক সম্পূর্ণ উল্লম্ব বিভাগ থাকবে না


উদাহরণ

ইনপুট:

আউটপুট:

50
57
0
0

বিভাগগুলি দেখানোর জন্য এখানে প্রথম দুটি উদাহরণ হাইলাইট করা (হলুদে) দেওয়া হয়েছে:


মাঝখানে কালো দ্বীপগুলি থাকতে পারে যাতে একাধিক উল্লম্ব বিভাগ রয়েছে?
xnor

@ এক্সনর: প্রতি চিত্রে কেবলমাত্র একটি সম্পূর্ণ উল্লম্ব বিভাগ থাকবে। আমি সেই অনুমানটিতে যুক্ত করব।
জাচ গেটস

আমার কোডটি প্রথম পরীক্ষার ক্ষেত্রে 50 আউটপুট দিচ্ছে, তবে শেষের 3 টির জন্য সঠিক সংখ্যাগুলি, কলাম থেকে 233 থেকে 282 পর্যন্ত (= 50 পিক্সেল জুড়ে) উল্লম্ব টুকরা সহ numbers আপনি 48 নম্বরটি সঠিক সংখ্যাটি নিশ্চিত করতে পারবেন?
ডেভিড

@ ডেভিড: আমি 232 থেকে 282 কলাম (একচেটিয়া) থেকে সঠিক স্লাইসটি দেখতে পাচ্ছি। আমি বিশ্বাস করি আপনি ঠিক বলেছেন।
জ্যাচ গেটস 23

2
কারওর সমস্যা হচ্ছে বলে আমি মনে করি না, তবে এটি স্পষ্ট করে উল্লেখ করা উচিত যে আপনি সংমিশ্রিত, সমস্ত সাদা কলামগুলির সংখ্যাটি সন্ধান করছেন। এটি উদাহরণ থেকে পরিষ্কার, তবে এটি সাধারণত উদাহরণ বা পরীক্ষার ক্ষেত্রে নির্ভর না করা পছন্দ করে।
মাইকেলস 2

উত্তর:


36

জেলি, 2 বাইট

PS

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

যদি আমি এর মতো একটি চিত্র এনকোড করি:

0000111111111100000
0000000111111111000
0000000001111100000
0000000011111000000
0001111111111111100
0000001111110000000
0000000111111110000
0000111111111100000

এর মতো নেস্টেড অ্যারেতে:

[[0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0],...]

তারপরে Pসমস্ত সারি ভেক্টরগুলির উপাদান-ভিত্তিক পণ্য গ্রহণ করে Sএবং উল্লম্ব টুকরোটির দৈর্ঘ্য ফলন করে ফলস্বরূপ সমস্তগুলির যোগফলকে যোগ করে। (এটি কেবলমাত্র একটি মাত্র টুকরো টুকরো হওয়ার গ্যারান্টিযুক্ত কারণ এটি কাজ করে)) আমাদের ক্ষেত্রে উত্তরটি হল 3


21
Olf_ಠ এই গল্ফটি আমাকে স্তম্ভিত করে।
অ্যাডিসন ক্রম্প

যখন কোন সংলগ্ন টুকরো নেই তখন আউটপুট কী? (বৈধ ইনপুট)
অ্যাডিসন ক্রম্প

3
psএমএটিএল-তেও কাজ করে!
ডেভিড

এরপর সব কোন কলাম হতে হবে 1এস, ফল, যার অর্থ Pহতে হবে [0,0,0...0], যার মধ্যে Sউম হয় 0, যেমন প্রত্যাশিত।
লিন

@ ডেভিড তাহলে পোস্ট করবেন? আপনার প্রয়োজন হতে পারে Xps, যদিও চিত্রটি একটি একক সারি হতে পারে (বা অপেক্ষাকৃত কমপক্ষে কোনও আকার আছে কিনা তা জিজ্ঞাসা করুন)
লুইস মেন্ডো

7

এপিএল, 4 বাইট

+/×⌿

Try it here.

এটি আমার প্রথম এপিএল উত্তর!

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


এটি কোনও ফাংশন নয়। (+/×/⍉)কাজ করে না
জিমি 23013

1
তবে আপনি ব্যবহার করতে পারেন (+/×⌿)এবং এটি 1 বাইট ছোট।
জিমি 23013

প্রথম বন্ধনী অপসারণ করে আরও 2 বাইট সংরক্ষণ করুন। অন্যান্য APL উত্তর প্রচুর যে নামকরণ বা আলাদা নয় ব্যবহার করা ঠিক একটি বেনামী ফাংশন ট্রেন আছে:+/×⌿ f←+/×⌿ f picture
আদম

6

বাশ + সাধারণ ইউটিলিটিস, 17

rs -Tc|grep -vc 0

আপনি যদি grep জন্য ব্যবহার না করে থাকেন তবে আপনি এটি ভুল করছেন ;-)।

এটি rsস্থানান্তর করতে ইউটিলিটিটি ব্যবহার করে । rsহয় ওএসএক্স একত্রিত কিন্তু ভালো কিছু সঙ্গে সবচেয়ে লিনাক্স এ ইনস্টল করতে হবে sudo apt-get install rs

ইনপুট কলামগুলি TABপৃথক করা হয়েছে এবং সারিগুলি নতুন লাইন পৃথক করা হয়েছে:

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

আপনি যদি চান তবে ইমেজমেজিক এবং (জিএনইউ) সেডের সাহায্যে উদাহরণস্বরূপ ইনপুট চিত্রগুলি এই ফর্ম্যাটটিতে প্রসেস করতে পারেন। উদাহরণ:

$ for img in "AmXiR.jpg" "vb2Yt.jpg" "1V7QD.jpg" "MqcDJ.jpg" ; do
>     convert -depth 1 "$img" xpm:- | \
>     sed -nr '/pixels/{:l;n;/}/q;s/^"(.*)",?$/\1/;y/ ./01/;s/./&\t/g;p;bl}' | \
>     rs -Tc|grep -vc 0
> done
50
57
0
0
$

6

পার্ল, 21 22 বাইট

স্থির সংস্করণ

এর জন্য +২ অন্তর্ভুক্ত -lp( -lবাদ দেওয়া যেতে পারে এবং এটি এখনও একটি বৈধ সমাধান হতে পারে তবে এটি চূড়ান্ত নিউলাইন ছাড়া কুৎসিত)

STDIN- তে 0 বা আরও লাইনে 1 এর 0 এবং এর ক্রমিক দিন। আপনি যতক্ষণ চাই সমস্ত লাইনে ব্যবহারের সংযোজন না চান ততক্ষণ আপনি স্পেস বা কমা বা অঙ্কগুলির মধ্যে যা কিছু যোগ করতে পারেন।

$a|=~$_}{$_=$a=~y;\xce;

এটি প্রদর্শিত হিসাবে কাজ করে, তবে \xceদাবি করা স্কোর পেতে আক্ষরিক বাইট মান দ্বারা প্রতিস্থাপন

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

$a|=~$_}{$a=~/\xce+/;$_="@+"-"@-"

পুরনো সংস্করণ

আমি মূলত চ্যালেঞ্জকে ভুল বুঝেছি এবং এমন একটি প্রোগ্রাম বাস্তবায়ন করেছি যা যদি উল্লম্ব লাইনটি উপস্থিত থাকে তবে তার ভিত্তিতে সত্য বা মিথ্যা দেয়। কোড এবং ব্যাখ্যাটি এই পুরানো সংস্করণের জন্য

$a|=~$_}{$_|=~$a=~1

কেবলমাত্র আমি প্রায় নিখুঁত প্রতিসাম্যের জন্য বাম দিকে 1 = add যুক্ত করতে পারতাম ... আমি মনে করি নিকটতমটি হবে

1=>$a|=~$_}{$_|=~$a=~1

ব্যাখ্যা

$a|=~$_     The bitwise operators in perl (&, |, ^, ~) also work on strings by 
            working on the sequence of byte values. The digits "0" and "1" happen
            to have the same ASCII value differing only in the last bit which is
            0 for "0" and 1 for "1". So I would really like to do an "&" here.
            Unfortunately "&" of two different length strings shortens the result
            to the shortest of the strings and my accumulator starts as an empty 
            string. The "|" of two strings however extends to the longest string.
            So instead I will apply De Morgan's law and use "|" on the
            complemented byte string 
}{          Standard perl golf trick. "-p code" transforms to (simplified)
            "while (<>) { code; print }". So if code is "code1 } { code2" this
            becomes "while (<>) { code1 } {code2; print }". So you can use code1
            for the loop operation, use code2 for the final calculation and get a
            free print by assigning to $_
$_|=~$a=~1  I would like to match the accumulator with the bit complement of "1",
            but $a=~~1 doesn't work because the 1 is not a string but a number.
            $a=~~"1" would work but is too long. Next up is complementing $a back
            and matching with 1, so $_=~$a=~1. That also doesn't work since the
            first =~ will be interpreted as a string match insteads of equals
            followed by complement. Easily solved by writing it as $_= ~a=~1. But
            if I am going to give up a byte I can at least have some fun with it.
            Using $_|= also makes the parse work and has the advantage that the
            failure case will give 0 instead of an empty string, which looks
            nicer. It also makes the code look very symmetric. I can also bring
            out the symmetry more by putting 1=> in front (which evaluates 1
            before the assignment and then immediately discards it)

4

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

আমার প্রিয় অনেকগুলি বিল্ট-ইন ফাংশন একসাথে বেঁধে ব্যবহার করে একটি আশ্চর্যজনকভাবে মার্জিত সমাধান রয়েছে।

lambda c:sum(map(all,zip(*c)))

@ লিনের পরীক্ষার চিত্রটি ব্যবহার করে:

>>> image = [[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]]
>>> func = lambda c:sum(map(all,zip(*c)))
>>> func(image)
3

4

পাইথ, ৫

s*VFQ

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

এটি লিনের অ্যালগরিদম ব্যবহার করে, তবে আমি পাইথের গল্ফ ভেক্টর অপারেশনগুলি কীভাবে পরিচালনা করব তা দেখানোর জন্য এটি পোস্ট করার সিদ্ধান্ত নিয়েছি। এখানে কৌশলটি "চিনির" সিনট্যাক্স সহায়কগুলিকে শৃঙ্খলাবদ্ধ করা Vএবং Fযাতে ভাঁজটি ভেক্টর অপারেশন হিসাবে প্রয়োগ করা হয়। যে অপারেটরটি ভাঁজ করা হয় তা অবশ্যই গুণফল এবং তারপরে ফলাফলটি চূড়ান্ত উত্তর পাওয়ার জন্য যোগ করা হয়।


4

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

a=>a[s=0].map((_,i)=>s+=a.every(b=>b[i]))|s
a=>a[s=0].map((_,i)=>s+=!a.some(b=>b[i]))|s

@ লিনের জেলি উত্তরের উপর ভিত্তি করে, যেহেতু ব্যবহার everyবা someপরিবর্তে গল্ফড reduce। প্রথম সংস্করণটি এনকোড কালো = 0 যখন দ্বিতীয় এনকোড কালো = 1।

সম্পাদনা করুন: @ edc65 এর জন্য আরও 2 টি বাইট সংরক্ষণ করা হয়েছে।


3
ব্যবহার করার চেষ্টা করুনmap
ক্যালকুলেটরফলাইন

এটা আমার গণনায় 45। এবং আপনি যথেষ্ট চেষ্টা করেননি কারণ এটি 43 হতে পারে
edc65

a => a [s = 0] .map ((_, i) => s + =! a.some (b => b [i])) s
edc65

1
@ edc65 ঠিক আছে, আপনি জানেন কম্পিউটারের দুটি কঠিন সমস্যা হ'ল ক্যাশে অবৈধকরণ, নামকরণ এবং একের পর এক ত্রুটি ...
নীল

4

জে , 5 6 বাইট

আর্গুমেন্ট হিসাবে বুলিয়ান ম্যাট্রিক্স গ্রহণ করে।

[:+/*/

এটি আমার প্রথম জে উত্তর! (1½ বছর ধরে ভুল ছিল ...)

*/ কলামওয়ালা পণ্য

+/ সমষ্টি

[: ক্যাপ (স্থানধারক হিসাবে কাজ করে যেহেতু +/বাম যুক্তি গ্রহণ করা উচিত নয়)

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



2

গণিত 24

Length@Cases[Total@#,0]&

নিম্নলিখিত ফর্মটিতে একটি অ্যারে নেয়:

{{1, 0, 0, 0, 1, 0},
{1, 0, 0, 1, 1, 1},
{1, 1, 0, 0, 0, 0},
{1, 1, 0, 0, 1, 1},
{1, 0, 0, 1, 1, 1}}

এবং এই ক্ষেত্রে ফলাফল:

1

বা Length[Total@#~Cases~0]&একই বাইট গণনা
ক্যালকুলেটরফাইন

1 এবং 0 ম্যাথমেটিকায় সত্যবাদী বা মিথ্যা নয় (এবং যদি সেগুলি অ্যাসাইনমেন্ট হয় তবে সম্ভবত অন্যভাবে চলত)।
মার্টিন ইন্ডার

1

𝔼𝕊𝕄𝕚𝕟, 7 অক্ষর / 9 বাইট

⨭МƟïⓜ⨴$

Try it here (Firefox only).

এটি @ লিনের দুর্দান্ত অ্যালগরিদম, তবে আমি এটি স্বাধীনভাবে খুঁজে পেয়েছি। (আমি ভেবেছিলাম এটির জন্য কোথাও একটি বিল্টিন রয়েছে, এখনও খুঁজছেন: পি)

ব্যাখ্যা

МƟïইনপুট অ্যারে স্থানান্তর করে, ⓜ⨴$প্রতিটি অভ্যন্তর ভেক্টরকে তার পণ্যগুলিতে পরিণত করে এবং ফলাফলযুক্ত অ্যারের যোগফল দেয় ms


1

জাপট , 6 4 বাইট

1সাদা 0হওয়া এবং কালো হওয়ার সাথে সাথে সারিগুলির একটি অ্যারে হিসাবে ইনপুট নেয় ।

y xe
  • 2 টি বাইট ETH- র জন্য ধন্যবাদ সংরক্ষণ করেছে ।

এটা পরীক্ষা করো


ব্যাখ্যা

y xe
          :Implicit input of array U.
y         :Transpose.
   e      :Map over each sub-array, checking if every element is truthy.
  x       :Reduce by summing, converting booleans to 1 or 0.
          :Implicit output of resulting integer.

আমার মনে হয় আপনি কি করতে পারেন y x_×5. বাস্তবিক জন্য, eপাশাপাশি হিসাবে কাজ করে ×, তাই y xe4 :-)
ETHproductions

উইকএন্ডে এই মন্তব্যটি মিস করেছেন, @ ইথ প্রডাকশনস - ধন্যবাদ :)
শেগি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.