Algunas personas insisten en usar espacios para tabulación y sangría.
Para la tabulación, eso es indiscutiblemente incorrecto. Por definición, los tabuladores deben usarse para la tabulación.
Incluso para la sangría, los tabuladores son objetivamente superiores:
Existe un claro consenso en la comunidad de Stack Exchange.
Usar un solo espacio para la sangría es visualmente desagradable; usar más de uno es un desperdicio.
Como todos los jugadores de bacalao
y golfsaben, los programas deben ser lo más cortos posible. No solo ahorra espacio en el disco duro, sino que también se reducen los tiempos de compilación si hay que procesar menos bytes.Al ajustar el ancho de la pestaña 1 , el mismo archivo se ve diferente en cada computadora, por lo que todos pueden usar su ancho de sangría favorito sin modificar el archivo real.
Todos los buenos editores de texto usan tabuladores por defecto (y definición).
¡Lo digo y siempre tengo razón!
Lamentablemente, no todos escuchan la razón. Alguien le ha enviado un archivo que lo está haciendo mal TM y usted tiene que arreglarlo. Podrías hacerlo manualmente, pero habrá otros.
Ya es bastante malo que los espaciadores estén desperdiciando su valioso tiempo, por lo que decide escribir el programa más corto posible para solucionar el problema.
Tarea
Escriba un programa o una función que haga lo siguiente:
Lea una sola cadena desde STDIN o como una línea de comando o argumento de función.
Identifique todas las ubicaciones donde se hayan utilizado espacios para tabulación o sangría.
Una serie de espacios es una sangría si ocurre al comienzo de una línea.
Una serie de dos o más espacios es tabulación si no es una sangría.
Un espacio único que no es sangrado puede o no haber sido usado para tabulación. Como era de esperar cuando usas el mismo personaje para diferentes propósitos, no hay una manera fácil de saberlo. Por lo tanto, diremos que el espacio se ha utilizado para la confusión .
Determine el ancho de pestaña 1 más largo posible para el que todos los espacios utilizados para tabulación o sangría se puedan reemplazar con tabuladores, sin alterar la apariencia del archivo.
Si la entrada no contiene ni tabulación ni sangría, es imposible determinar el ancho de la pestaña. En este caso, omita el siguiente paso.
Usando el ancho de tabulación previamente determinado, reemplace todos los espacios utilizados para tabulación o sangría con tabuladores.
Además, siempre que sea posible sin alterar la apariencia del archivo, reemplace todos los espacios utilizados para la confusión con tabuladores. (En caso de duda, elimine los espacios).
Devuelva la cadena modificada de su función o imprímala en STDOUT.
Ejemplos
Todos los espacios de
a bc def ghij
son tabulación
Cada serie de espacios rellena la cadena anterior de caracteres que no son espacios con un ancho de 5, por lo que el ancho de tabulación correcto es 5 y el resultado correcto 2 es
a--->bc-->def->ghij
Los dos primeros espacios de
ab cde f ghi jk lm
son tabulación, los otros confunden.
El ancho de pestaña correcto es 4, por lo que la salida correcta 2 es
ab->cde>f ghi>jk lm
El último espacio permanece intacto, ya que se representaría como dos espacios si se reemplaza por un tabulador:
ab->cde>f ghi>jk->lm
Todos menos uno espacios de
int main( ) { puts("TABS!"); }
son sangría, el otro es confusión.
Los niveles de sangría son 0, 4 y 8 espacios, por lo que el ancho de pestaña correcto es 4 y la salida correcta 2 es
int --->main( ) --->{ --->--->puts("TABS!"); --->}
El espacio en
( )
se representaría como tres espacios si se reemplaza por un tabulador, por lo que permanece intacto.Los dos primeros espacios de
x yz w
son sangría, los demás confusión.
El ancho de pestaña adecuado es 2 y la salida correcta 2 es
->x>yz w
El último espacio se representaría como dos espacios si se reemplaza por un tabulador, por lo que permanece intacto.
Los dos primeros espacios de
xy zw
son sangría, los otros tres son tabulación.
Solo un ancho de tabulación de 1 permite eliminar todos los espacios, por lo que la salida correcta 2 es
>>xy>>>zw
Todos los espacios de
a b c d
son confusión
No existe el ancho de pestaña más largo posible, por lo que la salida correcta 2 es
a b c d
Reglas adicionales
La entrada consistirá completamente en caracteres ASCII imprimibles y saltos de línea.
Puede suponer que hay como máximo 100 líneas de texto y como máximo 100 caracteres por línea.
Si elige STDOUT para la salida, puede imprimir un solo salto de línea final.
Aplican reglas estándar de código de golf .
1 El ancho de tabulación se define como la distancia en caracteres entre dos tabulaciones consecutivas , utilizando una fuente monoespaciada.
2 Las flechas de arte ASCII representan los tabuladores que Stack Exchange se niega a representar correctamente, para lo cual he enviado un informe de error. La salida real debe contener tabuladores reales.
programs should be as short as possible
¡Creo que he encontrado al hermano perdido de Arthur Whitney!