Mettre fin aux onglets contre la guerre spatiale
Ainsi, il y a eu beaucoup de débats sur l'opportunité d'utiliser des tabulations ou des espaces pour indenter / formater le code. Pouvez-vous aider l'université à régler le différend en adoptant une méthode de mise en forme unique et incroyablement folle ?
Votre travail consiste à écrire un programme ou une fonction complète qui étend tous les onglets en quatre espaces. Et puis remplace une série de n espaces de tête par "/ (n - deux étoiles ici) /". Vous recevrez une entrée sur plusieurs lignes dans n'importe quel format raisonnable (un seul tableau de chaînes de chaînes pour chaque nouvelle ligne. Tableau en colonnes, etc.)
Exemple d'entrée volée sans vergogne . Notez que puisque les tabulations sont étendues automatiquement à quatre espaces sur SE, je le représente comme le caractère "^", mais vous devez également gérer les tabulations (codepoint 0x09). Tous les caractères "^" représentent une tabulation.
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!
Exemple de sortie
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!
Parce que l'université a besoin d'espace pour télécharger à la fois Vim et Emacs, vous avez très peu de stockage pour votre code. C'est donc le code-golf et le code le plus court l'emporte. Vous pouvez supposer que l'entrée est bien formée et que les lignes avec moins de quatre espaces (après le remplacement des tabulations) peuvent entraîner un comportement non défini.
Avertissement
Cette "excellente" stratégie de formatage est une gracieuseté de Geobits et est reproduite avec sa permission. Aucun programmeur n'a été blessé lors de la production de ce défi.
/*
, ou peut-on supposer que ce n'est pas une «entrée bien formée»? Un fichier source C ++ aurait été un meilleur test, car son commentaire multiligne /* */
pourrait éventuellement casser certaines réponses qui remplacent le premier et le dernier des espaces de tête par un /
, puis continuer à remplir les espaces avec *
.
/* */
code C ++, mais cette fois au début de la ligne. Selon vos spécifications, il doit être laissé tel quel. Ici, le piège est, et a déjà repéré de mauvaises réponses, qu'un regex comme disons /\** /
utilisé pour remplir ces espaces entre // avec des astérisques transformerait la ligne en /***/
. J'ai également vu cette conversion /*//*/
. Je suppose que les deux sont incorrects.