Es un doble + encabezado!

13

Relacionado

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} ...donde Ncoincide 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` snippetno 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, > 1espacios) 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, ** cooly `java::defdebería permanecer igual.

Métodos de entrada

La entrada debe ser una de las siguientes:

  1. Una matriz / tupla / lista / etc. de cuerdas.
  2. 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

  1. -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.
Conor O'Brien
fuente
2
La especificación es demasiado débil para una pregunta de golf.
feersum
44
Gracias, downvoters, por decirme exactamente lo que estoy haciendo mal. Realmente me ayuda a mejorar esta pregunta.
Conor O'Brien
44
Creo que hay casos en los que aplicar una transformación podría cambiar si se aplica otra transformación. Por ejemplo, se ***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.
Rainbolt
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Hay una serie de problemas señalados en los comentarios, que tienen votos a favor. No creo que los votantes negativos descuiden intencionalmente proporcionar comentarios; Es probable que solo estén votando los comentarios existentes.
Alex A.
1
@AlexA. Cuando ocurrieron ambos votos negativos, no hubo votos positivos en los comentarios, ni durante un período posterior.
Conor O'Brien

Respuestas:

1

Python 3 , 652 640 bytes

import re
def N(o):c,t,_=o.groups();x=' -'[c<'_'];return['< %s >'%t,t.upper()][c<'`']if c in'**`'else x+x.join(t)+x
def f(s):
 S=[];i=0
 while s:
  l=s.pop(0);n=set(*s[:1])
  if n<={*'=-'}and n:s=s[1:];l='#'*('-'in n)+'# '+l
  if'# '==l[:2]:l='{%s}'%l[2:].upper()
  if'## '==l[:3]:l='{{%s}}'%l[3:].title()
  if'### '==l[:4]:l=''.join('ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ'[ord(c)-65]if'@'<c<'['else c for c in l[4:].upper())
  l=re.sub(('(\*\*|_|---|`)(.*?)'*2)[:-5],N,re.sub(r'^\s*[*] (.*)',r' o \1',l))
  if re.match(r'\s*\d+\. ',l):i+=1;l=re.sub(r'\s*\d+\.(.*)',' %d.'%i+r'\1',l)
  else:i=0
  S+=[l]
 return S

Pruébalo en línea!

TFeld
fuente