Escriba un programa para reemplazar todas las ocurrencias de "fuerza" con "primero" y todas las ocurrencias de "primero" con "fuerza", manteniendo el caso original para todas las posiciones de los personajes:
"ForcefoRcefOrcE" -> "FirstfiRstfIrsT"
"FirstfiRstfIrsT" -> "ForcefoRcefOrcE"
El resto de la cadena debe permanecer sin cambios, por lo que ejecutar su programa dos veces devolverá la cadena original:
"thirst of forces" -> "thirst of firsts" -> "thirst of forces"
Su programa debería funcionar en cualquier cadena inicial. Entonces, como pista, es mejor que evites usar caracteres mágicos como representación intermedia, porque si intentas un reemplazo de tres pasos ( "force" -> "zzzzz", "first" -> "force", "zzzzz" -> "first"
), fallará en las cadenas que contengan "zzzzz"
.
Debe admitir la gama completa de caracteres permitidos en una definición de una Cadena por su lenguaje de programación (en la mayoría de los casos, es Unicode). Ejemplo, usando la representación de estilo JSON para caracteres no imprimibles (\ u + 4 dígitos):
"\u0000\u0001\u0002\u0003the Force of the firsT"
|
V
"\u0000\u0001\u0002\u0003the First of the forcE"
[Ff]
no está allí, entonces no debes reemplazar la palabra.Respuestas:
Retina , 33 bytes
Pruébalo en línea!
Editar: Guardado 5 bytes gracias a @MartinEnder por señalar qué
Ro
hace.fuente
Ro
.R
efecto de los rangos; por ejemplo, nunca me habría dado cuenta de queRE
es equivalente a86420
si no lo hubieras señalado.JavaScript (ES6),
9388 bytesEditar: se guardaron 5 bytes al optimizar la letra mayúscula sin cambios.
fuente
APL (Dyalog) , 61 bytes
Requiere
⎕IO←0
cuál es el predeterminado en muchos sistemas. Pueden ser cuatro caracteres más cortos usando el símbolo Unicode en⍠
lugar de⎕OPT
.Pruébalo en línea!
fuente
PHP, 88 bytes
Versiones en linea
PHP, 110 bytes
fuente
$t[0]^first^force
lugar destrtr()
.Perl 5 , 52 bytes
51 bytes de código +
-p
bandera.Pruébalo en línea!
No pasa nada loco. Encuentre las ocurrencias de
force
yfirst
no distingue entre mayúsculas y minúsculas (s%force|first%%gi
), y luego translitera los caracteres para convertir uno a otro.fuente
CJam, 66 bytes
Pasa por cada variación de caso de "primero" y "fuerza" e intenta dividirse en él. Si puede, lo une de nuevo con las palabras inversas.
Pseudocódigo:
fuente
f
es relevante para evitar cambiarthirst
athorce
odivorce
dentrodivirst
?Java 7,
318310 bytesOk, esto fue bastante difícil en Java ...
Explicación:
Código de prueba:
Pruébalo aquí
Salida:
fuente
c(c("..."))
!Jalea ,
3736 bytes¿Hay alguna forma de usar una reducción en los cortes de longitud 5 en su lugar?
Pruébalo en línea!
¿Cómo?
fuente
MATL , 47 bytes
Pruébalo en línea!
Esto usa valores negativos como el paso intermedio, y después de las dos pasadas toma el valor absoluto.
fuente
Pyth ,
3635 bytesPruébalo en línea!
Pyth no es especialmente bueno en manipulaciones de cuerdas.
fuente
Flex (lexer), 72 bytes
Para compilar y ejecutar:
fuente
first.l:3: EOF encountered inside an action
(oh, no importa: requiere una nueva línea al final)ld: library not found for -lfl
(oh, no importa, el comando estágcc lex.yy.c -ll
en macOS)Python 2, 171 bytes
Quería intentar hacer esto usando los elementos integrados, pero no puede superar el método desordenado con toda la división y la compresión.
Creo que está bastante claro lo que estoy haciendo aquí. Divida la cadena en instancias de first y force (no distingue entre mayúsculas y minúsculas), reemplace esas instancias con versiones traducidas usando str.translate y vuelva a unirlas en una cadena.
Pruébalo en línea!
fuente
Python 2.7,
173165 bytes8 bytes guardados por quintopia
Este se puso asqueroso:
Pruébalo en línea
Desglosándolo paso a paso:
S.lower().split("force")
: toma la cadena, unifica a minúsculas, divide en subcadenas separadas por"force"
s.replace("first","force")for s in <STEP 1>
: Reemplaza todo"first"
con"force"
_`.join("first".join(<STEP 2>)`[2::5]`_
: reemplace todos"force"
con"first"
recombinando el"force"
subcadenas delineadas con"first"
y vuelva a unirse en una sola cadena (subrayados añadidos para obtener las marcas correctas)zip(<STEP 3>,[(2,1)[l.isupper()]for l in S])
: comprime cada carácter de la frase reemplazada con codificación de mayúsculas y minúsculas de la cadena original (2 para minúsculas, 1 para mayúsculas)_`[(t[0],t[0].upper())[t[1]==1]for t in <STEP 4>]`[2::5]`_
: Restaura la carcasa original, convierte la lista en cadena (se agregan guiones bajos para obtener las marcas correctas)fuente
C (sonido metálico) ,
201183226214 bytesTenía algunos errores ... Todavía necesita mucho golf
(ahorrado 12 gracias a ceilingcat)
Pruébalo en línea!
fuente
C # 273 bytes
Pruébalo en línea!
El puerto directo de la respuesta Java de Kevin Cruijssen , resulta cuando se trata de obtener el carácter en una cadena en un índice dado, C # es mucho más golfista que Java (en
s[i++]
lugar des.charAt(i++)
)fuente
Japt , 41 bytes
Pruébalo en línea!
Esto sería considerablemente más corto si Japt tuviera una función de transliteración sensata ...
Versión alternativa:
Pruébalo en línea!
fuente
C #, 235 caracteres
fuente
Ruby , 55 bytes
Pruébalo en línea!
fuente
Java, 382 bytes sin contenido
Probar en línea
fuente
"The first, force,|first'forced!"
? Además, puede jugar un poco a su código actual:if(w.equalsIgnoreCase("force")|w.equalsIgnoreCase("first"))
->,z
afterString s=""
yz=w.toLowerCase();if(z.equals("force")|z.equals("first"))
. Además,'O'
puede ser79
,'C'
puede ser67
y'E'
puede ser69
. Yif
else
se puede reemplazar con un gran ternario si no, ya que ambos lo hacens+=
.non competent
en el títuloC # (269 bytes)
otra solución de c #, solo la segunda más pequeña porque declaró dos variables y, por lo tanto, no puedo usar la sintaxis lambda. oh bueno, me divertí mucho. :)
explicación:
cambie la cadena original hacia arriba, luego divídala en "FORCE" y "FIRST".
agregue los resultados y en cada división, encuentre la subcadena de cinco caracteres que se usó para dividir la cadena original usando la longitud hasta ahora de la cadena que se agrega. si fue "forzar" hacerlo "primero" y viceversa
fuente