ইনডেন্টেশন ভিত্তিক বাছাই করুন


35

একই অক্ষরের অক্ষরের স্ট্রিংগুলির একটি আদেশযুক্ত তালিকা দেওয়া হয়েছে (অ্যাজ এক্সআর এজেড) যেখানে প্রতিটি স্ট্রিং 0 বা ততোধিক স্পেস () অক্ষর দ্বারা পূর্বে থাকে, একই তালিকা আউটপুট দেয় তবে স্ট্রিংগুলি ইনডেন্টেশনের প্রতিটি স্তরে সাজানো থাকে। বিভিন্ন পিতামাতার অধীনে ইনডেন্টেশনের গভীরতা বাছাইয়ের উদ্দেশ্যে পৃথক তালিকা হিসাবে গণনা করা হয়।

উদাহরণ

যদি আপনার ইনপুট হয়:

bdellium
  fox
  hound
  alien
aisle
  wasabi
    elf
    alien
  horseradish
    xeno
irk
wren
tsunami
djinn
      zebra

আপনার আউটপুট হওয়া উচিত

aisle
  horseradish
    xeno
  wasabi
    alien
    elf
bdellium
  alien
  fox
  hound
djinn
      zebra
irk
tsunami
wren

আপনি যদি চান তবে এটি ডিরেক্টরি তালিকার মতো ভাবেন এবং প্রতিটি ডিরেক্টরিতে আপনার নামগুলি বাছাই করতে হবে।

ক্ষুদ্র অংশ

  • কোনও আইটেম যেকোন সংখ্যক স্পেস দিয়ে ইন্টেন্টেড হতে পারে। যদি এটি পূর্ববর্তী আইটেমের মতো একই সংখ্যক স্পেস দ্বারা ইন্টেন্ট করা থাকে তবে এটি পূর্ববর্তী আইটেমের মতো একই ধরণের শ্রেণিবিন্যাসের অন্তর্ভুক্ত। যদি এটি আরও স্পেস দ্বারা অভিযুক্ত হয় তবে এটি একটি নতুন উপ-স্তরক্রমের সূচনা।
  • যদি কোনও রেখাটি তার উপরের রেখার চেয়ে কম স্পেস দ্বারা ইন্ডেন্ট করা থাকে তবে এটি তার আগের নিকটবর্তী সাব গোষ্ঠীর সাথে একই # বা আরও কম স্পেসের সাথে লিঙ্ক করে (উপরের উদাহরণে ঘোড়ালোকের মতো, যা উপরের ওয়াসাবী গ্রুপের সাথে লিঙ্ক করে কারণ) ওয়াসাবি তার উপরের প্রথম আইটেম যা ঘোড়ার বাদামের চেয়ে বেশি জায়গা নেই)
  • আপনার আউটপুটে প্রতিটি ইনপুট আইটেমের ইনডেন্টিং স্তরটি অবশ্যই সংরক্ষণ করতে হবে
  • আউটপুটটিতে থাকা ট্যাবগুলি অনুমোদিত নয়
  • ইনপুটটির প্রথম লাইনটি কখনই ইনডেন্ট হবে না
  • আপনার প্রোগ্রামে সর্বনিম্ন একটি বড় হাতের এবং সমস্ত ছোট ছোট স্ট্রিং হ্যান্ডেল করতে হবে; এটি উভয় পরিচালনা করতে হবে না।

স্কোরিং

এটি একটি , সুতরাং যে উত্তরটি সবচেয়ে কম বাইট জয় ব্যবহার করে।


7
দুর্দান্ত চ্যালেঞ্জ!
অ্যাডম

1
বিটিডব্লিউ, পরের বারের জন্য, স্যান্ডবক্সটি মূল সাইটে পোস্ট করার আগে কোনও চ্যালেঞ্জ সহ সমস্যাগুলি সরিয়ে ফেলতে বিবেচনা করুন।
অ্যাডাম

8
@ অ্যাডম না, পুনরাবৃত্ত স্ট্রিংকে পার্সিং যুক্তির জন্য প্রয়োজনীয় কারণটি আমি এই প্রম্পটটি লিখেছি।
টেকরকেট 9

2
যদি ইনপুট হয় ['a','..b', '.c', '..d']তবে আউটপুটটি কী হওয়া উচিত? ['a','..b', '.c', '..d']বা ['a','.c','..b', '..d']অন্য কিছু জিনিস? (আমি '.'ভিজ্যুয়াল স্পষ্টতার জন্য জায়গার পরিবর্তে ব্যবহার করছি )।
চ্যাস ব্রাউন

2
@ স্ট্রিস্টস্টার স্ট্রিং (
অ্যাডাম

উত্তর:



14

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

lambda S:[s[-1]for s in sorted(reduce(lambda t,s:t+[[v for v in t[-1]if v.count(' ')<s.count(' ')]+[s]],S,[[]]))[1:]]

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

স্ট্রিংগুলির একটি তালিকা ইনপুট হিসাবে গ্রহণ করে; এবং স্ট্রিংগুলির একটি তালিকা আউটপুট দেয় যা প্রয়োজনীয় অনুসারে বাছাই করা হয়।

ধারণাটি হ'ল প্রতিটি উপাদানকে একটি তালিকাতে পরিণত করা যা একটি তালিকা হিসাবে "পরম পথ" ধারণ করে; এবং তারপরে পাইথনকে বাছাই করা পরিচালনা করতে দিন। উদাহরণস্বরূপ যদি ইনপুটটি হয়:

[
 'a',
 ' c',
 '  d',
 ' b'
]

তারপরে, এর মাধ্যমে reduce()আমরা তালিকার তালিকায় রূপান্তর করি:

[
 ['a'],
 ['a',' c'],
 ['a',' c', '  d'],
 ['a',' b']
]

যা এর অনুসারে বাছাই হয়:

[
 ['a'],
 ['a',' b']
 ['a',' c'],
 ['a',' c', '  d'],
]

এবং তারপরে তালিকাগুলির তালিকার প্রতিটি তালিকার শেষ উপাদানটি আউটপুট করুন:

[
 'a',
 ' b'
 ' c',
 '  d',
]

বাহ আমি যে সমাধানটি পোস্ট করতে চলেছিলাম তা ছিল 183 বাইট ... আমি চুষছি
ডন হাজার হাজার

4
@ রুশভ মেহতা: আমার প্রথম চেষ্টা ছিল 205 বাইটের কাছাকাছি ... তারপরে হ্যাক! :)
চ্যাস ব্রাউন

7

এপিএল (ডায়ালগ ইউনিকোড) , 31 বাইট এসবিসিএস

বেনামে উপসর্গ লাম্বদা, স্ট্রিংগুলির তালিকা নেয় এবং প্রদান করে।

{⍵[⍋{1=≢⍵:⍺⋄⍵}⍀↑' '(,⊂⍨⊣=,)¨⍵]}

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

{} "ডিএফএন"; যুক্তি

⍵[] নিম্নলিখিত সূচকগুলির সাথে যুক্তিটি সূচনা করুন:

  ' '()¨⍵ বাম আর্গুমেন্ট হিসাবে স্থান সহ প্রতিটি স্ট্রিংয়ে নিম্নলিখিত সারণি ফাংশনটি প্রয়োগ করুন:

   , স্ট্রিংয়ের সাথে স্থানটি যুক্ত করুন

   ⊣= বুলিয়ান তালিকা নির্দেশ করে যেখানে স্থানটি প্রতিটি অক্ষরের সমান

   ,⊂⍨ স্থান এবং স্ট্রিংয়ের সংমিশ্রণকে পার্টিশনে (যেখানে অংশ শুরু হয় ঠিক সেখানে) ব্যবহার করুন

   স্ট্রিংয়ের ম্যাট্রিক্সে স্ট্রিংয়ের তালিকার মিশ্রণ mix

  {}⍀ এই "dfn" দ্বারা উল্লম্ব ক্রমবর্ধমান হ্রাস; এবং উপরের এবং নিম্নতর আর্গুমেন্টগুলি:

   ≢⍵ নিম্ন স্ট্রিং দৈর্ঘ্য

   1= এটি কি 1 এর সমান? (অর্থাত্ সেখানে একক স্থান ব্যতীত আর কিছুই নেই?)

   :⍺ যদি তা হয় তবে উপরের যুক্তিটি ফিরিয়ে দিন

   ⋄⍵ অন্যথায়, নিম্ন আর্গুমেন্ট ফিরে

   গ্রেড আপ (সূচকগুলি সারণি হিসাবে সন্ধান করুন)


7

রেটিনা , 47 বাইট

+-1m`(?<=^\2(\S+).*?¶( *)) 
$1 
O$`
$L$&
\S+ 
 

এটি অনলাইন চেষ্টা করুন! দ্রষ্টব্য: বেশ কয়েকটি লাইনে স্থানের স্থান রয়েছে। ব্যাখ্যা:

+-1m`(?<=^\2(\S+).*?¶( *)) 
$1 

প্রথম পদক্ষেপটি হ'ল একই শব্দের উপর প্রতিটি শব্দকে নিম্নলিখিত লাইনে sertোকানো। উদাহরণস্বরূপ, সঙ্গে লাইন aisle, wasabiএবং elfফলে লাইন আছে aisle, aisle wasabiএবং aisle wasabi elf। আমি এই রেজেক্সটিকে বিচার এবং ত্রুটি দ্বারা আবিষ্কার করেছি যাতে এটির সাথে প্রান্তের মামলাও থাকতে পারে।

O$`
$L$&

আমরা এখন লাইন কেস-সংবেদনশীলতার সাথে বাছাই করতে পারি।

\S+ 
 

Sertedোকানো সমস্ত শব্দ মুছুন।


4

পার্ল 6 , 120 83 81 63 54 37 47 42 বাইট

-৫ বাইট নোহেলহোফকে ধন্যবাদ

{my@a;.sort:{@a[+.comb(' ')..*+1]=$_;~@a}}

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

এটি চ্যাস ব্রাউন এর পদ্ধতি ব্যবহার করে । একটি বেনামি কোড ব্লক যা লাইনের একটি তালিকা নেয় এবং লাইনের একটি তালিকা প্রদান করে।

ব্যাখ্যা:

{                                        }  # Anonymous code block
 my@a;  # Declare a local list
      .sort # Sort the given list of lines
           :{                           }  # By converting each line to:
             @a[+.comb(' ')..*+1]=$_;      # Set the element at that indentation level onwards to that line
                                     ~@a   # And return the list coerced to a string

এই মন্তব্যটি করার জন্য ধন্যবাদ আমি মনে করি আমি এটি সর্বশেষতম সংস্করণে স্থির করেছি
জো কিং

@ ননহ্নহহফ আহ ভাল, এটি আগের পুনরাবৃত্তির চেয়ে কম ছিল। বাইট অফ করার জন্য ধন্যবাদ, তবে আমাকে এটি কিছুটা পরিবর্তন করতে হয়েছিল
জো কিং

হ্যাঁ সঠিক. প্রকৃতপক্ষে, {my@a;.sort:{@a[+.comb(' ')...*>@a]=$_;~@a}}উচ্চতর ইনডেন্টেশন স্তরগুলিকে সমর্থন করার মতো কিছু দরকার।
nwellnhof

3

পরিষ্কার , 112 101 বাইট

import StdEnv
f=flatten
?e=[0\\' '<-e]
$[h:t]#(a,b)=span(\u= ?u> ?h)t
=sort[[h:f($a)]: $b]
$e=[]

f o$

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

বেনামে ফাংশন :: [[Char]] -> [[Char]]যা $ :: [[Char]] -> [[[Char]]]সঠিক আউটপুট ফর্ম্যাটে মোড়ানো । $স্ট্রিংগুলিকে "এর চেয়ে বেশি স্পেস" এবং "তারপরে সমস্ত কিছু" বিভক্ত করে, প্রতিটি গ্রুপের উপর পুনরাবৃত্তি করে এবং যখন তারা সংযুক্ত হয় তখন সাজানো হয়। প্রতিটি পদক্ষেপে, তালিকাটি সাজানো হচ্ছে এমন দেখাচ্ছে:

[[head-of-group-1,child-1,child-2..],[head-of-group-2,child-1,child-2..]..]

পরিষ্কার , 127 বাইট

import StdEnv
$l=[x++y\\z<- ?(map(span((>)'!'))l),(x,y)<-z]
?[h:t]#(a,b)=span(\(u,_)=u>fst h)t
=sort[[h:flatten(?a)]: ?b]
?e=[]

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

ফাংশনটি সংজ্ঞা দেয় $ :: [[Char]] -> [[Char]]যা ফর্মের স্ট্রিংগুলিকে টুপলে বিভক্ত করে (spaces, letters)যা সহায়ক ফাংশন দ্বারা পুনরাবৃত্তভাবে সাজানো হয় ? :: [([Char],[Char])] -> [[([Char],[Char])]]

ব্যাখ্যা:

$ list                                  // the function $ of the list
    = [                                 // is
        spaces ++ letters               // the spaces joined with the letters
        \\ sublist <- ? (               // from each sublist in the application of ? to
            map (                       // the application of
                span ((>)'!')           // a function separating spaces and letters
            ) list                      // to every element in the list
        )
        , (spaces, letters) <- sublist  // the spaces and letters from the sublist
    ]

? [head: tail]                              // in the function ? of the head and tail of the input
    # (group, others)                       // let the current group and the others equal
        = span (                            // the result of separating until ... is false
            \(u, _) = u >                   // only elements where there are more spaces
                          fst head          // than in the head of the input
        ) tail                              // the tail of the input
    = sort [
        [head                               // prepend the head of the input to
             : flatten (?group)             // the flat application of ? to the first group
                               ]            // and prepend this to
                                : ?others   // the application of ? to the other group(s)
    ]

? empty = [] // match the empty list

1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 114 100 92 88 বাইট

x=>x.map(y=>a=a.split(/ */.exec(y)[0]||a)[0]+y,a="_").sort().map(x=>/ *\w+$/.exec(x)[0])

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

চ্যাস ব্রাউন এর পাইথন উত্তরের অনুরূপ পন্থা, তবে পরিবর্তে নিয়মিত অভিব্যক্তি ব্যবহার করা।

ব্যাখ্যা

x => x.map(                         // 
 y => a = a.split(                  // Renders the indentation paths
  / */.exec(y)[0]                   //  Checks the indentation level
  || a                              //  If this is the top level, go to root
 )[0] + y,                          //  Appends the child to the parent
 a = "_"                            // At first the cursor is at the root
)                                   // 
.sort()                             // Sorts the indentation paths
.map(                               // 
 x => / *\w+$/.exec(x)[0]           // Extracts only the last level of the path
)                                   //

0

K4 , 51 বাইট

সমাধান:

{,/(1#'r),'.z.s@'1_'r:(w_x)@<x@w:&s=&/s:+/'" "=/:x}

উদাহরণ:

q)k){,/(1#'r),'.z.s@'1_'r:(w_x)@<x@w:&s=&/s:+/'" "=/:x}("bdellium";"  fox";"  hound";"  alien";"aisle";"  wasabi";"    elf";"    alien";"  horseradish";"    xeno";"irk";"wren";"tsunami";"djinn";"      zebra")
"aisle"
"  horseradish"
"    xeno"
"  wasabi"
"    alien"
"    elf"
"bdellium"
"  alien"
"  fox"
"  hound"
"djinn"
"      zebra"
"irk"
"tsunami"
"wren"

অনুমিতি:

ক। যে প্রতিটি স্তরক্রমটি সর্বনিম্ন স্তর দিয়ে শুরু হবে, আপনি পাবেন না:

bdellium
      fox
    hound
    alien

ব্যাখ্যা:

{,/(1#'r),'.z.s@'1_'r:(w_x)@<x@w:&s=&/s:+/'" "=/:x} / the solution
{                                                 } / lambda function, implicit x
                                           " "=/:x  / " " equal to each right (/:) x
                                        +/'         / sum up each
                                      s:            / save as s
                                    &/              / find the minimum (ie highest level)
                                  s=                / is s equal to the minimum?
                                 &                  / indices where true 
                               w:                   / save as w
                             x@                     / index into x at these indices
                            <                       / return indices to sort ascending
                           @                        / index into
                      (   )                         / do this together
                       w_x                          / cut x at indices w
                    r:                              / save as r
                 1_'                                / drop first from each r
            .z.s@                                   / apply recurse (.z.s)
          ,'                                        / join each both
    (    )                                          / do this together
     1#'r                                           / take first from each r
  ,/                                                / flatten

0

পার্ল 5, 166 বাইট

sub f{my$p=shift;my@r;while(@i){$i[0]=~/\S/;$c=$-[0];if($p<$c){$r[-1].=$_ for f($c)}elsif($p>$c){last}else{push@r,shift@i}}sort@r}push@i,$_ while<>;print sort@{[f 0]}

অবরুদ্ধ (সাজানো):

sub f {
    my $p = shift;
    my @r;
    while(@i) {
        $i[0] =~ /\S/;
        $c = $-[0];
        if($p < $c) {
            $r[-1] .= $_ for f($c)
        } elsif ($p > $c) {
            last
        } else {
            push @r, shift @i
        }
    }
    sort @r
}

push @i, $_ while <>;
print sort@{[f 0]}

এটি একটি দুর্দান্ত সোজা পুনরাবৃত্তি বাস্তবায়ন। আমরা প্রথম অ-স্পেস অক্ষর ( /\S/) এবং এটির সূচক ( $-[0]) পেয়ে অনুসন্ধানের মাধ্যমে ইনডেন্টেশন স্তরটি পরীক্ষা করি । দুর্ভাগ্যক্রমে, আমাদের আসলে কয়েকটি মুখ্য ভেরিয়েবলগুলি ঘোষণা করতে হবে যা পুনরাবৃত্তিতে ব্যবহৃত হয়, অন্যথায় তারা স্পষ্টতই বিশ্বব্যাপী হবে এবং পুনরাবৃত্তি সঠিকভাবে কাজ করবে না।

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