Twoim dzisiejszym wyzwaniem jest pobranie ciągu wielowierszowego i wyprowadzenie największego kwadratu zawartego w ciągu, który zawiera lewy górny róg.
Ciąg kwadratowy to taki, w którym:
- Każda linia ma taką samą liczbę znaków
- Liczba znaków w każdej linii jest równa liczbie linii.
Rozważ następujący możliwy ciąg wejściowy:
abcde
fgh
asdf
foobar
Największy kwadrat, jaki możesz z niego wziąć, zawierający pierwszą postać ( a
w lewym górnym rogu) to:
abc
fgh
asd
Nie może być kwadratu o boku 4, ponieważ druga linia nie jest wystarczająco długa. Teraz rozważ ten potencjalny wkład:
a
bcd
edf
ghi
Największy plac tutaj jest sprawiedliwy a
. Utworzony na dole kwadrat 3x3 nie zawiera pierwszego znaku i się nie liczy.
Oto kilka innych przypadków testowych:
a
a
abc
def
gh
ab
de
ab
cd
ab
cd
abcde
fghij
klm
no
abc
fgh
klm
a
b
a
Możesz wymagać ograniczenia danych wejściowych przez wybór LF, CR lub CRLF.
Znaki nowego wiersza nie są uważane za część długości linii.
Możesz wymagać, aby na wejściu pojawiał się znak nowej linii, ale nie jest to dodatkowy wiersz.
Dane wejściowe to tablica znaków lub 1D; nie jest to lista ciągów.
Możesz założyć, że dane wejściowe są niepuste, a wszystkie wiersze są niepuste i że zawiera tylko drukowalny kod ASCII, w tym spacje i znaki nowej linii (dla separatora linii), ale nie tabulatory.
To jest golf golfowy , wygrywa najmniej bajtów!
.split('\n')
więc nie rozumiem, dlaczego niektórzy powinni go otrzymać za darmo.Odpowiedzi:
Brachylog , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
ṁ
Wbudowane narzędzie jest naprawdę przydatne!Łuska , 13 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
GNU sed ,
106 + 194 + 2 = 96 bajtów+2 bajty dla
-rz
flag. Wykorzystuje znaki niedrukowalne NUL i BEL, pokazane jako@
i#
tutaj. Zobacz poniżej zrzut xxd.Dzięki @seshoumara za wysłanie mnie ścieżką do
-z
.Wypróbuj online!
Wyjaśnienie
Działa to poprzez wstawienie do tekstu dwóch kursorów - jednego do przejścia przez linie i jednego do przejścia przez kolumny. Kursory są reprezentowane odpowiednio przez NUL (0x00) i BEL (0x07), ale w poniższych przykładach użyję
@
i#
. Załóżmy, że mamy następujące dane wejściowe:Kursor BEL jest wstawiany przed 0 kolumną, a kursor BEL przed 0 linią (tutaj kolumny zostały wyrównane dla czytelności, ale w rzeczywistości nie ma lewej dopełnienia):
W pętli kursory są przesuwane odpowiednio o jeden znak w prawo i jeden wiersz w dół:
Po każdej iteracji sprawdza dwa warunki:
Jeśli którykolwiek z warunków jest fałszywy, pętla kończy się. Skrypt kończy się usunięciem wszystkiego po
@
w każdej linii i wszystkiego po#
w obszarze wzorców.zrzut xxd
źródło
line1\nline2\nline3
gdzie\n
jest\x5C\x6E
? Który?\n
jest interpretowany jako znak nowej linii (\x0A
, nie\x5C\x6E
) i nie mogę znaleźć sposobu, aby sed mógł wprowadzić dane za pomocą znaków nowej linii jako pojedynczą linię.-z
flagę. Dzięki!Python 2 , 81 bajtów
Wypróbuj online!
Ciekawa metoda, ale o 2 bajty dłużej.
Python 2 , 83 bajty
Wypróbuj online!
źródło
input
czyta tylko jednej linii?raw_input()
dodałby więcej bajtów.JavaScript (ES6), 77 bajtów
Rekurencyjnie używa wyrażenia regularnego do wyszukiwania coraz większego kwadratu, dopóki nie zostanie znaleziony.
Wyrażenie regularne byłoby takie dla kwadratu 3x3:
Dane wejściowe mają się kończyć znakiem nowej linii, a dane wyjściowe to lista.
Wyjaśnienie:
Skrawek:
Pokaż fragment kodu
źródło
Brachylog , 16 bajtów
Wypróbuj online!
źródło
Perl 5 , 84 bajtów
Wypróbuj online!
Spełnia
"abcde\nfghij\nklm\nno"
przypadek testowy.źródło
chop
zamiastchomp
i++$i<@a
zamiast$i++<$#a
R ,
84838176 bajtów-5 bajtów przyłączeniowym podejście Dennisa z
sum
Wypróbuj online!
czyta ze standardowego, drukuje na standardowe bez końcowego nowego wiersza.
Nieznacznie nie golfista:
źródło
C (gcc) ,
162159151147144142137 bajtówGra w golfa wymaga uderzeń ...
Wypróbuj online!
źródło
!=-1
być>-1
lub niegetchar()
wartości wyjściowe mniejsze niż minus jeden? Czy to w ogóle może być+1
?~
do wykrycia minus jeden.Galaretka , 15 bajtów
Wypróbuj online!
Jak to działa
źródło
Java 8, 150 bajtów
Wyjaśnienie:
Wypróbuj tutaj.
źródło
MATL , 33 bajty
Wypróbuj online!
Mój paskudny zmysł mówi mi, że prawdopodobnie jest krótsza droga (myślę, że coś jest
Ybo
od samego początku) ... Wymaga nowej linii na końcu. (Uwaga: trochę to przeprojektowałem, ponieważ poradzi sobie również z pustymi liniami, co nie jest wymagane. Zobaczę, czy mogę zmniejszyć liczbę bajtów, ponieważ w kodzie golfowym nie jest to cecha, ale błąd)źródło
Python 2 , 132 bajty
Wypróbuj online!
źródło
Python 2 , 103 bajty
Wypróbuj online!
źródło
JavaScript (ES6), 95 bajtów
Wymaga wejścia nowego wiersza w danych wejściowych.
źródło
Wolfram Language (Mathematica) , 81 bajtów
Wypróbuj online!
źródło
APL (Dyalog) , 25 bajtów *
Funkcja ukrytego przedrostka. Zwraca macierz.
Wypróbuj online!
Jest to naprawdę jedna z dwóch niezależnych funkcji, a mianowicie ta,
⎕AV[3]∘≠⊆⊢
która zajmuje się niezręcznym formatem wejściowym i↑↑⍨2⍴(⌊/≢,≢¨)
która wykonuje naprawdę interesującą pracę.⎕AV[3]∘≠
Różnica w LF (trzeci element A TOMIC V wtryskiwacza - zestaw znaków)⊆
partycje (podciągi zaczynające się od wartości większych niż ich poprzednik i upuszczane w 0)⊢
argument(
…)
Zastosuj następującą funkcję ukrytą:2⍴(
…)
Przekształć następujące elementy w długość 2:⌊/
minimum≢
liczba ciągów,
śledzony przez≢¨
liczba znaków w każdym ciągu↑⍨
weź tyle wierszy i kolumn z↑
sznurki zmieszane razem, tworząc matrycę (wypełnienie spacjami)* W klasycznym z
⎕ML
( M igration L evel)3
(domyślnie w wielu systemach) i zastępując⊂
do⊆
i⊃
w skrajnej lewej↑
. Tio!źródło
⎕ML←3
są przestarzałe, więc wolę pokazać język w normalnym stylu. W rzeczywistości prawie wszystkie moje rozwiązania APL Dyalog zakładają Classic tylko dlatego, że liczymy bajty zamiast znaków, chociaż nawet wersja Unicode przypisuje znaczenie mniej niż 256 znaków.PHP, 123 bajty
wymaga PHP 5.4, 5.5 lub 5.6. wymienić
split
zexplode
do późniejszego PHP.Uruchom
php -nr '<code> '<string>'
lub wypróbuj online . (Upewnij się, że wybierasz odpowiednią wersję PHP!)
źródło
Haskell ,
9288 bajtówWypróbuj online!
źródło
Perl 5, 60 +5 (-0777p) bajtów
Wypróbuj online
źródło
-0777
. Co zresztą robią-00
i-0777
robią.-0
jest określenie separatora rekordów w formacie ósemkowym777
jest specjalną wartością wskazującą brak separatora, więc cały plik jest czytany,0
jest kolejną specjalną wartością wskazującą „tryb akapitowy”, separator jest więcej niż 1 kolejnąPerl 6 ,
158140 bajtówWypróbuj online!
Brawo dla mojej pierwszej odpowiedzi w Perlu 6. Będę się bawić z kilkoma opcjami wiersza poleceń, aby sprawdzić, czy mogę trochę więcej zagrać w golfa. Zapraszamy do pomocy w oszczędzaniu bajtów!
źródło
Scala , 201 bajtów
Wypróbuj online!
Po raz pierwszy gra w golfa w tym języku, więc może nie jest najlepszy.
źródło