Descargo de responsabilidad: este no es mi desafío, pero ThisGuy dijo que estaba bien publicar.
De vez en cuando quiero hacer una palabra en su opuesto, como happinessva a unhappiness. Desafortunadamente, cuando esto sucede, mi cerebro a veces se queda en blanco. Entonces, un día, después de que esto sucediera, pensé: "¡Para eso están los programas!"
Como el idioma inglés tiene muchas excepciones, he creado una lista que contiene el prefijo para la letra inicial
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)
Tarea
Dada una entrada como una cadena, haga que la cadena sea negativa y genere el resultado. Puede suponer que todas las entradas dadas se ajustarán a las reglas anteriores. Los envíos pueden ser programas o funciones, no fragmentos.
Entrada
Una sola cadena, tomada como parámetro o desde STDIN
Salida
La forma negada de esa cadena, conforme a las reglas anteriores.
Cómo ganar
Este es un código de golf, por lo que el código más corto gana

qsin au?qadi,qat, el ya mencionadoqi,qirshyqwerty. (Juego mucho Scrabble)qsiempre va seguido de auen la cadena o no?uRespuestas:
Python, 55 bytes
Pruébalo en línea!
Necesitamos manejar 7 letras iniciales diferentes:
g->dis,h->dis,p->im,m->im,l->il,r->iry todo lo demás ->unPodemos almacenar todas estas negaciones en una sola cadena y extraer la correcta mediante el corte:
Ahora necesitamos calcular el índice de inicio
i.'rlmphq'.finddevuelve 0 para'r', 5 paraqy -1 para todo lo que no está contenido en la cadena. Para obtener el valor necesario de 0 a 6, aún necesitamos restar el valor de retorno de 5, lo que da como resultado este código:fuente
ddiiiiuiimmlrnssyrlmphqel número5de, ¿Por qué el salto el segmento 7?GNU sed , 50 bytes
Incluye +1 para
-rNada sofisticado. Utiliza
&el reemplazo para combinar algunas sustituciones ytomitir el último si ocurre una de las primeras sustituciones.Pruébalo en línea!
fuente
Jalea , 30 bytes
Pruébalo en línea!
¿Cómo?
Tenga en cuenta que la repetición
ren“qmlrrhp”está en el quinto índice, que, si se hace referencia, daría lugar a anteponerun, por lo que podría ser cualquier otra cosa que no seahop.fuente
/// ,
5956 bytesPruébalo en línea!
La entrada va después del último
#.Cómo funciona:
Hice una optimización que redujo el tamaño a 56 bytes, pero como eso complica las cosas, explicaré la versión original y luego explicaré el golf.
Intuición: el desafío es bastante simple, solo agregue lo negativo dependiendo del comienzo de la palabra. Sin embargo, en ///, no puede simplemente
concatenate if [...], solo puede reemplazar algo siguiendo un patrón específico. Entonces, en este programa, los comienzos de palabras positivas se reemplazan por los comienzos de palabras negativas. Se#agregó para asegurarse de que una vez que se agregó un nuevo comienzo, no se agregarán más nuevos comienzos. El#también hizo posible hacer 'todo lo demás: un'.El campo incorpora una nueva sustitución en la que comienza:
/^/\/\/#/. Esto reemplaza todo^con//#, que era un patrón común en la versión original.fuente
TI-Basic, 104 bytes
Requiere todas las letras mayúsculas.
Explicación:
fuente
JavaScript (
716461 bytes)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+wEdiciones:
charAt(0)->[0])fuente
w[0]lugar de hacerlow.charAt(0)?w=>...? La definición de la función real incluiríalet f=w=>...? (Probablemente cubierto en una pregunta frecuente en alguna parte ...)w=>({q:a='dis',h:a,l:'il',m:b='im',p:b,r:'ir'}[w[0]]||'un')+w3 bytes menosLote, 114 bytes
Comprueba el primer carácter de la palabra con la lista de prefijos personalizados y, de ser así, cambia el prefijo del valor predeterminado de
un. La carcasa especialques posible a un costo de 21 bytes.fuente
Haskell, 71 bytes
Ejemplo de uso:
f "legal"->"illegal". Pruébalo en línea!Cree una tabla de búsqueda de pares de prefijo / reemplazo para buscar el primer carácter de la cadena de entrada con un valor predeterminado de
"un"si no se encuentra.fuente
Retina , 54 bytes
Explicación:
Primera vez que uso Retina. Es un lenguaje bastante bueno.
Pruébalo en línea!
fuente
Javascript,
7271666160 6059 bytesw=>('dis....il.im...im.dis.ir'.split('.')[w.charCodeAt(0)-104]||'un')+ww=>'un.dis.dis.il.im.im.ir'.split('.')['qhlmpr'.indexOf(w[0])+1]+wSí, todavía es más largo que una solución existente. :)En caso de que esto necesite alguna explicación, estoy aprovechando los pares q / hym / p combinando su índice en la cadena de búsqueda con un mod 4, y luego lo uso como búsqueda en la matriz de prefijos.
fuente
searchlugar deindexOf. Y creo que un poco más usando en&lugar de%search. No puedo ver cómo hacer que el truco funcione: sería perfecto si mi matriz tuviera solo 4 elementos.C,
109107bytesPruébalo en línea!
fuente
Mathematica, 107 bytes
Explicación:
StartOfString~~x:#:>#2<>x&es una función pura donde el primer argumento es un patrón de cadena que debe coincidir al comienzo de la cadena y el segundo argumento es una cadena que antecede a la coincidencia. Devuelve una regla retrasada adecuada para su uso dentroStringReplace. Esto se aplica a cada uno de los pares que{{"q"|"h","dis"},{"l","il"},{"m"|"p","im"},{"r","ir"},{_,"un"}}dan como resultado la lista de reglasFinalmente, se pasa esta lista
StringReplaceque proporciona un operador en cadenas.fuente
PHP, 101 bytes
Versión en línea
fuente
Excel 78 bytes
Encontré algunos contendientes cercanos usando diferentes métodos que obtuvieron 81 bytes:
Y 84 bytes:
fuente
REXX, 78 bytes
Ahorra algunos bytes respondiendo en MAYÚSCULAS, por ejemplo, potente -> IMPOTENTE.
fuente
Perl, 49 + 1 (
-pbandera) = 50 bytesUtilizando:
Pruébalo en línea .
fuente
Clojure, 65 bytes
Bueno, esto es aburrido ... pero no podría hacerlo más corto. Al menos hay muy poco espacio en blanco.
fuente
OCaml, 85
Función anónima, utiliza la coincidencia de patrones en su primer carácter.
fuente