Najkrótszy kod, który znajduje wszystkie unikalne „pod-palindromy” ciągu, to znaczy: dowolny podciąg o długości> 1, który jest palindromem.
np. 1
input: "12131331"
output: "33", "121", "131", "313", "1331"
np. 2
input: "3333"
output: "33", "333", "3333"
code-golf
string
palindrome
subsequence
Eelvex
źródło
źródło
333
być wynik? Naiwnie skończyłbyś drukować33
dwa razyOdpowiedzi:
J, 24
3140Przykładowe użycie:
Weź to, GolfScript!
źródło
/dev/random
stąd zrzutkę, aby nas oszukać ;-)~.(#~(1<#*]-:|.)&>),<\\.
(24 znaków)?Python 124
źródło
Haskell 98, 88
9196źródło
Python -
138136Ten kod nie powiela podpalindromów.
źródło
'"'+t+'"'
abyt
zaoszczędzić trochę miejsca, chociaż używa pojedynczych cudzysłowów.Rubin -
126 10297 znakówźródło
Golfscript, 48 znaków
subpalindrome.gs
Stosowanie:
Pierwsza operacja
{,}{(;}/
zamienia ciąg znaków na listę końcowych podciągów. Podobna transformacja wiodących podciągów jest następnie odwzorowywana na wynik. Następnie spłaszcz za pomocą{+}*
, filtruj palindromy za pomocą predykatu.,1>\.-1%=*
, zbieraj unikalne wartości za pomocą.&
, a następnie ładnie drukuj.Byłoby fajniej wyodrębnić transformację podłużnych podciągów jako blok i użyć jej ponownie jako zamiennika podrzędnych podłańcuchów po odwróceniu każdego podłańcuchowego podciągu, ale nie mogę wymyślić zwięzłego sposobu na zrobienie tego.
źródło
Haskell -
170, 153źródło
main=getLine>>=(\x->putStrLn$intercalate", "$toList$p x)
sięmain=getLine>>=putStrLn.intercalate", ".toList.p
. Zastąpiłbym również wezwaniep
swoim ciałem.subsequences
! Twój program zgłasza więcej subpalindromów niż wyjście referencyjne na przykład 1. (na przykład „1111”)J, 48
na przykład
źródło
Prolog, 92
Przykładowe użycie:
źródło
Windows PowerShell, 104
109111To oczekuje danych wejściowych na stdin i wyrzuci wszystkie znalezione palindromy po jednym na linię na stdout:
(Gdy zostanie uruchomiony
cmd
, staje sięecho 12131331|powershell -file subp.ps1
- to po prostu$input
ma nieco inne znaczenie w zależności od sposobu wywołania skryptu, ale może być standardowe, ale nie interaktywne.)30.01.2011 13:57 (111) - Pierwsza próba.
2011-01-30 13:59 (109) - Deklaracja zmiennej wbudowanej.
2011-06-02 13:18 (104) - Ponów wyszukiwanie podciągów, dołączając do tablicy znaków zamiast wywoływać
.Substring()
i wstawić nieco więcej.źródło
Q, 78
stosowanie
źródło
Retina ,
3427 bajtówWypróbuj online!
Zestaw testowy potrzebuje,
M
ponieważ po nim następuje kolejny etap wstawiania pustych linii między przypadkami testowymi.Wyjaśnienie
Wydrukuj (
!
) wszystkie unikalne (@
), pokrywające się (&
) dopasowania wyrażenia regularnego(.)+.?(?<-1>\1)+(?(1)^)
. Odpowiada to palindromowi o długości 2 lub większej przy użyciu grup równoważących. Istnieje zastrzeżenie dotyczące części „wszystkie pokrywające się mecze”: możemy uzyskać maksymalnie jeden mecz na pozycję startową. Jeśli jednak dwa palindromy o różnej długości zaczną się w tej samej pozycji, krótszy palindrom pojawi się ponownie na końcu dłuższego palindromu. A ponieważ chciwość+
priorytetów jest dłuższa, dlatego i tak otrzymujemy wszystkie palindromy.źródło
05AB1E ,
1110 bajtówWypróbuj online!
źródło
1›
na≠
. :)Perl, 112
źródło
JavaScript (ES6), 120 bajtów
Ta funkcja pobiera ciąg wejściowy i wyświetla tablicę.
źródło
Clojure, 81 bajtów
for
pasowało idealnie tutaj :) Przydałoby się,:when(=(reverse p)p)
gdyby wejście było listą znaków LUB pełny ciąg nie liczył się jako palindrom, w tym przypadku maksymalny zakresi
może być(count %)
również.Najbardziej kompaktowa obudowa w celach informacyjnych:
źródło
Python, 83
102znakówFraza
(t[1:]or())and...
jest równoważna(...)if t[1:]else()
i zapisuje jeden znak! Jestem z tego bardzo dumny, biorąc pod uwagę oszczędności.Przykład:
źródło
Scala 127
Aby zachować to porównanie jabłek z jabłkami z inną odpowiedzią Scali, stworzyłem również mój obiekt, który rozszerza aplikację. Zamiast iterować ręcznie łańcuch wejściowy i używać podłańcuchów, skorzystałem z przesuwanego (), aby utworzyć sekwencję wszystkich podciągów.
źródło
Scala 156
170źródło
Perl 6 ,
3532 bajtówSprawdź to
Sprawdź to
Rozszerzony:
źródło
Kokos , 69 bajtów
Wypróbuj online!
Python 2 , 73 bajty
Wypróbuj online!
źródło
Galaretka , 9 bajtów
Wypróbuj online!
źródło
APL (Dyalog Classic) , 27 bajtów
Wypróbuj online!
źródło
∪w/⍨≡∘⌽¨⍨w←⊃,/1↓(⍳∘≢,/¨⊂)
jest prawidłowy.Japt , 14 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
PowerShell , 99 bajtów
Wypróbuj online!
Mniej golfa:
źródło
Brachylog , 11 bajtów
Wypróbuj online!
(Nagłówek w łączu jest uszkodzony w momencie publikowania, więc tutaj jest predykat (odpowiednik funkcji w Brachylog) tylko w pierwszym przypadku testowym, z
w
na końcu, aby faktycznie wydrukować wynik.)Wydaje mi się, że istnieje krótszy sposób sprawdzenia, czy długość jest większa niż 1. (Gdyby nie odfiltrował trywialnych palindromów, po prostu tak by było
{s.↔}ᵘ
).źródło
APL (NARS), 65 znaków, 130 bajtów
test:
ktoś lepiej wie, dlaczego, i może to lepiej wyjaśnić, bez zmiany tego wszystkiego ... Nie jestem pewien tego kodu, możliwe, jeśli przykłady testowe będą liczniejsze, coś pójdzie nie tak ...
źródło
Japt , 9 bajtów
Spróbuj
źródło
Java 8,
202201199 bajtówWypróbuj tutaj.
Jeśli funkcja nie jest dozwolona i wymagany jest pełny program, zamiast tego jest
256255253 bajtów :Wypróbuj tutaj.
Wyjaśnienie:
źródło
JavaScript (ES6), 107 bajtów
Zwraca zestaw .
Przypadki testowe
Pokaż fragment kodu
źródło