हेलोवीन कैंडी व्यवस्थित करें - होल # 4


12

यदि आप भ्रमित हैं तो होल # 1 देखें ।

हर बच्चा उसके बाद क्या करता है / वह हेलोवीन पर कैंडी की बाल्टी इकट्ठा करता है?

प्रकार और आकार के अनुसार क्रमबद्ध करें, बेशक 1 !

चुनौती

अलग-अलग आकार और आकारों के कैंडी के डंप-आउट बैग को देखते हुए, कैंडी को बाएं से दाएं के आधार पर सॉर्ट करें:

  • पहला: कैंडी की मात्रा (इसलिए 5 में से एक दूसरे की 4 से अधिक होगी)
  • दूसरा (यदि पहले के बाद कोई संबंध हैं): यदि राशि समान है, तो अधिक आंतरिक क्षेत्र (वर्णों की संख्या के आधार पर) के साथ कैंडी उच्च रैंक करेगा।

यदि दूसरे प्रकार के बाद भी एक टाई है, तो आप पहले होने के लिए चुन सकते हैं।

इनपुट

आपको स्टड के माध्यम से कैंडी दी जाएगी; के बारे में बताया। नीचे दिए गए उदाहरण देखें।

उत्पादन

कैंडी का उत्पादन सही क्रम में किया जाता है। ध्यान दें, कैंडी को हमेशा अपने ओसीडी मछली 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 मुझे पता है कि तुम क्या सोच रहे हो! एक मछली को आपके कैंडी में एक घुमावदार कटोरे के माध्यम से देखना पड़ता है , इसलिए यह वैसे भी विकृत होगा! ठीक है, मेरी मछली एक आयताकार मछलीघर में (मरने से पहले) रहती थी ।


चूंकि बाईं ओर जुड़ा नहीं है, क्या क्षेत्र केवल सीमा मोटाई एक्स परिधि है?
ऑप्टिमाइज़र

@ ऑप्टीमाइज़र हाँ, हालाँकि कैंडी के एक टुकड़े में सीमा की मोटाई में भिन्नता हो सकती है। ऊपर दिए गए उदाहरण में क्षेत्र 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
अंत में इसका एक जवाब! अच्छा काम;)
मार्टिन एंडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.