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 happiness
va 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
q
sin au
?qadi
,qat
, el ya mencionadoqi
,qirsh
yqwerty
. (Juego mucho Scrabble)q
siempre va seguido de au
en la cadena o no?u
Respuestas:
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
->ir
y todo lo demás ->un
Podemos almacenar todas estas negaciones en una sola cadena y extraer la correcta mediante el corte:
Ahora necesitamos calcular el índice de inicio
i
.'rlmphq'.find
devuelve 0 para'r'
, 5 paraq
y -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
ddiiiiuiimmlrnss
yrlmphq
el número5
de, ¿Por qué el salto el segmento 7?GNU sed , 50 bytes
Incluye +1 para
-r
Nada sofisticado. Utiliza
&
el reemplazo para combinar algunas sustituciones yt
omitir 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
r
en“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 seah
op
.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')+w
Ediciones:
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')+w
3 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 especialqu
es 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')+w
w=>'un.dis.dis.il.im.im.ir'.split('.')['qhlmpr'.indexOf(w[0])+1]+w
Sí, 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
search
lugar 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
StringReplace
que 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 (
-p
bandera) = 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