Wprowadzenie
Czasami moje pudełka są zbyt małe, aby zmieścić się w czymkolwiek. Potrzebuję, żebyś zrobił ekspander pudełek! Co sprawia, że pudełko jest pudełkiem w tym wyzwaniu.
OOOO
O O
O O
O O
OOOO
Narożniki pudełka to zawsze spacje. Samo pudełko może być wykonane z tej samej postaci. Ten znak może być dowolnym drukowalnym znakiem ASCII , z wyjątkiem spacji. Oto te postacie:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Długości boków powyższego pudełka wynoszą 4, 3 . Możesz założyć, że długość boku jest zawsze dodatnia . Oznacza to, że jest to najmniejsze pudełko, z którym trzeba sobie poradzić:
#
# #
#
Aby rozwinąć pole, musisz zwiększyć długość każdej strony. Przejdźmy przez to krok po kroku z powyższym przykładem. Najpierw bierzemy górną część pudełka, która jest:
OOOO
Rozszerzamy to o jeden, dzięki czemu otrzymujemy:
OOOOO
To jest teraz górna i dolna część pudełka. Następnie robimy to samo z bokami po lewej i prawej stronie:
O
O
O
Staje się:
O
O
O
O
Teraz ponownie składamy pudełko, co powoduje:
OOOOO
O O
O O
O O
O O
OOOOO
Zadanie
Biorąc pod uwagę pole, rozwiń je o 1. Pole może być podane w wielu wierszach lub w tablicy.
Przypadki testowe
OOOO OOOOO
O O > O O
OOOO O O
OOOOO
XXXXXX XXXXXXX
X X > X X
X X X X
XXXXXX X X
XXXXXXX
~ ~~
~ ~ > ~ ~
~ ~ ~
~~
To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Odpowiedzi:
V ,
65 bajtówWypróbuj online!
Jest to w rzeczywistości bajt dłuższy niż powinien. Powinno być:
Ale to ma nieznany błąd. :(
Wyjaśnienie:
źródło
ä
jest zduplikowanym operatorem (zasadniczo „y” i „p” razem w jednym bajcie), podobnie jakäê
„zduplikowana kolumna”Vim, 7 bajtów
gdzie ♥ to Control-V.
źródło
YP
obu razy dla zachowania spójności?p
podczas nagrywania animacji, więc utknąłem przy transkrypcji odpowiedzi. Czy to ma znaczenie? > _>;<C-v> G
iYP
. To sprawia, że mój język wydaje się tani. : /JavaScript (ES6),
575352 bajtówObjaśnienie: Pierwsze wyrażenie regularne duplikuje drugą kolumnę, a drugie wyrażenie regularne duplikuje drugi wiersz, w ten sposób powiększając pole zgodnie z potrzebami. Edycja: Zapisano 4 bajty dzięki MartinEnder ♦.
źródło
Python,
4942 bajtówAnonimowa lambda:
-7 od xnor
Poprzednia wersja:
D jest funkcją, która powiela drugi element sekwencji.
źródło
lambda L:[s[:2]+s[1:]for s in L[:2]+L[1:]]
.map(D,D(s))
że zamiast tego dałbym 43Siatkówka , 20 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online! (Istnieje kilka dodatkowych wierszy, które umożliwiają zestaw testów, w których przypadki testowe są oddzielone dwoma kanałami.)
Wyjaśnienie
1
jest limitem, który ogranicza siatkówkę do stosowania substytucji tylko do pierwszego znalezionego dopasowania.¶
pasuje do pojedynczego kanału, więc musimy rozważyć zastąpienie kanału na końcu pierwszej linii. Jest zamieniany na¶$%'¶
, gdzie$%'
wstawia całą linię po dopasowaniu (element podstawienia specyficzny dla siatkówki). Zatem powiela to drugą linię.Tutaj
%
jest tryb na linię, więc każda linia jest przetwarzana osobno, a następnie linie są ponownie łączone.2=
jest również limitem. To oznacza „zastosuj zmianę tylko do drugiego meczu”. Samo dopasowanie jest prostym pojedynczym znakiem, a podstawienie go powtarza. Dlatego ten etap powiela drugą kolumnę.źródło
Haskell, 24 bajty
Wykorzystuje pomysł RootTwo polegający na powieleniu drugiego wiersza i kolumny.
map f
Czyni to każdy wiersz, af.
następnie ma to rzędów.źródło
PowerShell v2 +,
575352 bajtyNieco podobny do odpowiedzi JavaScript Neila . Pierwsza zamiana dopasowuje początek linii i dwa następne znaki i zastępuje je pierwszym znakiem i drugim znakiem dwa razy. Zamiast drugiego zastąpienia jest zamieniany na indeksowanie tablic w celu zduplikowania drugiej linii. Pobiera dane wejściowe jako tablicę ciągów. Wynikowe wycinki tablic są pozostawione w potoku i drukowanie jest niejawne.
Zaoszczędź 4 bajty dzięki Martinowi.
Kilka przykładów:
źródło
Brachylog ,
2826 bajtów2 bajty dzięki Fatalize.
Wypróbuj online!
źródło
MATL , 12 bajtów
Dane wejściowe to tablica znaków 2D z średnikiem jako separatorem wierszy. Na przykład pierwszy przypadek testowy ma dane wejściowe
Wypróbuj online! Przypadki testowe 1 , 2 , 3 .
Wyjaśnienie
Kod wykonuje następujące czynności dwa razy: powtórz drugi wiersz tablicy i transponuj.
Aby powtórzyć drugi wiersz tablicy
m
×n
, wektor[1 2 2 3 ... m]
jest używany jako indeks wiersza. Ten wektor jest generowany w następujący sposób: zasięg[1 2 3 ... m]
, dołącz inny2
, sortuj.źródło
Pyth , 10 bajtów
Wypróbuj online!
źródło
SED
69 19(14 + 1 dla -r) 15źródło
/.\(.\)/\0\1;2p
?2p
, pomyślałem, że jest na to sposób, ale nie mogłem go znaleźć. Dzięki!\0
odniesienie, ponieważ zaczynają się od 1. Instrukcja online GNU sed nic nie mówi. Jednak używanie&
jest moim zdaniem równoważne i krótsze.\0
wtedy korzystasz ?CJam , 14 bajtów
Podobnie do mojej odpowiedzi MATL , ale powtarza wiersz przedostatni zamiast drugiego.
Wypróbuj online!
Wyjaśnienie
źródło
K, 15 bajtów
Pobiera dane wejściowe jako macierz znaków:
Zastosuj funkcję dwukrotnie (
2{…}/
), która daje transpozycji (+
) prawego argumentu indeksowanego (x@
) przez przyrostowe dekodowanie długości przebiegu (&
) jednego plus (1+
) listy lokalizacji równych 1 (1=
) w zakresie od 0 do (!
) rozmiar zewnętrznego wymiaru właściwego argumentu (#x
).Krok po kroku,
Wypróbuj tutaj z ok.
źródło
APL,
1715 bajtówTest:
Wyjaśnienie:
źródło
⌽⍉
lub⊖⍉
, ale w tym przypadku nie ma to znaczenia.ListSharp , 326 bajtów
I na pewno trzeba dodać zagnieżdżania funkcji, ale działa bardzo dobrze
skomentuj, jeśli chcesz wyjaśnienia
źródło
JavaScript,
160146141 bajtówźródło
Dyalog APL , 14 bajtów
Np. Dla
znajdujemy wskaźniki; {1, 2, 3} dla wierszy i {1, 2, 3, 4} dla kolumn. Teraz upuszczamy początkowe elementy, aby uzyskać {2, 3} i {2, 3, 4}, a następnie przygotowujemy z {1, 2}, dając {1, 2, 2, 3} i {1, 2, 2, 3, 4}. Na koniec używamy tego do wybierania wierszy i kolumn, jednocześnie podwajając wiersz 2 i kolumnę 2.
Wypróbuj APL online!
źródło
Rubinowy, 46 bajtów
Bardzo proste rozwiązanie, przyjmujące dane wejściowe jako tablicę wierszy. Nie lubię duplikatów
insert
, więc spróbuję zagrać w golfa.źródło
C #,
127124 bajtówKompiluje do
Func<List<string>, List<string>>
.Wersja sformatowana:
źródło