Celowo napisany tytuł. Przeczytaj więcej, aby dowiedzieć się, dlaczego.
Twoje zadanie: mając ograniczony ciąg lub listę zawierającą znaki A,B,C,D
, wypisz indeksy wszystkich sąsiednich równych znaków. Dane wyjściowe mogą być wieloma ciągami / liczbami całkowitymi w wielu wierszach, listą / tablicą lub ciągiem rozdzielanym.
Wszystkie dane wyjściowe powinny być w postaci listy lub łańcucha lub wielu drukowanych linii. Każda drukowana linia, jeśli jest wiele, powinna zawierać tylko 1 ciąg lub liczbę. Końcowi wielorybnicy są w porządku.
Standardowe metody wejścia / wyjścia. Obowiązują standardowe luki.
Na przykład dane wejściowe 'ABCDDCBA'
powinny być wyprowadzane 3,4
lub 4,5
, w zależności od tego, czy są indeksowane od 0 do 1, ponieważ te liczby są indeksami D
i D
obok niego.
Przypadki testowe:
Przypadki testowe mają dane wejściowe podane jako pojedynczy ciąg, a dane wyjściowe jako ,
ciąg -delimitowany. Wyjścia są indeksowane 0, dodaj 1 do każdego wyprowadzanego elementu, aby uzyskać indeks 1.
Input: 'ABCDCABCD'
Output: ''
Input: 'AABBCCDD'
Output: '0,1,2,3,4,5,6,7'
Input: 'ABCDDDCBA'
Output: '3,4,5'
Input: 'ABBCDD'
Output: '1,2,4,5'
To jest golf golfowy , więc wygrywa najkrótszy kod!
3,4,4,5
ważny?AABBCD
->
1,2,3,4
Odpowiedzi:
MATL ,
87 bajtówWyjście jest oparte na 1.
Wypróbuj online!
Objaśnienie z przykładem
Rozważ wejście
'ABCDDDCBA'
.źródło
Retina ,
332923 bajtówZaoszczędzono 6 bajtów dzięki Martinowi Enderowi
Generuje listę indeksów oddzieloną od linii.
Wypróbuj online!
Wyjaśnienie
Transliteruj przebiegi tego samego znaku na dwukropki, aby zaznaczyć pozycje, w których występują zduplikowane znaki.
Następnie zamień każdy dwukropek na długość tekstu przed nim, a następnie wstaw wiersz.
Na koniec usuń wszystkie pozostałe litery.
źródło
Galaretka , 7 bajtów
Na podstawie 1; zwraca listę list przebiegów indeksów dozwolonych przez PO.
Wypróbuj online!
W jaki sposób?
źródło
ṁ
- Chciałbym, żeby 05AB1E mógł zrobić za 500.Brain-Flak ,
5746 bajtówObejmuje +2 za
-ar
Wykorzystuje indeksowanie 0.
Wypróbuj online!
źródło
Mathematica, 32 bajty
Czysta funkcja, która zwraca 1-indeksowane pozycje znaków sąsiadujących z identycznym znakiem.
Wyjaśnienie:
StringPosition["string","sub"]
podaje listę początkowych i końcowych pozycji znaków, w których"sub"
pojawia się jako podłańcuch"string"
.x_~~x_
toStringExpression
pasujący do dwóch sąsiadujących, identycznych znaków. Na przykładStringPosition["ABCDDDCBA",x_~~x_]
daje{{4, 5}, {5, 6}}
. ZastosowanieUnion
łączy listy, sortuje i usuwa duplikaty.źródło
Brain-Flak ,
69, 59, 56 bajtówWypróbuj online!
+2 bajty dla
-ar
flag, które umożliwiają wejście ASCII i odwracają stos.Wykorzystuje indeksowanie 0. Zaoszczędziłem 10 bajtów, zmniejszając moją redundancję push-pop . Zapisano kolejne 4 bajty, zmieniając indeksowanie z 1 na 0.
Jest to właściwie jedyne wyzwanie oparte na strunach, w którym dobrze sprawdza się atak mózgu. Wynika to z tego, że flakowanie mózgu świetnie sprawdza się w porównywaniu kolejnych znaków, mimo że ogólnie przerażające jest przetwarzanie ciągów znaków. Oto czytelna wersja kodu z komentarzami wyjaśniającymi, jak to działa:
źródło
-r
. To sprowadza mnie do 46.Brachylog , 19 bajtów
Wypróbuj online!
Wyjaśnienie
Brachylog jest zwykle okropny z indeksami, co znowu pokazuje tutaj.
Jeśli
false.
jest to akceptowalny wynik w przypadkach, gdy nie ma sąsiednich znaków, to byłby 1 bajt mniej przez zastąpienieᶠd
przezᵘ
.źródło
Oktawa , 35 bajtów
Wypróbuj online!
Podobnie do mojej odpowiedzi MATL . Tutaj
unique
automatycznie sortuje. Dane wejściowediff
muszą zostać przekonwertowanedouble
na jednoargumentowe+
.źródło
Cubix,
37 32 31 2928 bajtówDzięki ETHProductions za skierowanie mnie w stronę trzy bajtowego oszczędzania
Wypróbuj tutaj ! Zauważ, że wskaźniki wyjściowe są oparte na 1 i nie w porządku rosnącym.
Rozszerzony:
Wyjaśnienie
Działa to poprzez czytanie wprowadzanego znaku po znaku. Aby porównać dwa znaki, po prostu odejmujemy ich kody znaków, a jeśli wynikiem jest 0, drukujemy bieżącą długość stosu, spację, bieżącą długość stosu - 1 i inną spację. Następnie trochę oczyszczamy stos i zaczynamy od pętli odczytu. Po osiągnięciu końca ciągu wejściowego program zatrzymuje się.
źródło
#
aby uzyskać długość stosu, gdy go potrzebujesz. (Również LOL napisano;_;
w kodzie;))!$w
zamiast!w
i przeniosłeś część logiki piątego rzędu do czwartego rzędu? (Nie mogę teraz spróbować, bo wychodzę za drzwi)C, 75 bajtów
Używa spacji jako ograniczników. (Przecinek końcowy nie wygląda zbyt dobrze.)
Wypróbuj online!
źródło
C # , 115 bajtów
Grał w golfa
Nie golfił
Nieczytelny czytelny
Pełny kod
Prasowe
115 bytes
- Wstępne rozwiązanie.Notatki
Nic do dodania
źródło
Galaretka , 8 bajtów
Wypróbuj online!
źródło
Ṗ=ḊTµ2Ḷ+€
k, 18 bajtów
Przykłady:
Tłumaczenie na
q
łatwiejsze do zrozumienia:źródło
JavaScript, 52 bajty
Dzięki @Neil za grę w golfa z 1 bajtu
Odbiera dane wejściowe jako tablicę znaków o indeksie 0
Zwraca dane wyjściowe jako tablicę o indeksie 1
Wyjaśnienie
Dla każdego znaku w ciągu
Jeśli jest równy poprzedniemu lub następnemu znakowi, zwróć indeks + 1, w przeciwnym razie nie zwróci (pozostawia niezdefiniowane w tablicy)
Usuń wszystkie niezdefiniowane elementy z wynikowej tablicy
Wypróbuj online!
źródło
&&i
zaoszczędziłby bajt(...)*i
?0|0&&6
jest 0,1|0&&6
jest 6,0|1&&6
jest 6,1|1&&6
ma 6. Czy nie tego chcesz?Python 2,
5554 bajtówWypróbuj online!
Generuje wskaźniki oddzielone spacjami (zwróć uwagę, że wyświetla niektóre wskaźniki dwa razy, jak pozwala OP)
źródło
Perl 5 , 37 bajtów
35 bajtów kodu +
pl
flagi.Wypróbuj online!
(?<=(.))\1|(.)(?=\2)
dopasuje albo pomiędzy dwoma powtórzonymi znakami ((?<=(.))\1
), albo przed znakiem, który jest powtarzany ((.)(?=\2)
).Następnie
print pos
drukuje pozycję dopasowania. (pos
zawiera indeks bieżącego dopasowania, gdy jest używany w wyrażeniu regularnym z/g
modyfikatorem).źródło
Perl 6 ,
6657 bajtówSpróbuj
Spróbuj
źródło
PHP, 100 bajtów
źródło
Rubinowy , 51 + 1 = 52 bajty
Używa
-n
flagi.Wypróbuj online!
źródło
Partia, 139 bajtów
Pobiera dane wejściowe na STDIN. Działa poprzez śledzenie liczby liczb do wydrukowania w
c
zmiennej, która jest resetowana do 2 po wykryciu pary. Uwaga: Kosztem 6 bajtów może być zahartowany do pracy z większością znaków ASCII i nie tylkoABCD
.źródło
C #, 89 bajtów
Jeśli są trzy lub więcej znaków z rzędu, indeksy są powtarzane. Które @Comrade SparklePony dozwolone w komentarzach.
Pełny program bez golfa:
źródło
QBIC , 42 bajty
Przykładowe dane wyjściowe:
Wyjaśnienie:
EDYCJA: QBIC ma teraz Substring! To wyzwanie można teraz rozwiązać w 32 bajtach:
Gdzie:
źródło
k, 14 bajtów
Jest to funkcja, pobiera ciąg znaków i zwraca listę indeksów.
Wyjaśnienie:
Wypróbuj online!
Jak używać:
źródło
PHP, 70 bajtów
pobiera dane wejściowe ze STDIN; biegać z
-R
.źródło