Wprowadzenie
Chcę znaleźć podciąg z największą liczbą 1
w sekwencji 0
„i 1
”.
Wejście
Twój program ma dwa wejścia , sekwencję i długość podciągu.
Kolejność jest dowolna liczba 0
„S 1
” s
01001010101101111011101001010100010101101010101010101101101010010110110110
Długość podciągu jest dowolną dodatnią wartość niezerową całkowita:
5
Wynik
Twój program powinien wypisać indeks początkowy pierwszego podłańcucha o podanej długości, który zawiera najwięcej 1
. Przy powyższym wejściu dane wyjściowe są następujące:
10
Pierwszy znak w ciągu zaczyna się od indeksu 0
.
Punktacja
Najkrótszy kod wygrywa!
Zasady
- Twój program musi zawsze wyświetlać poprawny indeks dla wszystkich prawidłowych danych wejściowych.
- Możesz wybrać metodę wejścia / wyjścia z dowolnej odpowiedzi z pozytywnym wynikiem w opcjach domyślnych . Podaj metodę wybraną w odpowiedzi.
1
, wyprowadzasz pierwszy znaleziony podciąg. Podciągi identyfikowane są za pomocą indeksu pierwszego znaku w tym podciągu. To pomaga?Odpowiedzi:
Dyalog APL, 11
Wypróbuj tutaj. Stosowanie:
Wyjaśnienie
Jest to funkcja dynamiczna (czyli binarna), która pobiera długość podciągu od lewej, a sekwencję od prawej. Jego struktura jest następująca:
Wyjaśnienie przez wybuch:
Jako przykład weźmy
4
i0 1 1 0 1 1 1 0
jak wejść. Najpierw zastosujemy+/
dla nich funkcję i otrzymamy2 3 3 3 3
. Następnie,+
i⌈/
stosuje się do tej tablicy i dają się3
i2 3 3 3 3 ⍳ 3
ocenia się2
, jako3
pierwszy występuje w drugim elemencie. Odejmujemy1
i otrzymujemy1
jako wynik końcowy.źródło
m
takie, gdziem
jest maksymalny.Ruby, 42 lata
Pobiera dane, wywołując je, np
f['01001010101101111011101001010100010101101010101010101101101010010110110110',5]
To porównuje podciągi przy użyciu ich całkowitej wartości ASCII i zwraca indeks wartości maksymalnej. Nie jestem pewien, czy
max_by
wymagana jest stabilna specyfikacja Ruby, ale wydaje się, że jest w implementacji C.źródło
Python 2, 56
Akceptuje tablicę liczb całkowitych, a następnie długość.
źródło
[int(s) for s in "010010...0"]
f(ss, 999)
zwróci 0 (zamiast Brak). Czy możesz to naprawić? To prawdopodobnie narusza zasadę 1.ss
?None
nigdy nie jest pożądanym wyjściem, ponieważ odpowiedź jest liczbą całkowitą.Partia - 222
Batch jest oczywiście idealnym językiem dla tego rodzaju operacji.
Nie golfa / rozcięta:
Początkowe ustawienia. Zmienna
s
jest łańcuchem wejściowym il
będzie długością łańcucha wejściowego, pomniejszoną o długość łańcucha podrzędnego (zainicjalizowana przy wartości ujemnej,%2
gdzie%2
jest podana długość łańcucha podrzędnego).Uzyskaj długość danych wejściowych jako
l
, używając rozwiązania o długości łańcucha Batch - to zmienia zmiennąs
zawierającą łańcuch wejściowy, więc ustawiamy go ponownie.Wartość
x
służy do sprawdzenia, który podciąg ma największą liczbę jedynek. Rozpocznij pętlę od 0 do długości łańcucha minus długość podciągu (zmiennal
). Pobierz łańcuch podrzędny zaczynając od bieżącego punktu w pętli (%%a
),c
ustawiany jako łańcuch wejściowy rozpoczynający się od%%a
i przyjmujący%2
znaki (podana długość łańcucha podrzędnego). Wszelkie0
s są usuwanec
, a następniec
porównywana jest wartośćx
- tzn.111
Jest to większa liczba niż,11
więc możemy po prostu użyć „łańcucha” do wykonania większej niż porównanie.y
jest następnie ustawiany na bieżącą lokalizację w ciągu - który jest ostatecznie wyprowadzany.Na przykładzie OP -
źródło
C # (Regex), 196
Rzeczywiste wyrażenie regularne nie jest tak długie, ale wszystkie puchnięcia potrzebne do skompilowania przez program C # dwukrotności kodu.
Rzeczywiste wyrażenie regularne, ustawiając długość na 5:
(?=((?<o>1)|0){5})
: Spoglądaj w przyszłość, aby przeczytać 5 znaków bez zużywania, i wepchnij wszystkie1
do „stosu”o
.(?=[10]{5})(?!((?<-o>1)|0){5})
: Na pozycji, która ma 5 znaków do przodu, w „stosie” nie ma wystarczającej ilości przedmiotu,o
aby wyskoczyć, tzn. Podciąg ma znacznie więcej1
niż to, co mamy na bieżącej pozycji.(?!.+(?=[10]{5})(?!((?<-o>1)|0){5}))
: Pozycji opisanej powyżej nie można znaleźć dla reszty łańcucha, tzn. Wszystkie pozycje mają mniejszą lub równą liczbę1
.Biorąc pierwszy wynik, daje odpowiedź, ponieważ wszystkie podciągi przed nim mają pewne podciągi z większą liczbą
1
, a my sprawdzamy, czy jakikolwiek indeks większy niż bieżący indeks ma mniejszą lub równą liczbę1
.(I uczę się czegoś ładnego: „stos” jest przywracany podczas cofania).
źródło
Pyth , 12
Definiuje funkcję
g
, która wymaga listy liczb i liczby jako danych wejściowych. Na przykładMożesz to przetestować tutaj: Pyth Compiler / Executor
Wyjaśnienie:
Alternatywny:
źródło
ho/<>zNQ\0Uz
Niestety liczenie na ciąg nie powoduje automatycznej konwersji szukanego ciągu na ciąg :(J,
1514 znakówźródło
Matlab (42)
Niech
s
oznacza ciąg in
długość podciągu. Rezultatem jestr
.Oblicz splot
s
z sekwencjin
jedności, a następnie znajdź maksimum. Konwolucję można łatwo wykonaćconv
, amax
funkcja zwraca pozycję pierwszego maksimum. Konieczne jest odjęcie1
od wynikowego indeksu, ponieważ indeksowanie Matlaba zaczyna się od1
, a nie0
.Gra w golfa:
źródło
Haskell,
6462 bajtówStosowanie:
źródło
n#l=...
p
. myślę też, że0
jest zbędny (chociaż nawiasy nie są, a zamiast tego możesz potrzebować spacji0
).JavaScript (ES6) 73
Funkcja zwracająca żądaną wartość. Pętla for skanuje ciąg wejściowy, zachowując bieżącą sumę, zapisując pozycję wartości maksymalnej.
Nie golfił
Testuj w konsoli FireFox / FireBug
Wynik
10
źródło
x
ir
. Powinno to zmniejszyć 4 bajty, co stanowi końcową długość 69 bajtów. Ponadto, prawdopodobnie może być w stanie wymienić&&
z&
. Ale fajny ze~~
sztuczką!t > x
. Musisz zainicjować r: spróbujF("00000")
. I && jest potrzebne do emulacji iif
(x=t, r=i-n+1)
jeśli będziet
niższe lub równe niżx
. To dobre wykorzystanie leniwej oceny! Chciałbym, żeby można to gdzieś odciąć, ale myślę, że wykonałeś całą pracę.PHP (96)
for($a=$b=$c=0;(($d=@substr_count($s,1,$a,$n))>$c&&($b=$a)&&($c=$d))||$a++<strlen($s););echo $b;
http://3v4l.org/J4vqa
zmienne
$s
i$n
powinny być zdefiniowane w wierszu poleceń odpowiednio do szukanego ciągu i długości podłańcucha.Działa to również w dowolnym języku podobnym do C z odpowiednimi funkcjami dla
substr_count()
istrlen()
.źródło
Mathematica,
3836Przykład:
Wynik:
źródło
C # (Linq), 148 bajtów
Sformatowany:
Pobiera dane wejściowe jako parametry metody.
Co to robi:
źródło
Scala - 70 bajtów
Ale z nazwami funkcji tak długo, jak zipWithIndex , chyba Scala nie jest najlepszym wyborem dla golfa kodowego.
źródło
C
245185Sformatowany:
Stosowanie:
źródło
CJam,
2521 bajtówSprawdź to tutaj.
Pobiera dane wejściowe jako liczbę całkowitą dla długości podłańcucha, a tablicę zer i jedynek jako sekwencję:
Wyjaśnienie
Wynik jest drukowany automatycznie na końcu programu.
Zauważ, że rozważam również wycinki, które zaczynają się bliżej końca niż pożądana długość podciągu, ale to dobrze, ponieważ są podciągami ostatniego ważnego podłańcucha i dlatego nigdy nie będą miały więcej
1
s niż ten ostatni prawidłowy podłańcuch.źródło
Java 329 bajtów
zamierzałem zaimplementować .matches (regex), ale byłoby to prawie identyczne z powyższymi rozwiązaniami Pythona, więc zamiast tego spróbowałem przesuwać okno. nowe tutaj, więc jeśli ktoś ma jakieś wskazówki, chętnie je usłyszę.
}
źródło
i
w trzecim wierszu. Większość białych znaków można usunąć. UżyjSystem.out.print(
(nie wymaga nowej linii). Zamiast tegoInteger.valueOf(
możesz użyćnew Integer(
.