Semordnilaps (znany również jako heteropalindromy, semi-palindromy, półpalindromy, reversgramy, mynoretehs, odwracalne anagramy, reversals lub anadromy) są słowami, które są również słowami, gdy zostały przeliterowane. Oto kilka przykładów:
- Totem <=> Remis
- Wydobyty <=> Dżins
- Części <=> Pasek
Biorąc pod uwagę dodatnią liczbę całkowitą N (poprzez argument funkcji lub STDIN), zwróć / wypisz listę semordnilaps z tej listy angielskich słów , które mają dokładnie N liter. Lista słów mogą być zapisywane lokalnie na komputerze jako plik tekstowy o nazwie: w.txt
. Możesz także pobrać listę z adresu URL, ale zostanie ona uwzględniona w liczbie bajtów.
Zasady:
- Palindromy nie są semordnilapsami! Dlatego słów „południe”, „rotor” i „radar” nie należy umieszczać na liście.
- Tylko jedno słowo (w parze semordnilap) powinno znajdować się na liście. Dlatego jeśli „pies” znajduje się na liście, „bóg” nie powinien być (nie ma znaczenia, który z nich jest uwzględniony).
- Jeśli nie ma semordnilaps, wynikiem powinien być pusty ciąg, 0, FAŁSZ lub coś innego wskazującego, że nie było żadnych wyników. Funkcja musi działać, nawet jeśli nie ma żadnych wyników.
To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach!
Tabela liderów
Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Emordnilap
i mnoga nie powinna byćSemordnilap
? ;)Odpowiedzi:
Pyth , 23 (kod 18, 5 niezbędnych STDIN)
Jest to dość proste rozwiązanie.
J
przechowuje listę słów. Następnie filtrujemy listę słów (f J
) według długości słowa będącego wejściem (qlTQ
), odwrócone słowo znajduje się na liście (}_TJ
), a odwrócenie słowa jest większe niż słowo (>_TT
). Ostatni warunek zapewniaT
, że nie jest palindromiczny i że drukowana jest tylko jedna z tych par. Powstała lista zostanie wydrukowana.Jak działa Pyth, jedynym sposobem otwarcia pliku jest otrzymanie jego nazwy na STDIN. Dlatego policzyłem 5 z bajtów STDIN
w.txt
, w moim wyniku.Przykładowy przebieg:
źródło
Rubinowy, 74 bajty
Iteruje po liście, usuwając elementy, co pozwala uniknąć obu palindromów i wyświetla zarówno „stres”, jak i „desery”. Użycie tej samej nazwy zmiennej dla funkcji i iteratora omija dziwaczną składnię Ruby: nawet jeśli
f=i.pop
zostanie to wcześniej ocenionef.reverse
, linia nie zostanie przeanalizowana, chybaf
że coś już znaczy. Mógłbym również użyćp
.źródło
bash
134157118 bajtówf () { comm -12 <(sort w.txt) <(rev w.txt|sort)|while read w; do ((${#w}==$1))&&[[ $w<$(rev<<<$w) ]]&&echo $w; done; }
To nie jest poważny wpis, ale raczej w odpowiedzi na odpowiedź Briana Basha . Właśnie tak myślę o programowaniu tego rodzaju rzeczy w Bash - używając samego Basha tak mało, jak to możliwe, i pozwalając wbudowanym narzędziom wykonać całą pracę.
źródło
&&[[ $w > $(rev<<<$w) ]]&& echo $w
nadal unikasort|tail -1
. Dzięki temu myślę, że możesz nawet upuścić ostatni rodzaj i unikat, ponieważ usuwa on palindromy i wyświetla tylko jedno ze słów.<(sort w.txt)
jest w porządku.Python,
126125120 bajtówCałkiem proste rozwiązanie.
źródło
k=c[::-1]
. Czy nie możesz zadzwonićset()
tylko za drugim razem? Nie sądzę, żeby w pliku były powtórzenia?k
(9 dla definicji plus 1 dla nowej linii plus 1 dla spacji), ale zapisałbym tylko 10 znaków (wyjmij[::-1]
dla 6, ale dodaj 1, bo wtedy potrzebuję spacji). O tymset
, muszęJ
być zestawem, ponieważ usuwam z niego używane słowa, aby spełnić zasadę braku dupeN==len(c)and
oszczędność miejsca.=
powinien być==
.CJam,
4847454238 bajtówPonieważ adres URL musi być policzony, używam tego samego skracacza adresów URL co Optymalizator.
§
Jest częścią rozszerzonego ASCII, więc każdy znak w kodzie mogą być zakodowane w jednym bajcie.Podobnie jak w przypadku Optymalizatora, będziesz musiał użyć interpretera Java i uruchomić go lokalnie z pliku, powiedzmy
semordnilap.cjam
, a następniewięc dane wejściowe podano jako argument wiersza poleceń.
Jak to działa (nieco nieaktualne):
Powstały ciąg jest automatycznie drukowany na końcu programu.
źródło
Java,
280218 bajtówW porównaniu z resztą zawodów absolutnie nie mam pojęcia, czy to dobry wynik.
Rozszerzony:
Używa funkcji CompareTo () do jednoczesnego ignorowania palindromów i duplikatów.
źródło
Files.readAllLines(Paths.get("w.txt"))
. To przydatna sztuczka.CJam, 68 bajtów
Musisz pobrać stąd wersję kompilatora Java i zapisać powyższy kod w pliku o nazwie words.cjam (może mieć dowolną nazwę). Następnie uruchom kod podobny do
Na przykład w przypadku
N = 8
,źródło
Node.js, 172 bajty
Funkcjonować:
Testowanie:
źródło
K, 59 bajtów
Całkiem proste. Przeczytaj listę, zbuduj listę odwrotną, weź ich skrzyżowanie, odfiltruj palindromy, odfiltruj wymaganą liczbę, posortuj i deduplikuj pary.
źródło
Rubinowy, 95 bajtów
Wyjaśnienie
Integer
.String
(a
).Array
wszystkie słowa (bez znaków nowej linii).a
.Array
l
.l
.Puste
Array
jest zwracane, gdy nie znaleziono żadnych kwalifikujących się słów.źródło
Node.js, CoffeeScript, 132 bajty
Node.js, 162 bajtów
Chrome Dev Tools Console, 111 bajtów (na stronie pobierania)
Wszystkie wersje zwracają tablicę wszystkich Semordnilaps długości
n
.Node.js, 162 bajtów
Wyświetla wszystkie semordnilaps:
źródło
Julia, 101 bajtów
To powinno faktycznie działać ...
źródło
Mathematica, 105 bajtów
Czasami Import automatycznie podzieli tekst na listę linii lub potraktuje jako CSV lub TSV. W innym przypadku Import odczyta zawartość pliku do łańcucha. Import zrobił to drugie dla danych testowych.
źródło
GRZMOTNĄĆ
testy ...
źródło