হ্যালোইন ক্যান্ডি সাজান - হোল # 4


12

আপনি বিভ্রান্ত হলে হোল # 1 দেখুন ।

তিনি হ্যালোইন জুড়ে বালতি ক্যান্ডি সংগ্রহ করার পরে প্রতিটি বাচ্চা কী করবে?

এটি টাইপ এবং আকার অনুসারে বাছাই করুন অবশ্যই 1 !

চ্যালেঞ্জ

বিভিন্ন আকার এবং আকারের মিছরির ডাম্পড আউট ব্যাগ দেওয়া হয়েছে, এর ভিত্তিতে ক্যান্ডিকে বাম থেকে ডানে সাজান:

  • প্রথম: ক্যান্ডির পরিমাণ (সুতরাং একজনের 5 টি অন্য 4 এর চেয়ে বেশি বামে থাকবে)
  • দ্বিতীয় (প্রথমটির পরে যদি কোনও সম্পর্ক থাকে তবে): পরিমাণ যদি একই হয় তবে আরও অভ্যন্তরীণ অঞ্চল (অক্ষরের সংখ্যার ভিত্তিতে) সহ ক্যান্ডি উচ্চতর হবে।

দ্বিতীয় ধরণের পরে যদি এখনও একটি টাই থাকে তবে আপনি প্রথমটি বেছে নিতে পারেন।

ইনপুট

স্টিডিনের মাধ্যমে আপনাকে ক্যান্ডি দেওয়া হবে; সম্পর্কে strewn। নীচে উদাহরণ দেখুন।

আউটপুট

সঠিক ক্রমে অর্ডার দেওয়া ক্যান্ডি আউটপুট। দ্রষ্টব্য, আপনার ওসিডি মাছ 2 তুষ্ট করতে ক্যান্ডি সর্বদা খুব ঝরঝরে কলামে রাখা উচিত । একই ধরণের ক্যান্ডি সরাসরি একে অপরের নীচে স্থাপন করা উচিত। নীচে উদাহরণ দেখুন।

"অভ্যন্তর অঞ্চল" বলতে কী বোঝ?

  • এক টুকরো মিছরিটির অভ্যন্তরীণ ক্ষেত্রটি পুরো ক্যান্ডিটিকে মোট ক্যান্ডি তৈরির মাধ্যমে পরিমাপ করা হয়।

  • "সীমানা" এর মধ্যে যে কোনও সাদা স্থানকে ক্যান্ডির অংশ হিসাবে বিবেচনা করা হয়।

  • একটি সীমানা হ'ল অক্ষরগুলির কোনও সংযুক্ত লুপ, প্রতিটি বর্ণের তির্যক বা এর পাশের।

উদাহরণ স্বরূপ,

+--------+
|        |
|        |
|        |
|        |
+--------+

এর চেয়ে বেশি অঞ্চল রয়েছে

XXXXXXXX
XXXXXXXX
XXXXXXXX
XXXXXXXX

যদিও সামগ্রিকভাবে কম অক্ষর আছে।

উদাহরণ

ইনপুট:

                       _           \|            |/                                     _    
    _               lllllll        -*------------*-            -\       /-           lllllll 
 lllllll           lllllllll        |  /\  /\  / |             +|\ooooo/|+          lllllllll
lllllllll          llll+llll        | /  \/  \/  |             ||o     o||          llll+llll
llll+llll          lllllllll       -*------------*-            ||o     o||          lllllllll
lllllllll           lllllll        /|            |\            +|/ooooo\|+           lllllll 
 lllllll               |                                       -/       \-              |    
    |                  |                _                                               |    
    |   -\       /-    |             lllllll                                            |    
    |   +|\ooooo/|+    |            lllllllll                                           |    
    |   ||o     o||    |            llll+llll                                           |    
    |   ||o     o||    +            lllllllll                              rrr--rrr     +    
    +   +|/ooooo\|+                  lllllll                                rr||rr           
        -/       \-                     |                                   | || |           
                                        |                                   | || |           
                                        |                                   | || |           
                                        |                                   | || |           
                                        |            \|            |/       | || |           
                                        +            -*------------*-       | || |           
                                                      |  /\  /\  / |        | || |           
                        -\       /-                   | /  \/  \/  |        | || |           
                        +|\ooooo/|+                  -*------------*-       rr||rr           
                        ||o     o||                  /|            |\      rrr--rrr          
                        ||o     o||                                                          
                        +|/ooooo\|+                                                          
                        -/       \-                                                          

হবে

    _     \|            |/ -\       /- rrr--rrr
 lllllll  -*------------*- +|\ooooo/|+  rr||rr 
lllllllll  |  /\  /\  / |  ||o     o||  | || | 
llll+llll  | /  \/  \/  |  ||o     o||  | || | 
lllllllll -*------------*- +|/ooooo\|+  | || | 
 lllllll  /|            |\ -/       \-  | || | 
    |                                   | || | 
    |     \|            |/ -\       /-  | || | 
    |     -*------------*- +|\ooooo/|+  | || | 
    |      |  /\  /\  / |  ||o     o||  | || | 
    |      | /  \/  \/  |  ||o     o||  rr||rr 
    +     -*------------*- +|/ooooo\|+ rrr--rrr
          /|            |\ -/       \-         
    _                                          
 lllllll  \|            |/ -\       /-         
lllllllll -*------------*- +|\ooooo/|+         
llll+llll  |  /\  /\  / |  ||o     o||         
lllllllll  | /  \/  \/  |  ||o     o||         
 lllllll  -*------------*- +|/ooooo\|+         
    |     /|            |\ -/       \-         
    |                                          
    |                                          
    |                                          
    |                                          
    +                                          

    _                                          
 lllllll                                       
lllllllll                                      
llll+llll                                      
lllllllll                                      
 lllllll                                       
    |                                          
    |                                          
    |                                          
    |                                          
    |                                          
    +                                          

    _                                          
 lllllll                                       
lllllllll                                      
llll+llll                                      
lllllllll                                      
 lllllll                                       
    |                                          
    |                                          
    |                                          
    |                                          
    |                                          
    +                                          

দ্বিতীয় উদাহরণ:

                   qq                                                                 \/     
                   qq                 qq      qq                                    +-----+  
                                      qq      qq         qq                       +       |  
 jjjjjjjj                                                qq         qq            |       |  
  jjjjjj             \/                                             qq      qq    |       |  
   jjjj            +-----+ <---notice that the left side is not connected   qq    +-------+  
  jj  jj         +       |       <-->       <-->                                             
 j      j        |       |                                                                   
jj  <>  jj       |       |       <-->                                 qq            jjjjjjjj 
 jj    jj        +-------+                                            qq             jjjjjj  
   jjjj                                 qq           qq                               jjjj   
                                        qq           qq                              jj  jj  
                                                                                    j      j 
                      +---------------------------------------------------------+  jj  <>  jj
      ooooo           +---------------------------------------------------------+   jj    jj 
     o     yyyyyy                                                                     jjjj   
     o           ww - notice diagonal border, allowed                                        
     o           ww                                                 jjjjjjjj                 
     o     yyyyyy          ooooo                ooooo                jjjjjj                  
      ooooo               o     yyyyyy         o     yyyyyy           jjjj                   
                          o           ww       o           ww        jj  jj                  
                          o           ww       o           ww       j      j                 
                          o     yyyyyy         o     yyyyyy        jj  <>  jj                
                           ooooo                ooooo               jj    jj                 
                                                                      jjjj                   

সমাধান:

qq  ooooo          jjjjjjjj  <-->     \/    +---------------------------------------------------------+
qq o     yyyyyy     jjjjjj          +-----+ +---------------------------------------------------------+
   o           ww    jjjj    <--> +       |                                                            
qq o           ww   jj  jj        |       |                                                            
qq o     yyyyyy    j      j  <--> |       |                                                            
    ooooo         jj  <>  jj      +-------+                                                            
qq                 jj    jj                                                                            
qq  ooooo            jjjj             \/                                                               
   o     yyyyyy                     +-----+                                                            
qq o           ww  jjjjjjjj       +       |                                                            
qq o           ww   jjjjjj        |       |                                                            
   o     yyyyyy      jjjj         |       |                                                            
qq  ooooo           jj  jj        +-------+                                                            
qq                 j      j                                                                            
    ooooo         jj  <>  jj                                                                           
qq o     yyyyyy    jj    jj                                                                            
qq o           ww    jjjj                                                                              
   o           ww                                                                                      
qq o     yyyyyy    jjjjjjjj                                                                            
qq  ooooo           jjjjjj                                                                             
                     jjjj                                                                              
qq                  jj  jj                                                                             
qq                 j      j                                                                            
                  jj  <>  jj                                                                           
qq                 jj    jj                                                                            
qq                   jjjj                                                                              

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

স্কোরিং

এটি কোড-গল্ফ, তাই সংক্ষিপ্ততম প্রোগ্রাম (বাইটে) জিতেছে।

1 আপনি আর কি করবেন? স্পষ্টতই আপনি আপনার সংগ্রহ করেছেন এমন ক্যান্ডির পরিমাণে আপনার দুর্দান্ত শক্তি এবং শক্তি প্রদর্শন করতে চান, তাই না?

2 আমি জানি আপনি কী ভাবছেন! একটি মাছ আপনার ক্যান্ডিতে একটি বাঁকা বাটিটি দেখতে হয়, সুতরাং এটি যাইহোক বিকৃত হবে! ঠিক আছে, আমার মাছ আয়তাকার অ্যাকোয়ারিয়ামে (মারা যাওয়ার আগে) বেঁচে ছিল ।


যেহেতু বাম দিকটি সংযুক্ত নেই, তাই অঞ্চলটি কেবলমাত্র সীমানা বেধের X পরিধি?
অপ্টিমাইজার

@ অপ্টিমাইজার হ্যাঁ, যদিও ক্যান্ডির এক টুকরো জুড়ে সীমানা বেধের মধ্যে বিভিন্নতা থাকতে পারে। উপরের উদাহরণটির ক্ষেত্রফল 24.
স্ট্রেচ পাগল

উত্তর:


7

রুবি, 928 টি অক্ষর

হ্যাঁ, এই মজা ছিল!

w=[];b=' ';u=$<.read.split'
';k=->l,z,t,p{loop{y=!!1;z.each{|c|t.each{|o|v=[c[0]+o[0],c[1]+o[1]]
y=!(z+=[v])if v[0]>=0&&v[1]>=0&&v[0]<l.size&&v[1]<l[0].size&&p[l[v[0]][v[1]]]&&!z.index(v)}}
break if y};z};(y=y;z=k[u,[[u.index{|p|y=p.index /\S/},y]],([-1,0,1].product([-1,0,1])-[0,0]),->x{x!=b}]
n=z.min_by{|c|c[0]}[0];m=z.min_by{|c|c[1]}[1];q=Array.new(z.max_by{|c|c[0]}[0]-n+1){b*(z.max_by{|c|c[1]}[1]-m+1)}
z.each{|c|q[c[0]-n][c[1]-m]=u[c[0]][c[1]];u[c[0]][c[1]]=b};w+=[q])while u*''=~/\S/;o=Hash.new 0;w.each{|c|o[c]+=1}
p=->q{e=k[q,((0...q.size).flat_map{|x|[[x,0],[x,q[0].size-1]]}+(1...q[0].size-1).flat_map{|y|[[0,y],[q.size-1,y]]}).select{|c|q[c[0]][c[1]]==b},[[0,1],[0,-1],[1,0],[-1,0]],->x{x==b}]
(q.size*q[0].size)-e.size};r=o.sort_by{|k,v|v+(p[k]/1e3)}.reverse.map{|k,v|(k+[b*k[0].size])*v}
r.map!{|k|k+([b*k[0].size]*(r.max_by(&:size).size-k.size))};puts ([b]*r.max_by(&:size).size).zip(*r).map{|r|r.join(b)[2..-1]}

আপনি STDIN এ ইনপুট দিতে পারেন, বা আপনি একটি ইনপুট ফাইলটি একটি আর্গুমেন্ট হিসাবে (যেমন ruby organize.rb candy.txt) পাস করতে পারেন এবং এটি ফাইলটি স্বয়ংক্রিয়ভাবে STDIN হিসাবে বিবেচনা করবে।

সমস্ত সেমিকোলনগুলিকে নতুন লাইনের সাথে প্রতিস্থাপন করা যেতে পারে; আমি উল্লম্ব স্থান হ্রাস করতে কিছু লাইন একসাথে আটকিয়েছি।

অবরুদ্ধ (2367 চর):

#!/usr/bin/ruby
input = $<.read.split("\n")
candies = []

# utility method
flood = -> arr, coords, offsets, cond {
    loop {
        changed = false
        coords.each{|c|
            offsets.each{|o|
                nc = [c[0]+o[0], c[1]+o[1]]
                if nc[0] >= 0 && nc[1] >= 0 && nc[0] < arr.length && nc[1] < arr[0].length &&
                    cond[arr[nc[0]][nc[1]]] && !coords.index(nc)
                    coords.push nc
                    changed = true
                end
            }
        }
        break if !changed
    }
    coords
}

# while there are non-whitespace characters in the pile
while input.join =~ /\S/
    # get coordinates of the first character to flood-fill on
    y = nil
    x = input.index{|row| y = row.index /\S/ }

    # flood-fill on that character
    coords = flood[input, [[x, y]], ([-1,0,1].product([-1,0,1]) - [0, 0]), ->x{x != ' '}]

    # x = max, n = min
    xx = coords.max_by{|c| c[0] }[0]
    nx = coords.min_by{|c| c[0] }[0]
    xy = coords.max_by{|c| c[1] }[1]
    ny = coords.min_by{|c| c[1] }[1]

    # create a properly sized thingy for this one candy
    candy = Array.new(xx - nx + 1) {
        ' ' * (xy - ny + 1)
    }

    # fill the thingy, while also removing it from the pile
    coords.each{|c|
        candy[c[0] - nx][c[1] - ny] = input[c[0]][c[1]]
        input[c[0]][c[1]] = ' '
    }

    candies.push candy
end

# group by same candies
candytypes = Hash.new 0
candies.each{|c| candytypes[c] += 1 }

area = -> candy {
    # we want to eliminate surrounding spaces
    # so flood-fill all spaces that touch the edges
    surround = (0...candy.length).flat_map{|x| [[x, 0], [x, candy[0].length-1]] } +
        (1...candy[0].length-1).flat_map{|y| [[0, y], [candy.length-1, y]] }
    surround.select! {|c| candy[c[0]][c[1]] == ' ' }
    surround = flood[candy, surround, [[0,1],[0,-1],[1,0],[-1,0]], ->x{x == ' '}]

    # now just subtract amount of surrounding spaces from total amount of chars
    (candy.length * candy[0].length) - surround.length
}
columns = candytypes.sort_by {|k, v|
    # this is a pretty ugly hack
    v + (area[k] / 1000.0)
}.reverse.map{|k, v| (k + [' ' * k[0].length]) * v }
columns.map!{|k| k + ([' ' * k[0].length] * (columns.max_by(&:length).length - k.length)) }

puts ([' '] * columns.max_by(&:length).length).zip(*columns).map{|r| r.join(' ')[2..-1] }

3
অবশেষে এই একটি উত্তর! চমৎকার কাজ;)
মার্টিন এন্ডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.