Exposición
Después de ganar el sorteo SO, podrías haber estado en la cima del mundo, ¡y lo estabas! El sorteo había estado sucediendo durante un año, ahora, y usted era uno de los cien programadores que fueron seleccionados para ingresar a la fortaleza SO. Y finalmente, la espera ha terminado. Hoy es el día que va - [continúa el texto ofuscado].
Whoops Lo siento, se supone que no debo contarlo.
De todos modos, finalmente has llegado para encontrarte con un hombre de cara estoica con un traje negro con el pequeño emblema SO en él. Él te frunce el ceño. "Los otros ya están adentro", dijo, señalando que había sido identificado en la puerta. "Con rapidez."
Te apresuras adentro, un poco asustado. ¿Qué demonios había pasado? ¿Qué estaba mal en SO? En el interior, observa que los otros 99 programadores están mirando atentamente sus pantallas, escribiendo. Usted toma el asiento restante y recibe el siguiente mensaje:
Hola programador! Parece que hemos encontrado un problema; SO ha sido penetrado por quienes no conocemos. (Personalmente, sospecho que fue un programador de Pyth o CJam, pero bueno.) Sin embargo, todo lo que se ha dañado es el editor Markdown. Bueno, en realidad, eso es bastante, pero ahí es donde entras tú.
Quiero que crees un programa (o función, no somos exigentes) que interprete un archivo de rebajas y lo convierta en nuestro nuevo "SO Beautifier-Arity -Decomposer "(también conocido como" SOBAD ") formato. Debe hacer esto en la menor cantidad de bytes: estamos ejecutando en lowdown hasta que resolvamos este problema de piratería. ¡Gracias por su tiempo y la mejor de las suertes!
Sinceramente,
The Maker of Stack Overflow
Objetivo Dado un archivo de descuento válido como entrada para su envío, realice y genere las siguientes transformaciones en la entrada:
(Cuando uso el +
símbolo, me refiero al operador RegExp "una o más instancias de caracteres anteriores", no un signo más literal).
- Transforme todos los encabezados de Nivel 1 (
# ...
o...\n=+
) a{ ... }
,...
convirtiéndose en TODAS LAS MAYÚSCULAS. - Transforme todos los encabezados de Nivel 2 (
## ...
o...\n-+
) a{{ ... }}
, con cada palabra en mayúscula - Transforme todos los encabezados de Nivel 3 (
### ...
) en mayúsculas pequeñas; es decir, todas las letras (sin distinción entre mayúsculas y minúsculas) se asignan deᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ
una manera respectiva. - Transforme todas las instancias en negrita (
**...**
) a...
,...
convirtiéndose en TODAS LAS MAYÚSCULAS. - Transforme todas las instancias en cursiva (
_..._
) a. . .
, donde se ha insertado un espacio entre cada par de caracteres. - Transforme todas las instancias de código (
`...`
) a< ... >
. - Transforme todas las instancias tachadas (
---...---
) a-.-.-.-
, donde-
se ha insertado a entre cada par de caracteres. - Transforme todas las instancias de lista numeradas (
N. {a}\nN. {b} ...
dondeN
coincide con la expresión regular[0-9]+
) a (1. {a}\n 2. {b}...
) - Transforme todas las instancias de lista desordenadas (
* ...\n* ...
...) a (o ...\n o ...
...)
Más detalles
- Los encabezados y las instancias de lista solo se encontrarán al comienzo de las líneas, sin embargo, pueden estar rodeados por una cantidad de espacios en blanco.
- Habrá casos no vinculados, por ejemplo,
*a_*a_
no es válida para nuestros estándares, ni nada por el estilo__a__
,*_a_*
o_*a*_
aparecen en una entrada. - Un encabezado multilínea es válido si y solo si la
-
o=
s sigue directamente una línea de texto. - Ningún encabezado contendrá otras entidades de rebajas. Por ejemplo,
# `code` snippet
no es una entrada válida para nuestros propósitos. - No tiene que tener en cuenta los encabezados de nivel 4+
- No tiene que preservar los espacios en exceso (es decir,
> 1
espacios) dentro del archivo, por lo que está bien tener**hello there**
que convertirse**hello there**
pero no**hellothere**
. Del mismo modo, los espacios iniciales y finales encontrados en una línea no tienen que ser preservados - No se encontrarán tabuladores en la entrada.
- NO HABRÁ INSTANCIAS ANIDADAS. Por ejemplo,
***...***
nunca ocurriría. - Un espacio siempre seguirá una viñeta desordenada (por ejemplo,
* ...
no*...
) - Los elementos de la lista en listas ordenadas y no ordenadas siempre consistirán en una sola línea.
- Los pares de caracteres inigualables deben ser ignorados. Por ejemplo,
** cool
y`java::def
debería permanecer igual.
Métodos de entrada
La entrada debe ser una de las siguientes:
- Una matriz / tupla / lista / etc. de cuerdas.
- O una cadena que contiene nuevas líneas para separar las líneas.
Utilice el equivalente más cercano de su idioma a los tipos de datos mencionados anteriormente si su idioma no los admite. (Por ejemplo, TI-BASIC no admite (1.) ... no es que TI-BASIC pueda competir, de todos modos: P).
Casos de prueba
A }
significa entrada y la siguiente línea significa salida. Múltiples }
s significan líneas de texto separadas por una nueva línea.
} Hello!
Hello!
} That _2 + 2 = 5_ challenge sure was **intense!**
That 2 + 2 = 5 challenge sure was INTENSE!
// note that there are spaces also padding it
} It's `s/a/e/g` **not** `sudo g/a/e/s`, stupid.
It's < s/a/e/g > NOT < sudo g/a/e/s >
} **WHAT!** He did _WHAT?!_
WHAT! He did W H A T ? !
} _WHAT_ is undefined, here!
W H A T is undefined, here!
} OI)(EJDSFIJK L:JP #@*REF&WDS F*(D+S +&(SDFWEF )DSF _DSF_F #R#
OI)(EJDSFIJK L:JP #@*REF&WDS F*(D+S +&(SDFWEF )DSF D S F F #R#
} # So, you wanna be a programmer, eh?
} ## Step 1: learn recursion
} ### Learning recursion requires learning recursion
} **Programming** is a futile task. _Leave w h i l e you still can!_
{SO YOU WANNA BE A PROGRAMMER, EH?}
{{Step 1: Learn Recursion}}
ʟᴇᴀʀɴɪɴɢ ʀᴇᴄᴜʀsɪᴏɴ ʀᴇǫᴜɪʀᴇs ʟᴇᴀʀɴɪɴɢ ʀᴇᴄᴜʀsɪᴏɴ
PROGRAMMING is a futile task. L e a v e w h i l e y o u s t i l l c a n ! // trailing space not required
} Haha, you're a _Java_ golfer? You'd be better of with brainf***.
Haha, you're a J a v a golfer? You'd be better of with brainf***. // less than four asterisks, do nothing
} # Reasons why NOT to use C--:
} 1. It doesn't exist.
} 2. I don't care.
{REASONS WHY NOT TO USE C--:}
1. It doesn't exist.
2. I don't care.
} 1. This is a test!
} 1. <-- And this actually works in Markdown.
1. This is a test!
2. <-- And this actually works in Markdown. // less than three -s, ignore
} * no.
} * NOOO.
} * fine.
o no.
o NOOO.
o fine.
} Python, ---34--- 3 bytes.
Python, -3-4- 3 bytes.
} ---Long line of crossed text.---
-L-o-n-g- -l-i-n-e- -o-f- -c-r-o-s-s-e-d- -t-e-x-t-.-
} ** cool!
** cool! // is not a bullet point, because a space doesn't follow the *; Isn't bold, because there is no matching **
-- end of test cases --
Prima
- -19 bytes si admite el escape de caracteres (para que sean tratados como "normales"); puedes elegir cualquier personaje de escape, pero sugeriría
\
o^
. Tenga en cuenta que el sistema de escape en los sitios SO es diferente de lo que estoy sugiriendo (y más complicado), ¡así que no lo haga! SO lo trataría`\`
como\
, pero me gustaría que trataras al segundo`
como un personaje normal, y en su lugar coincidirías con el siguiente`
personaje.
***word***
convierte* * w o r d * *
después de aplicar la transformación en cursiva, y de repente la transformación en negrita no se aplica. No está claro cómo manejar esto.Respuestas:
Python 3 ,
652640 bytesPruébalo en línea!
fuente