Zainspirowany tym wyzwaniem .
Cel:
Biorąc pod uwagę wstępnie skonfigurowaną centralę i listę indeksów, odwróć przełączniki przy podanych indeksach.
Rozdzielnica składa się z pewnej liczby przełączników ( v
lub ^
) owiniętych w -
i rozmieszczonych w rzędach o różnej długości. Oto przykładowa centrala:
-v-^-v-
-^-v-
-v-^-v-
Aby odwrócić / przerzucić środki przełączające zmieniając go od v
do ^
, lub od ^
do v
.
Przełączniki są indeksowane od lewej do prawej, od góry do dołu. Np. W powyższym przykładzie ostatni v
w pierwszym rzędzie byłby w pozycji 3, a ^
w środkowym rzędzie miałby 4 (przy użyciu indeksowania 1).
Wkład:
- Ciąg (lub lista ciągów) reprezentujący centralę. Gwarantowane jest dopasowanie do wyrażenia regularnego
((-[v^])+-)(\n(-[v^])+-)*
. - Prawdopodobnie pusta lista liczb reprezentujących indeksy, może być zindeksowana 0 lub 1 (lub dowolna liczba dowolna). Są to przełączniki, które należy przełączyć.
Wydajność:
- Tablica rozdzielcza w tym samym kształcie co wejście z określonymi przełącznikami odwróconymi. Wszelkie nieokreślone przełączniki powinny zachować swój stan początkowy.
Zasady:
- Dane wejściowe zawsze będą poprawnie sformatowane i żadne podane indeksy nie będą poza zakresem.
- Lista indeksów zostanie posortowana i nie będzie miała duplikatów.
- Podaj w swojej odpowiedzi, jakiego indeksowania używasz, czy to 0, 1, czy jakiś dowolny.
- Końcowe białe znaki są w porządku, o ile dane wyjściowe wyglądają jak dane wejściowe.
- To jest golf golfowy, więc wygrywa najkrótszy kod.
Przykłady:
#Using 1-indexing
input: #Empty Case
[],
-v-^-v-
output:
-v-^-v-
input: #Single switch
[1],
-v-
output:
-^-
input: #Skip a line
[3,5],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-v-
-v-^-
input: #Flip one in each line + number wrap
[3,4,6],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-^-
-^-v-
input: #Flip 'em all
[1,2,3,4,5,6],
-^-v-v-
-v-
-^-^-
output:
-v-^-^-
-^-
-v-v-
>"-"
: Ponieważ gwarantowany jest ciąg wejściowy-
, możesz sprawdzić parametr / argument / nazwę zmiennej, której używasz do tego.Odpowiedzi:
Vim,
60, 46, 38, 37 bajtów / naciśnięć klawiszy<esc>
i<C-r>
oba mają 1 bajt / naciśnięcie klawisza. Licznik bajtówPrzypadek testowy 1 (tryb pełny)
Przypadek testowy 2 (tryb pełny)
Dzięki Grimy za pomysły, które doprowadziły do zmniejszenia 22 bajtów :)
źródło
:s/\%V./\='v^'[submatch(0)=='v']
byćcl<C-R>='v^'['<C-R>"'=='v']
na -13 bajtów? (każdy <CR> to tylko jeden bajt).s == cl
tak-14
ogólnie.s^v!<Esc>?\<C-R>"<CR>xhf!x
lubs<CR>^v<Esc>:s/\V<C-R>"<CR>kgJ
.-
, więc to naprawdę działa! Duh.JavaScript,
6359 bajtówWypróbuj online!
Zaoszczędź 4 bajty dzięki Arnauldowi .
źródło
K (oK) ,
3127 bajtówRozwiązanie:
Wypróbuj online!
Wyjaśnienie:
Szybka odpowiedź, spróbuje zagrać w golfa. 0-indeksowane.
Uwagi:
>93
trickowiźródło
Python 3 ,
140134103 bajtów(-30 dzięki DJMcMayhem ♦, -1 więcej dzięki Black Owl Kai)
Wypróbuj online!
O, druga próba gry w golfa w ogóle. To po prostu używa raczej niewyszukanej pętli w ciągu, używając
x
do śledzenia bieżącego indeksu przełącznika. Wykorzystuje indeksowanie 1.Nie golfowany:
źródło
Galaretka , 12 bajtów
Pełny program akceptujący ciąg i listę liczb całkowitych, które wypisują wynik.
Wypróbuj online!
W jaki sposób?
źródło
Python 3.8 (wersja wstępna) ,
80,78,77,71, 70 bajtów-1 bajt, dzięki @Shaggy
Wypróbuj online!
źródło
c>s
zapisuje bajt.Perl 6 , 31 bajtów
Wypróbuj online!
(-2 bajty dzięki Jo King)
Operator podstawienia w Perlu 6
S
dogodnie przyjmujenth
przysłówek, który akceptuje nie tylko jeden indeks, przy którym ma zostać wykonana zamiana, ale listę ich, dokładnie tak, jak jest to potrzebne tutaj.Zamiennikiem jest
$/ ~^ '('
, gdzie$/
dopasowany tekst (albov
lub^
),~^
jest ciągowym operatorem wyłączności lub operatorem i(
jest znakiem, którego bity zamieniająv
się^
i odwrotnie.źródło
MATL , 29 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki tekstowe .
Dane wejściowe to tablica komórek zawierająca ciągi i wektor wierszy liczb z indeksowaniem 1. Wyjście jest wyściełane spacją.
źródło
Python 2 ,
1059791 bajtówWypróbuj online!
6 bajtów zapisywane przez
kradzieżz użyciem transformaty Fouriera Rin „sc>'-'
zamiastc in'^v'
.0
-indexed.źródło
Galaretka , 14 bajtów
Wypróbuj online!
Pełny program
To wydaje się zbyt długie ...
źródło
”-
nazwą pierwszego argumentu (³
?), Który na pewno zaczyna się od-
litery?>
wektoryzuje. Można zobaczyć, że to nie działa .³
:⁴
,⁵
,⁶
i⁷
, po raz pierwszy do piątego CLA odpowiednio. Możesz przeczytać stronę Atomy, aby dowiedzieć się, czy istnieje określona funkcja wbudowana.Stax , 13 bajtów
Uruchom i debuguj
Korzysta z indeksów opartych na 0.
[v^]
.40
. Jestxor('v', '^')
.źródło
Czysty , 93 bajty
Wypróbuj online!
Definiuje funkcję
$ :: [Int] -> [Char] -> [Char]
pobierającą listę indeksów o indeksie zerowym i zwracającą funkcję, która pobiera ciąg i zwraca zmieniony ciąg.źródło
JavaScript (Node.js) ,
1019893917767 bajtówWypróbuj online!
10 bajtów, dzięki za sugestie autorstwa Shaggy .
Port mojej odpowiedzi w języku Python . Nie przyzwyczajony do gry w golfa javascript!
źródło
V , 20 bajtów
Wypróbuj online!
Wykorzystuje kilka nowych funkcji, takich jak
Ñ
, która jest niezwykle przydatna.źródło
JavaScript, 111 bajtów
Kod
Pobiera dane wejściowe w formacie f (x) (y), gdzie x to wskaźniki, a y to tablica rozdzielcza. Indeksy są indeksowane 0
Wypróbuj online!
Wyjaśnienie
Dla każdego indeksu
konstruuj wyrażenie regularne, które znajdzie indeks + 1-ty „^” lub „v”
wstaw go do ciągu, aby zastąpić go przeciwnym symbolem „v” <-> „^”
następnie oceń ciąg jako funkcję
Po iteracji po indeksach, aby przełączyć, zwróć tablicę rozdzielczą
źródło
Galaretka , 17 bajtów
Wypróbuj online!
Pełny program przyjmujący indeksy jako pierwszy i ciąg znaków jako drugi argument. Drukuje wydruk z zaznaczonymi przełącznikami.
źródło
Retina 0.8.2 ,
6662 bajtówWypróbuj online! Link zawiera przypadek testowy. 1-indeksowany. Wyjaśnienie:
Konwertuj liczby wejściowe na unary.
Transliterate pomiędzy
v
i^
wszystkie znaki z własności, że liczbav
S i^
S tak daleko (włącznie) równa się jeden z numerów wejściowych.Usuń wprowadzone liczby.
źródło
Węgiel , 23 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. 0-indeksowane. Wyjaśnienie:
źródło
Rubinowy , 56 bajtów
1-indeksowany.
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 73 bajty
Wypróbuj online!
źródło
Japt , 15 bajtów
Spróbuj
źródło
Japt ,
1614 bajtówSpróbuj
źródło
:D
)