নেস্টেড অ্যারে ভিজ্যুয়ালাইজ করুন


15

আপনাকে নেস্টেড অ্যারে দেওয়া হবে। আপনার প্রোগ্রামটি অ্যারেটি কল্পনা করতে হবে।


কিন্তু কিভাবে?

উদাহরণস্বরূপ, ধরা যাক আমাদের মতো নেস্টেড অ্যারে রয়েছে [["1","2"],[["1","2"],"3"],"4",[[[["5"]]]],"6"]

এই নেস্টেড অ্যারে হিসাবে ভিজ্যুয়ালাইজ করা যেতে পারে:

->1
->2
-->1
-->2
->3
>4
---->5
>6

উদাহরণ

Input 1:
["Atom",["Proton",["Up Quark", "Up Quark", "Down Quark"], "Neutron", ["Up Quark", "Down Quark", "Down Quark"], "Electron"]]
Output 1:
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

Input 2:
[["1","2"],["3","4"]]
Output 2:
->1
->2
->3
->4

বিধি

  • আপনি স্ট্রিং (বা অন্য ধরণের যা নেস্টেড অ্যারের মতো কাজ করে) ইনপুট হিসাবে ব্যবহার করতে পারেন।
  • "স্তরগুলি" সর্বাধিক স্তর 2 ^ 32-1।

এটির কি এই সঠিক দৃশ্যধারণ করতে হবে?
পেনালোসা

@ এমএনবিভিসি হ্যাঁ, যদি আমি এটি করতে বাধ্য না করি তবে লোকে I / O কে অনেকটা মোচড়তে শুরু করবে। বিশ্বাস করুন, আমি চেষ্টা করেছিলাম।
ম্যাথু রোহ

আমার মনে হচ্ছে রেটিনা এটি জিতবে।
ম্যাজিক অক্টোপাস উরান

1
স্ট্রিংগুলিতে কোন অক্ষর উপস্থিত হতে পারে তার উপর কোনও বিধিনিষেধ রয়েছে?
মার্টিন এেন্ডার

অতিরিক্ত সম্পর্কিত
প্রশ্নাগুলি

উত্তর:


12

এপিএল, 32 বাইট

{1=≡⍺:⎕←⍺,⍨⍵↑1↓⍵/'->'⋄⍺∇¨⍵+1}∘0

টেস্ট:

      r
┌────┬─────────────────────────────────────────────────────────────────────────────────────────┐
│Atom│┌──────┬──────────────────────────────┬───────┬────────────────────────────────┬────────┐│
│    ││Proton│┌────────┬────────┬──────────┐│Neutron│┌────────┬──────────┬──────────┐│Electron││
│    ││      ││Up Quark│Up Quark│Down Quark││       ││Up Quark│Down Quark│Down Quark││        ││
│    ││      │└────────┴────────┴──────────┘│       │└────────┴──────────┴──────────┘│        ││
│    │└──────┴──────────────────────────────┴───────┴────────────────────────────────┴────────┘│
└────┴─────────────────────────────────────────────────────────────────────────────────────────┘
      {1=≡⍺:⎕←⍺,⍨⍵↑1↓⍵/'->'⋄⍺∇¨⍵+1}∘0 ⊢ r 
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

ব্যাখ্যা:

  • {... }∘0: এর সাথে নিম্নলিখিত ফাংশনটি চালান0 আবদ্ধ :
    • 1=≡⍺:: যদি ইনপুটটির গভীরতা 1 থাকে (যেমন একটি অ্যারে যাতে অন্যান্য অ্যারে থাকে না):
      • ⍵/'->': -এস এবং যুক্ত একটি স্ট্রিং তৈরি করুন > এস ,
      • 1↓: প্রথম উপাদানটি ফেলে দিন,
      • ⍵↑: এবং প্রথম উপাদান গ্রহণ। এর ফলে ⍵-1ড্যাশ এবং একটি যুক্ত স্ট্রিং হয়>
      • ⍺,⍨: এতে ইনপুট যুক্ত করুন,
      • ⎕←: এবং আউটপুট যে পর্দায়
    • : অন্যথায়,
      • ⍺∇¨⍵+1: 1 তে 1 যুক্ত করুন এবং প্রতিটি নেস্টেড অ্যারেতে ফাংশনটি প্রয়োগ করুন

5
অপেক্ষা করুন, এটি কি সেই অসি-আর্ট ফর্মটিতে ইনপুট নেয়?
Rɪᴋᴇʀ

4
@ রিকার: না, এটি একটি সাধারণ নেস্টেড অ্যারে নেয়, তবে ডায়ালগ এপিএল এভাবে নেস্টেড অ্যারে প্রদর্শন করে এবং (আমি ভেবেছিলাম) এটি কী ঘটছে তা স্পষ্ট করে দেয়। আপনি যেমন লিখে এটি নির্মাণ করতে পারে ('Atom' ('Proton' ('Up Quark' 'Up Quark' 'Down Quark') 'Neutron' ('Up Quark' 'Down Quark' 'Down Quark') 'Electron'))
মেরিনাস

9
আহ ঠিক আছে. এটি এটি পরিষ্কার করে দেয়। কিছুটা হলেও এখন
অসন্তুষ্ট


7

গণিত, 58 57 56 বাইট

গ্রেট মার্টিনকে 1 বাইট বাঁচানোর জন্য ধন্যবাদ।

1 বাইট সংরক্ষণের জন্য নেজেনিসিসকে ধন্যবাদ।

MapIndexed[Print[Table["-",Tr[1^#2]-1]<>">",#]&,#,{-1}]&

47
পিপিসিজিতে আপনাকে স্বাগতম! আপনার জানা উচিত যে উত্তরগুলি সামান্য বা কোনও ব্যাখ্যা সরবরাহ করে না সেগুলি সিস্টেম দ্বারা স্বয়ংক্রিয়ভাবে পতাকাঙ্কিত হয় এবং নিম্ন মানের পর্যালোচনা সারিতে শেষ হয় । এটি আপনার উত্তর মুছে ফেলা হতে পারে। মনে রাখবেন যে আপনার বেশ কয়েকটি মুছে ফেলা উত্তর থাকলে আপনি একটি অস্থায়ী স্থগিতাদেশ পেতে পারেন। একটু মাথা উঁচু করে!
স্টিভি গ্রিফিন

20
@ স্টেভি গ্রিফিন উষ্ণ অভ্যর্থনার জন্য ধন্যবাদ, আমি এটি মনে রাখব!
মার্টিন ইন্ডার

6
@ স্টেভিগ্রিফিন আপনি কি কোনও সাইটমোডকে স্বাগত জানাচ্ছেন? এখানে কি হচ্ছে? এটি কি একটি অভ্যন্তরীণ রসিকতা? আপনি যদি উত্তরে থাকেন তবে # কনফিউজড এবং আপনার ছেলের জন্য ভাল বসন্ত।
মাইন্ডউইন

4
@ মাইন্ডউইন: স্ট্যাক এক্সচেঞ্জের এমন একটি ফিল্টার রয়েছে যা উত্তরগুলি ধরার জন্য নকশাকৃত যা সহায়ক হওয়ার সম্ভাবনা কম unlikely এই ধরণের পোস্ট (শিরোনাম + সংক্ষিপ্ত কোডের নমুনা, কোনও মন্তব্য নেই) এটির উপর মিথ্যা ইতিবাচক কারণ হওয়ার সম্ভাবনা রয়েছে, কারণ এটি অনেকটা কম্পিউটারে একটি স্বল্প প্রচেষ্টা পোস্টের মতো দেখায় (এবং স্টিভি গ্রিফিনের মন্তব্যে একটি স্ক্রিনশটের লিঙ্ক রয়েছে যা সূচিত করে যে একটি মিথ্যা ইতিবাচক ঘটনাটি ঘটেছে; এটি পরিস্থিতি মজা করছে। এখানে অন্য পোস্টের একটি উদাহরণ যা ফিল্টারটিতে ধরা পড়ে।

8
@ টিটাস আমি একটি যুক্ত করতে পছন্দ করি তবে আমি স্টিওয়ের মন্তব্যকে বাতিল করতে চাই না। :(
মার্টিন ইন্ডার

6

জাভা 7, 153 141 114 বাইট

String r="";<T,S>S c(S s,T o){for(T x:(T[])o)if(x instanceof Object[])c("-"+s,x);else r+=s+">"+x+"\n";return(S)r;}

-39 বাইটস @ বারটেক্স 2 এক্সকে ধন্যবাদ

ব্যাখ্যা:

String r="";                         // Result String outside the method / on class-level
<T,S> S c(S s, T o){                 // Recursive Method with generic String and Object parameters and String return-type
  for(T x : (T[])o)                  //  Loop over the input-array
    if(x instanceof Object[])        //   If the current item is an array itself:
      c("-"+s, x);                   //    Recursive method-call with this array
    else                             //   Else:
      r += s+">"+x+"\n";             //    Append return-String with stripes String-input, ">", current item, and a new-line
                                     //  End of loop (implicit / single-line body)
  return (S)r;                       //  Return the result-String
}                                    // End of method

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

class M{
  String r="";<T,S>S c(S s,T o){for(T x:(T[])o)if(x instanceof Object[])c("-"+s,x);else r+=s+">"+x+"\n";return(S)r;}

  public static void main(String[] a){
    M m = new M();
    System.out.println(m.c("", new Object[]{new Object[]{1,2},new Object[]{new Object[]{1,2},3},4,new Object[]{new Object[]{new Object[]{new Object[]{5}}}},6}));
    m.r = "";
    System.out.println(m.c("", new Object[]{"Atom",new Object[]{"Proton",new Object[]{"Up Quark","Up Quark","Down Quark"}},new Object[]{"Neutron",new Object[]{"Up Quark","Up Quark","Down Quark"}},"Electron"}));
  }
}

আউটপুট:

->1
->2
-->1
-->2
->3
>4
---->5
>6

>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Up Quark
-->Down Quark
>Electron

1
আপনি for(int j=i;j-->0;r+="-");পরের লাইনটি যা করতে তা করতে এবং টার্নারি অপারেটরটি অবজেক্ট [] এর পরিবর্তে জেনেরিক আর্গুমেন্ট ব্যবহার করে কিছুটা সংক্ষিপ্ত (143 বা এমনকি 142) পেতে পারেন : String r="";<T>String c(int i,T[] o){for(T x:o)if(x instanceof Object[])c(i+1,(T[])x);else for(int j=i;j-->=0;r+=j<0?">"+x+"\n":"-");return r;} এবং প্রথমটির হিসাবে 0 এর পরিবর্তে 1 পার করলেও 1 টি অক্ষর কম যুক্তি ঠিক আছে।
বারটেক্স

আমি জেনেরিক যুক্তি থেকে [] সরিয়ে এটি আরও খাটো করার একটি উপায় খুঁজে পেয়েছি, এটি অতিরিক্ত 2 টি অক্ষর সংরক্ষণ করে (তবে 5 মিনিটের পরে মন্তব্যটি সম্পাদনা করতে পারে না)
বারটেক

@ বারটেক্স 2 এক্স ধন্যবাদ! -12 বাইটস আপনাকে ধন্যবাদ। :) বিটিডব্লিউ, []1 অতিরিক্ত বাইট সংরক্ষণ করতে প্যারামিটার থেকে অপসারণ একটি ত্রুটি দেয়। দৌড়ানোর পরে > ডিবাগ এ ত্রুটিটি এখানে দেখুন ।
কেভিন ক্রুইজসেন

String r="";<T>String c(int i,T a){for(T x:(T[])a)if(x instanceof Object[])c(i+1,x);else for(int j=i;j-->0;r+=j<1?">"+x+"\n":"-");return r;}এইটা কাজ করে. এছাড়াও আপনি অতিরিক্ত বাইট সংরক্ষণের জন্য স্ট্রিংয়ের সাথে অনুরূপ জেনেরিক কৌশল করতে পারেন তবে ফলটি মুদ্রণের আগে পরিবর্তনশীলের মধ্যে সংরক্ষণের প্রয়োজন হয়, বা একটি স্পষ্টরূপে castালাই (দ্বিপাক্ষিক পদ্ধতি কল):String r="";<T,S>S c(int i,T a){for(T x:(T[])a)if(x instanceof Object[])c(i+1,x);else for(int j=i;j-->0;r+=j<1?">"+x+"\n":"-");return(S)r;}
বারটেক্স 2 এক্স

1
এটিকে অনুমোদিত হিসাবে বিবেচনা করা হচ্ছে কিনা তা আমি নিশ্চিত নই, তবে শূন্যের পরিবর্তে আর্গুমেন্ট হিসাবে খালি স্ট্রিং সহ 114 বাইট এখানে (">" যুক্তি হিসাবে অনুমোদিত হলে 1 অক্ষর কম হতে পারে) String r="";<T,S>S c(S p,T a){for(T x:(T[])a)if(x instanceof Object[])c("-"+p,x);else r+=p+">"+x+"\n";return(S)r;}এবং কল করার সময় স্ট্রিং কাস্টের প্রয়োজনীয়তা এটা চলে গেছে.
বারটেক্স

6

পিএইচপি, 77 74 73 বাইট

4 বাইট সংরক্ষিত ধন্যবাদ @ মান্যাটওয়ার্ক।

function f($a,$p=">"){foreach($a as$e)"$e"!=$e?f($e,"-$p"):print"$p$e
";}

পুনরাবৃত্তি ফাংশন, নেতিবাচক স্ট্রিং সূচক জন্য পিএইচপি 7.1 বা নতুন প্রয়োজন।
"$e"হয় Arrayঅ্যারে জন্য; তাই "$e"!=$eহিসাবে একই is_array($e)

  • উপসর্গ দিয়ে শুরু করুন >
  • -প্রতিটি স্তরের উপসর্গে একটি প্রিপেন্ড করুন
  • পরমাণুর জন্য উপসর্গ + উপাদান + নিউলাইন মুদ্রণ করুন

1
75 বাইট:function f($a,$p=""){foreach($a as$e)echo$p,is_array($e)?f($e,"-"):">$e\n";}
ইসমাইল মিগুয়েল

1
যদি এটি প্রয়োজনীয় ফর্ম্যাটিংয়ের জন্য না থাকে তবে মুদ্রণ_আর (ray অ্যারে) আরও ছোট হবে :)
ivanivan

1
মাত্র একটি দ্রুত পরীক্ষা করেছে, তবে মনে হচ্ছে এটি is_array($e)প্রতিস্থাপন করা যেতে পারে $e[-1]!==""
23:38

1
@ মান্যাট ওয়ার্কস পিএইচপি <.1.১ ... পিএইচপি it.১ এ, এটি দিয়ে করা যায় $e[-]==""... এবং শর্তটি বিপরীতভাবে করা যায় $e[-1]>""। ভাল লাগছে!
তিতাস

1
হতে পারে আমি কিছু কোণার কেস মিস করছি, তবে আপাতত মনে হচ্ছে এর $e[-1]>""সাথে প্রতিস্থাপন করা যেতে পারে "$e"==$e। অন্তত প্রাচীন পিএইচপি 5.6 এ আমি ব্যবহার করি।
manatwork

5

সি 99 (জিসিসি), 201 187 140 112 109

f(char*a){for(long d=1,j;j=d+=*++a>90?92-*a:0;)if(*a<35){for(;j||*++a^34;)putchar(j?"->"[!--j]:*a);puts("");}}

প্রসারিত ফর্ম:

f(char*a){
    for(long d=1,j;j=d+=*++a>90?92-*a:0;)
        if(*a<35){
            for(;j||*++a^34;)putchar(j?--j?45:62:*a);
            puts("");
        }
}

এটি সঠিক ফর্ম্যাটে একটি স্ট্রিং নেয় এবং শেষ মিলটি খুঁজে পাওয়ার সময় শেষ হয় ]

এটি পুনরাবৃত্তি ব্যবহার করে না এবং প্রকৃতপক্ষে দ্বিতীয় নিয়মটি অর্জন করতে দীর্ঘ ধরণের ব্যবহার করে: 2 ^ 32-1 স্তর । বেশিরভাগ স্ক্রিপ্টিং ভাষাগুলির সীমাবদ্ধ পুনরাবৃত্তি গভীরতা বা স্ট্যাক ওভারফ্লোতে কেবল ক্র্যাশ।

আমি সি তে গল্ফ করতে অভ্যস্ত নই কোন সাহায্যের প্রশংসা করা হয় :)

তার টিপসের জন্য বলভোকে ধন্যবাদ! বিশেষত টাইটাসকে ধন্যবাদ, যিনি সর্বদা গল্ফিংয়ের (এমনকি সিতেও) ভাল রাউন্ডের জন্য এগিয়ে আছেন!

আরও দুটি বাইট এই সত্য দ্বারা সংরক্ষিত হয়েছে যে আমরা শেষের সাথে একবার মিলিয়ে শেষ ]করতে পারি এবং কোনও নাল চরটি মিলানোর দরকার নেই।

এটি ওয়ান্ডবক্সে পরীক্ষা করা যায়



আপনি দ্বিতীয় লাইন সংক্ষিপ্ত না করতে পারেন for(int d=1 ...? longকেবলমাত্র ৪ টিতে 4 টি অক্ষর intরয়েছে এবং 2^32 - 1আপনার একক বাইট সংরক্ষণ করে আপনার জমাটি বৈধ হওয়ার জন্য এটি এটিকে উপরে above োকানোর প্রয়োজন নেই।
রেজিওসন

@ রিস্টোসন ইন স্বাক্ষরিত এবং তাই কেবল অবধি কাজ করে 2^31-1
ক্রিস্টোফ

চ্যালেঞ্জ বিবৃত আপনি না যে @Christoph আছে যে এর চেয়ে কোনও যান।
রেজিওসন

@ রিস্টিওসন চ্যালেঞ্জটি নিয়ম হিসাবে উল্লেখ করেছে The maximum level of "layers" is 2^32-1.2^31-1অনেক কম 2^32-1। এটি একটি বা এটি ফিট করে কিছুক্ষণ 2^32-1ফিট করে না (এটি বেশিরভাগ সিস্টেমে / অবশ্যই সংকলকগুলিতে থাকে)। সুতরাং সঠিক উত্তর দেবে না (যেমন এখানে বেশিরভাগ উত্তর হতে ব্যর্থ হয়)। intunsignedlongint
ক্রিস্টোফ

4

জাভাস্ক্রিপ্ট (ES6), 58 51 বাইট

f=(a,s='>')=>a.map(e=>e.map?f(e,'-'+s):s+e).join`
`

সম্পাদনা করুন: যখন A আরনাউল্ড নির্দেশ করেছেন যে আমি আমার দুটি পদ্ধতির সমন্বয় করতে পারি তখন by টি বাইট সংরক্ষণ করা হয়েছে।


4

পিএইচপি, 129 123 112 109 95 93 91 বাইট

for(;a&$c=$argn[++$i];)$c<A?$c<"-"?a&$s?$s=!print"$p>$s
":0:$s.=$c:$p=substr("---$p",$c^i);

পুনরুক্তিযুক্ত সমাধানটি STDIN থেকে স্ট্রিং নেয়: এটি
দিয়ে চালান echo '<input>' | php -nR '<code>'বা এটি অনলাইনে পরীক্ষা করুন

ভাঙ্গন

for(;a&$c=$argn[++$i];)     // loop $c through input characters
    $c<A                        // not brackets?
        ?$c<"-"                     // comma or quote?
            ?a&$s?$s=!print"$p>$s\n":0  // if $s not empty, print and clear $s
            :$s.=$c                     // digit: append to $s
        :$p=substr("---$p",$c^i)    // prefix plus or minus one "-"
;

সংখ্যাটি উদ্ধৃতিতে খুশী; সুতরাং আমার একবারে কেবল একটি ক্রিয়া দরকার।

এএসসিআইআই ফিডিং

char    ascii   binary/comment
 "       34
 ,       44
 [       91     0101 1011
 ]       93     0101 1101

 A       65     $c<A    true for comma, quote and digits
 -       45     $c<"-"  true for comma and quote

                =0011 1010 -> 50 -> "2"
i^"["   105^91  ^0101 1011
 i      105      0110 1001
i^"]"   105^93  ^0101 1101
                =0011 0100 -> 52 -> "4"

এতে 3 টি ড্যাশ যুক্ত করা $pএবং 2 এর জন্য 2 [, 4 অপসারণের জন্য একটি ]যুক্ত করে [এবং এর জন্য একটি অপসারণ করে ]


আবারও ভালো কাজ!
ক্রিস্টোফ

4

পাইথন 2, 65 64 বাইট

f=lambda o,d=0:o<''and'\n'.join(f(e,d+1)for e in o)or'-'*d+'>'+o

এখনই আমার উত্তর ধারাবাহিকভাবে কোনও ড্যাশ ছাড়াই শুরু হয়, তাই ["foo", "bar"]হয়:

>foo
>bar

import sys, pprint; pprint.pprint(sys.argv)43 বাইট হয় তবে আমি জানি না এটি কোড গল্ফের নিয়ম ভঙ্গ করে কিনা।
ক্যারেল

এটি একটি বাইট সংরক্ষণ করে:f=lambda o,d=0:o<''and'\n'.join(f(e,d+1)for e in o)or'-'*d+'>'+o
বেন ফ্রাঙ্কেল

@ ক্যারেল আপনি 'পি হিসাবে প্রিন্ট আমদানি করতে পারবেন না' বা সম্ভবত (এটি নিশ্চিত কিনা তা নিশ্চিত নয়) 'পি হিসাবে প্রিন্ট.প্রিন্ট আমদানি করুন' (মঙ্গলভাব আমি আমার ফোনের কীবোর্ডে পিছনের টিকটি খুঁজে পাব না)
কোল

@ কোল হুম .. import sys, pprint.pprint as p; p(sys.argv)এখনও 43 কিন্তু একটি ভাল পরামর্শ কম কম; ডি চেষ্টা করে import sys.argv as vএটিকে কিছুটা ~ 48 বাইট বৃদ্ধি করে। যদি কেউ sys.argv কে নির্মূল করতে পারে তবে তারা অনেক কিছু বাঁচাতে পারে তবে প্রোগ্রামটি তখন বেশ অকেজো হয়ে যায়। একটি পুনরাবৃত্তির পদ্ধতির বেশ দীর্ঘ, long def p(L,d=0): [p(i,d+1) if isinstance(i,list) else print(">"*d + i) for i in L]80 বাইট।
ক্যারেল

3

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

কোড + -nlপতাকা 53 বাইট ।

/"/?print"-"x~-$v.">$_":/]/?$v--:$v++for/]|\[|".*?"/g

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

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

sub f{my$v=pop;map{ref?f(@$_,$v+1):"-"x$v.">$_"}@_}sub{f@_,0}

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

তবে পার্ল যেভাবে পরামিতিগুলির সাথে ডিল করে তা গল্ফিং ফাংশনগুলির জন্য অনুকূল নয়: কোনও alচ্ছিক পরামিতি মানে আমাকে প্রথম ফাংশন (বেনামে) করতে হয় না এবং আমাকে দীর্ঘসূত্রীর সাথে স্পষ্টভাবে শেষ প্যারামিটারটি পেতে হয় my$v=pop


3

রুবি, 49 45 46 বাইট

f=->c,p=?>{c.map{|x|x==[*x]?f[x,?-+p]:p+x}*$/}

উদাহরণ:

puts f[["Atom",["Proton",["Up Quark", "Up Quark", "Down Quark"], "Neutron", ["Up Quark", "Down Quark", "Down Quark"], "Electron"]]]

>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

ব্যাখ্যা:

পুনরাবৃত্তি ফাংশন: যদি x==[*x] একটি অ্যারে হয়, এবং আমরা এটির উপরে পুনরাবৃত্তি করি। যদি তা না হয় তবে এটি যুক্ত করুন।


3

হাস্কেল, 104 বাইট

l@(x:y)#(a:m)|[(h,t)]<-reads$a:m=y++h++l#t|a<'#'=l#m|a<'-'='\n':l#m|a>'['=y#m|q<-'-':l=q#m
l#_=""
(">"#)

হাস্কেলের বিভিন্ন গভীরতার সাথে নেস্টেড তালিকাগুলি নেই, সুতরাং আমাকে নিজের থেকে ইনপুট স্ট্রিংটি পার্স করতে হবে। ভাগ্যক্রমে গ্রন্থাগারের কাজreads স্ট্রিংগুলি (যেমন- "বন্ধকৃত চর ক্রম) পার্স করতে পারে , তাই আমার এখানে কিছুটা সহায়তা আছে।

ব্যবহারের উদাহরণ:

*Main> putStrLn $ (">"#) "[[\"1\",\"2\"],[\"3\",\"4\"]]" 
->1
->2
->3
->4

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

কিভাবে এটা কাজ করে:

ফাংশনটি #চর দ্বারা স্ট্রিং চরের মধ্য দিয়ে যায় এবং নেস্টিং স্তরটিকে (প্রথম পরামিতি l) -ফাইনালের সাথে স্ট্রিং হিসাবে রাখে >। যদি তালিকার শিরোনামটিকে স্ট্রিং হিসাবে পার্স করা যায় lতবে স্ট্রিংটি স্ট্রিংয়ের সাথে পুনরাবৃত্ত কল অনুসরণ করুন। প্রথম চরটি যদি একটি স্পেস হয় তবে এড়িয়ে যান। এটি যদি একটি হয় তবে ,একটি নতুন লাইন নিন এবং যদি যান ]তবে নীড়ের স্তরটি নীচু করে নিন এবং অন্যথায় (কেবল [বাম দিকে) নীড়ের স্তর বাড়িয়ে এগিয়ে যান। পুনরাবৃত্তি খালি ইনপুট স্ট্রিংয়ের সাথে শেষ হয়। প্রধান ফাংশন (">"#)নীড়ের স্তর ">"এবং কলগুলিকে সেট করে #


2

এসডাব্লুআই-প্রোলগ, ১১৮ বাইট

p(L):-p(L,[>]).
p([],_):-!.
p([H|T],F):-p(H,[-|F]),p(T,F),!.
p(E,[_|F]):-w(F),w([E]),nl.
w([]).
w([H|T]):-write(H),w(T).

লাইন ব্রেকগুলি কেবল পাঠযোগ্যতার জন্য যুক্ত করা হয়েছে, বাইট গণনায় অন্তর্ভুক্ত নয়।

pশিকারী পুনরাবৃত্তভাবে অ্যারেগুলি অতিক্রম করে, Fএকটি স্তর আরও গভীরতর সরানোর সময় উপসর্গটিতে একটি '-' যুক্ত করে ।wউপসর্গ অ্যারের পাশাপাশি আউটপুটটিতে আসল উপাদানটি লিখতে ব্যবহৃত হয়।

উদাহরণ:

?- p(["Atom",["Proton",["Up Quark", "Up Quark", "Down Quark"], "Neutron", ["Up Quark", "Down Quark", "Down Quark"], "Electron"]]).
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

2

ব্যাচ, 249 বাইট

@echo off
set/ps=
set i=
:t
set t=
:l
set c=%s:~,1%
set s=%s:~1%
if "%c%"=="[" set i=-%i%&goto l
if not "%c%"=="]" if not "%c%"=="," set t=%t%%c%&goto l
if not "%t%"=="" echo %i:~1%^>%t%
if "%c%"=="]" set i=%i:~1%
if not "%s%"=="" goto t

বিরক্তিকরভাবে ব্যাচের কমা তুলনা করতে সমস্যা হয়। নমুনা রান:

[Atom,[Proton,[Up Quark,Up Quark,Down Quark],Neutron,[Up Quark,Down Quark,Down Quark],Electron]]
>Atom
->Proton
-->Up Quark
-->Up Quark
-->Down Quark
->Neutron
-->Up Quark
-->Down Quark
-->Down Quark
->Electron

2

রেটিনা , 63 54 52 বাইট

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

.*?".*?"
$`$&¶
T`[] -~`-]_`.(?=.*".*")
-]

-"
>
T`]"

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

ব্যাখ্যা

.*?".*?"
$`$&¶

প্রথমত, প্রতিটি উদ্ধৃত স্ট্রিংকে এর আগে উপস্থিত সমস্ত কিছু, এবং নিজেই, আরও একটি নতুন লাইন প্রতিস্থাপন করে অ্যারেটি বিচ্ছিন্ন হয়ে যায়। এটি এটিকে ভেঙে ফেলার মাধ্যমে, প্রতিটি স্ট্রিংয়ের আগে মিল না খোলার বন্ধনীগুলি খুঁজে পাওয়া সম্ভব।

T`[] -~`-]_`.(?=.*".*")

এই ট্রান্সলিটারেশন প্রতিস্থাপন করবে [সঙ্গে -ছেড়ে ]অপরিবর্তিত, এবং (প্রত্যেক অন্যান্য চরিত্র মুছতে -~ সব মুদ্রণযোগ্য হওয়া ASCII) হয়। তবে এটি প্রতিটি লাইনে চূড়ান্ত স্ট্রিংয়ের আগে উপস্থিত অক্ষরের পরিবর্তে।

-]

পরবর্তী সমস্ত দৃষ্টান্ত -]সরানো হয়। এগুলি বন্ধনী সংমিশ্রনের সাথে মিলে যায় এবং আমরা কেবল তুলনামূলক বন্ধনী চাই। এগুলি সরানোর পরে, প্রতিটি লাইনের একটি সংখ্যা রয়েছে- আগে কতগুলি মিল না খোলার বন্ধনী এসেছিল তার সমান গুলি থাকে।

-"
>

এর সাথে প্রতিস্থাপিত -হওয়ার আগে শেষ">তীর গঠনের জন্য এর ।

T`]"

শেষ অবধি, সমস্ত অবশিষ্ট ]গুলি এবং "গুলি মুছে ফেলা হবে।


দেখে মনে হচ্ছে এটি স্ট্রিংগুলির ভিতরে (পালানো) কোট থাকবে না। আমি বৈধ কিনা তা নিশ্চিত নই তবে আমি স্পষ্টতা চেয়েছি।
মার্টিন এেন্ডার

@ মার্টিনএন্ডার ভাল ক্যাচ, আমি এটি লক্ষ্য রাখব
বিজনেস ক্যাট

1

রাদা , 54 বাইট

f d=""{{|n|{n|f d=`$d-`}if[n is list]else[`$d>$n
`]}_}

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

এটি এমন একটি ফাংশন যা স্ট্রিম থেকে ইনপুট অ্যারেটি পড়ে। প্রতিটি আইটেমের জন্য, এটি হয় নিজেকে পুনরাবৃত্তভাবে কল করে বা আইটেমটি মুদ্রণ করে।


1

পাইথন 3, 80 বাইট

পাইথনের ল্যাম্বডাস পুনরাবৃত্তি সমর্থন করে বলে মনে হয়, কে জানত?

p=lambda l,d=1:[p(i,d+1)if isinstance(i,list)else print("-"*d+">"+i)for i in l]

এটি orlp এর উত্তরের একটি পাল্টা / প্রশংসা ।


পিপিসিজিতে আপনাকে স্বাগতম! দেখে মনে হচ্ছে আপনি একটি পেছনের লাইনফিড বা কিছু গণনা করেছেন (কারণ আমি কেবল 80 বাইট গণনা করি) এবং আপনার চারপাশের স্পেসগুলির প্রয়োজন নেই =। আমিও সন্দেহ করি যে আপনি তিনটির পরেও সমস্ত স্পেস ফেলে দিতে পারেন ), তবে পাইথনের গল্ফ করার সাথে আমি খুব বেশি পরিচিত নই।
মার্টিন এন্ডার


0

স্ট্যাকড , 27 বাইট

[@.1-'-'*\'>'\,,out]deepmap

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

স্ট্যাকের শীর্ষ থেকে ইনপুট নেয় এবং STDOUT এ আউটপুট ছেড়ে যায়। গভীরতার মানচিত্র করা, বার - dবার পুনরাবৃত্তি করা , '>' এবং নিজেই উপাদানটির সাথে একত্রিত করার মতো এটি সহজ ।


0

গেম, 63 অক্ষর

\A=@set{i;-1}
[=@incr{i}
]=@decr{i}
"*"=@repeat{$i;-}>*\n
,<s>=

অন্যান্য পার্সিং সমাধানগুলির মতো, ধরে নিও যে স্ট্রিংগুলিতে কোনও পালানো ডাবল কোট থাকবে না।

নমুনা রান:

bash-4.3$ gema '\A=@set{i;-1};[=@incr{i};]=@decr{i};"*"=@repeat{$i;-}>*\n;,<s>=' <<< '[["1","2"],[["1","2"],"3"],"4",[[[["5"]]]],"6"]'
->1
->2
-->1
-->2
->3
>4
---->5
>6

0

jq, 70 67 টি অক্ষর

( 64 67 characters৪ টি অক্ষরের কোড + 3 অক্ষর কমান্ড লাইন বিকল্প)

def f(i):if type=="array"then.[]|f("-"+i)else i+. end;.[]|f(">")

নমুনা রান:

bash-4.3$ jq -r 'def f(i):if type=="array"then.[]|f("-"+i)else i+. end;.[]|f(">")' <<< '[["1","2"],[["1","2"],"3"],"4",[[[["5"]]]],"6"]'
->1
->2
-->1
-->2
->3
>4
---->5
>6

অন-লাইন পরীক্ষা

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