ed, 35 caracteres
s/[a-zA-Z]*\([a-zA-Z]\)\|./\1/g
p
Q
Entonces, el mundo termina en ed. Como me gusta ser demasiado literal, decidí escribir para escribir la solución con ed, y aparentemente es en realidad un lenguaje de programación . Es sorprendentemente corto, incluso considerando que ya existen muchas soluciones más cortas en este hilo. Sería mejor si pudiera usar algo diferente [a-zA-Z]
, pero teniendo en cuenta que ed no es un lenguaje de programación, en realidad es lo suficientemente bueno.
Primero, me gustaría decir que esto solo analiza la última línea del archivo. Sería posible analizar más, simplemente escriba ,
al comienzo de las dos primeras líneas (esto especifica el rango "todo", en oposición al rango estándar de la última línea), pero eso aumentaría el tamaño del código a 37 caracteres.
Ahora para explicaciones. La primera línea hace exactamente lo que hace la solución Perl (excepto sin soporte para caracteres Unicode). No he copiado la solución Perl, solo inventé algo similar por coincidencia.
La segunda línea imprime la última línea, para que pueda ver la salida. La tercera línea obliga a abandonar: tengo que hacerlo; de lo contrario ed
, imprimiría ?
para recordarle que no ha guardado el archivo.
Ahora para saber cómo ejecutarlo. Bueno, es muy simple. Simplemente ejecute ed
con el archivo que contiene el caso de prueba, mientras canalizo mi programa, así.
ed -s testcase < program
-s
Es silencioso. Esto evita que se ed
muestre un tamaño de archivo feo al principio. Después de todo, lo uso como un script, no como editor, por lo que no necesito metadatos. Si no hiciera eso, ed mostraría un tamaño de archivo que no podría evitar de otra manera.