(Losowo inspirowany https://codegolf.meta.stackexchange.com/a/17272/42963 )
Biorąc pod uwagę prostokątną matrycę cyfr (tj. 0 - 9
), Wyślij „części” matrycy tak, jakby cyfry były połączone razem, tworząc jeden element, w porządku rosnącym według cyfr. Elementy są gwarantowane, że łączą się tylko prostopadle - żaden element nie połączy się po przekątnej. Zawsze będzie maksymalnie 10 sztuk (tj. 3
Kawałek nie pojawi się dwukrotnie w tej samej matrycy).
Na przykład biorąc pod uwagę macierz
0 1 1 1
0 0 1 2
3 3 2 2
następujące elementy i przykładowe dane wyjściowe:
0
0 0
1 1 1
1
2
2 2
3 3
Odstępy są ważne, aby zachować kształt elementów, ale elementy niekoniecznie wymagają wewnętrznych odstępów. Same elementy powinny jakoś zostać rozróżnione w spójny sposób (np. Nowa linia między elementami, upewniając się, że każdy ma inny charakter itp.). Dodatkowo, zewnętrzne białe znaki (na przykład końcowe znaki nowej linii lub wiodące kolumny) są niedozwolone. Na przykład poprawne byłyby również:
0
00
111
1
2
22
33
lub
#
##
###
#
#
##
##
Ale nie byłoby (zwróć uwagę na końcowe spacje za 0
):
0
0 0
Obroty lub odbicia są również niedozwolone. Na przykład wyprowadzanie
1
111
dla powyższej macierzy jest również nieprawidłowa.
Elementy matrycy mogą mieć otwory lub być tylko jednym elementem:
0 0 0 1
0 2 0 1
0 0 0 3
Lub kawałek może być całą matrycą:
0 0 0
0 0 0
Oto większy, bardziej skomplikowany przypadek testowy:
1 1 1 1 1 2 2
3 4 4 4 2 2 2
5 5 4 4 2 0 0
5 6 6 6 6 7 7
5 6 8 8 6 6 7
9 6 6 6 7 7 7
I przykładowy wynik:
00
11111
22
222
2
3
444
44
55
5
5
6666
6 66
666
77
7
777
88
9
Reguły i I / O
- Dane wejściowe i wyjściowe można podać dowolną dogodną metodą .
- Możesz wydrukować go do STDOUT lub zwrócić jako wynik funkcji.
- Dopuszczalny jest pełny program lub funkcja.
1
Wymagana jest wiodąca biała spacja, aby zachować kształt (np. Kształt litery „T” w przykładzie), spójna biała spacja, aby odróżnić elementy, i dozwolona jest pojedyncza nowa linia na końcu, ale żadna inna biała spacja nie jest dozwolona.- Możesz bezpiecznie założyć, że elementy są ponumerowane w
0
sposóbN
ciągły, co oznacza, że (na przykład)3
nie zostanie pominięty w sześcioczęściowej matrycy. - Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
-1
lub spacją reprezentującą pustą spację lub brak elementu, jeśli to możliwe)?0
jako wartość wypełniająca? Tak więc każdy kawałek byłby wyprowadzany z resztą wartości w macierzy ustawioną na0
-1
lub innej wartości zamiast niczego / białych znaków nie byłoby jednak w porządku.' '
w takim przypadku należy użyć spacji ( )?Odpowiedzi:
05AB1E ,
2019 bajtów-1 bajt dzięki @ Mr.Xcoder .
Wyświetla listy 2D elementów (ze
1
znakami spacji" "
) na nowy wiersz.Wypróbuj online lub sprawdź wszystkie przypadki testowe lub wydrukuj wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Haskell,
133132129 bajtówPobiera macierz jako listę ciągów znaków i zwraca listę ciągów znaków.
Wypróbuj online!
źródło
Galaretka , 18 bajtów
Wypróbuj online!
Zwraca listę elementów, gdzie
1
reprezentuje część elementu i' '
jest wypełnieniem. Końcowe' '
s są usuwane.źródło
ẎQ=€
powinien zrobić, chociaż potrzebujemy utworów w porządku rosnącym, więc9Ż=€
(chyba że nie możemy w tym przypadku uwzględniać „utworów nieistniejących”ẎQṢ=€
)9Ż=€
że nie zadziała (myślę, że „obce białe znaki [...] są niedozwolone” obejmują również tablice, dlatego przycinam).Python 3 ,
271209206183176172191 bajtówWypróbuj online!
Edycja: Trochę porządków i -5 dzięki @ Jonathan Frech .
Edycja:
-3-26 jeszcze raz dzięki @ Jonathan Frech .Edycja: -7 ponownie dzięki @ Jonathan Frech .
Edycja: +19: Jak zauważył @ nimi poprzednio wyjście miało niepoprawny format.
Dane wejściowe są macierzą jako lista list:
Dane wyjściowe to lista matematyki:
Nie golfowany:
źródło
Python 2 ,
173172165 bajtówWypróbuj online!
-15 bajty z obserwacji przez Nimi .
W formie programu przyjmuje jako dane wejściowe listę list pojedynczych znaków; drukuje elementy znalezione przy użyciu ich postaci.
źródło
C # (.NET Core) ,
258, 238 bajtówBez LINQ.
EDYCJA: Embodiment Of Ignorance wskazując lepsze deklaracje var! Ty ty.
Wypróbuj online!
źródło
Python 2 , 291 bajtów
Wypróbuj online!
Oczekuje, że dane wejściowe będą rozdzielane cudzysłowem żądłem. Pół-niedorzeczny procent kodu jest przeznaczony do obsługi danych wejściowych niepodzielonych spacją / spacji.
Bez golfa Objaśnienie:
źródło
Siatkówka , 75 bajtów
Wypróbuj online! Wyjaśnienie:
Dodaj cyfrę do wejścia. To reprezentuje licznik pętli. Nowa linia upraszcza końcowe usuwanie białych znaków.
Wstrzymaj domyślne wyjście i powtórz dokładnie 10 razy.
Przesuń cyfrę w pętli.
Wyprowadza wynik pozostałej części skryptu, ale następnie przywraca bufor.
Zamień wszystkie cyfry, które nie pasują do cyfry pętli, spacjami. (Ponieważ używa to lookahead i nie ma nic do patrzenia w tym momencie, to również zastępuje cyfrę pętli).
Usuń wszystkie końcowe białe znaki.
Usuń wszystkie puste linie.
Powtarzaj tak długo, jak żadna linia nie zaczyna się od cyfry ...
... usuń pierwszy znak w każdej linii.
Jeśli pozostało coś, dodaj nową linię, aby oddzielić każdy kształt od następnego. (Ma to na celu uniknięcie zbłąkanych linii dla brakujących cyfr).
źródło
Węgiel drzewny , 43 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Przeczytaj dane wejściowe do tablicy. (Można to usunąć, gdybym użył brzydkiego formatu wejściowego.)
Pętla powyżej 10 cyfr.
Uzyskaj wiersze zawierające te cyfry.
Sprawdź, czy cyfra została faktycznie znaleziona (aby zapobiec generowaniu fałszywych znaków nowej linii).
Wyłącz automatyczne wypełnianie.
Pętla nad znalezionymi wierszami.
Pętla nad każdą kolumną ...
... jeśli bieżący znak wejściowy jest równy cyfrze bieżącej pętli, wydrukuj go, w przeciwnym razie przesuń kursor w prawo.
Przejdź na początek następnego rzędu. Używanie takich poleceń ruchu pozwala węgiel drzewny przyciąć wyjście po obu stronach.
Zrzuć i wyczyść płótno gotowe na następną cyfrę. Pozwala to różnym cyfrom przycinać różne cyfry.
Wypróbowałem podejście programowe, ale ważyło 47 bajtów, chociaż
Equals
wektoryzacja byłaby również 43 bajtami przez krótki czas :Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Wyłącz automatyczne wypełnianie.
Przeczytaj dane wejściowe do tablicy.
Pętla powyżej 10 cyfr.
Porównaj każdy znak z danymi wejściowymi i utwórz tablicę boolowską, ale następnie odfiltruj wiersze bez dopasowań.
Pętlę nad pozostałymi wierszami i odcinać od najwcześniejszego dopasowania w dowolnym wierszu do najnowszego dopasowania w bieżącym wierszu, a następnie odwzorować tablicę boolowską z powrotem na cyfry lub spacje, które są następnie domyślnie drukowane jako tablica ciągów.
źródło
Język Wolfram 101 bajtów
Musi istnieć o wiele bardziej skuteczny sposób na osiągnięcie tego.
źródło
Perl 5, 97 bajtów
TIO
Wyjaśnienie
źródło
APL (Dyalog Unicode) , 38 bajtów SBCS
Anonimowa ukryta funkcja prefiksu. Bierze macierz liczbową jako argument i zwraca listę ciągów list. Każda lista ciągów reprezentuje element z oddzielonymi spacjami
1
s. Wiodące i wewnętrzne (ale nie końcowe) spacje to spacje.Wypróbuj online!
∪∘,
unikalne elementy matrycy ravela (spłaszczonej)⊂{
…}¨
Dla każdego z nich jako⍵
wywołaj następującą funkcję z całą macierzą jako⍺
:⍺=⍵
wskaż, gdzie znajduje się numer tego elementu w matrycy⊢
dochód, (wydzielane2
z⍺
){
…}⍣2
Zastosuj następującą funkcję dwa razy (⍵
jest to macierz boolowska):∨/
maska dla wierszy z co najmniej jednym1
(podświetlona redukcja OR dla rzędów )⍵⌿⍨
użyj tego do filtrowania wierszy⍉
transponuj (więc robimy to również w kolumnach, a następnie transponujemy z powrotem)' '@~
zamień na spacje w pozycjach, gdzie nie (tj. gdzie0
)⍕
format jako macierz znaków↓
podzielony na listę ciągów' +$'⎕R''
PCRE zastępuje końcowe spacje (dowolna liczba spacji, po których następuje koniec linii) niczymźródło
Japt , 29 bajtów
Wypróbuj online!
Zaktualizowano w celu zapewnienia zgodności z bardziej rygorystycznym formatowaniem wyjściowym.
Wyprowadza jako listę elementów, przy czym każdy element jest reprezentowany przez listę linii, używając 2 jako znaku wypełniającego.
Wyjaśnienie:
źródło
false
z wewnętrznych list. Tutaj jest pastebin, dzięki czemu mogę lepiej wyjaśnić, co powinno być wynikiem. Nie wahaj się poprosić OP o wyjaśnienie, ale, o ile rozumiem z wyzwania, wszystkie końcowe białe znaki nie powinny być w ogóle w wynikach.Python 3 , 133 bajty
Wypróbuj online!
Bierze ciąg rozdzielony znakiem nowej linii, zwraca listę ciągów rozdzielonych znakiem nowej linii. Używa się,
textwrap.dedent
aby pozbyć się wiodących miejsc.źródło
Galaretka , 19 bajtów
Wypróbuj online!
Monadyczny link przyjmujący macierz jako dane wejściowe i zwracający listę jednej obdartej listy na sztukę. Stopka ładnie to pokazuje, ale myślę, że wyjście bez tego jest zgodne z regułami pytań.
źródło