(Pierwsze wyzwanie, daj mi znać, jeśli są jakieś problemy).
Heterogram to słowo, którym brak litery alfabetu występuje więcej niż jeden raz, a palindrom to wyrażenie, które jest takie samo w tył iw przód.
Wyzwanie polega na napisaniu fragmentu kodu, który przyjmuje słowo (tylko litery) jako dane wejściowe i wypisuje, czy jest to heterogram (prawda / fałsz). Problem polega na tym, że program musi być palindromem - czyta to samo w przód iw tył. Wielkie litery nie mają tutaj znaczenia, więc aby heterogram był poprawny, nie może mieć na przykład zarówno q, jak i Q. Komentarze są niedozwolone i nie można umieszczać ciągów zawierających kod (lub znaczną część kodu), aby ułatwić palindrom: P
To jest golf golfowy, więc wygrywa najkrótszy kod. Powodzenia!
EDYCJA: Pareny, nawiasy klamrowe lub inne symbole, które mają lewą i prawą formę, muszą zostać odwrócone w części palindromowej. Więc (helloolleh) jest palindromem, ale (helloolleh (nie jest.) Najwyraźniej nazywa się to wygodnym palindromem.
EDYCJA 2: Nie dostaniesz żadnych pustych danych wejściowych, danych wejściowych zawierających wiele słów lub znaków innych niż litery. Więc nie martw się o to :)
(hellolleh)
ważny jest palindrom? Podobne dla[]
,{}
i<>
(w stosownych przypadkach).asdsa
uważany za równyasd\nsa
?Odpowiedzi:
Pyth - 11 bajtów
(Konieczne i policzone spacje końcowe i wiodące).
Pakiet testowy .
źródło
Pyth, 17 bajtów
Wypróbuj online tutaj.
Potrzebna jest wiodąca przestrzeń. Policzyłem to i końcową spację w liczbie bajtów.
Oto podział:
źródło
.q
w swoich komentarzach, ale.w
w swoim programie.Python 3, 125
Główny problem polega na tym, aby odwrotność kodu była przetwarzalna. Wówczas możemy pozwolić, aby pomylił się z niezdefiniowanymi identyfikatorami.
źródło
<
w>
!Perl, 43 bajty
Przykład użycia:
źródło
> <> ,
137131 bajtówKiedy zobaczyłem to wyzwanie, pomyślałem, że> <> może w końcu być dobrym wyborem języka, ponieważ używając go można w większości zignorować palindromy; łatwo jest upewnić się, że wskaźnik pozostaje tylko tam, gdzie powinien. Chociaż jest to prawda,> <> niestety powoduje, że warunki do gry w golfa są męczące (lub po prostu gra w golfa w ogóle). Mam nadzieję, że skorzystam z kilku dziwnych sztuczek, o których pomyślałem, aby to zrekompensować, ale oto „szybka” (właściwie nie programowa i kreacyjna) odpowiedź. Możesz spróbować online tutaj .
Zwraca 1 dla prawdy i -1 dla fałszu (mógłbym zmienić to na 0, ale długość pozostanie taka sama, niestety)
Jak zawsze, daj mi znać, jeśli to nie zadziała i jeśli masz jakieś pomysły na grę w golfa. Przetestowałem to na kilku testowych przypadkach, ale zawsze może istnieć wyjątek.
Oto kolejna wersja, która moim zdaniem jest nieco mądrzejsza, ale niestety jest o dziesięć bajtów więcej. Wartości true / falsey tym razem wynoszą 1 i błąd (
something smells fishy...
):Wyjaśnienie:
Oto kod bez dodanej części, aby uczynić go palindromem. Ten nie używa „bardziej sprytnych” sztuczek, których próbowałem użyć w alternatywnej wersji, więc trochę łatwiej jest to wytłumaczyć (jeśli ktoś jest zainteresowany wyjaśnieniem „sztuczek”, chętnie bym go podał , chociaż).
Linia 1:
Oto jak działa zawiłe zamiana (
:{:@=?v$
) - użyję testowego przypadku tego stosu:[5,1,8,1]
gdzie ostatni znak jest na górze.:{
Górna część stosu jest zduplikowana:,[5,1,8,1,1]
a stos przesunięto w lewo:[1,8,1,1,5]
:@
Góra jest zduplikowana:[1,8,1,1,5,5]
następnie trzy górne wartości są przesunięte w prawo:[1,8,1,5,1,5]
=?v
Niepotrzebne w tej części wyjaśnień$
Najwyższa wartość jest ponownie wymieniana[1,8,1,5]
, co daje , jak zauważysz, oryginalny stos przesunięty jeden raz (tak jakby{
to było jedyne polecenie).Więc to, co robi to po angielsku („Dzięki Bogu, on tak naprawdę wyjaśnia”), polega na sprawdzeniu całego stosu względem najwyższej wartości i przejściu do punktu w drugiej linii, jeśli jakakolwiek wartość jest równa górnej. Sprawdzanie odbywa się proporcjonalnie do liczby wartości na stosie (
l - 1
gdziel
jest długość stosu), dzięki czemu wszystkie wartości są sprawdzane względem siebie.Linia 2:
źródło
><>
to samo palindrom (po prostu nie wygodne jeden)PHP, 126 bajtów
Trzeba uruchomić to z
short_tags
ini dyrektywy zamienił się w 5,4 lub powyżej.Pierwszy golf w historii. Dwie kopie, pierwsza drukuje całą masę śmieci z wynikiem fałsz / prawda:
W tej wersji nie będzie drukowany żaden żargon (162 bajty):
Uruchom z wiersza polecenia za pomocą
Prawdopodobnie można grać w golfa nieco dalej
źródło
?><?
możesz użyć//\\
. To powinno usunąć ten wymóg. I zamiast__halt_compiler()
użyciareturn;
return;
jest nadal aktualne.05AB1E, 9 bajtów
Wypróbuj online.
* wstaw coś o powrocie do mojego pierwszego wyzwania *
Po tym wyzwaniu nie konkurowano od 05AB1E.
Wyjaśnienie
źródło
Brachylog , 3 bajty, wyzwanie dla postdate języka
Wypróbuj online!
Jest to jeden z niewielu programów, który działa zarówno w Brachylog 1, jak i Brachylog 2. Łącze TIO prowadzi do Brachylog 1 ze względu na stare czasy. Również nietypowo dla Brachylog jest to pełny program, a nie funkcja. (Pełne programy w Brachylog domyślnie wypisują wartości logiczne, co jest właśnie tym, czego chcemy w przypadku tego pytania.)
Ogólna zasada jest taka, że umieszczenie predykatu między parą identycznych wielkich liter jest twierdzeniem, że bieżąca wartość jest niezmienna w tym predykacie. Często więc widzisz rzeczy takie jak
AoA
„sortowane” („niezmiennie sortowane”);A↔A
znaczy (w Brachylog 2) znaczy „jest palindromem” („niezmiennikiem podczas odwrócenia”) i tak dalej. Ten program jest „niezmienny przy usuwaniu duplikatów”, tzn. „Nie zawiera duplikatów”. Naprawdę wygodne jest, że ta metoda określania niezmienności jest palindromem.źródło
Brachylog , 3 bajty
Wypróbuj online!
Predykat kończy się powodzeniem, jeśli dane wejściowe są heterogramem, a porażki, jeśli tak nie jest.
źródło
MATL , 7 bajtów
Wypróbuj online!
Zwraca listę [1, 1], jeśli wejście jest heterogramem, a [0, 0], jeśli nie.
Wyjaśnienie:
źródło