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 golf golfowy , 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]
[10]
monolit nie jest[11]
?Odpowiedzi:
Galaretka , (8?) 9 bajtów
Łą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?
źródło
Galaretka , 11 bajtów
Wypróbuj online!
źródło
JavaScript (ES6),
7978 bajtów-1 bajt dzięki @Shaggy
Pobiera dane wejściowe jako tablicę ciągów.
Test Snippet
źródło
a=>a.map((x,y)=>x.replace(/_/g,(_,z)=>c[z]=a.length-y-1),c=[])&&c.filter(n=>n)
replace
. Dzięki!C ++,
171169 bajtówWypróbuj online!
C ++ (GCC), 150 bajtów
Dzięki @aschepler!
Wypróbuj online!
źródło
f(auto s)
i określić, że bierze on dowolny kontener o swobodnym dostępie z kontenerów o swobodnym dostępiechar
.05AB1E , 11 bajtów
Wypróbuj online!
ζ
został zastąpiony przez.Bø
TIO, ponieważ nie został jeszcze tam pobrany.źródło
Dyalog APL, 29 bajtów
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łaszczone0~⍨
- usuwa zeraźródło
Python 2 , 75 bajtów
Wypróbuj online!
źródło
PowerShell, 133 bajty
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:
źródło
Japt , 11 bajtów
Przetestuj online!
Wyjaśnienie
źródło
Retina ,
4838 bajtówWypró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.źródło
_
s, co ma o wiele większy sens niż próba użycia|
s, dzięki!$.%`
, a końcowym etapem może być!`\d+
. A jeśli zmienisz pierwszy etap na wyprzedzający, nie musisz zapętlać.Java 8,
133117116114 bajtówPobiera 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.
źródło
_
czy znaleziony sklep to jego lokalizacja, a następnie zamówienie, ignorując dolny wiersz. Może pomóc zaoszczędzić bajty ...new[,]
zamiast poszarpanej tablicy, której używasz jakonew[][]
. Jeśli masz to w Javie, możesz zaoszczędzić trochę bajtów.System.out.println(l-j);
wygląda na tyle, że mogę zaoszczędzić 2 bajty. Ponadto w wyjaśnieniu zapomniałeś zmienićlength()
nalength
(brak występowania w liczbie bajtów, ponieważ jest poprawny w przesyłaniu).Haskell,
7574 bajtyDane wejściowe są oczekiwane jako lista ciągów (wierszami).
źródło
Rubinowy , 82 bajty
Pobiera listę linii.
Wypróbuj online!
źródło
APL (Dyalog) , 14 bajtów
z
⎕IO←0
Wypróbuj online!
Ta funkcja pociągu odpowiada
{((⍳≢⍵)+.×('_'=⊖⍵))~0}
źródło
MATL , 12 bajtów
Dane wejściowe to macierz
;
znaków , z separatorem wierszy.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
źródło
C #,
150144137 bajtówWersja pełna / sformatowana:
źródło
Java 8 -
229 bajtów213 bajtówWypróbuj online!
Nie golfowany:
Woo, pierwszy post. Każda pomoc w jego ulepszeniu byłaby świetna.
Ja wiem, mogę się pozbyć, żeWiedział! Zastanawiałem się nad pomysłem zmiany typów na mapie z Integer na Long, ale myślę, że to ślepy zaułek.indexOf
napisany dwa razy.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.źródło
Map
aleint[]
(może zainicjowaćnew int[99]
?). Nie ma potrzeby wstawiania spacji poString[] l
:String[]l
działa tak samo i jest krótszy. Użyjprintln(l.length-i-1)
zamiastprintln(l.length-i-1+",")
. Nie initializej
: Wystarczy napisać:,j;
. Jeśli używaszint[]
sugerowanej wcześniej opcji, zadeklaruj w ten sposób:int m[]=new int[99],i=0,j;
i usuń deklarację zfor-loop
.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-1
jest 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! :)MATL , 10 bajtów
Dane wejściowe to matryca znaków.
Wypróbuj online!
źródło
Mathematica,
484739 bajtówWypróbuj online!
Function
który oczekuje prostokątnego zestawu znaków. PobieraMost
tablicę (wszystkie oprócz ostatniego wiersza),Reverse
s to, następnie bierzeTranspose
*, a następnie znajduje wszystkiePosition
s, w których_
pojawia się znak. Odpowiednie wysokości sąLast
elementami każdego z nichPosition
.*
to3
bajtowy prywatny znakU+F3C7
reprezentujący\[Transpose]
Mathematica. Zauważ, że to nie działa w Mathics , więc link TIO po prostu używaTranspose
.źródło
SOGL V0.12 , 9 bajtów
Wypróbuj tutaj!
Pobiera dane wejściowe jako tablicę tablic ciągów znaków (znaków).
Wyjaśnienie:
źródło
JavaScript (ES6),
10810488 bajtówZaoszczędź 16 bajtów dzięki @JustinMariner
Dane wejściowe są traktowane jako tablica ciągów
źródło
Array.map
podaniem nieużywanych parametrów , to fajna sztuczka.exec
i zaoszczędzić kilka bajtów.exec
pasował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?CJam,
1514 bajtów1 bajt zapisany dzięki @BusinessCat
Jest to blok, który pobiera tablicę ciągów ze stosu i wysyła tablicę.
Wyjaśnienie:
źródło
Pip ,
1817 bajtów15 bajtów kodu, +2 dla
-rp
flag.Pobiera dane wejściowe ze standardowego wejścia. Wypróbuj online!
Wyjaśnienie
źródło
Pyth ,
191514 bajtówPrzetestuj online! Dane wejściowe to lista linii.
Objaśnienia
źródło
Oktawa, 31 bajtów
Pobiera na wejściu tablicę znaków 2D.
Sprawdź wszystkie przypadki testowe!
źródło
Perl 6 , 65 bajtów
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.:exhaustive
Flaga 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ść.\n
Jest rzeczywisty znak nowej linii, oszczędzając jeden bajt.źródło
PHP, 119 bajtów
Rozwalmy to! Nasz wkład tutaj to tablica znaków 2D.
źródło
Pobiera wieloliniowy ciąg. Podziękowania za konfigurację (nagłówek i stopkę) należą do @GarethPW
Python 2 , 29 bajtów
Wypróbuj online!
To po prostu podzieli tablicę według nowej linii i zwróci długość-1.
źródło