Uwaga: To nie jest moje wyzwanie, ale ThisGuy powiedział, że mogę pisać .
Czasami chcę zamienić słowo w jego przeciwieństwo, jak happiness
idzie do unhappiness
. Niestety, kiedy to się dzieje, mój mózg czasami staje się pusty. Pewnego dnia, po kolejnym wydarzeniu, pomyślałem sobie: „Po to są programy!”.
Ponieważ język angielski ma wiele wyjątków, utworzyłem listę zawierającą prefiks litery początkowej
q or h -> dis- (honest -> dishonest)
l -> il- (legal -> illegal)
m or p -> im- (mature -> immature)
r -> ir- (responsible -> irresponsible)
everything else -> un- (worthy -> unworthy)
Zadanie
Biorąc pod uwagę dane wejściowe jako ciąg znaków, należy wprowadzić ciąg znaków jako ujemny i wyprowadzić wynik. Możesz założyć, że wszystkie podane dane wejściowe będą pasować do powyższych zasad. Zgłoszenia mogą być programami lub funkcjami, a nie fragmentami.
Wejście
Pojedynczy ciąg, pobrany albo jako parametr, albo ze STDIN
Wynik
Negowana forma tego łańcucha, zgodna z powyższymi zasadami
Jak wygrać
To jest golf golfowy, więc wygrywa najkrótszy kod
q
bez”u
?qadi
,qat
wspomniany wyżejqi
,qirsh
iqwerty
. (Gram dużo w Scrabble)q
zawsze następujeu
ciąg w ciągu, czy nie?u
Odpowiedzi:
Python, 55 bajtów
Wypróbuj online!
Musimy obsłużyć 7 różnych liter początkowych:
g
->dis
,h
->dis
,p
->im
,m
->im
,l
->il
,r
->ir
i wszystko inne ->un
Możemy przechowywać wszystkie te negacje w jednym łańcuchu i wyodrębnić właściwy poprzez krojenie:
Teraz musimy obliczyć indeks początkowy
i
.'rlmphq'.find
zwraca 0 dla'r'
, 5 dlaq
i -1 dla wszystkiego, co nie jest zawarte w ciągu. Aby uzyskać potrzebną wartość od 0 do 6, nadal musimy odjąć zwracaną wartość od 5, co daje następujący kod:źródło
ddiiiiuiimmlrnss
irlmphq
liczba5
, dlaczego wycinek pomija 7?GNU sed , 50 bajtów
Obejmuje +1 dla
-r
Nic fajnego. Używa
&
w zamianie do połączenia kilku podstawień it
pominięcia ostatniego, jeśli nastąpi jedno z pierwszych zastąpień.Wypróbuj online!
źródło
Galaretka , 30 bajtów
Wypróbuj online!
W jaki sposób?
Zauważ, że powtórzenie
r
in“qmlrrhp”
znajduje się w piątym indeksie, który, jeśli będzie się do niego odwoływał, spowoduje dodanieun
, więc równie dobrze może być czymkolwiek innym niżh
lubp
.źródło
/// ,
5956 bajtówWypróbuj online!
Wejście następuje po ostatnim
#
.Jak to działa:
Dokonałem optymalizacji, która zmniejszyła rozmiar do 56 bajtów, ale ponieważ to komplikuje rzeczy, wyjaśnię oryginalną wersję, a następnie wyjaśnię golfa.
Intuicja: Wyzwanie jest dość proste, wystarczy dodać przeczenie w zależności od początku słowa. Jednak w /// nie możesz po prostu
concatenate if [...]
zastąpić czegoś według określonego wzorca. W tym programie początkowe słowa dodatnie są zastępowane początkowymi słowami ujemnymi. Zostało#
to dodane, aby upewnić się, że po dodaniu nowego początku nie będą dodawane żadne nowe początki.#
Również można zrobić „wszystko inne: UN”.Pole zawiera nową podstawienie on na początku:
/^/\/\/#/
. Zastępuje to wszystko^
z//#
, który był wspólny wzór w wersji oryginalnej.źródło
TI-Basic, 104 bajty
Wymaga wszystkich wielkich liter.
Wyjaśnienie:
źródło
JavaScript (
716461 bajtów)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
Edycje:
charAt(0)
->[0]
)źródło
w[0]
zamiast tegow.charAt(0)
?w=>...
? Rzeczywista definicja funkcji obejmujelet f=w=>...
? (Prawdopodobnie opisany gdzieś w FAQ ...)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w
3 bajty mniejPartia, 114 bajtów
Sprawdza pierwszy znak słowa na liście niestandardowych prefiksów, a jeśli tak, zmienia prefiks na domyślny
un
.qu
Możliwa jest specjalna obudowa w cenie 21 bajtów.źródło
Haskell, 71 bajtów
Przykład użycia:
f "legal"
->"illegal"
. Wypróbuj online!Zbuduj tabelę wyszukiwania par prefiks / zamiennik, aby wyszukać pierwszy znak ciągu wejściowego z wartością domyślną,
"un"
jeśli nie zostanie znaleziony.źródło
Siatkówka , 54 bajty
Wyjaśnienie:
Pierwszy raz użyłem Retiny. To całkiem fajny język.
Wypróbuj online!
źródło
JavaScript,
727166616059 bajtóww=>('dis....il.im...im.dis.ir'.split('.')[w.charCodeAt(0)-104]||'un')+w
w=>'un.dis.dis.il.im.im.ir'.split('.')['qhlmpr'.indexOf(w[0])+1]+w
Tak, to wciąż dłużej niż istniejące rozwiązanie. :)W przypadku, gdy wymaga to wyjaśnienia, korzystam z par q / hi m / p, łącząc ich indeks w ciągu wyszukiwania z mod 4, a następnie wykorzystując to jako odnośnik do tablicy prefiksów.
źródło
search
zamiastindexOf
. I jeszcze więcej, jak sądzę, używając&
zamiast%
search
. Nie widzę, jak sprawić, by funkcja trick & trick działała - byłoby idealnie, gdyby moja tablica zawierała tylko 4 elementy.C,
109107 bajtówWypróbuj online!
źródło
Mathematica, 107 bajtów
Wyjaśnienie:
StartOfString~~x:#:>#2<>x&
to czysta funkcja, w której pierwszy argument jest ciągiem znaków, który ma zostać dopasowany na początku ciągu, a drugi argumentem jest ciągiem znaków, który należy dołączyć do dopasowania. Zwraca opóźnioną regułę odpowiednią do użycia wewnątrzStringReplace
. Jest to następnie stosowane do każdej pary, w{{"q"|"h","dis"},{"l","il"},{"m"|"p","im"},{"r","ir"},{_,"un"}}
wyniku czego powstaje lista regułNa koniec przekazywana jest ta lista,
StringReplace
która daje operatorowi ciągów znaków.źródło
PHP, 101 bajtów
Wersja online
źródło
Excel 78 bajtów
Znalazłem kilku bliskich konkurentów przy użyciu różnych metod, które uzyskały 81 bajtów:
I 84 bajty:
źródło
REXX, 78 bajtów
Zapisuje kilka bajtów, odpowiadając w DUŻYM LICZBIE, np. Silny -> IMPOTENT.
źródło
Perl, 49 + 1 (
-p
flaga) = 50 bajtówZa pomocą:
Wypróbuj online .
źródło
Clojure, 65 bajtów
Cóż, to jest nudne ... ale nie mogłem go skrócić. Przynajmniej jest bardzo mało białych znaków.
źródło
OCaml, 85
Funkcja anonimowa, używa dopasowania wzorca do pierwszego znaku.
źródło