Wyzwanie:
Biorąc pod uwagę dodatnią liczbę całkowitą, wypisz najdłuższą jednocyfrową podsekwencję, która występuje co najmniej dwukrotnie, AND ma granice innej cyfry (lub początek / koniec liczby całkowitej).
Przykład:
Wejście: 7888885466662716666
Najdłuższa podsekwencja pojedynczej cyfry to 88888
( 7[88888]5466662716666
) o długości 5. Jednak ta podsekwencja występuje tylko raz w liczbie całkowitej.
Zamiast tego wynikiem dla danych wejściowych 7888885466662716666
powinno być 6666
( 78888854[6666]271[6666]
), ponieważ występuje (przynajmniej) dwa razy.
Zasady konkursu:
- Długość podsekwencji ma pierwszeństwo przed liczbą wystąpień. (Tj. Z wejściem
8888858888866656665666
, wyprowadzamy88888
([88888]5[88888]66656665666
; długość 5 występuje dwukrotnie), a nie666
(88888588888[666]5[666]5[666]
; długość 3 występuje trzy razy). - Jeśli długość wielu podsekwencji jest równa, wyprowadzamy tę o największej liczbie wystąpień. Tj. Z wejściem
3331113331119111
, wyprowadzamy111
(333[111]333[111]9[111]
; długość 3 występuje trzykrotnie), a nie333
([333]111[333]1119111
; długość 3 również występuje, ale występuje dwukrotnie) - Jeśli liczba wystąpień i długość wielu podsekwencji są równe, możesz wyprowadzić jeden z nich lub wszystkie (w dowolnej kolejności). To znaczy z wejściem
777333777333
, możliwymi wyjściami są777
:;333
;[777, 333]
; lub[333, 777]
. - Podsekwencja musi mieć granice innych cyfr (lub początek / koniec liczby całkowitej). Tj. Z wejściem
122222233433
wynikiem jest33
(1222222[33]4[33]
; długość 2 występuje dwukrotnie), a nie222
(1[222][222]33433
długość 3 występuje dwukrotnie, przy czym oba są nieprawidłowe).- Dotyczy to wszystkich liczb liczonych do licznika wystąpień. Tj. Z
811774177781382
danymi wejściowymi wynik jest8
([8]117741777[8]13[8]2
; długość 1 występuje trzykrotnie) i nie77
(811[77]41[77]781382
/811[77]417[77]81382
; długość 2 występuje dwukrotnie z jednym nieważnym) ani1
((8[1][1]774[1]7778[1]382
długość 1 występuje cztery razy z dwoma nieważnym).
- Dotyczy to wszystkich liczb liczonych do licznika wystąpień. Tj. Z
- Możesz założyć, że dane wejściowe nie będą zawierać żadnych cyfr
0
(będą pasować[1-9]+
). (Ma to na celu uniknięcie konieczności radzenia sobie z przypadkami testowymi takimi jak te,10002000
które powinny być generowane000
, w przypadku których większość języków byłaby wypisywana0
domyślnie). - Możesz założyć, że dane wejściowe zawsze będą zawierać co najmniej jedno prawidłowe dane wyjściowe.
- Oba wejścia / wyjścia są elastyczne. Może być listą / tablicą / strumieniem cyfr / bajtów / znaków lub ciągiem znaków zamiast pojedynczej liczby całkowitej.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Input: 7888885466662716666 / [7,8,8,8,8,8,5,4,6,6,6,6,2,7,1,6,6,6,6]
Output: 6666 / [6,6,6,6]
Input: 3331113331119111 / [3,3,3,1,1,1,3,3,3,1,1,1,9,1,1,1]
Output: 111 / [1,1,1]
Input: 777333777333 / [7,7,7,3,3,3,7,7,7,3,3,3]
Possible outputs: 777; 333; [777,333]; [333;777] / [7,7,7]; [3,3,3]; [[7,7,7],[3,3,3]]; [[3,3,3],[7,7,7]]
Input: 122222233433 / [1,2,2,2,2,2,2,3,3,4,3,3]
Output: 33 / [3,3]
Input: 811774177781382 / [8,1,1,7,7,4,1,7,7,7,8,1,3,8,2]
Output: 8 / [8]
Input: 555153333551 / [5,5,5,1,5,3,3,3,3,5,5,1]
Output: 1 / [1]
Input: 12321 / [1,2,3,2,1]
Possible outputs: 1; 2; [1,2]; [2,1] / [1]; [2]; [[1],[2]]; [[2],[1]]
Input: 944949949494999494 / [9,4,4,9,4,9,9,4,9,4,9,4,9,9,9,4,9,4]
Output: 4 / [4]
Input: 8888858888866656665666 / [8,8,8,8,8,5,8,8,8,8,8,6,6,6,5,6,6,6,5,6,6,6]
Output: 88888 / [8,8,8,8,8]
Input: 1112221112221111 / [1,1,1,2,2,2,1,1,1,2,2,2,1,1,1,1]
Output: 111; 222; [111,222]; [222,111] / [1,1,1]; [2,2,2]; [[1,1,1],[2,2,2]]; [[2,2,2],[1,1,1]]
Input: 911133111339339339339339 / [9,1,1,1,3,3,1,1,1,3,3,9,3,3,9,3,3,9,3,3,9,3,3,9]
Output: 111 / [1,1,1]
8888858888866656665666
. Jeśli poprawnie zinterpretowałem wyzwanie, zarówno Brachylog, jak i 05AB1E zawodzą.222
ograniczony innymi liczbami całkowitymi. Chyba nie powinniśmy liczyć wystąpienia, które jest podciągiem1111
. Rzeczywiście jednak lepiej poczekać na OP.1112221112221111
nich są podciągi i ich zliczenia:1111 (1)
,111 (2)
,222 (2)
. Skoro tylko wyprowadza sekwencje występujące co najmniej dwa razy, wyjście może być jednym z:111
,222
,[111,222]
,[222,111]
. (Zobacz czwartą zasadę, aby uzyskać więcej informacji.) Zasadniczo1111
będzie się zawsze liczył jako1111
, a nie jako1
i111
lub11
i11
. Dodam swój przypadek testowy, ale wyjście jest jedno lub oba111
i222
.Odpowiedzi:
05AB1E , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 12 bajtów
Wypróbuj online!
Poprzednia wersja - 14 bajtów
Wypróbuj online!
Jak to działa?
źródło
JavaScript (ES6),
797368 bajtówPobiera dane wejściowe jako ciąg. Zwraca liczbę całkowitą.
Wypróbuj online!
Skomentował
źródło
...s
konwertuje dane wejściowe na listę cyfr, to czy nie jest krótsze, aby po prostu traktować je jako listę cyfr, a nie ciąg znaków? Pozwoliłem na elastyczne we / wy. (Ale[...s,0]
nawet jeślis
już jest to lista.Siatkówka , 56 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Wymień wszystkie maksymalnie powtarzane podsekwencje cyfrowe.
Posortuj listę w kolejności.
Wyświetl wszystkie wielokrotne podsekwencje z ich „liczbą”.
Sortuj w kolejności rosnącej.
Usuń liczby.
Sortuj rosnąco według długości. (Jeżeli długości są równe, zachowane jest poprzednie zamówienie ze względu na liczbę).
Zachowaj ostatnią, tj. Najdłuższą wartość.
źródło
R , 102 bajty
Wypróbuj online!
Ponieważ nie było jeszcze odpowiedzi R, postanowiłem spróbować, a więc ... to nie było łatwe. Naprawdę nie wiem, czy to dobre podejście, ale proszę bardzo.
Wejściowe i wyjściowe wektory znaków.
źródło
Perl 6 ,
5856 bajtówWypróbuj online!
źródło
Python 2 ,
123120 bajtówWypróbuj online!
źródło
PowerShell, 101 bajtów
Skomplikowany skrypt testowy:
Wynik:
źródło
Python 2 ,
114113 bajtów-1 bajt dzięki TFeld .
Wypróbuj online!
źródło
Haskell, 72 bajty
Jak to działa
źródło
Gloss
Do grafiki lubMatrix
). Używam „Haskell + coś”, jeśli nie chcę uwzględniać liczby bajtów dla importów. Myślę, że mieliśmy ten temat na temat meta, ale nie mogę go już znaleźć. Jeśli dobrze pamiętam, nie mieliśmy ogólnej definicji „biblioteki standardowej”. Co powinno być odniesieniem dla Haskell? Raport Haskella, baza GHC, platforma Haskell, coś jeszcze?Data.Lists
biblioteka nie jest dostępna w TIO lub innym internetowym kompilatorze Haskell?Data.Lists
w TIO brakuje tak . Możesz to przetestować w tej wersji .R , 85 bajtów
Wypróbuj online!
Dane wejściowe: wektor oddzielonych cyfr całkowitych, np
c(1,8,8...)
Dane wyjściowe: wektor oddzielonych cyfr całkowitych
Kod rozwinięty z wyjaśnieniem:
Alternatywna wersja akceptująca wektor liczb całkowitych lub znakowych:
R , 88 bajtów
Wypróbuj online!
Wejście: wektor oddzielonych znaków lub cyfr, np.
c("1","8","8"...)
Lubc(1,8,8...)
Dane wyjściowe: wektor rozdzielonych znaków, jeśli wejście było wektorem znaków, wektor cyfr, jeśli wejście było wektorem cyfr
źródło
Czerwony ,
256250 bajtówWypróbuj online!
Naprawdę, naprawdę długie rozwiązanie tym razem ... (westchnienie)
Pobiera dane wejściowe jako ciąg.
Wyjaśnienie:
źródło
Java (JDK 10) , 213 bajtów
Wypróbuj online!
Wyjaśnienie (nieaktualne)
Kredyty
źródło
j*o>M
czeku jest niewielka wada . Jeśli dobrze rozumiem, potrzeba makslength * occurrence-count
. Ale dla przypadku testowego takiego jak1113311133933933933933
na przykład111
byłoby (3 * 2 = 6), a33
byłoby (2 * 6 = 12). Wyprowadza więc to, że33
ma najwyższe wystąpienie, zamiast111
być najdłuższym co najmniej dwa razy. Ponadto,var r="";for(;O-->0;)r+=D;return r;
można golfed dofor(;O-->0;)System.out.print(D);
Jawa 10, lub nawet krócej w Javie 11:return(D+"").repeat(O);
.int X[][]=new int[10][99],d,l=99,
naint l=99,X[][]=new int[10][l],d,
.d++<9
zamiast++d<10
. Przepraszam za resztę: jestem dzisiaj dość zmęczony = _ =Rubin ,
6867 bajtówWypróbuj online!
Tablice wejściowe i wyjściowe znaków.
Podejście jest dość proste: identyfikujemy przebiegi kolejnych cyfr (
chunk
używając unarnej+
jako funkcji tożsamości) i przyjmujemy maksimum - najpierw według wielkości przebiegu (resetuje się do zera, jeśli jego liczba wystąpień wynosi <2), a następnie samą liczbę .źródło
PCRE, 152 bajty
Zobacz to w akcji na: https://regex101.com/r/0U0dEp/1 (wystarczy spojrzeć na pierwsze dopasowanie w każdym przypadku testowym)
To jest dla zabawy, ponieważ regex nie jest prawdziwym językiem programowania sam w sobie, a rozwiązanie jest ograniczone: P
Ponieważ grupa o zerowej szerokości, taka jak
(?:)+
dopasowuje się tylko raz i nie powtarza się w nieskończoność, a ponieważ PCRE wewnętrznie tworzy kopie grup określone ilościowo z ograniczeniami, musiałem tam użyć magicznej liczby („{1,592}”), która oznacza, że możemy przejrzeć do 592 ciągłych zestawów cyfr naprzód, aby znaleźć zestaw konkurencyjny, który może być dłuższy niż aktualnie kontrolowany. Więcej informacji na temat tej koncepcji tutaj .źródło
Perl 5 , 88 bajtów
Wypróbuj online!
Lekko niestrzeżony, z testami:
źródło
Wolfram Language (Mathematica) , 67 bajtów
Czysta funkcja. Pobiera listę cyfr jako dane wejściowe i zwraca listę podsekwencji (w określonej kolejności) jako dane wyjściowe. Nie jestem pewien, czy klauzula „musi pojawić się co najmniej dwa razy” może być traktowana w bardziej przejrzysty sposób. Wypróbuj online!
źródło
Japt
-h
, 12 bajtówDane wejściowe i wyjściowe są łańcuchami.
Spróbuj
źródło