EDIT: Si vous utilisez Lisp, j'ai donné quelques lignes directrices en bas pour compter les octets.
Objectif: créer la fonction la plus courte qui divise une chaîne en non-chiffres et renvoie un tableau composé uniquement de chiffres dans chaque chaîne, sans utiliser d'expressions régulières. Les zéros de tête doivent être inclus dans chaque chaîne.
Classement actuel (séparé en catégories):
- C / C ++ / C # / Java: 68 (C) ....
- GolfScript / APL / J: 13 (APL)
- Tous les autres: 17 (Bash, utilisations
tr
), 24 (Ruby)
Règles:
(Je m'excuse pour la lenteur)
- Le format doit être une fonction avec un seul argument de chaîne. Jusqu'à deux arguments supplémentaires peuvent être ajoutés si nécessaire pour le bon retour du tableau (par exemple sh / csh / DOS Batch a besoin d'une référence de variable supplémentaire pour retourner, etc.).
- La déclaration de fonction principale ne compte pas, pas plus que l'importation d'autres bibliothèques standard. `# include`s,` import`s et `using`s ne comptent pas. Tout le reste fait. Cela inclut les fonctions `# define`s et helper. Désolé pour la confusion. Référez-vous à cela comme un guide utile sur ce qui compte / ne compte pas (écrit en syntaxe de style C)
// ne compte pas dans le total, peut être omis sauf si // non évident, comme la moitié de la bibliothèque standard de Java. #include <stdio.h> importez some.builtin.Class // ne compte pas, voir ci-dessus #define printf p // compte pour le total / * Toute autre directive de préprocesseur, etc. compte. * / int i = 0; // compte someFunction (); // compte char [] [] myMainSplitFunction (char [] [] array) {// ne compte pas // Tout ici compte return returnArray; // Même cela compte. } // ne compte pas / * Tout ici compte, y compris la déclaration * / char [] [] someHelperFunction (char [] chaîne) { // des trucs } // même cela compte
- La sortie doit être un tableau de chaînes ou similaire (les listes de tableaux en Java et similaires sont acceptables). Des exemples de sortie acceptées:
String[]
,char[][]
,Array
,List
, etArray
(objet). - Le tableau doit contenir uniquement des primitives de chaîne de longueur variable ou des objets chaîne. Aucune chaîne vide ne doit être présente dans le retour, à l'exception ci-dessous. Remarque: les chaînes doivent contenir une chaîne de correspondances consécutives, comme l'exemple d'entrée et de sortie ci-dessous.
- S'il n'y a pas de correspondance, le corps de la fonction doit renvoyer
null
un tableau / liste vide ou un tableau / liste contenant une chaîne vide. - Aucune bibliothèque externe autorisée.
- Les terminaisons de ligne DOS comptent comme un octet, pas deux (déjà couvertes en méta, mais les besoins sont soulignés)
- Et la plus grande règle ici: aucune expression régulière n'est autorisée.
C'est une question de code-golf , donc la plus petite taille gagne. Bonne chance!
Et voici quelques exemples d'entrées et de sorties (avec des échappements de style C):
Entrée: "abc123def456" Sortie: ["123", "456"] Entrée: "aitew034snk582: 3c" Sortie: ["034", "582", "3"] Entrée: "as5493tax54 \\ 430-52@g9.fc" Sortie: ["5493", "54", "430", "52", "9"] Entrée: "sasprs] tore \" re \\ forz " Sortie: null, [], [""] ou similaire
Veuillez mettre combien d'octets utilisés par vos réponses, et comme toujours, bon golf!
Lignes directrices pour Lisp
Voici ce qui compte et ne compte pas dans les dialectes lisp:
;;; Option 1 (defun extract-strings (ab); ne compte pas (des trucs) ;;; Tout ici compte ); Ne compte pas ;;; Option 2 (defun extract-strings (string & aux (start 0) (end 0)); ne compte pas (des trucs) ;;; Tout ici compte ); Ne compte pas.Tous les autres lambdas comptent entièrement pour le nombre d'octets.