মনোলিথগুলি কত লম্বা?


29

এখানে মনোোলিথগুলির একটি ইনপুট উদাহরণ । এই উদাহরণে 4 জন রয়েছে।

  _
 | |        _
 | |  _    | |
 | | | |   | |     _
_| |_| |___| |____| |_

প্রথম একঘেয়েমি 4 টি ইউনিট উচ্চ, দ্বিতীয়টি 2, তৃতীয়টি 3, এবং শেষটি 1 টি।

কাজটি

আপনার প্রোগ্রামের একত্রে থেকে বাম থেকে ডানে একত্রে উচ্চতা আউটপুট করা উচিত। আউটপুট ফর্ম্যাটটি কোনও ধরণের তালিকা বা অ্যারেতে থাকতে পারে।

নোট

  • ইনপুটটি কোনও মাত্রিক স্ট্রিং, স্ট্রিংগুলির তালিকা বা অক্ষরের তালিকা হিসাবে নেওয়া যেতে পারে।
  • এটি , তাই সর্বনিম্ন বাইটস জয়
  • আপনি ধরে নিতে পারেন যে মনোলিথগুলির সর্বদা একই প্রস্থ থাকে এবং সর্বদা _অন্য থেকে কমপক্ষে 1 দূরে থাকে।
  • এগুলি যে কোনও উচ্চতায়, এবং যে কোনও পরিমাণে আসতে পারে।

ইনপুট / আউটপুট

  _
 | |        _
 | |  _    | |
 | | | |   | |     _
_| |_| |___| |____| |_   >> [4,2,3,1]

           _
          | |
  _       | |
 | |  _   | |  _
_| |_| |__| |_| |_   >> [2,1,4,1]


 _   _   _ 
| |_| |_| |_____   >> [1,1,1]

____________________   >> undefined behavior

 _
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |   >> [11]

     _       _       _       _       _
 _  | |  _  | |  _  | |  _  | |  _  | |
| |_| |_| |_| |_| |_| |_| |_| |_| |_| |  >> [1,2,1,2,1,2,1,2,1,2]

2
আমি কি ধরে নিতে পারি যে ইনপুটটি ফাঁকা জায়গাগুলির সাথে সঠিকভাবে প্যাড করা আছে?
isaacg

17
আপনার [10]একরঙা না [11]?
TessellatingHeckler

অপরিজ্ঞাত একটি কি খালি অ্যারে হবে না?
সলোমন উকো

@ আইস্যাক হ্যাঁ, তা ঠিক হবে
গ্রাভিটন

@ সলোমনউকো প্রযুক্তিগতভাবে হ্যাঁ, যদিও এটি সমস্ত ভাষার জন্য এটিকে আরও সহজ করার জন্য আমি সিদ্ধান্ত নিয়েছি যে এটির সাথে এটি মোকাবেলা না করা।
গ্রাভিটন

উত্তর:


15

জেলি , (8?) 9 বাইট

Ỵ=”|Sḟ0m2

একটি মোনাডিক লিঙ্ক বর্ণনামূলকভাবে নির্দিষ্ট হিসাবে একটি তালিকা গ্রহণ করে এবং পূর্ণসংখ্যার একটি তালিকা ফেরত দেয়।

দ্রষ্টব্য: 8 টি বাইট যদি স্ট্রিংগুলির একটি তালিকা, প্রতি লাইনে এক, একটি অনুমোদিত ইনপুট ফর্ম্যাট হিসাবে চিহ্নিত করা হয়েছিল - কেবল সরিয়ে ফেলুন

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

কিভাবে?

Ỵ=”|Sḟ0m2 - Link: list of characters, s
Ỵ         - split at newlines
  ”|      - literal '|'
 =        - equals (vectorises)
    S     - sum (vectorises, hence counts the number of '|' in every column)
     ḟ0   - filter out zeros (only keep the results from the sides of the towers)
       m2 - modulo index with 2 (keep only the left side measurements)

আমি জানি না, কিন্তু এই ঠিক আছে তো?
ভি। কুর্তোয়া

1
@ ভি.কোর্তোস আমি কেন তা দেখছি না, যেহেতু আমরা সম্ভবত কখনই এ জাতীয় ইনপুট পাব না।
এরিক আউটগলফার

ঠিক আছে, কারণ আমি দেখেছি যে আরও কিছু উত্তর এটি গণনা করছে
ভি। কর্টয়েস

2
@ ভি.কৌর্তোস আপনার প্রস্তাবিত ইনপুটটি স্পেসিফিকেশনের সাথে খাপ খায় না, একইভাবে আকাশে আন্ডারস্কোর যুক্ত করে, পার্ট-ওয়ে আপ মোনোলিথগুলি বা ভূগর্ভস্থ সম্ভবত অন্যান্য অনেকগুলি জমা দেয় break
জোনাথন অ্যালান

নিচে ভোটার - আপনি কি আপনার কারণ ব্যাখ্যা করতে যত্ন নেবেন?
জোনাথন অ্যালান

8

বাহ, আপনি যে দ্রুত উত্তর।
গ্রাভিটন

@ গ্রাভিটন হহে এই পৃষ্ঠাটি সর্বদা কোথাও খোলা থাকা উচিত । ;)
এরিক দি আউটগলফার

14
ব্যাখ্যা, দয়া করে!
শেগি

6

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

-১ বাইট @ শ্যাগিকে ধন্যবাদ

a=>a.map((b,i)=>b.replace(/_/g,(_,j)=>o[j]=a.length-i-1),o=[])&&o.filter(x=>x)

স্ট্রিংগুলির অ্যারে হিসাবে ইনপুট নেয়।

পরীক্ষার স্নিপেট

f=
a=>a.map((b,i)=>b.replace(/_/g,(_,j)=>o[j]=a.length-i-1),o=[])&&o.filter(x=>x)
I.value="           _\n          | |\n  _       | |\n | |  _   | |  _\n_| |_| |__| |_| |_"
<textarea id=I rows=7 cols=30></textarea><br><button onclick="O.value=`[${f(I.value.split`\n`).join`, `}]`">Run</button> <input id=O disabled>


1
78 বাইট:a=>a.map((x,y)=>x.replace(/_/g,(_,z)=>c[z]=a.length-y-1),c=[])&&c.filter(n=>n)
শেগি

@ শেগি নিস, আমি সম্পূর্ণরূপে ব্যবহারের কথা ভাবিনি replace। ধন্যবাদ!
জাস্টিন মেরিনার

6

সি ++, 171 169 বাইট

#import<vector>
#import<iostream>
int f(std::vector<std::string>s){for(int a,j,i=0,k=s.size()-1;a=s[k][i];++i)if(a==32){for(j=0;(a=s[k-++j][i])-95;);std::cout<<j<<" ";}}

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

সি ++ (জিসিসি), 150 বাইট

@ এসচেপলারকে ধন্যবাদ!

#import<vector>
#import<iostream>
int f(auto s){for(int a,j,i=0,k=s.size()-1;a=s[k][i];++i)if(a==32){for(j=0;(a=s[k-++j][i])-95;);std::cout<<j<<" ";}}

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


1
জি ++ ব্যবহার করে, আপনি অ-মানকটি ব্যবহার করতে পারেন f(auto s)এবং নির্দিষ্ট করে নিতে পারেন যে এটির যেকোন র্যান্ডম-অ্যাক্সেস ধারকগুলির র্যান্ডম-অ্যাক্সেস ধারক লাগে char
aschepler


5

ডায়ালগ এপিএল, 29 বাইট

{0~⍨↑+/(⌈/⍴¨⍵)↑¨(⍳≢⍵)×⌽⍵='_'}

সাথে চালাও ⎕IO←0

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

কিভাবে?

⌽⍵='_'- যেখানে হয় '_', শীর্ষ লাইন প্রথম

×- গুন করা ...

(⍳≢⍵)- পরিসীমা (শূন্য সূচকযুক্ত)

↑¨ - প্রতিটি লাইনের জন্য, শূন্য সহ প্যাড দ্বারা ...

(⌈/⍴¨⍵) - সর্বোচ্চ দৈর্ঘ্য

↑+/ - সারিবদ্ধভাবে জিপযুক্ত এবং সমতল করুন

0~⍨ - শূন্যগুলি সরিয়ে দেয়



5

পাওয়ারশেল, 133 বাইট

param($s)$r=,0*($l=($s=$s-replace'\| \|',' 1 ')[0].Length);1..$s.Count|%{$z=$_-1;0..($l-1)|%{$r[$_]+=(''+$s[$z][$_]-as[int])}};$r-ne0

দেখে মনে হচ্ছে এটি খুব প্রতিযোগিতামূলক নয়; এটি টাওয়ারগুলিকে 1 টি কলামে রূপান্তর করতে একটি রেজেক্সকে প্রতিস্থাপন করে, ইনপুট স্ট্রিংয়ের দৈর্ঘ্যের 0 টি অ্যারে করে, তারপরে 1s যুক্ত করে রেখাগুলির মধ্য দিয়ে পদক্ষেপ নেয়।

টেস্টগুলি রান করার জন্য প্রস্তুত:

$s1 = @'
  _                   
 | |        _         
 | |  _    | |        
 | | | |   | |     _  
_| |_| |___| |____| |_
'@-split"`r?`n"


$s2 = @'
 _
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | 
'@-split"`r?`n"

$s3 = @'
           _      
          | |       
  _       | |           
 | |  _   | |  _   
_| |_| |__| |_| |_ 
'@-split"`r?`n"


$s4 = @'
 _   _   _      
| |_| |_| |_____ 
'@-split"`r?`n"

$s5 = @'
     _       _       _       _       _ 
 _  | |  _  | |  _  | |  _  | |  _  | |
| |_| |_| |_| |_| |_| |_| |_| |_| |_| | 
'@-split"`r?`n"

4

জাপট , 11 বাইট

z ·mb'_ fw0

এটি অনলাইন পরীক্ষা!

ব্যাখ্যা

z ·mb'_ fw0   : Implicit input
z             : Rotate the input clockwise. This puts the "floor" against the left side.
  ·           : Split the 2D string into lines.
   m          : Replace each column (now row) X with
    b'_       :   the index of '_' in X (0-indexed). This gives us the output list, with
              :   0's and -1's mixed in representing the columns that are not monoliths.
        f     : Take only the items X where
         w0   :   max(X, 0) is truthy. Since 0 is falsy, this removes anything <= 0.
              : Implicit: output result of last expression

4

রেটিনা , 48 38 বাইট

^
¶
{`(¶.*)*¶_(.*¶)+
$#2 $&
}`¶.
¶
G`.

এটি অনলাইন চেষ্টা করুন! লিঙ্কে প্রথম উদাহরণ অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা: একটি লাইন উপসর্গযুক্ত যা ফলাফল সংগ্রহ করবে। যেহেতু প্রতিটি কলাম বারবার মুছে ফেলা হয়, তত _উপরে স্থল স্তর রয়েছে তাদের কলামে অবশিষ্ট রেখাগুলির সংখ্যা রয়েছে। অবশেষে এখন ফাঁকা লাইনগুলি মুছে ফেলা হয়। সম্পাদনা করুন: @ ফ্রাইআমডেজিমন থেকে অনুপ্রেরণার জন্য 10 বাইট সংরক্ষণ করা হয়েছে।


ভাল, আমার কিছুটা সংক্ষিপ্ত সমাধান ছিল , তবে এটি বড় ইনপুটগুলিতে কাজ করবে না কারণ এগুলি তাদের বাছাই করার ক্ষমতাকে আমার মধ্যে বিশৃঙ্খলা করবে। কলাম দ্বারা কলাম যাওয়া এড়াতে একটি দুর্দান্ত উপায়!
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান আমি আপনার লাইনগুলি গণনা করার পদ্ধতিটিতে স্যুইচ করেছি _যা এস ব্যবহার করার চেষ্টা করার চেয়ে অনেক বেশি অর্থবোধ করে |, ধন্যবাদ!
নিল

@ ফ্রাইআম দ্য এজিগম্যান সমস্যাটি সমাধান করে না, তবে আপনার সাজানোর মঞ্চটি সরলসাধনের মাধ্যমে লুকবাইন্ডটি বাছাই করে বাছাই করা $.%`যেতে পারে, এবং চূড়ান্ত পর্যায়টি হতে পারে !`\d+। এবং যদি আপনি প্রথম পর্যায়ে লুকোহেডে পরিবর্তন করেন তবে আপনাকে লুপ করার দরকার নেই।
মার্টিন ইন্ডার

@FryAmTheEggman আর এখানে আপনার পদক্ষেপ একটি ফিক্স, কিন্তু এটা 46 বাইট এ শেষ।
মার্টিন ইন্ডার

@ মার্টিনেন্ডার 45 সম্ভবত? এটি অনলাইন চেষ্টা করুন!
নিল

4

জাভা 8, 133 117 116 114 বাইট

a->{for(int l=a.length-1,i=0,j;i<a[0].length;i++)if(a[l][i]<33){for(j=0;a[j][i]<33;j++);System.out.print(l-j+",");}}

একটি হিসাবে ইনপুট নেয় (16 16 বাইট সংরক্ষণ করে)। -2 কম পাঠযোগ্য আউটপুট ধন্যবাদ বিনিময়ে বাইট @ OlivierGrégoire পরিবর্তন করে থেকে ।String[] char[][]
print(l-j+",")println(l-j)

ব্যাখ্যা:

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

a->{                         // Method with character 2D-array parameter and no return-type
  for(int l=a.length-1,      //  Length of the 2D char-array - 1
      i=0,j;                 //  Index-integers
    i<a[0].length;i++)       //  Loop (1) over the 2D char-array
    if(a[l][i]<33){          //   If the base of the current column is a space
      for(j=0;a[j][i]<33;    //    Loop (2) over the cells in this column as long as
                             //    we encounter spaces (from top to bottom)
        j++                  //     And increase `j` every time, to go down the column
      );                     //    End of loop (2)
      System.out.println(l-j);
                             //    Print the amount of rows - `j`
    }                        //   End of if-block
                             //  End of loop (1) (implicit / single-line body)
}                            // End of method

আমি এখনও এটি চেষ্টা করি নি তবে এই চ্যালেঞ্জটির জন্য আমার ধারণাটি ছিল নীচে থেকে নীচে গিয়ে _যদি খুঁজে পাওয়া যায় যে এটির অবস্থানটি খুঁজে পাওয়া যায় তবে অবশ্যই আদেশ করুন, অবশ্যই নীচের সারিটি উপেক্ষা করে। বাইটস বাঁচাতে সাহায্য করতে পারে ...
TheLethalCoder

@ লেটলকোডারটিও আমার প্রাথমিক চিন্তা ছিল, তবে আপনি এটি কোথায় সংরক্ষণ করতে / অর্ডার করতে চান? আমি প্রথমে একটি মানচিত্র ভেবেছিলাম, তবে সেগুলি সাজানো হয়নি যাতে আপনার একটি লিঙ্কডম্যাপ লাগবে। আমার মাথার মধ্যে এটি সমস্ত কিছুটা খুব বেশি বাইট লাগছিল তবে আপনি যদি এটির কোনও উপায় খুঁজে পেতে পারেন তবে উত্তর পোস্ট করতে দ্বিধা বোধ করুন এবং আমি এটি +1 করব। :)
কেভিন ক্রুজসেন

আমি লিনকটি ব্যবহার করে এটি 150 এ নামাতে পেরেছি তবে এটি এখনও গল্ফ করার জন্য জায়গা থাকতে হবে।
TheLethalCoder

সি # তে আমাদের কাছে বহুমাত্রিক অ্যারে রয়েছে: new[,]জ্যাগড অ্যারের পরিবর্তে আপনি যেমন ব্যবহার করছেন new[][]। আপনার যদি জাভাতে থাকে তবে এটি আপনাকে কিছু বাইট সংরক্ষণ করতে পারে।
TheLethalCoder

1
System.out.println(l-j);আমার জন্য 2 বাইট ছাড়াই যথেষ্ট তালিকা দেখায়। এছাড়াও, ব্যাখ্যায়, আপনি length()রূপান্তর করতে ভুলে গেছেন length(জমা দেওয়ার ক্ষেত্রে এটি বাইট-কাউন্টের ক্ষেত্রে সঠিক নয়)।
অলিভিয়ার গ্রাগোয়ার

3

Haskell,, 75 74 বাইট

import Data.List;f=filter(>0).map(length.fst.span(<'!').reverse).transpose

ইনপুটটি স্ট্রিংগুলির একটি তালিকা হিসাবে প্রত্যাশিত (সারিবদ্ধ)।


আমদানির পরে কেন একটি সেমিকোলন ব্যবহার করবেন, যখন একটি নতুন লাইন একই দৈর্ঘ্য এবং আরও মূর্তিযুক্ত?
জুলে

@ জুলস: হ্যাঁ, আমি সাধারণত করি
সেরাকুসা




3

সি #, 150 144 137 বাইট

using System.Linq;a=>a.SelectMany((i,h)=>i.Select((c,w)=>new{c,w,d=a.Length-1-h}).Where(o=>o.c==95&o.d>0)).OrderBy(o=>o.w).Select(o=>o.d)

সম্পূর্ণ / ফর্ম্যাট সংস্করণ:

using System;
using System.Collections.Generic;
using System.Linq;

class P
{
    static void Main()
    {
        Func<char[][], IEnumerable<int>> f = a =>
            a.SelectMany((i, h) => i.Select((c, w) => new { c, w, d = a.Length - 1 - h })
                                    .Where(o => o.c == 95 & o.d > 0))
             .OrderBy(o => o.w)
             .Select(o => o.d);

        Console.WriteLine(string.Concat(f(new char[][]
        {
            "  _                 ".ToArray(),
            " | |       _        ".ToArray(),
            " | |  _   | |       ".ToArray(),
            " | | | |  | |    _  ".ToArray(),
            "_| |_| |__| |___| |_".ToArray(),
        })));

        Console.ReadLine();
    }
}

3

জাভা 8 - 229 বাইট 213 বাইট

s->{Map<Integer,Integer> m=new TreeMap();String[] l=s.split("\n");for(int i=0,j=-1;i<l.length-1;++i){s=l[i];while((j=s.indexOf("_",j+1))>=0){m.put(j,i);}}for(int i:m.values()){System.out.print(l.length-i-1+",");}}

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

Ungolfed:

public static void foo(String input)
{
    Map<Integer, Integer> map = new TreeMap(); // Raw types!!
    String[] lines = input.split("\n");

    for (int i = 0, j = -1; i < lines.length - 1; ++i)
    {
        input = lines[i];

        while ((j = input.indexOf("_", j + 1)) >= 0)
        {
            map.put(j, i);
        }
    }

    for(int i:map.values())
    {
        System.out.print(lines.length - i - 1 + ",");
    }
}

ওহ, প্রথম পোস্ট। এটির উন্নতি করতে কোনও সহায়তা দুর্দান্ত হবে। আমি জানি আমি এ থেকে মুক্তি পেতে পারিindexOf দুবার লেখা থেকে । জানতাম! আমি মানচিত্রের ধরণগুলি পূর্ণসংখ্যার থেকে লংতে পরিবর্তন করার ধারণাটি দিয়েছিলাম তবে আমি মনে করি এটি একটি মৃত পরিণতি।


আমি জানি যে এরই মধ্যে আরও অনেক ভাল জাভা 8 সমাধান রয়েছে , তবে char[][]স্ট্রিংয়ের চেয়ে এই ক্ষেত্রে কাজ করা সহজ বলে আমি মনে করি ইনপুট হিসাবে এটি গ্রহণ করে ।


1
আপনি আমদানিগুলি অন্তর্ভুক্ত করেন নি (এটি জাভা উত্তরের জন্য প্রয়োজনীয়)। একটি Mapকিন্তু একটি ব্যবহার করবেন না int[](সম্ভবত আরম্ভ করা যেতে পারে new int[99]?)। এর পরে কোনও জায়গার দরকার নেই String[] l: String[]lএকই কাজ করে এবং খাটো হয়। println(l.length-i-1)পরিবর্তে ব্যবহার করুন println(l.length-i-1+",")। শুরু করা কি j: শুধু লেখার: ,j;। আপনি যদি int[]আগে প্রস্তাবিত কোনও ব্যবহার করেন তবে এটির মতো ঘোষণা করুন: int m[]=new int[99],i=0,j;এবং ঘোষণাটি থেকে সরান for-loop
অলিভিয়ার গ্রাগোয়ার

1
OlivierGrégoire মানচিত্রের জন্য প্রয়োজনীয় আমদানি সম্পর্কে সত্যই সঠিক। মানচিত্র সঙ্গে আপনার বর্তমান কোডের কিছু golfing জন্য হিসাবে, এটিকে এই পরিবর্তন করতে পারেন: import java.util.*;s->{Map m=new TreeMap();String[]a=s.split("\n");int l=a.length-1,j=-1,i=j;for(;++i<l;)for(s=a[i];(j=s.indexOf("_",j+1))>=0;m.put(j,i));for(Object o:m.values())System.out.println(l-(int)o);}<Integer,Integer>আপনি যখন কাস্ট করতে পারেন তখন মানচিত্রটির কোনও প্রয়োজন নেই int; a.length-1দু'বার ব্যবহার করা হয়, সুতরাং আপনি এর জন্য একটি ভেরিয়েবল ব্যবহার করতে পারেন; লুপের ভিতরে সবকিছু রেখে আপনি সমস্ত বন্ধনী থেকে মুক্তি পেতে পারেন। ওহ, এবং পিপিসিজিতে আপনাকে স্বাগতম! :)
কেভিন ক্রুইজসেন

ধন্যবাদ কেভিন ক্রুজসেন! লুপের জন্য প্রথমটির সামগ্রীগুলিকে লুপের জন্য দেহহীন অবস্থায় রূপান্তর করা অনুপ্রেরণামূলক ছিল! সুপার চালাক।
মাইকেল

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


2

গণিত, 48 47 39 বাইট

Last/@(Reverse@Most@#~Position~"_")&

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

Functionযা অক্ষরের একটি আয়তক্ষেত্রাকার অ্যারের প্রত্যাশা করে। লাগেMostঅ্যারে (শেষ সারি বাদে সমস্ত), Reverseএটি পরে, Transpose* গ্রহণ করে , তারপরে অক্ষরটি উপস্থিত হবে এমন সমস্ত সন্ধান Positionকরে _। প্রাসঙ্গিক উচ্চতা হয়Last প্রতিটি উপাদান Position

* হয় 3বাইট ব্যক্তিগত ব্যবহারের চরিত্র U+F3C7যা প্রতিনিধিত্ব \[Transpose]ম্যাথামেটিকাল হবে। নোট করুন যে এটি ম্যাথিক্সে কাজ করে না , তাই টিআইও লিঙ্ক কেবল ব্যবহার করে Transpose


2

এসওজিএল ভি0.12 , 9 বাইট

I{ _WH╥?O

এখানে চেষ্টা করুন!
স্ট্রিং (অক্ষর) এর অ্যারের অ্যারে হিসাবে ইনপুট নেয়।

ব্যাখ্যা:

I          rotate the array clockwise
 {         for each element
   _       push "_"
    W      get its index in the array (0 if not found, 1 if its the ground, >1 if its what we need)
     H     decrease that
      ╥    palindromize (duplicates the number, if it's <0, then errors and pushes 0, if =0, pushes 0, if >0, then pushes the number palindromized (always truthy))
       ?   if that, then
        T  output in a new line the original decreased index

2

জাভাস্ক্রিপ্ট (ES6), 108 104 88 বাইট

@ জাস্টিনমারিনারের জন্য 16 বাইট সংরক্ষণ করা হয়েছে

i=>i.map((s,h)=>{while(t=r.exec(s))m[t.index]=i.length-h-1},m=[],r=/_/g)&&m.filter(e=>e)

স্ট্রিংগুলির অ্যারে হিসাবে নেওয়া ইনপুট

let input = [
'  _',
' | |           _',
' | |  _   _   | |',
' | | | | | |  | |     _',
'_| |_| |_| |__| |____| |_'
]

let anonymousFunction =
i=>i.map((s,h)=>{while(t=r.exec(s))m[t.index]=i.length-h-1},m=[],r=/_/g)&&m.filter(e=>e)

console.log(anonymousFunction(input))



ধন্যবাদ @ জাস্টিনমারিনার! আমি অব্যবহৃত প্যারামিটারগুলিকে ভেরিয়েবল ইনিশিয়ালাইজেশন সম্পর্কে স্টোক করেছি Array.map, এটি একটি দুর্দান্ত কৌশল।
আলেকজানবার্ড

আপনার কি সত্যিই কোনও ভেরিয়েবলের জন্য RegEx নির্ধারণ করতে হবে? আপনি এটি সরাসরি ব্যবহার করতে পারেন execএবং কয়েকটি বাইট সংরক্ষণ করতে পারেন ।
শেগি

প্রকৃতপক্ষে, এটি প্রয়োজনীয় - যখন লুপটি প্রতিটি লাইনের উপরে একটি লাইনে পুনরাবৃত্তি করে এবং ভেরিয়েবলের রেজেক্সের অভ্যন্তরীণ অবস্থা ব্যতীত এটি প্রথমবারের সাথে মিলবে এবং অসম্পূর্ণভাবে লুপ করবে। প্রতিটি পুনরাবৃত্তি এটি একটি নতুন রেজেক্স তৈরি execকরবে তাই প্রথমটির সাথে মিলবে। আপনি যদি রেজেক্সটিকে ইনলাইন করেন তবে এটি আসলে স্ট্যাক এক্সচেঞ্জ স্নিপেট সম্পাদককে ক্র্যাশ করে। আমি কিছু মিস করছি না হলে?
আলেকজানবার্ড

@shaggy আমি আমার শেষ মন্তব্যে আপনাকে ট্যাগ করার জন্য ভুলে গেছি
alexanderbird

2

সিজেম, 15 14 বাইট

1 বাইট সংরক্ষিত হয়েছে @ বিজনেসগেটকে ধন্যবাদ

{W%z'_f#{0>},}

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

ব্যাখ্যা:

W%    e# Reverse
z     e# Zip
'_f#  e# Get the index of '_' in each element (-1 if not found)
{0>}, e# Filter where positive

ট্রান্সপোজ করার আগে পুরো অ্যারেটি উল্টিয়ে আপনি 1 বাইট সংরক্ষণ করতে পারেন।
বিড়াল বিড়াল

1

পিপ , 18 17 বাইট

15 বাইট কোড, +2 এর জন্য -rp পতাকাগুলির ।

_FI_@?'_MRVgZDs

স্টিডিন থেকে ইনপুট নেয়। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

                 g is list of lines from stdin (-r flag); s is space
         RVg     Reverse g
            ZDs  Zip (transpose), filling gaps with a default char of space
        M        Map this function:
   _@?'_          Index of _ in each line (or nil if it doesn't appear)
_FI              Filter, keeping only the truthy (nonzero, non-nil) values
                 Autoprint in repr format (-p flag)



1

পার্ল 6 , 65 বাইট

{m:ex/^^(\N+)_([\N*\n]+:)/.sort(*[0].chars).map(+*[1].comb("
"))}

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

  • m:exhaustive/^^(\N+)_([\N*\n]+:)/সমস্ত আন্ডারস্কোরগুলির জন্য ইনপুট স্ট্রিং সন্ধান করে এবং প্রতিটিটির জন্য একটি ম্যাচ অবজেক্ট প্রদান করে, যেখানে প্রথম ক্যাপচারিং বন্ধনীগুলি রেখার পূর্ববর্তী অংশটি রেখেছে যেখানে আন্ডারস্কোরটি পাওয়া গেছে এবং দ্বিতীয় ক্যাপচারিং বন্ধনীগুলি পুরো স্ট্রিংয়ের পুরো অংশটি ধারণ করে। স্ট্রিংয়ের বাকি অংশগুলিতে অবশ্যই কমপক্ষে একটি নতুন লাইন থাকা উচিত, তাই আমরা স্থল স্তরে আন্ডারস্কোরগুলি গণনা করি না। দ্য:exhaustiveপতাকা ওভারল্যাপ এইসব ম্যাচ পারেন।
  • .sort(*[0].chars)প্রতিটি আন্ডারস্কোরের পূর্ববর্তী লাইনের অংশের অক্ষরের সংখ্যা অনুসারে এই ম্যাচ অবজেক্টগুলিকে সাজান। এটি তাদের বাম থেকে ডানে আদেশ দেয়।
  • .map(+*[1].comb("\n"))ইনপুট স্ট্রিংয়ের অংশের প্রতিটি আন্ডারস্কোরকে অনুসরণ করে যে অংশটি নিউলাইন অক্ষরের সংখ্যাতে প্রতিটি ম্যাচ অবজেক্টকে মানচিত্র করে - যা উচ্চতা। \nএক বাইট সংরক্ষণ করার সময় একটি প্রকৃত newline অক্ষর হয়।

0

পিএইচপি, 119 বাইট

function($s){$r=array_map(null,...$s);foreach($r as$k=>&$v)if($v=array_count_values($v)['|'])echo($v+$r[$k+2]=0)." ";};

এই ভাঙ্গা যাক! আমাদের ইনপুটটি এখানে অক্ষরের 2D অ্যারে।

$r=array_map(null,...$s) // Neat little snippet to transpose the array

foreach($r as$k=>&$v)    // Loop through the array, grabbing each row of our 2D array 
(which is now each column of the monolith)

if($v=array_count_values($v)['|']) // Count the number of '|' characters in the column 
(which is the height of our monolith), and if it's greater than 0 (truthy in PHP)...

echo($v+$r[$k+2]=0)." "; // Output that number, and simultaneously set the row 2 indices
                            down to null (to remove duplicate values)

-1

একটি বহু লাইন স্ট্রিং লাগে। সেটআপের জন্য শিরোনাম (শিরোনাম এবং পাদচরণ) @ গ্যারেথপিডাব্লুতে যায়

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

lambda s:len(s.split('\n'))-1

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

এটি সহজেই নিউলাইন দ্বারা অ্যারেটিকে বিভক্ত করবে এবং দৈর্ঘ্য -1 প্রদান করবে।


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