Pour neutraliser les données, remplacez récursivement tous les nombres (pas les chiffres!) Par des zéros et tous les caractères (pas les chaînes!) Par des espaces.
Vous devez accepter n'importe quel nombre, caractère ou chaîne unique, ou éventuellement un tableau récursif * de données numériques / caractères mixtes que votre langue peut gérer. Par exemple, vous devez accepter des chaînes réelles (et ne pas restreindre votre saisie à des listes de caractères uniques) si votre langue peut gérer de telles chaînes.
Si votre langue contient une fonction intégrée qui effectue tout ou la plupart de cette tâche, j'apprécierais une version alternative supplémentaire sans elle.
La soumission la plus courte dans chaque langue est gagnante et recevra un vote positif de ma part.
Exemples de cas
""
→""
7
→0
123.456
→0
"X"
→" "
" "
→" "
"Yo!"
→" "
[]
→[]
[-1.2E3]
→[0]
["Hey"]
→[" "]
["H","e","y"]
→[" "," "," "]
["R",2,"D",2]
→[" ",0," ",0]
["C","3","P",0]
→[" "," "," ",0]
["THX",[1138]]
→[" ",[0]]
["T","H","X",[1138]]
→[" "," "," ",[0]]
[[["H"],"e",1,1,0],[[-3],"arth"]]
→[[[" "]," ",0,0,0],[[0]," "]]
* Si votre langue a plusieurs types qui peuvent tout aussi bien représenter des tableaux comme les exemples ci-dessus, vous pouvez choisir d'en prendre en charge un seul. Deux entrées peuvent gagner toutes les deux, même si elles utilisent la même langue, en utilisant chacune un type de données différent.
Réponses:
JavaScript (ES6),
5347 octetsCas de test
Afficher l'extrait de code
la source
big()
! Cependant, vous fourniriez probablement une meilleure pérennité en utilisantraw()
plutôt.raw()
? Je ne pense pas que ceString.prototype.raw()
soit défini. SeulementString.raw()
.Python 2 , 52 octets
Essayez-le en ligne!
Comment ça marche
Python vous permet de comparer différents types. Les types numériques sont toujours plus petits que les itérables, et les itérables sont triés par leur nom de type, donc
De cette façon, f fait ce qui suit.
Si x est numérique,
x<{}
renvoie True et1-(x<{})
renvoie 0 . Le code suivantand
n'est pas exécuté.Si x est itérable,
1-(x<{})
renvoie 1 (véridique), donc le code aprèsand
est exécuté.Si x est une liste,
x<''
est vrai et f est mappé sur ses éléments.Si x est une chaîne,
x<''
est faux et x est remplacé par une chaîne d'espaces de même longueur.la source
Rubis,
54 5349 octetsIl y a peut-être une meilleure façon, mais:
la source
a.map
de[*a].map
cela fonctionne comme prévuMathematica, 51 octets
J'ai actuellement deux solutions pour ce nombre d'octets:
Le second lance un tas d'avertissements qui peuvent être ignorés.
Explication
Dans les deux cas, nous commençons par transformer les nombres en zéros avec
Ensuite, pour traiter la chaîne, il y a deux options. Soit, nous utilisons une autre substitution qui ne s'applique qu'aux chaînes:
Ou, nous utilisons l'
MapAll
opérateur//@
qui mappe une fonction sur chaque élément unique d'une liste imbriquée. Le hic ici est que nous allons essayer d'utiliser desStringReplace
zéros ainsi que le symboleList
(car//@
il passe également par les têtes d'expressions), nous devons donc utiliserCheck
(un peu comme unecatch
déclaration dans d'autres langues) pour éviter de faire des ravages avec ces valeurs:la source
Gelée , 4 octets
Ceci est un lien monadique. L'impression implicite de Jelly fait beaucoup d'éclaboussures; pour vérifier que la sortie est ce qu'elle devrait être, vous pouvez afficher la représentation interne avec
ŒṘ
. Notez que cela expose les chaînes sous forme de listes de caractères, c'est ainsi que l'interpréteur Jelly les implémente.Essayez-le en ligne!
Comment ça marche
la source
[[["H"],"e",1,1,0],[[-3],"arth"]]
APL ...JSON2APLexpr←⎕SE.Dyalog.Utils.repObj 7159⌶ ⋄ JSON2APLexpr'[[["H"],"e",1,1,0],[[-3],"arth"]]'
donne((,⊂,'H') (,'e') 1 1 0) ((,¯3) 'arth')
. Pour info,7159⌶
sera⎕JSON
en version 16.0.Perl 6,
3448 octetsÉtendu:
la source
.deepmap
ne fonctionne pas correctement pour les entrées singulières comme"X"
ou7
, car il renvoie toujours une liste.GAP , 91 octets
GAP a une méthode
Zero
qui renvoie l'élément additif neutre correspondant à un élément d'une structure additive. Cela gère les nombres et même les listes de nombres qui sont considérés comme des vecteurs, mais pas des listes arbitraires. Ajoutons donc ceux-ci et les caractères et utilisons que les chaînes sont des listes de caractères:(Je ne compte pas la nouvelle ligne car elle n'est pas nécessaire.) Bien sûr, cela est loin de l'utilisation prévue de
Zero
, et GAP se plaindrait si je n'avais pas utiliséInstall
AutreMethod
. Maintenant je peux faire:Je ne dirais pas que le builtin fait la plupart du travail, on pourrait plutôt penser que l'écriture d'une fonction normale devrait être plus courte, mais mon meilleur essai était de 92 octets:
la source
Haskell, 115 octets
Ma langue ne peut gérer aucun mélange de nombres et de chaînes dans les listes (mais bien sûr, vous pouvez définir un type de somme et le mettre dans une liste), et ses listes standard ne peuvent pas gérer différemment les listes imbriquées. Je fais donc juste ce qu'il peut gérer. Je pense que ce n'est pas injuste car il est encore long, et je le fais principalement pour montrer les caractéristiques de haskell qui sont rarement vues dans les solutions de golf de haskell. Notez que les chaînes sont des listes de caractères.
Cela gère tout nombre comme Double:
la source
data N=S[Char]|I Int|L[N]
et une fonction récursive à ce sujet.PHP, 91 octets
si le paramètre est un tableau: recurse en utilisant
array_map
.sinon si le paramètre est une chaîne: générez une chaîne d'espaces de même longueur.
sinon
0
.is_string
enregistre un octet de plusis_numeric
; la négationis_array()
rend les parenthèses obsolètes. Au total, il est de 17 octets plus courtif()recursion-loop;else x?string:number
qu'avec un appel par référence.la source
Python 2, 59 octets
utilise la méthode de GB pour déterminer les types
la source
Lisp commun, 87
Non golfé
Exemple
la source
Groovy, 53 octets
Il s'agit d'une fermeture sans nom. Essayez-le ici!
Explication :
Groovy a cette méthode
.collectNested
qui aide à parcourir une liste comme si elle était aplatie.Pour gérer des cas particuliers où seul un entier ou une chaîne est passé sans liste, il suffit d'encapsuler chaque entrée dans une liste et de sortir le premier élément.
la source
Pyke, 8 octets (ancienne version)
Explication:
Cela ne fonctionne plus car une mise à jour a fait en sorte que les faux d'autres types où il y a des vérités se convertissent automatiquement en falsey du type véridique.
la source
C #,
197195 octetsCette poignée de fonction
char
,string
tout type de nombre de tableaux et builtin récursives.Programme complet, assistant de sortie non golfé:
L'
using
instruction n'est nécessaire que pour l'assistant de sortie, pas pour la fonction réelle.Essayez en ligne
la source
APL (Dyalog) 13.2 et versions antérieures, 1 octet
Jusqu'à et y compris la version 13.2, monadic
∊
faisait exactement cela. L'ancien comportement peut être activé par le réglage⎕ML
( M igration L Evel) à zéro.Essayez-le en ligne!
Sans utiliser l'ancien comportement, il s'agit de 4 octets:
Essayez-le en ligne!
⊂
joindre0⍴
faire une liste de longueur nulle des copies de l'entrée entière (ne conserve que la structure et les informations de type)⊃
contraindre un élément à partir de cela (crée un tableau prototypique)la source
Javascript ES6, 81 caractères
Tester:
la source
Java 7, 262 (268) octets
282 + 6 pour l'ajout
\"
et'
pour imprimer la chaîne et les caractères.Explication:
Code de test:
Essayez-le ici.
Sortie:
la source