Biorąc pod uwagę pozycję z rzędem wież i / lub pustych przestrzeni, wypisz ile różnych ruchów wież jest możliwych. Wieża może przesunąć się w lewo lub w prawo na puste miejsce, ale nie na takie, które wymaga przejścia przez inną wieżę. Kiedy wieża się porusza, pozostałe wieże pozostają na swoim miejscu.
Na przykład z tej pozycji możliwe jest 6 ruchów :
.R..RRR.
- Pierwsza (lewa skrajna) wieża może przesunąć się o 1 pole w lewo lub 1 lub 2 pola w prawo (3 ruchy)
- Następna wieża może przenieść tylko 1 lub 2 pola do końca (2 ruchy)
- Trzecia wieża w ogóle się nie porusza, ponieważ jest wciśnięta między dwie inne wieże (0 ruchów)
- Ostatnia wieża może przesunąć tylko 1 pole w prawo (1 ruch)
Zauważ, że pozycja może w ogóle nie mieć wież lub w ogóle nie mieć pustych miejsc.
Dane wejściowe: niepusta lista (łańcuch, tablica itp.) Wież i pustych spacji. Możesz przedstawić je jako True
/ False
, 1
/ 0
, 'R'
/ '.'
lub dowolne dwa spójne odrębne jednobajtowe znaki lub jednocyfrowe liczby do wyboru. Od Ciebie zależy, która z nich oznacza wieżę, a która pustą przestrzeń.
Dane wyjściowe: nieujemna liczba całkowita. Również liczby zmiennoprzecinkowe są w porządku.
Przypadki testowe
Dane wyjściowe to liczba po lewej stronie.
6 .R..RRR.
0 .
0 R
4 R..RR
3 ...R
8 ..R..R..
0 ......
Aby uzyskać więcej przypadków testowych, tutaj są wszystkie dane wejściowe do długości 5.
0 .
0 R
0 ..
1 .R
1 R.
0 RR
0 ...
2 ..R
2 .R.
1 .RR
2 R..
2 R.R
1 RR.
0 RRR
0 ....
3 ...R
3 ..R.
2 ..RR
3 .R..
3 .R.R
2 .RR.
1 .RRR
3 R...
4 R..R
3 R.R.
2 R.RR
2 RR..
2 RR.R
1 RRR.
0 RRRR
0 .....
4 ....R
4 ...R.
3 ...RR
4 ..R..
4 ..R.R
3 ..RR.
2 ..RRR
4 .R...
5 .R..R
4 .R.R.
3 .R.RR
3 .RR..
3 .RR.R
2 .RRR.
1 .RRRR
4 R....
6 R...R
5 R..R.
4 R..RR
4 R.R..
4 R.R.R
3 R.RR.
2 R.RRR
3 RR...
4 RR..R
3 RR.R.
2 RR.RR
2 RRR..
2 RRR.R
1 RRRR.
0 RRRRR
Python 3 ,
3029 bajtówWypróbuj online!
-1 bajt dzięki @JoKing
Funkcja pobiera ciąg bajtów Python jako dane wejściowe. Każde puste miejsce jest kodowane jako tabulator, a każda wieża jest kodowana jako bajt
b'\x00'
mający wartość0
.Obliczenia są równoważne z
lambda s:(s+s).strip().count(b'\t')
mniejszą liczbą bajtów.źródło
JavaScript (ES6),
3833 bajtówZaoszczędź 5 bajtów dzięki @JoKing
Pobiera dane wejściowe jako ciąg. Oczekuje miejsca na pusty kwadrat i każdą inną postać na wieżę.
Wypróbuj online!
Skomentował
Python 2 ,
4033 bajtówZaoszczędź 7 bajtów dzięki @Grimy
Wypróbuj online!
źródło
count
zamiastsplit
( TIO )Japt , 5 bajtów
Spróbuj
źródło
Perl 6 , 16 bajtów
Wypróbuj online!
Wyrażenie regularne, które pasuje do wszystkich wyczerpujących wystąpień wież, po których występują spacje lub spacje, po których następuje wieża, i zwraca liczbę dopasowań.
źródło
05AB1E , 5 bajtów
Wypróbuj online!
źródło
Siatkówka ,
2315 bajtówDwukrotnie spacja między wieżami, linie grep z co najmniej jedną wieżą, a następnie policz liczbę spacji.
Wypróbuj online!
Chociaż program używa spacji zamiast kropek, dodałem kod prefiksu, aby podane przypadki testowe można było łatwo wkleić i użyć.
Miałem nadzieję, że uda mi się użyć nakładających się meczów
(?<=R.*) | (?=.*R)
, ale nakładanie się nie jest aż tak agresywne. Musi liczyć wszystkie możliwe sposoby uzyskania dopasowania, aby zwrócić prawidłowy wynik za pomocą tej metody.źródło
.R.R.R.
chociaż zmiana pierwszej liniiR.+R
może pomóc?Galaretka , 6 bajtów
Wypróbuj online!
Monadyczny link pobierający listę
0
forów i1
spacji i zwracający liczbę całkowitą z liczbą ruchów. Link TIO pobiera wklejoną listę możliwych tablic podanych w pytaniu, konwertuje do odpowiedniego formatu, a następnie wyświetla obliczone i poprawne odpowiedzi.Wyjaśnienie
źródło
Japt , 6 bajtów
Miejsca na spacje, każda inna postać dla wież.
Spróbuj
źródło
Ślimaki, 7 bajtów
Przynajmniej bije Retinę :)
Wypróbuj online!
źródło
Galaretka , 5 bajtów
Wypróbuj online!
-1 dzięki Jonathan Allan .
0
reprezentują wieżę,1
reprezentują pustą przestrzeń.źródło
Ẉ
tej piątki:ḲẈ+ƝS
Ẉ
aleṣ0
zamiastStax ,
765 bajtówUruchom i debuguj
Użyj tabu dla pustego kwadratu i dowolnej innej postaci dla wieży.
źródło
C (brzęk) , 57 bajtów
Wypróbuj online!
Uświadomiłem sobie, że to nie działa na puste listy .. Teraz to działa! Plus zaoszczędziłem trochę bajtów!
1 = wieża. 0 = spacja.
for (.. i + = n ++? - i: 1) // zlicza spacje lub resetuje dodatkowe ruchy => i = - ~ i ! * n ++ (@ceilingcat)
o + = * n? r = 1, i: r; // dodaje do wyniku -i- (dodatkowe ruchy), gdy wieża jest spełniona plus zestawy -r- (wieża spełniona), -i- zostanie wyczyszczone w celu zwiększenia zdania.
dodaje -r- do każdego miejsca (gwarantowane spełnienie wieży)
źródło
Haskell , 36 bajtów
Wypróbuj online!
Używa 1 do pustej przestrzeni, 0 do wieży. Zlicza liczbę jedynek nie w początkowym bloku jedynek i dodaje ją do wyniku dla odwróconego ciągu.
źródło
Haskell , 33 bajty
Wypróbuj online!
Anonimowa funkcja, która przyjmuje dane wejściowe jako listę 1s (spacje) i 0s (gawrony). Spowoduje to przycięcie spacji od początku i końca listy, a następnie połączy dwie wersje listy i zsumuje je.
Wykorzystuje GHC 8.4.1 lub nowszy, aby mieć dostęp do
<>
operatora bez importowania go.źródło
Python 2 , 59 bajtów
Wypróbuj online!
źródło
Japt , 6 bajtów
Wypróbuj online
źródło
Wolfram Language (Mathematica) ,
4338 bajtówWypróbuj online!
Rozwiązanie Port of Neil's Retina . Używa 1 dla spacji i 0 dla wież.
źródło
Haskell ,
685854 bajtówWypróbuj online!
źródło
Czerwony , 46 bajtów
Wypróbuj online!
Tylko czerwony port rozwiązań JavaScript / Python firmy Arnauld . Zajmuje miejsce jako pusty kwadrat.
źródło
Java 11,
3532 bajtówPort odpowiedzi @Joel na Python 3 .
-3 bajty również dzięki @Joel .
Używa NULL-bytes (
\0
) dla wież i tabs (\t
) dla spacji.Wypróbuj online.
Próbowałem użyć
s->(s+s).trim().chars().sum()/9
początkowo jako 31-bajtowego, ale to nie działa, ponieważString#trim
wbudowane nie tylko usuwa początkowe i końcowe spacje / tabulatory / nowe linie, ale także wszystkie inne bajty, które są mniejsze lub równeU+0020
(Unicode 32; spacja) , więc będzie to usunąć NULL bajty jak dobrze ..Dzięki Joel polecając mi nową Java 11+
String#strip
polecenie wbudowane (które zapomniałem dodali) jako alternatywa. Ten usuwa również części końcowe / wiodące, ale w tym przypadku tylko białe znaki , więc zachowane są bajty NULL.Wyjaśnienie:
źródło
String.strip()
na usuwanie tylko białych znaków: 32 bajtyPerl 5
-MList::Util=sum -pF/R/
, 40 bajtówWypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 27 bajtów
Zapisano bajt dzięki @someone
Wypróbuj online!
źródło
Stax ,
76 bajtów-1 bajt dzięki rekurencyjnemu
Uruchom i debuguj
źródło
v
, co pozwoli ci zaoszczędzić bajt.Befunge-98 (PyFunge) , 73 bajty
Wypróbuj online!
źródło
C ,
1831561511379691 bajtówDzięki pułapowi catcat za 91 bajtów.
R to wieża, wszystko inne to przestrzeń.
TIO
źródło
82
lub'R'
krótszy do użyje+e*d
niże*(1+d)
,e=0,d=1;else e++; can be changed to
e = -1, d = 1; e ++;, and
b [a] `ib[++a]
mogą być zastąpione przez*b
i*++b
Pyth , 7 bajtów
Wypróbuj online!
Pobiera ciąg znaków
R
dla wież,(spacja) dla pustych miejsc
źródło
x86-64 - 26 bajtów
Dane wejściowe to tablica zawierająca do 32 bitów i liczba całkowita reprezentująca liczbę kwadratów, 1 reprezentuje wieżę, 0 oznacza pustą.
Kopiuje bity, tak aby były dodawane po lewej stronie i usuwa końcowe bity zerowe. Następnie pobiera liczbę wiodących zerowych bitów i odejmuje ją od całkowitej liczby zerowych bitów.
x86-64 Kod maszynowy - 22 bajty - tylko szeregi szachowe zwykłej długości.
Dane wejściowe to 32-bitowa liczba całkowita z najmniej znaczącym bajtem złożonym z 8 bitów reprezentujących wieże. 1 to wieża, 0 jest pusta.
Kopiuje bity do następnego znaczącego bajtu i usuwa końcowe bity zerowe. Następnie pobiera liczbę wiodących zerowych bitów i odejmuje ją od całkowitej liczby zerowych bitów.
źródło