Biorąc pod uwagę ciąg znaków składający się w całości z q
s reprezentujących ćwierćnuty e
si reprezentujących ósme nuty, wyprowadzaj indeksy ćwierćnuty, które są zsynchronizowane.
Synchronizacja jest złożona, ale na potrzeby tego wyzwania nasza definicja „synchronizacji” będzie bardzo prosta: ćwierćnuta rozpoczynająca się od „off-beat” - to znaczy, uderzenia liczone jako „i” w n / 4 czas.
Może to być alternatywnie zdefiniowane jako dowolna ćwierćnuta poprzedzona nieparzystą liczbą ósmych nut. Na przykład notatki oznaczone *
poniżej są uważane za zsynchronizowane, a ich indeksy są również wyświetlane:
eqqeqqeqqe
** **
12 78
Output: 1 2 7 8
Dane wejściowe zawsze będą składały się z całej liczby taktów w czasie 4/4 (ćwierćnuta to ćwierć taktu, a ósma nuta to ósma taktu). (Dane wejściowe również nigdy nie będą puste.) Dane wyjściowe mogą być pojedynczym ciągiem znaków z elementami oddzielonymi dowolnym separatorem, który nie zawiera liczb lub tablicy / listy / itp. Dane wyjściowe mogą być oparte na 1 (tzn. Pierwszy indeks to 1 zamiast 0), jeśli chcesz, i może być również w dowolnej bazie liczbowej (jednostkowa, dziesiętna itp.).
Ponieważ jest to code-golf , wygrywa najkrótszy kod w bajtach.
Przypadki testowe:
In Out
-----------------------------------------------
eqqqe 1 2 3
qeqeq 2
qqqeqqeeeeqeqeqeqqeqqeqq 4 5 10 14 19 20
eeeeeqeeqeeqqqqeqeqeeqe 5 8 11 12 13 14 18 21
qqqq <none>
eeeeeeee <none>
'eqqqe'
zamiasteqqqe
Odpowiedzi:
Galaretka ,
129 bajtówJako program powyższy kod wymaga cudzysłowu wokół danych wejściowych. Ponieważ nie jest to dozwolone, jest to przesyłanie funkcji. Dane wyjściowe są oparte na 1.
Wypróbuj online!Jak to działa
Aktualizacja
Powyższy kod nie działa już w najnowszej wersji Jelly, ponieważ potrzebujemy znaku e , ale
“e”
daje ciąg znaków. Naprawa, która oszczędza bajt, w sumie 8 bajtów .Działa to jako pełny program. Wypróbuj online!
źródło
Ruby, 46
Wejście do standardowego wejścia. Wyjście na standardowe wyjście, oddzielone znakiem nowej linii.
Skomentował
źródło
JavaScript ES7,
5048 bajtówKrótko mówiąc o JS, jeśli mnie pytasz.
[for...of]
Składnia, w zasadzie połączona mapa i filtr, jest przydatna w przypadku tego wyzwania.Definiuje anonimową funkcję, która generuje tablicę 1-indeksowaną.
Testowy fragment kodu
Korzysta z niezgolfowanej wersji kodu ES7'd.
źródło
J,
20 1917 bajtówDzięki randomra za uratowanie bajtu i Dennisowi za uratowanie dwóch. Jest to bezimienny czasownik monadyczny, używany w następujący sposób:
Wypróbuj tutaj.
Wyjaśnienie
źródło
GNU grep,
3 + 17 = 203 + 15 = 18 bajtówProgram wymaga opcji
boP
. Kod jestZapisz jako
synco
, a następnie uruchom jakogrep -boPf synco
.Po separatorze wyjściowym
:q
następuje nowa linia. Np. Wyjściemeqqqe
jestZnaczenia flag to:
P
: Użyj wyrażeń regularnych PCRE.o
: Oznacza to, że wypisuje tylko tę część wiersza, która pasuje do wyrażenia regularnego, ale nie dlatego jest to ważne.o
jest używany, ponieważ pozwala na wielokrotne dopasowanie w linii.b
: Wydrukuj przesunięcie w bajtach początku każdego dopasowania od początku pliku.Wzór sprawdza, czy po ćwierćnecie nie ma parzystej liczby ósemek.
źródło
grep
kwalifikuje się jako język? Niezależnie od tego +1 za świetną odpowiedźMATL , 12
1416bajtówPodziękowania dla Dennisa za usunięcie 2 bajtów (i za hosting MATL-a na jego niesamowitej platformie online!)
Używa bieżącej wersji (9.3.0) języka / kompilatora.
Wejście i wyjście odbywa się poprzez standardowe wejście i standardowe wyjście. Wynik jest oparty na 1.
Przykład :
Lub wypróbuj online!
Wyjaśnienie
źródło
Python 2,
9485797566 bajtówEDYCJA: Dzięki Doorknob i Alex A.
EDYCJA: Dzięki Alex A.
EDYCJA: Teraz używa input (), więc wejście musi być ciągiem z cudzysłowami.
EDYCJA: Dzięki Zgarb za zalecenie, abym użył wyliczenia.
Po prostu liczy liczbę e, a jeśli q, sprawdź, czy liczba e jest nieparzysta, a następnie wydrukuj indeks.
Wypróbuj tutaj
źródło
if ...
tylko”,else
aby zaoszczędzić 8 bajtów.print
1 bajcieelse: if e%2:
sprawiedliwyelif e%2:
.i[j]<"q"
zamiasti[j]=="e"
.Haskell,
5851 bajtówPrzykład użycia:
f "eeeeeqeeqeeqqqqeqeqeeqe"
->[5,8,11,12,13,14,18,21]
.Przejrzyj listę i wypisz bieżący indeks
i
dla każdego znaku,'q'
jeśli przed nim jest nieparzysta liczba'e'
s.źródło
Minkolang 0,15 , 28 bajtów
Wypróbuj tutaj.
Wyjaśnienie
źródło
C (funkcja), 65
Dzięki @Dennis za dodatkowe gry w golfa!
źródło
i,n;f(char*m){for(i=n=0;*m;m++,i++)*m&4?++n:n%2?printf("%d ",i):0;}
powinien działać.Python 3,
109958090887668676664 bajtówLiczy liczbę
q
sie
si dodaje indeks prądu,q
jeśli liczba poprzedzającyche
s jest nieparzysta.Edycja: Teraz wypisuje listę indeksów s, które poprzedzają je
q
nieparzystą liczbąe
s. Osiem bajtów zaoszczędzonych dzięki Klamce i dwa kolejne dzięki Feersum .Nie golfowany:
źródło
input
iprint
?enumerate
niżrange(len(...
.JavaScript ES6,
636058 bajtówAnonimowa funkcja generująca tablicę. Dziękujemy użytkownikowi 81655 za zapisanie dwóch bajtów. Oto wersja bez golfa, która wykorzystuje lepiej obsługiwaną składnię.
źródło
Mathematica, 76 bajtów
Zauważyłem coś interesującego. Wszystkie zsynchronizowane części są formalne
eqqq..qqe
, więc po prostu je wykrywam i podam wskaźnikiq
s.źródło
Japt,
292321 bajtówJuż nie konkuruje!
Wypróbuj online!
Jak to działa
Wersja niekonkurencyjna, 18 bajtów
Wypróbuj online!
źródło
Befunge, 43 bajty
Wypróbuj online!
Wyjaśnienie
Zaczynamy od dwóch domyślnych zer na stosie: numer nuty i liczba uderzeń.
źródło