Fin de las pestañas versus guerra espacial
Por lo tanto, se ha debatido mucho sobre si usar pestañas o espacios para sangrar / formatear código. ¿Puedes ayudar a la universidad a resolver la disputa yendo a un método de formateo increíblemente loco ?
Su trabajo es escribir un programa o función completa que expanda todas las pestañas en cuatro espacios. Y luego reemplaza una serie de n espacios iniciales con "/ (n - dos estrellas aquí) /". Recibirá información sobre varias líneas en cualquier formato razonable (matriz de cadenas de una sola cadena para cada nueva línea. Matriz de columnas, etc.)
Entrada de muestra robada descaradamente . Tenga en cuenta que, dado que las pestañas se expanden automáticamente a cuatro espacios en SE, lo represento como el carácter "^", pero también debe manejar las pestañas (punto de código 0x09). Todos los caracteres "^" representan una tabulación.
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
Not zero so multiply by 256 again to get 65536
[>++++<-]>[<++++++++>-]<[>++++++++<-]
+>[>
# Print "32"
++++++++++[>+++++<-]>+.-.[-]<
<[-]<->] <[>>
# Print "16"
+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
# Print "8"
++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
^this is preceded by a tab
^^two tabs
^^^three tabs etcetera!
Salida de muestra
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
/**/Not zero so multiply by 256 again to get 65536
/**/[>++++<-]>[<++++++++>-]<[>++++++++<-]
/**/+>[>
/******/# Print "32"
/******/++++++++++[>+++++<-]>+.-.[-]<
/**/<[-]<->] <[>>
/******/# Print "16"
/******/+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
/**/# Print "8"
/**/++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
/**/this is preceded by a tab
/******/two tabs
/**********/three tabs etcetera!
Debido a que la universidad necesita espacio para descargar tanto Vim como Emacs, se le permite muy poco almacenamiento para su código. Por lo tanto, este es el código de golf y gana el código más corto. Puede suponer que la entrada está bien formada y que las líneas con menos de cuatro espacios (después del reemplazo de pestañas) pueden dar lugar a un comportamiento indefinido.
Renuncia
Esta estrategia de formato "excelente" surgió por cortesía de Geobits y se reproduce con su permiso. Ningún programador resultó dañado durante la producción de este desafío.
/*
, o se puede suponer que no es una "entrada bien formada"? Un archivo fuente de C ++ habría sido una mejor prueba, porque su comentario multilínea /* */
posiblemente rompería algunas respuestas que reemplazan primero y último de los espacios iniciales con an /
, y luego proceda a llenar espacios con *
.
/* */
código C ++, pero esta vez al principio de la línea. Según su especificación, debe dejarse como está. Aquí la trampa es, y ya detectó respuestas incorrectas, que una expresión regular como, por ejemplo, /\** /
utilizada para llenar esos espacios entre // con asteriscos convertiría la línea /***/
. También he visto esta conversión /*//*/
. Asumo que ambos son incorrectos.