ক্রসিং শব্দগুলি গণনা করুন


10

নিম্নলিখিত স্ট্যান্ডার্ড 15 × 15 ক্রসওয়ার্ড ধাঁধা গ্রিড বিবেচনা করুন।

ক্রসওয়ার্ড গ্রিড

আমরা #ব্লকগুলির জন্য এবং সাদা স্কোয়ারের জন্য (স্পেস) ব্যবহার করে এএসসিআইআই আর্টে এটি উপস্থাপন করতে পারি ।

     #    #    
     #    #    
          #    
   #   #       
###     ##   ##

     ##   #    
   #       #   
    #   ##     

##   ##     ###
       #   #   
    #          
    #    #     
    #    #     

উপরের ASCII আর্ট ফর্ম্যাটে একটি ক্রসওয়ার্ড গ্রিড দেওয়া হয়েছে, এটি কত শব্দ ধারণ করে তা নির্ধারণ করুন। (উপরের গ্রিডটিতে words 78 টি শব্দ রয়েছে। এটি গত সোমবারের নিউইয়র্ক টাইমস ধাঁধা হিসাবে ঘটে happens )

একটি শব্দ হ'ল উল্লম্ব বা অনুভূমিকভাবে চলমান দুটি বা ততোধিক স্পেসের একটি গ্রুপ। একটি শব্দ শুরু হয় এবং একটি ব্লক বা গ্রিডের প্রান্ত দিয়ে শেষ হয় এবং সর্বদা উপরে থেকে নীচে বা বাম থেকে ডানদিকে চলে, কখনও তির্যক বা পিছনের দিকে নয়। নোট করুন যে শব্দগুলি ধাঁধাটির পুরো প্রস্থকে বিস্তৃত করতে পারে, যেমন উপরের ধাঁধার ষষ্ঠ সারিতে রয়েছে। একটি শব্দ অন্য শব্দের সাথে সংযুক্ত হতে হবে না।

বিস্তারিত

  • ইনপুটটি সর্বদা অক্ষরেখাগুলি #বা (স্থান) সমেত একটি আয়তক্ষেত্র হবে , একটি নতুন লাইন ( \n) দ্বারা পৃথক করা সারি থাকবে । আপনি অনুমান করতে পারেন গ্রিড কোন 2 স্বতন্ত্র তৈরি করা হয় মুদ্রণযোগ্য হওয়া ASCII পরিবর্তে অক্ষর #এবং
  • আপনি ধরে নিতে পারেন সেখানে একটি alচ্ছিক ট্রেলিং নিউলাইন রয়েছে। ট্রেলিং স্পেস অক্ষরগুলি গণনা করুন, কারণ তারা শব্দের সংখ্যাকে প্রভাবিত করে।
  • গ্রিড সবসময় প্রতিসম নয় এবং এটি সমস্ত স্থান বা সমস্ত ব্লক হতে পারে।
  • আপনার প্রোগ্রামটি তাত্ত্বিকভাবে কোনও আকারের গ্রিডে কাজ করতে সক্ষম হওয়া উচিত, তবে এই চ্যালেঞ্জের জন্য এটি 21 × 21 এর চেয়ে বড় কখনও হবে না।
  • আপনি গ্রিড নিজেই ইনপুট হিসাবে নিতে পারবেন বা গ্রিডযুক্ত কোনও ফাইলের নাম।
  • স্টিডিন বা কমান্ড লাইন আর্গুমেন্ট এবং আউটপুট থেকে স্টপআউট ইনপুট নিন।
  • আপনি যদি পছন্দ করেন তবে গ্রিডটিকে স্ট্রিং আর্গুমেন্ট হিসাবে গ্রহণ করে এবং স্টাডআউট বা ফাংশন রিটার্নের মাধ্যমে একটি পূর্ণসংখ্যা বা স্ট্রিং আউটপুট করে প্রোগ্রামের পরিবর্তে একটি নামকৃত ফাংশন ব্যবহার করতে পারেন।

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

  1. ইনপুট:

        #
        #
        #
    

    আউটপুট: 7(প্রত্যেকের আগে এখানে চারটি স্পেস রয়েছে each #প্রতিটি সংখ্যার চিহ্ন সরিয়ে নেওয়া হলে ফলাফলটি একই হবে তবে মার্কডাউন অন্যথায় খালি লাইনগুলি থেকে ফাঁকা স্থান ছেড়ে দেবে))

  2. ইনপুট:

    ##
     #
    ##
    

    আউটপুট: 0(এক-বর্ণের শব্দ গণনা করে না))

  3. ইনপুট:

    ######
    #    #
      ####
    # ## #
    # ## #
    #### #
    

    আউটপুট: 4

  4. ইনপুট: (10 মে রবিবার এনওয়াই টাইমস ধাঁধা)

       #    ##   #       
       #    #    #       
       #         #       
           #     ###   ##
        #       #        
    ##   #   #           
            #       ##   
          #   ##         
       #        ##      #
             #   ###   ##
    #   ##         ##   #
    ##   ###   #         
    #      ##        #   
             ##   #      
       ##       #        
               #   #   ##
            #       #    
    ##   ###     #       
           #         #   
           #    #    #   
           #   ##    #   
    

    আউটপুট: 140

স্কোরিং

বাইটস মধ্যে সংক্ষিপ্ত কোড । টাইব্রেকার হ'ল প্রাচীনতম পোস্ট।

উত্তর:


7

সিজেম, 18 17 13 11 বাইট

ডেনিস দ্বারা 2 বাইট সংরক্ষণ করা।

ভরাট কোষ এবং 1খালি কোষের জন্য স্পেস ব্যবহার করে:

qN/_z+:~1-,

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

q    e# Read the entire input.
N/   e# Split into lines.
_z   e# Make a copy and transpose it.
+    e# Add the lines of the two grids together.
:~   e# Evaluate each line which will push a rep-digit number for each empty-cell chunk.
1-   e# Remove all the 1s as these correspond to individual empty cells.
,    e# Get the length of the array.

9

স্লিপ , 18 + 3 = 21 বাইট

>? ( +(X|$^)<<){2}

পতাকাগুলি দিয়ে চালান no(অতএব +3), এবং স্থান / Xপরিবর্তে স্থান / ব্যবহার করে #। বিরক্তিকরভাবে এটি সিজেএম / পাইথের চেয়ে দীর্ঘ, তবে আমার ধারণা স্লিপটি বিশেষ গোল্ফ হওয়ার জন্য ডিজাইন করা হয়নি ...

এটি অনলাইনে চেষ্টা করুন । মনে রাখবেন যে প্রথম উদাহরণটিতে কয়েকটি লাইনে ফাঁকা স্থান রয়েছে।

ব্যাখ্যা

>?           Optionally turn right, hence matching either horizontally or vertically
[space]      Match a space
(    ){2}    Group, twice:
[space]+       Match 1+ spaces
(X|$^)         Either an X or the boundary of the grid
<<             Reverse the match pointer by turning left twice

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

দ্রষ্টব্য: মূলত আমি >?( +(X|$^)<<){2}ভিতরে ছিলাম প্রথম স্থানটি। এটি প্রান্তে 2 স্পেস লম্বা শব্দ সহ কিছু ক্ষেত্রে মিস করবে, যেহেতু পয়েন্টারটি এভাবে যাবে:

XXX       XXX       XXX       XXX
X>        X >       X<        <
XXX       XXX       XXX       XXX

[sp]    [sp]+$^    <<[sp]    [sp]+   (uh oh match fails)

দুটি পতাকা তিনটি বাইট কেন?
lirtosiast

@ থমাসকওয়া আমি মনে করি কমান্ড লাইনের পতাকাগুলির সাথে বর্তমান নীতিটি হ'ল এই মেটা পোস্ট , যা কোডের সাধারণ প্রার্থনা থেকে পৃথক হিসাবে বাইটের সংখ্যা গণনা করে। সুতরাং এখানে পার্থক্যটি py -3 slip.py regex.txt input.txtএবং এর মধ্যে py -3 slip.py regex.txt input.txt no, যা তিনটি বাইট (আগের স্থান সহ n)
Sp3000

এটা বোধগম্য. আমি এন্ট্রপি দৃষ্টিভঙ্গি থেকে এটি সম্পর্কে চিন্তা ছিল; কখনও কখনও আমি ভুলে যে এটি অক্ষর আমরা গণনা।
লিটারোসিয়াসট

4

হাস্কেল, ৮১ বাইট

import Data.List
m x=sum[1|(_:_:_)<-words x]
f x=m x+m(unlines$transpose$lines x)

ফাঁকা ঘর হিসাবে ফাঁকা অক্ষর এবং অন্য কোনও (শ্বেতস্থান নয়) অক্ষর হিসাবে স্পেস ব্যবহার করে ।

এটি কীভাবে কাজ করে: স্পেসে শব্দের তালিকায় ইনপুট বিভক্ত করুন। 1ইজারা 2 অক্ষরের সাথে প্রতিটি শব্দের জন্য একটি নিন এবং সেগুলি যোগ করুন 1\nইনপুট স্থানান্তর (স্প্লিট এ ) একই পদ্ধতি প্রয়োগ করুন। উভয় ফলাফল যুক্ত করুন।


4

জাভাস্ক্রিপ্ট ( ES6 ) 87 121 147

ইনপুট স্ট্রিংয়ের স্থানান্তর তৈরি করুন এবং এটি ইনপুটটিতে যুক্ত করুন, তারপরে 2 বা ততোধিক স্পেসের স্ট্রিংগুলি গণনা করুন।

পরীক্ষার জন্য ফায়ারফক্সে স্নিপেট চালান।

ES5 (122 বাইট) এর সমাধান @ ইসমাইল মিগুয়েলকে ক্রেডিট দেয়:

function F(z){for(r=z.split(/\n/),i=0;i<r[j=0][L='length'];i++)for(z+='#';j<r[L];)z+=r[j++][i];return~-z.split(/  +/)[L]};

F=z=>
(
  r=z.split(/\n/),
  [r.map(r=>z+=r[i],z+='#')for(i in r[0])],
  ~-z.split(/  +/).length
)

// TEST
out=x=>O.innerHTML += x + '\n';

[
'     #    #    \n     #    #    \n          #    \n   #   #       \n###     ##   ##\n               \n     ##   #    \n   #       #   \n    #   ##     \n               \n##   ##     ###\n       #   #   \n    #          \n    #    #     \n    #    #     ', '##\n #\n##', '    #\n    #\n    #',
 '######\n#    #\n  ####\n# ## #\n# ## #\n#### #',
 '   #    ##   #       \n   #    #    #       \n   #         #       \n       #     ###   ##\n    #       #        \n##   #   #           \n        #       ##   \n      #   ##         \n   #        ##      #\n         #   ###   ##\n#   ##         ##   #\n##   ###   #         \n#      ##        #   \n         ##   #      \n   ##       #        \n           #   #   ##\n        #       #    \n##   ###     #       \n       #         #   \n       #    #    #   \n       #   ##    #   '  
].forEach(x=>out(x.replace(/ /g,'.')+'\n'+F(x)+'\n'))
<pre id=O></pre>


1
কি হবে F=z=>{for(r=z.split(/\n/),i=0;i<r[j=0][L='length'];i++)for(z+='#';j<r[L];)z+=r[j++][i];return~-z.split(/ +/)[L]}? এটি 113 বাইট দীর্ঘ। আপনার রেজেক্স / +/(2 স্পেস) দিয়ে প্রতিস্থাপিত হয়েছিল , দ্য j=0প্যারেন্ট ' forলুপে যুক্ত হয়েছিল এবং সিনট্যাক্স ব্যবহার করার পরিবর্তে obj.lengthআমি ব্যবহারে পরিবর্তন করেছিলাম L='length'; ... obj[L], যা 3 বার পুনরাবৃত্তি হয়।
ইসমাইল মিগুয়েল

আমি এটি এসআইফিডাল.না . / আইকডিসিপিডিএ (এর পরিবর্তে F=z=>, আমাকে ব্যবহার করতে হয়েছিল var F=(z,i,L,j,r)=>) এ কাজ করতে পেরেছি । আমি এটি আই 11 এ পরীক্ষা করেছি এবং এটি কার্যকর!
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল ভাল কাজ করেছে! এবং ES5 এর জন্য সেরা ফিট। এটি আবার দেখে, আমি আরও কিছু ES6ish এবং খাটো পেয়েছি। হতে পারে আপনি ES5 এর জন্য আপনার সমাধান প্রকাশ করতে পারেন।
edc65

না, ঠিক আছে। এটি আপনার সমাধান ছিল, আমি কেবল এটি হ্রাস করেছি। উত্তরটি দেওয়া আমার পক্ষে মোটামুটি উপযুক্ত বলে মনে হচ্ছে না it
ইসমাইল মিগুয়েল

এখন আমি এটি সম্পর্কে চিন্তা করি, আপনি এর /\n/মধ্যে একটি সত্যিকারের নিউলাইন দিয়ে একটি টেম্পলেট স্ট্রিং দিয়ে প্রতিস্থাপন করতে পারেন । এটি 1 বাইট সাশ্রয় করে যেহেতু আপনাকে পালানোর ক্রমটি লিখতে হবে না।
ইসমাইল মিগুয়েল

3

পাইথ, 15 14 13 বাইট

lftTcjd+.zC.z

আমি ওপি থেকে বিপরীত অর্থের পরিবর্তে পৃথককারী এবং #চরিত্রগুলি পূরণ করতে ব্যবহার করছি । এটি অনলাইনে চেষ্টা করুন: বিক্ষোভ

#ভরাট চরিত্রের পরিবর্তে এটি চিঠিগুলিও গ্রহণ করে। সুতরাং আপনি আসলে সমাধান করা ক্রসওয়ার্ড ধাঁধাটি নিতে পারেন এবং এটি শব্দের সংখ্যা মুদ্রণ করবে। আপনি যদি lআদেশটি সরিয়ে ফেলেন তবে এটি সমস্ত শব্দ মুদ্রণ করে। এটি এখানে পরীক্ষা করুন: 10 মে রবিবার এনওয়াই টাইমস ধাঁধা

ব্যাখ্যা

        .z      all input rows
          C.z   all input columns (C transposes)
       +        add them (all rows and columns)
     jd         join by spaces
    c           split by spaces
 f              filter for pieces T, which satisfy:
  tT              len(T) > 1
l               length, implicitly printed
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.