উচ্চতা মানচিত্রের গভীরতা মানচিত্রে অদলবদল করা হচ্ছে


30

বিবরণ

আপনার টাস্কটি 'ডিপথ ম্যাপ' আউটপুট করা - এটি কোনও বস্তুর উচ্চতা ম্যাপ তবে তার শীর্ষ থেকে নয় তবে সামনে থেকে দেখা যায়।

উদাহরণস্বরূপ, ছবিতে প্রদর্শিত নীচের বিষয়টিকে বিবেচনা করুন। উচ্চতার মানচিত্রটি বাম দিকে দেখানো হয়েছে। সংশ্লিষ্ট গভীরতার মানচিত্রটি হবে (তীরের উপরে দাঁড়িয়ে থেকে দেখা যাবে):

010
211   <- Depthmap
322

আপনি যদি তীরটিতে দাঁড়িয়ে থাকেন তবে নীচের বাম-হাতের পয়েন্টে একে অপরের পিছনে 3 টি কিউবস রয়েছে, মাঝের বাম-হাতের পয়েন্টে একে অপরের পিছনে 2, বাম-হাতের শীর্ষে অবস্থিত ইত্যাদি etc.

উদাহরণ

ইনপুট

ইনপুট হ'ল কোনও আকারের দ্বিমাত্রিক অ্যারে (প্রয়োজনীয় বর্গ নয়)।

আউটপুট

আউটপুট হল আরও দুটি মাত্রিক অ্যারে যা গভীরতা মানচিত্র উপস্থাপন করে। আপনি যেমন অনুমান করতে পারেন, এর আকারগুলি (height x width)। ছবিতে, এটি হবে (3 x 3)। দ্রষ্টব্য যে কিউবের সর্বোচ্চ টাওয়ারটি 5 হলে গভীরতা ম্যাপটি একটি অ্যারে হত (5 x 3)

জয়ের শর্ত

সংক্ষিপ্ততম কোডটি জয়ী।

প্রত্যাখ্যাত

সমস্ত ভাষা অনুমোদিত, কোনও স্পষ্ট বাধা নেই। (আপনি কী নিয়ে আসতে পারেন তা আমি জানি না তবে দয়া করে ভাল খেলুন।)

উদাহরণ

Input:     Ouput:

5321       0001
1456       1012
2105       1112
           1212
           2222
           3323


Input:     Output:

22         01
13         12
00         22


Input:     Output:    (of the sample image)

232        010
210        211
101        322

আপনি পোস্ট করেছেন এমন চিত্রের জন্য আপনি কী নমুনা ইনপুট / আউটপুট সরবরাহ করতে পারেন?
মেল্লামব্যাক

4
@ পিমভিডিবি: দুর্দান্ত ধাঁধা আমরা লোকেদের পোস্ট দেওয়ার আগে পাজল ল্যাব চর বা মেটা স্যান্ডবক্সের পরামর্শ নিতে উত্সাহিত করি । এই ধরণের, আপনার ধাঁধাটি লাইভ হওয়ার আগে এই ধরণের সমস্যাগুলি বের করে দেওয়া যেতে পারে। আমাদের সকলের একটি নিখুঁত স্পেসিফিকেশন উত্পাদন করতে সমস্যা হয়, বিশেষত যদি কাজটি ক্ষুদ্র হয়।
ডিসেম্বি

2
@ পিমভিডিবি: এটিকে হতাশ করবেন না; এটি কোনও প্রকারের চাহিদা নয়। সাইটটি আরও ভাল করার আশায় আমরা একে অপরের জন্য সরবরাহ করি কেবল একটি পরিষেবা।
dmckee

2
ঠিক আছে, শেষ পংক্তিটি সম্পর্কে বিভ্রান্তি হতে পারে যে আপনার »গভীরতার মানচিত্রের সংজ্ঞাটি অস্বাভাবিক, আমার ধারণা। সাধারণত গভীরতার মানচিত্রটি উচ্চতার মানচিত্রের মতোই হয়, সবেমাত্র একটি নির্দিষ্ট ক্যামেরা থেকে দেখা হয় - যেমন এটি প্রদত্ত দৃশ্যের দৃষ্টিভঙ্গির দিকে প্রসারকে বলে দেয় (কমপক্ষে 3D রেন্ডাররা এটির সাথে কীভাবে আচরণ করে)। আপনার কাছে যা রয়েছে তা হ'ল একটি নির্দিষ্ট জায়গায় একে অপরের পিছনে কতগুলি ব্লক রয়েছে। যদিও এটি কল করবেন তা নিশ্চিত নন। কোনও অসুস্থতা কাঁচের ব্লকগুলি আংশিকভাবে স্থানান্তরিত হতে পারে এবং আপনি একে অপরের পেছনে যত বেশি রাখেন, ফলাফল ততই গাer় হয় - যার মধ্যে স্থান নির্বিশেষে।
জোয়ে

1
চিন্তা করবেন না। এটি এখনকার মতো দুর্দান্ত কাজ।
জোয়ি

উত্তর:


12

গল্ফস্ক্রিপ্ট, 42 টি অক্ষর

n%{n*~]}%zip:|[]*$),{:);n|{{)>},,}%}%-1%\;

ফলাফল

$ golfscript 2657.gs < 2657-1.txt 
0001
1012
1112
1212
2222
3323

$ golfscript 2657.gs < 2657-2.txt 
01
12
22

$ golfscript 2657.gs < 2657-3.txt 
010
211
322

অভিনন্দন।
pimvdb

@ পিএমভিডিবি, ধন্যবাদ, তবে আমি মনে করি আপনার কিছুক্ষণের জন্য কোনও উত্তর গ্রহণ না করে (এটি এক সপ্তাহ হতে পারে) খোলার উচিত।
আপনি

যেহেতু গৃহীত উত্তরটি যে কোনও সময় পরিবর্তন করা যায়, ক্ষতি কোথায়?
জোয়ে

+100: 42 অক্ষর :-)
মেল্লামোকব

আমি নিজের সমাধান না দেওয়া পর্যন্ত আমি আপনার সমাধানের দিকে তাকানো থেকে বিরত থাকি। এখনই তাদের তুলনা করা, তারা এর চেয়ে বরং একই রকম আপনি ব্যয়ের সাথে এক টন অক্ষর সংরক্ষণ করেন []*। দুর্দান্ত কৌশল।
পিটার টেলর

8

রুবি ১.৯, ১০২ টি অক্ষর

f=$<.map{|g|[*g.chop.bytes]}
f.flatten.max.downto(49){|j|puts f.transpose.map{|n|n.count{|r|r>=j}}*""}

সমস্ত টেস্টকেস পাস করে।


7

উইন্ডোজ পাওয়ারশেল, 108 111 114

(($i=@($input))-split''|sort)[-1]..1|%{$h=$_
-join(1..$i[0].Length|%{$x=$_-1
@($i|?{"$h"-le$_[$x]}).count})}

সমস্ত পরীক্ষার কেস পাস করে।


7

হাস্কেল, ১১৮ টি অক্ষর

import List
p h=map(\c->transpose(lines h)>>=show.length.filter(>=c))['1'..maximum h]
main=interact$unlines.reverse.p

  • সম্পাদনা (122 → 118): সর্বাধিক উচ্চতায় কেবল পুনরাবৃত্তি করে ফিল্টারিং এড়ান

4

236 টি অক্ষর স্কেল করুন

object D extends App{var(l,m,z)=(io.Source.stdin.getLines.toList,0,0);val a=Array.ofDim[Int](l.head.size,10);for(i<-l;(j,q)<-i.zipWithIndex;x<-1 to j-48){a(q)(x-1)+=1;m=List(m,j-48).max};for(i<-1 to m){for(j<-a){print(j(m-i))};println}}

কিছু বিন্যাস সহ:

object Depthmap extends App
{
    var(l,m,z)=(io.Source.stdin.getLines.toList,0,0)
    val a=Array.ofDim[Int](l.head.size,10)
    for(i<-l;(j,q)<-i.zipWithIndex;x<-1 to j-48)
    {
        a(q)(x-1)+=1
        m=List(m,j-48).max
    }
    for(i<-1 to m)
    {
        for(j<-a)
        {
            print(j(m-i))
        }
        println
    }
}

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


4

জাভাস্ক্রিপ্ট, 235 208 195 বাইট

function _(b){for(e=Math.max.apply(0,b.join().split(",")),f=[],c=i=0;i<e;i++){for(
c=[],a=0;a<b[0].length;a++)for(d=c[a]=0;d<b.length;d++)b[d][a]>i&&c[a]++;f[e-i-1]
=c.join("")}return f.join("\n")}

কেবল রেকর্ডের জন্য, প্রশ্ন পোস্ট করার আগে আমি এই কোডটি তৈরি করেছিলাম। (এখন ছোট)


3

হাস্কেল সংস্করণ (এখন অনুকূলিত)

import Data.List
import Text.Parsec
import Text.Parsec.String

main= readFile"in.txt">>=(\t->either print(putStrLn.intercalate"\n".map(concatMap show).(\j->map (\n->(map(length.(filter(>=n)))(transpose$reverse j))) (reverse [1..(maximum$map maximum j)])))(parse(many1$many1 digit>>=(\x->newline>>(return$map(read.return)x)))""t))

উদার সংস্করণ

import Data.List (foldl', transpose, intercalate)
import Text.Parsec
import Text.Parsec.String

-- Source:  http://codegolf.stackexchange.com/questions/2657/swapping-heightmaps-to-depthmaps

digitArray :: Parser [[Int]]
digitArray = many1 $ do xs <- many1 digit
                        optional newline
                        return $ map (read . return) xs

maxHeight :: Ord c => [[c]] -> c
maxHeight = maximum . (map maximum)

heightToDepth :: [[Int]] -> [[Int]]
heightToDepth ins = level (maxHeight ins)
        where level 0 = []
              level n = (map (length . (filter (>=n))) xs) : level (n-1)
              xs      = transpose $ reverse ins

lookNice xs = intercalate ['\n'] $ map (concatMap show) xs

main = do inText <- readFile "in.txt"
          case parse digitArray "" inText of
              Left err -> print err
              Right xs -> putStrLn $ lookNice $ heightToDepth xs

[কোড-গল্ফ] প্রশ্নের দীর্ঘ উত্তরগুলি গ্রহণযোগ্য হয় যখন অনুপযুক্ত ভাষা ব্যবহার করে দৈর্ঘ্য দেখা দেয় (বলুন 77), তবে আপনি এখনও তাদের গল্ফ করার চেষ্টা করবেন বলে আশা করা হচ্ছে । এমনকি আপনার শনাক্তকারীদের একক চিঠিতে কমাতে বিরক্ত করাও গেমের অনুভূতিতে যেতে ব্যর্থ হচ্ছে, যা আমি সন্দেহ করি যে ডাউনটা বামদের কারণ।
dmckee

কোড গল্ফ স্বাগতম! আপনি কি নিজের অলগল কোড থেকে আপনার গল্ফ কোড আলাদা করতে পারেন এবং আপনার গল্ফড কোডের জন্য আপনার পোস্টে একটি অক্ষর গণনা রাখতে পারেন? ধন্যবাদ! এটি আপনার পোস্টটি পড়ার জন্য কিছুটা সহজ করে তুলবে এবং এটি আমরা ব্যবহার করি এমন সাধারণ প্যাটার্ন।
মেল্লামোকব

কোড গল্ফের লক্ষ্য হ'ল সংক্ষিপ্ততম কোড তৈরি করা। আপনার পরিবর্তে ভার্জোজ, তাই আরও চেষ্টা করুন!
FUZxxl

1

পাইথন, ১১7 টি চর

import sys
a=zip(*sys.stdin)[:-1]
n=int(max(map(max,a)))
while n:print''.join(`sum(e>=`n`for e in r)`for r in a);n-=1

ভেন্তোরোর রুবি সমাধানের মতো Similar


0

এপিএল (ডায়ালগ প্রসারিত) , 14 বাইট

{⊖⍉+⌿⍵≥⍀⍳⌈/,⍵}

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

{⊖⍉+⌿⍵≥⍀⍳⌈/,⍵}    Monadic function:
                  Start with a 2D array ⍵.
          ⌈/,      Find the overall maximum value h.
                  Make the list 1...h
       ≥⍀          Make a  table between that list and ⍵.
                   Now we have a 3D matrix where position [a,b,c]
                   represents whether ⍵[a,b] is at least c.
    +⌿             We sum along the outermost (first) dimension, 
                   since that corresponds to a column of ⍵.
                   Now we have a 2D matrix where position [b,c]
                   represents how many values in column b of  are at least c.
                  Transpose so the heights are rows.
                  Flip vertically.

0

Clojure, 102 বাইট

#(for[h(range(apply max(flatten %))0 -1)](map(fn[w _](count(for[r % :when(>=(r w)h)]_)))(range)(% 0)))

0

জাপট , 12 বাইট

c rÔÆÕËè>X
w

সমস্ত পরীক্ষার কেস চেষ্টা করে দেখুন

সারিগুলি বিপরীত ক্রমে আউটপুট করা 2 বাইট সাশ্রয় করবে , কলাম-প্রধান ক্রমে ইনপুট নিলে 1 বাইট সাশ্রয় হবে , উভয়ই (স্বাভাবিকভাবে) 3 বাইট সংরক্ষণ করবে

ব্যাখ্যা:

c rÔ          #Find the maximum height
    Æ         #For each number X in the range [0...max_height]:
     Õ        # Get the columns of the input
      Ë       # For each column:
       è>X    #  Count how many items are greater than X

w             #Reverse the output
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.