Wie groß sind die Monolithen?

29

Hier ist ein Beispiel für die Eingabe von Monolithen . In diesem Beispiel gibt es 4.

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

Der erste Monolith ist 4 Einheiten hoch, der zweite ist 2, der dritte ist 3 und der letzte ist 1.

Die Aufgabe

Ihr Programm sollte die Höhen der Monolithen in der Reihenfolge von links nach rechts ausgeben. Das Ausgabeformat kann eine beliebige Liste oder ein beliebiges Array sein.

Anmerkungen

  • Die Eingabe kann als eine beliebige dimensionale Zeichenfolge, eine Liste von Zeichenfolgen oder eine Liste von Zeichen erfolgen.
  • Dies ist , also gewinnt das niedrigste Byte .
  • Es ist davon auszugehen, dass Monolithen immer die gleiche Breite haben und immer mindestens einen _Abstand voneinander haben.
  • Sie können in jeder Höhe und in jeder Menge kommen.

I / O

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

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


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

____________________   >> undefined behavior

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

     _       _       _       _       _
 _  | |  _  | |  _  | |  _  | |  _  | |
| |_| |_| |_| |_| |_| |_| |_| |_| |_| |  >> [1,2,1,2,1,2,1,2,1,2]
Graviton
quelle
2
Darf ich davon ausgehen, dass die Eingabe rechts mit Leerzeichen aufgefüllt ist?
Isaacg
17
Ist dein [10]Monolith nicht [11]?
TessellatingHeckler
Wäre das undefinierte nicht einfach ein leeres Array?
Solomon Ucko
@isaacg ja, das wäre in Ordnung
Graviton
@SolomonUcko technisch ja, aber um es für alle Sprachen einfacher zu machen, habe ich beschlossen, sie nicht damit zu beschäftigen.
Graviton

Antworten:

15

Jelly , (8?) 9 Bytes

Ỵ=”|Sḟ0m2

Ein monadischer Link, der eine Liste der angegebenen Zeichen akzeptiert und eine Liste der Ganzzahlen zurückgibt.

Hinweis: 8 Byte, wenn eine Liste von Zeichenfolgen (eine pro Zeile) als zulässiges Eingabeformat vorgesehen war - entfernen Sie einfach die Zeichenfolge .

Probieren Sie es online!

Wie?

Ỵ=”|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)
Jonathan Allan
quelle
Ich weiß es nicht, aber ist das okay?
V. Courtois
1
@V.Courtois Ich verstehe nicht warum nicht, da wir wahrscheinlich nie einen solchen Input bekommen werden.
Erik der Outgolfer
Okay, es ist, weil ich gesehen habe, dass einige andere Antworten es zählen
V. Courtois
2
@ V.Courtoist die Eingabe, die Sie vorgeschlagen haben, nicht mit der Spezifikation vereinbar, und das Hinzufügen von Unterstrichen am Himmel, halbhohen Monolithen oder im Untergrund würde wahrscheinlich viele andere Einreichungen zum Erliegen bringen.
Jonathan Allan
Abwähler - möchten Sie Ihre Gründe erläutern?
Jonathan Allan
8

Jelly , 11 Bytes

ỴṚZi€”_ỊÐḟ’

Probieren Sie es online!

Erik der Outgolfer
quelle
Wow, du hast so schnell geantwortet.
Graviton
@Graviton Hehe sollte man diese Seite immer irgendwo offen haben. ;)
Erik der Outgolfer
14
Erklärung bitte!
Shaggy
6

JavaScript (ES6), 79 bis 78 Byte

-1 Byte dank @Shaggy

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

Nimmt Eingaben als ein Array von Zeichenfolgen.

Testschnipsel

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>

Justin Mariner
quelle
1
78 Bytes:a=>a.map((x,y)=>x.replace(/_/g,(_,z)=>c[z]=a.length-y-1),c=[])&&c.filter(n=>n)
Shaggy
@ Shaggy Schön, ich habe überhaupt nicht daran gedacht replace. Vielen Dank!
Justin Mariner
6

C ++, 171 169 Bytes

#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<<" ";}}

Probieren Sie es online!

C ++ (GCC), 150 Bytes

Danke an @aschepler!

#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<<" ";}}

Probieren Sie es online!

Steadybox
quelle
1
Wenn Sie g ++ verwenden, können Sie das nicht standardmäßige verwenden f(auto s)und angeben, dass es einen beliebigen Container mit wahlfreiem Zugriff von Container mit wahlfreiem Zugriff von annimmt char.
Aschepler
5

Dyalog APL, 29 Bytes

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

Laufen Sie mit ⎕IO←0.

Probieren Sie es online!

Wie?

⌽⍵='_'- wo ist '_', oberste Zeile zuerst

×- mal ...

(⍳≢⍵)- der Bereich von (null indiziert)

↑¨ - Füllen Sie jede Zeile mit Nullen auf, indem Sie ...

(⌈/⍴¨⍵) - die maximale Länge

↑+/ - Summe der Zeilen mit Reißverschluss und Abflachung

0~⍨ - Entfernt Nullen

Uriel
quelle
5

PowerShell, 133 Byte

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

Sieht aus wie es nicht sehr wettbewerbsfähig ist; Es wird ein regulärer Ausdruck ersetzt, um die Türme in Spalten von 1 zu verwandeln. Ein Array von 0 wird zur Länge der Eingabezeichenfolge. Anschließend werden die Zeilen schrittweise durchlaufen, wobei die Einsen addiert werden.

Tests bereit zu laufen:

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


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

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


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

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

Japt , 11 Bytes

z ·mb'_ fw0

Online testen!

Erläuterung

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
ETHproductions
quelle
4

Retina , 48 38 Bytes

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

Probieren Sie es online! Link enthält erstes Beispiel. Erläuterung: Es wird eine Zeile vorangestellt, in der die Ergebnisse erfasst werden. Da jede Spalte _der Reihe nach wiederholt gelöscht wird, wird die Anzahl der verbleibenden Zeilen in der Spalte gezählt , wenn eine oberirdische Ebene vorhanden ist. Schließlich werden die jetzt leeren Zeilen gelöscht. Bearbeiten: 10 Bytes dank Inspriation von @FryAmTheEggman gespeichert.

Neil
quelle
Gut, ich hatte eine etwas kürzere Lösung , aber sie würde bei großen Eingaben nicht funktionieren, da meine Fähigkeit, sie zu sortieren, dadurch beeinträchtigt würde. Spalte für Spalte zu gehen ist ein guter Weg, das zu vermeiden!
FryAmTheEggman
@FryAmTheEggman Ich habe auf Ihre Methode zum Zählen der Zeilen mit dem _s umgestellt, was viel sinnvoller ist, als zu versuchen, das |s zu verwenden, danke!
Neil
@FryAmTheEggman Behebt das Problem nicht, aber Ihre Sortierphase kann vereinfacht werden, indem Sie das Aussehen und die Sortierung nach löschen $.%`, und die letzte Phase kann sein !`\d+. Und wenn Sie die erste Stufe in einen Lookahead ändern, müssen Sie keine Schleife ausführen.
Martin Ender
@FryAmTheEggman Und hier ist ein Fix für Ihren Ansatz, aber es endet bei 46 Bytes.
Martin Ender
@ MartinEnder 45 vielleicht? Probieren Sie es online!
Neil
4

Java 8, 133, 117 116 114 Bytes

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+",");}}

Übernimmt die Eingabe als (← speichert 16 Bytes). -2 Bytes im Austausch für weniger lesbare Ausgabe dank @ OlivierGrégoire durch Umstellung auf .String[] char[][]
print(l-j+",")println(l-j)

Erläuterung:

Probieren Sie es hier aus.

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
Kevin Cruijssen
quelle
Ich habe es noch nicht ausprobiert, aber meine Idee für diese Herausforderung war es, von oben nach unten zu schauen, _ob der Speicherort gefunden wurde, und danach zu bestellen, wobei die unterste Reihe natürlich ignoriert wurde.
Könnte
@TheLethalCoder Das war auch mein erster Gedanke, aber wo möchten Sie es aufbewahren / bestellen? Ich dachte ursprünglich eine Karte, aber diese sind unsortiert, so dass Sie eine LinkedMap benötigen. In meinem Kopf klang alles ein bisschen zu viele Bytes, aber wenn Sie einen Weg finden, dies zu erreichen, können Sie gerne eine Antwort posten und ich werde es +1 geben. :)
Kevin Cruijssen
Mit Linq habe ich es nur auf 150 geschafft, aber es sollte noch Platz zum Golfen geben.
TheLethalCoder
In C # haben wir mehrdimensionale Arrays wie: new[,]anstelle des gezackten Arrays, das Sie als verwenden new[][]. Wenn Sie das in Java haben, könnte es Ihnen einige Bytes sparen.
TheLethalCoder
1
System.out.println(l-j);sieht listig genug für mich aus, um 2 Bytes zu sparen. Außerdem haben Sie in der Erklärung vergessen, length()in zu wechseln length(kein Einfluss auf die Anzahl der Bytes, da dies in der Übermittlung korrekt ist).
Olivier Grégoire
3

Haskell, 75 74 Bytes

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

Die Eingabe wird als Liste von Zeichenfolgen (zeilenweise) erwartet.

Siracusa
quelle
Warum nach dem Import ein Semikolon verwenden, wenn ein Zeilenumbruch gleich lang und idiomatischer ist?
Jules
@Jules: Ja, das mache ich normalerweise
Siracusa
3

Ruby , 82 Bytes

Nimmt eine Liste von Zeilen auf.

->l{l.map! &:chars;(l.pop.zip(*l).map{|s|s.join.count ?|}-[i=0]).select{0<1&i+=1}}

Probieren Sie es online!

Wert Tinte
quelle
3

APL (Dyalog) , 14 Bytes

0~⍨⍳∘≢+.×'_'=⊖

mit ⎕IO←0

Probieren Sie es online!


Dieser Funktionszug entspricht {((⍳≢⍵)+.×('_'=⊖⍵))~0}

TwiNight
quelle
3

C #, 150 144 137 Bytes

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)

Voll / Formatierte Version:

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();
    }
}
TheLethalCoder
quelle
3

Java 8 - 229 Bytes 213 Bytes

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+",");}}

Probieren Sie es online!

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 + ",");
    }
}

Woo, erster Beitrag. Jede Hilfe bei der Verbesserung wäre großartig. Ich weiß, dass ich indexOfdas zweimal loswerden kann . Wusste es! Ich spielte mit der Idee, die Typen in der Karte von Integer auf Long zu ändern, aber ich denke, das ist eine Sackgasse.


Ich weiß, dass es bereits eine viel, viel bessere Java 8-Lösung gibt , aber das ist eine char[][]Eingabe, die meiner Meinung nach in diesem Fall einfacher zu verarbeiten ist als String.

Michael
quelle
1
Sie haben die Importe nicht berücksichtigt (für Java-Antworten erforderlich). Verwenden Sie kein, Mapaber ein int[](möglicherweise initialisiert auf new int[99]?). Kein Leerzeichen danach erforderlich String[] l: Funktioniert String[]lgenauso und ist kürzer. Verwenden Sie println(l.length-i-1)anstelle von println(l.length-i-1+","). Do not initialize j: nur schreiben: ,j;. Wenn Sie ein int[]wie zuvor vorgeschlagenes verwenden, deklarieren Sie dies wie folgt: int m[]=new int[99],i=0,j;und entfernen Sie die Deklaration aus dem for-loop.
Olivier Grégoire
1
OlivierGrégoire hat in der Tat Recht mit dem für Map erforderlichen Import. Zum Golfspielen Ihres aktuellen Codes mit Map können Sie diesen folgendermaßen ändern: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);} . Keine Notwendigkeit für die <Integer,Integer>Karte, wenn Sie zu werfen können int; a.length-1wird zweimal verwendet, daher können Sie eine Variable dafür verwenden. Wenn Sie alles in for-Schleifen einfügen, können Sie alle Klammern entfernen. Oh, und willkommen bei PPCG! :)
Kevin Cruijssen
@ KevinCruijssen Danke! Das Umwandeln des Inhalts dieser ersten for-Schleife in eine körperlose for-Schleife war inspirierend! Super schlau.
Michael
@ Michael Gern geschehen. :) Oh, und wenn Sie es noch nicht gesehen haben: Tipps zum Golfen in Java und Tipps zum Golfen in <allen Sprachen> könnten interessant sein, durchzulesen. Hat mir sehr geholfen, als ich angefangen habe (und manchmal immer noch).
Kevin Cruijssen
3

MATL , 10 Bytes

ooYssqtO>)

Die Eingabe ist eine gepolsterte Zeichenmatrix.

Probieren Sie es online!

Becherglas
quelle
2

Mathematica, 48 47 39 Bytes

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

Probieren Sie es online!

Functiondas erwartet ein rechteckiges Array von Zeichen. NimmtMost das Array (alle bis auf die letzte Zeile), Reversenimmt es dann das Transpose* und findet dann alle Positions, in denen das _Zeichen vorkommt. Die relevanten Höhen sind dieLast Elemente von jedem Position.

* ist das 3Byte für den privaten Gebrauch, U+F3C7das \[Transpose]in Mathematica dargestellt wird. Beachten Sie, dass dies in Mathematik nicht funktioniert , daher der TIO-Link nur verwendet wird Transpose.

Genisis
quelle
2

SOGL V0.12 , 9 Bytes

I{ _WH╥?O

Probieren Sie es hier aus!
Nimmt Eingaben als Array von Arrays von Zeichenfolgen (Zeichen) an.

Erläuterung:

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
dzaima
quelle
2

JavaScript (ES6), 108 104 88 Byte

16 Bytes dank @JustinMariner eingespart

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

Eingabe als Array von Zeichenfolgen

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))

alexanderbird
quelle
88 Bytes hier
Justin Mariner
Danke @JustinMariner! Ich bin begeistert von der Variableninitialisierung als unbenutzte Parameter Array.map, das ist ein cooler Trick.
Alexanderbird
Müssen Sie den RegEx wirklich einer Variablen zuweisen? Sie könnten es direkt im verwenden execund ein paar Bytes sparen.
Shaggy
Tatsächlich ist es notwendig, dass die while-Schleife jede Übereinstimmung in einer Zeile durchläuft und ohne den internen Status des regulären Ausdrucks in der Variablen jedes Mal mit dem ersten Vorkommen übereinstimmt und eine Endlosschleife ausführt. Bei jeder Iteration würde ein neuer regulärer Ausdruck erstellt, execder mit dem ersten übereinstimmt. Tatsächlich stürzt der Stapelaustausch-Snippet-Editor ab, wenn Sie den regulären Ausdruck einbinden. Es sei denn, ich vermisse etwas?
Alexanderbird
@ shaggy Ich habe vergessen, dich in meinem letzten Kommentar zu markieren
alexanderbird
2

CJam, 15 bis 14 Bytes

1 Byte gespart dank @BusinessCat

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

Dies ist ein Block, der ein Array von Zeichenfolgen auf dem Stapel aufnimmt und ein Array ausgibt.

Erläuterung:

W%    e# Reverse
z     e# Zip
'_f#  e# Get the index of '_' in each element (-1 if not found)
{0>}, e# Filter where positive
Esolanging Fruit
quelle
Sie können 1 Byte sparen, indem Sie das gesamte Array vor dem Transponieren umkehren.
Business Cat
1

Pip , 18 17 Bytes

15 Byte Code, +2 für -rpFlags.

_FI_@?'_MRVgZDs

Übernimmt die Eingabe von stdin. Probieren Sie es online!

Erläuterung

                 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)
DLosc
quelle
1

Pyth , 19 15 14 Bytes

f>T0mx_d\_.tQd

Online testen! Die Eingabe ist eine Liste von Zeilen.

Erklärungen

          .tQd     # Transpose, pad with spaces
    mx_d\_         # For each line, reverse it, find the position of "_" (-1 if not found)
f>T0               # Filter on positions greater than zero
Jim
quelle
1

Perl 6 , 65 Bytes

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

Probieren Sie es online!

  • m:exhaustive/^^(\N+)_([\N*\n]+:)/Durchsucht die Eingabezeichenfolge nach allen Unterstrichen und gibt jeweils ein Übereinstimmungsobjekt zurück, wobei die ersten Erfassungsklammern den vorhergehenden Teil der Zeile enthalten, in der sich der Unterstrich befindet, und die zweiten Erfassungsklammern den gesamten Rest der Zeichenfolge enthalten. Der Rest der Zeichenfolge muss mindestens eine neue Zeile enthalten, damit die Unterstriche in Bodennähe nicht gezählt werden. Das:exhaustive Flag ermöglicht, dass sich diese Übereinstimmungen überschneiden.
  • .sort(*[0].chars)sortiert diese Übereinstimmungsobjekte nach der Anzahl der Zeichen in dem Teil der Zeile, der jedem Unterstrich vorausgeht. Dies ordnet sie von links nach rechts.
  • .map(+*[1].comb("\n"))Ordnet jedes Übereinstimmungsobjekt der Anzahl der Zeilenumbrüche in dem Teil der Eingabezeichenfolge zu, der hinter jedem Unterstrich (dh der Höhe) steht. Das \nist ein tatsächliches Newline-Zeichen, das ein Byte spart.
Sean
quelle
0

PHP, 119 Bytes

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

Lassen Sie uns das aufschlüsseln! Unsere Eingabe hier ist ein 2D-Array von Zeichen.

$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)
Xanderhall
quelle
-1

Nimmt eine mehrzeilige Zeichenfolge auf. Das Guthaben für das Setup (Kopf- und Fußzeile) geht an @GarethPW

Python 2 , 29 Bytes

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

Probieren Sie es online!

Dadurch wird das Array einfach nach Zeilenumbruch aufgeteilt und Länge-1 zurückgegeben.

emtree
quelle
Dies erfüllt nicht die gesamte Herausforderung. Sie müssen ein Array oder eine Liste mit allen Höhen zurückgeben, nicht nur mit der höchsten.
Scott Milner