Jak wysokie są monolity?

29

Oto przykład wprowadzenia monolitów . W tym przykładzie są 4.

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

Pierwszy monolit ma 4 jednostki wysokości, drugi 2, trzeci 3, a ostatni 1.

Zadanie

Twój program powinien wyświetlać wysokości monolitów w kolejności od lewej do prawej. Format wyjściowy może mieć dowolną listę lub tablicę.

Notatki

  • Dane wejściowe można traktować jako dowolny ciąg wymiarowy, listę ciągów lub listę znaków.
  • To jest , więc wygrywa najmniej bajtów .
  • Zakładasz, że monolity zawsze mają tę samą szerokość i zawsze znajdują się w odległości przynajmniej 1 _od siebie.
  • Mogą występować na dowolnej wysokości i w dowolnej ilości.

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]
Grawiton
źródło
2
Czy mogę założyć, że dane wejściowe są odpowiednio wypełnione spacjami?
isaacg
17
Czy twój [10]monolit nie jest [11]?
TessellatingHeckler
Czy niezdefiniowana nie byłaby tylko pustą tablicą?
Solomon Ucko
@isaacg tak, to by było w porządku
Graviton
@ SolomonUcko technicznie tak, choć dla uproszczenia wszystkich języków postanowiłem nie zajmować się nimi.
Graviton

Odpowiedzi:

15

Galaretka , (8?) 9 bajtów

Ỵ=”|Sḟ0m2

Łącze monadyczne akceptuje listę znaków zgodnie z określeniem i zwraca listę liczb całkowitych.

Uwaga: 8 bajtów, jeśli lista ciągów, po jednym w wierszu, naprawdę miała być dozwolonym formatem wejściowym - wystarczy usunąć plik .

Wypróbuj online!

W jaki sposób?

Ỵ=”|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
źródło
Nie wiem, ale czy to w porządku?
V. Courtois,
1
@ V.Courtois Nie rozumiem, dlaczego nie, ponieważ prawdopodobnie nigdy nie uzyskamy takiego wkładu.
Erik the Outgolfer,
Okej, ponieważ widziałem, że inne odpowiedzi biorą to pod uwagę
V. Courtois
2
@ V.Courtois, który zasugerowałeś, nie pasuje do specyfikacji, podobnie dodanie podkreślników na niebie, monolitów w części wysokości lub pod ziemią prawdopodobnie złamałoby wiele innych zgłoszeń.
Jonathan Allan
Obniżający głos - czy zechciałbyś wyjaśnić swoje powody?
Jonathan Allan
8

Galaretka , 11 bajtów

ỴṚZi€”_ỊÐḟ’

Wypróbuj online!

Erik the Outgolfer
źródło
Wow, odpowiedziałeś tak szybko.
Graviton
@Graviton Hehe zawsze należy gdzieś otworzyć tę stronę . ;)
Erik the Outgolfer
14
Wyjaśnienie, proszę!
Kudłaty
6

JavaScript (ES6), 79 78 bajtów

-1 bajt dzięki @Shaggy

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

Pobiera dane wejściowe jako tablicę ciągów.

Test Snippet

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
źródło
1
78 bajtów:a=>a.map((x,y)=>x.replace(/_/g,(_,z)=>c[z]=a.length-y-1),c=[])&&c.filter(n=>n)
Shaggy
@Shaggy Nice, zupełnie nie myślałem o użyciu replace. Dzięki!
Justin Mariner
6

C ++, 171 169 bajtów

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

Wypróbuj online!

C ++ (GCC), 150 bajtów

Dzięki @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<<" ";}}

Wypróbuj online!

Steadybox
źródło
1
Jeśli używasz g ++, możesz użyć niestandardowego f(auto s)i określić, że bierze on dowolny kontener o swobodnym dostępie z kontenerów o swobodnym dostępie char.
aschepler
5

05AB1E , 11 bajtów

|Rζ'_δkJ®0‚K

Wypróbuj online!

ζzostał zastąpiony przez .BøTIO, ponieważ nie został jeszcze tam pobrany.

Erik the Outgolfer
źródło
5

Dyalog APL, 29 bajtów

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

Uruchom z ⎕IO←0.

Wypróbuj online!

W jaki sposób?

⌽⍵='_'- gdzie jest '_', najpierw górne linie

×- pomnożyć przez ...

(⍳≢⍵)- zakres (indeksowany od zera)

↑¨ - dla każdej linii pad z zerami przez ...

(⌈/⍴¨⍵) - maksymalna długość

↑+/ - zsumuj rzędy spakowane i spłaszczone

0~⍨ - usuwa zera

Uriel
źródło
5

PowerShell, 133 bajty

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

Wygląda na to, że nie jest zbyt konkurencyjny; dokonuje wyrażenia regularnego, aby zamienić wieże w kolumny 1, tworzy tablicę 0 o długości ciągu wejściowego, a następnie przechodzi przez linie sumujące jedynki.

Testy gotowe do uruchomienia:

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


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

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


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

$s5 = @'
     _       _       _       _       _ 
 _  | |  _  | |  _  | |  _  | |  _  | |
| |_| |_| |_| |_| |_| |_| |_| |_| |_| | 
'@-split"`r?`n"
TessellatingHeckler
źródło
4

Japt , 11 bajtów

z ·mb'_ fw0

Przetestuj online!

Wyjaśnienie

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
ETHprodukcje
źródło
4

Retina , 48 38 bajtów

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

Wypróbuj online! Link zawiera pierwszy przykład. Objaśnienie: Przedrostek zawiera linię, która zbierze wyniki. Ponieważ każda kolumna jest kolejno usuwana, w kolumnach zawierających _poziom gruntu zliczana jest liczba pozostałych linii w kolumnie. Na koniec usuwane są teraz puste linie. Edycja: Zapisano 10 bajtów dzięki inspriation z @FryAmTheEggman.

Neil
źródło
Fajnie, miałem nieco krótsze rozwiązanie , ale nie zadziałałoby przy dużych nakładach, ponieważ zepsułoby to moją zdolność do ich sortowania. Przechodzenie kolumna po kolumnie to dobry sposób, aby tego uniknąć!
FryAmTheEggman
@FryAmTheEggman Przełączyłem się na twoją metodę liczenia linii za pomocą _s, co ma o wiele większy sens niż próba użycia |s, dzięki!
Neil
@FryAmTheEggman Nie rozwiązuje problemu, ale etap sortowania można uprościć, upuszczając wygląd i sortowanie $.%`, a końcowym etapem może być !`\d+. A jeśli zmienisz pierwszy etap na wyprzedzający, nie musisz zapętlać.
Martin Ender
@FryAmTheEggman A oto poprawka do twojego podejścia, ale kończy się na 46 bajtach.
Martin Ender
@MartinEnder 45 może? Wypróbuj online!
Neil
4

Java 8, 133 117 116 114 bajtów

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

Pobiera dane wejściowe jako (← zapisuje 16 bajtów). -2 bajty w zamian za mniej czytelny wynik dzięki @ OlivierGrégoire poprzez zmianę na .String[] char[][]
print(l-j+",")println(l-j)

Wyjaśnienie:

Wypróbuj tutaj.

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
źródło
Jeszcze tego nie próbowałem, ale moim pomysłem na to wyzwanie było przejście od góry do dołu i sprawdzenie, _czy znaleziony sklep to jego lokalizacja, a następnie zamówienie, ignorując dolny wiersz. Może pomóc zaoszczędzić bajty ...
TheLethalCoder
@TheLethalCoder To była również moja pierwsza myśl, ale gdzie chcesz ją przechowywać / zamówić? Początkowo myślałem, że mapa, ale te nie są posortowane, więc będziesz potrzebować LinkedMap. W mojej głowie wszystko brzmiało trochę za dużo bajtów, ale jeśli możesz znaleźć sposób na osiągnięcie tego krótszego niż to, nie krępuj się opublikować odpowiedź, a ja ją +1. :)
Kevin Cruijssen
Udało mi się sprowadzić go tylko do 150 za pomocą Linq, ale powinno być jeszcze miejsce na grę w golfa.
TheLethalCoder
W języku C # mamy wielowymiarowe tablice, takie jak: new[,]zamiast poszarpanej tablicy, której używasz jako new[][]. Jeśli masz to w Javie, możesz zaoszczędzić trochę bajtów.
TheLethalCoder
1
System.out.println(l-j);wygląda na tyle, że mogę zaoszczędzić 2 bajty. Ponadto w wyjaśnieniu zapomniałeś zmienić length()na length(brak występowania w liczbie bajtów, ponieważ jest poprawny w przesyłaniu).
Olivier Grégoire,
3

Haskell, 75 74 bajty

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

Dane wejściowe są oczekiwane jako lista ciągów (wierszami).

Siracusa
źródło
Po co używać średnika po imporcie, gdy nowa linia ma tę samą długość i jest bardziej idiomatyczna?
Jules
@Jules: Tak, zwykle robię
siracusa
3

Rubinowy , 82 bajty

Pobiera listę linii.

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

Wypróbuj online!

Wartość tuszu
źródło
3

APL (Dyalog) , 14 bajtów

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

z ⎕IO←0

Wypróbuj online!


Ta funkcja pociągu odpowiada {((⍳≢⍵)+.×('_'=⊖⍵))~0}

TwiNight
źródło
3

C #, 150 144 137 bajtów

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)

Wersja pełna / sformatowana:

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
źródło
3

Java 8 - 229 bajtów 213 bajtów

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

Wypróbuj online!

Nie golfowany:

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, pierwszy post. Każda pomoc w jego ulepszeniu byłaby świetna. Ja wiem, mogę się pozbyć, że indexOfnapisany dwa razy. Wiedział! Zastanawiałem się nad pomysłem zmiany typów na mapie z Integer na Long, ale myślę, że to ślepy zaułek.


Wiem, że istnieje już znacznie, znacznie lepsze rozwiązanie Java 8 , ale wymaga to char[][]danych wejściowych, które moim zdaniem są łatwiejsze w tym przypadku niż String.

Michał
źródło
1
Nie uwzględniono importów (są one wymagane w przypadku odpowiedzi Java). Nie używaj Mapale int[](może zainicjować new int[99]?). Nie ma potrzeby wstawiania spacji po String[] l: String[]ldziała tak samo i jest krótszy. Użyj println(l.length-i-1)zamiast println(l.length-i-1+","). Nie initialize j: Wystarczy napisać: ,j;. Jeśli używasz int[]sugerowanej wcześniej opcji, zadeklaruj w ten sposób: int m[]=new int[99],i=0,j;i usuń deklarację z for-loop.
Olivier Grégoire,
1
OlivierGrégoire rzeczywiście ma rację co do wymaganego importu mapy. Jak z jakiegoś golfa aktualnego kodu na mapie, można zmienić go na to: 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);}. Nie trzeba używać <Integer,Integer>mapy, gdy można ją przesyłać int; a.length-1jest używany dwukrotnie, więc możesz dla niego użyć zmiennej; umieszczając wszystko w pętlach for, możesz pozbyć się wszystkich nawiasów. Witaj w PPCG! :)
Kevin Cruijssen
@KevinCruijssen Thanks! Konwersja zawartości pierwszej pętli for na bezcielesną pętlę była inspirująca! Super sprytny.
Michael
@Michael Nie ma za co. :) Aha, a jeśli jeszcze tego nie widziałeś: Porady dotyczące gry w golfa w Javie i Porady dotyczące gry w golfa w <wszystkich językach> mogą być interesujące do przeczytania. Bardzo mi pomógł, kiedy zaczynałem (i nadal czasem).
Kevin Cruijssen
3

MATL , 10 bajtów

ooYssqtO>)

Dane wejściowe to matryca znaków.

Wypróbuj online!

zlewka
źródło
2

Mathematica, 48 47 39 bajtów

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

Wypróbuj online!

Functionktóry oczekuje prostokątnego zestawu znaków. Pobiera Mosttablicę (wszystkie oprócz ostatniego wiersza), Reverses to, następnie bierze Transpose*, a następnie znajduje wszystkie Positions, w których _pojawia się znak. Odpowiednie wysokości są Lastelementami każdego z nich Position.

* to 3bajtowy prywatny znak U+F3C7reprezentujący \[Transpose]Mathematica. Zauważ, że to nie działa w Mathics , więc link TIO po prostu używa Transpose.

ngenisis
źródło
2

SOGL V0.12 , 9 bajtów

I{ _WH╥?O

Wypróbuj tutaj!
Pobiera dane wejściowe jako tablicę tablic ciągów znaków (znaków).

Wyjaśnienie:

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
źródło
2

JavaScript (ES6), 108 104 88 bajtów

Zaoszczędź 16 bajtów dzięki @JustinMariner

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

Dane wejściowe są traktowane jako tablica ciągów

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
źródło
88 bajtów tutaj
Justin Mariner
Dzięki @JustinMariner! Jestem podekscytowany inicjalizacją zmiennej jako Array.mappodaniem nieużywanych parametrów , to fajna sztuczka.
alexanderbird
Czy naprawdę musisz przypisać RegEx do zmiennej? Możesz użyć go bezpośrednio w execi zaoszczędzić kilka bajtów.
Kudłaty
W rzeczywistości jest to konieczne - pętla while wykonuje iterację po każdym dopasowaniu w linii i bez wewnętrznego stanu wyrażenia regularnego w zmiennej za każdym razem pasowałaby do pierwszego wystąpienia i zapętlała się w nieskończoność. Każda iteracja tworzyłaby nowe wyrażenie regularne, więc execpasowałaby do pierwszej. W rzeczywistości powoduje awarię edytora fragmentów wymiany stosów, jeśli wstawisz wyrażenie regularne. Chyba że coś mi umknie?
alexanderbird
@shaggy Zapomniałem oznaczyć Cię tagiem w moim ostatnim komentarzu
alexanderbird
2

CJam, 15 14 bajtów

1 bajt zapisany dzięki @BusinessCat

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

Jest to blok, który pobiera tablicę ciągów ze stosu i wysyła tablicę.

Wyjaśnienie:

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
źródło
Możesz zapisać 1 bajt, odwracając całą tablicę przed transpozycją.
Business Cat
1

Pip , 18 17 bajtów

15 bajtów kodu, +2 dla -rpflag.

_FI_@?'_MRVgZDs

Pobiera dane wejściowe ze standardowego wejścia. Wypróbuj online!

Wyjaśnienie

                 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
źródło
1

Pyth , 19 15 14 bajtów

f>T0mx_d\_.tQd

Przetestuj online! Dane wejściowe to lista linii.

Objaśnienia

          .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
źródło
1

Perl 6 , 65 bajtów

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

Wypróbuj online!

  • m:exhaustive/^^(\N+)_([\N*\n]+:)/przeszukuje ciąg wejściowy pod kątem wszystkich znaków podkreślenia i zwraca obiekt dopasowania dla każdego, w którym pierwsze nawiasy przechwytujące zawierają poprzednią część wiersza, w którym znajduje się znak podkreślenia, a drugie nawiasy przechwytujące zawierają całą resztę ciągu. Reszta ciągu musi zawierać co najmniej jedną nową linię, więc nie liczymy znaków podkreślenia na poziomie gruntu. :exhaustiveFlaga pozwala te mecze do nakładania.
  • .sort(*[0].chars)sortuje te dopasowane obiekty według liczby znaków w części wiersza poprzedzającej każdy znak podkreślenia. To porządkuje je od lewej do prawej.
  • .map(+*[1].comb("\n"))odwzorowuje każdy obiekt dopasowania na liczbę znaków nowego wiersza w części ciągu wejściowego na końcu każdego podkreślnika - to znaczy na wysokość. \nJest rzeczywisty znak nowej linii, oszczędzając jeden bajt.
Sean
źródło
0

PHP, 119 bajtów

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

Rozwalmy to! Nasz wkład tutaj to tablica znaków 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)
Xanderhall
źródło
-1

Pobiera wieloliniowy ciąg. Podziękowania za konfigurację (nagłówek i stopkę) należą do @GarethPW

Python 2 , 29 bajtów

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

Wypróbuj online!

To po prostu podzieli tablicę według nowej linii i zwróci długość-1.

emtree
źródło
To nie spełnia całego wyzwania. Musisz zwrócić tablicę lub listę ze wszystkimi wysokościami, a nie tylko najwyższymi.
Scott Milner