Para neutralizar os dados, substitua recursivamente todos os números (não dígitos!) Por zeros e todos os caracteres (não cadeias!) Por espaços.
Você deve aceitar qualquer número único, caractere ou sequência ou, possivelmente, matriz recursiva * de dados numéricos / caracteres misturados que seu idioma possa manipular. Por exemplo, você deve aceitar cadeias de caracteres reais (e não restringir sua entrada a listas de caracteres únicos) se o seu idioma puder lidar com isso.
Se o seu idioma contiver um componente interno que faça toda ou a maior parte dessa tarefa, eu apreciaria uma versão alternativa adicional sem ele.
O envio mais curto em cada idioma é um vencedor e receberá um voto positivo de mim.
Casos de amostra
""
→""
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]," "]]
* Se seu idioma possui vários tipos que podem igualmente representar matrizes como os exemplos acima, você pode optar por oferecer suporte a apenas um. Duas entradas podem vencer, mesmo que estejam usando o mesmo idioma, cada uma com um tipo de dados diferente.
Respostas:
JavaScript (ES6),
5347 bytesCasos de teste
Mostrar snippet de código
fonte
big()
! No entanto, você provavelmente forneceria melhor proteção para o futuro usandoraw()
.raw()
? Eu não acho queString.prototype.raw()
está definido. SomenteString.raw()
é.Python 2 , 52 bytes
Experimente online!
Como funciona
O Python permite comparar diferentes tipos. Os tipos numéricos são sempre menores que os iteráveis, e iterables são classificados por seus nomes de tipo, portanto
Dessa forma, f faz o seguinte.
Se x for numérico,
x<{}
retorna True e1-(x<{})
retorna 0 . O código depoisand
não é executado.Se x é iterável,
1-(x<{})
retorna 1 (verdade), portanto o código apósand
é executado.Se x é uma lista,
x<''
é verdadeiro ef é mapeado sobre seus itens.Se x é uma sequência,
x<''
é falso ex é substituído por uma sequência de espaços do mesmo comprimento.fonte
Ruby,
54 5349 bytesTalvez haja uma maneira melhor, mas:
fonte
a.map
para[*a].map
ela, funciona como esperado #Mathematica, 51 bytes
Atualmente, tenho duas soluções nessa contagem de bytes:
O segundo lança um monte de avisos que podem ser ignorados.
Explicação
Em ambos os casos, começamos transformando números em zeros com
Depois, para processar a sequência, existem duas opções. Ou usamos outra substituição que se aplica apenas a strings:
Ou então, usamos o
MapAll
operador//@
que mapeia uma função sobre cada elemento em uma lista aninhada. O problema aqui é que estaremos tentando usarStringReplace
zeros e também o símboloList
(já que//@
também passa pelas cabeças das expressões), então precisamos usarCheck
(como umacatch
declaração em outras línguas) para evitar causar estragos com esses valores:fonte
Gelatina , 4 bytes
Este é um link monádico. A impressão implícita de Jelly causa muitos respingos; para verificar se a saída é o que deveria ser, é possível visualizar a representação interna com
ŒṘ
. Observe que isso expõe as strings como listas de caracteres, e é assim que o interpretador Jelly as implementa.Experimente online!
Como funciona
fonte
[[["H"],"e",1,1,0],[[-3],"arth"]]
em APL ...JSON2APLexpr←⎕SE.Dyalog.Utils.repObj 7159⌶ ⋄ JSON2APLexpr'[[["H"],"e",1,1,0],[[-3],"arth"]]'
dá((,⊂,'H') (,'e') 1 1 0) ((,¯3) 'arth')
. Para sua informação,7159⌶
estará⎕JSON
na versão 16.0.Perl 6,
34bytesExpandido:
fonte
.deepmap
não funciona corretamente para entradas singulares como"X"
ou7
, porque sempre retorna uma lista.GAP , 91 bytes
O GAP possui um método
Zero
que retorna o elemento aditivo neutro correspondente a um elemento de uma estrutura aditiva. Que lida com números e até listas de números que são considerados vetores, mas não listas arbitrárias. Então, vamos adicionar esses e Chars e usar que Strings são listas de Chars:(Não estou contando a nova linha, pois ela não é necessária.) É claro que isso está longe do uso pretendido
Zero
e o GAP reclamaria se eu não tivesse usado oInstall
OtherMethod
. Agora eu posso fazer:Eu não diria que o builtin faz a maior parte do trabalho; pode-se suspeitar que a escrita de uma função normal seja mais curta, mas minha melhor tentativa foi de 92 bytes:
fonte
Haskell, 115 bytes
Meu idioma não pode lidar com nenhuma combinação de números e seqüências de caracteres em listas (mas é claro que você pode definir um tipo de soma e colocá-lo em uma lista), e suas listas padrão não podem lidar com listas aninhadas de maneira diferente. Então, eu estou apenas fazendo o que ele pode suportar. Eu acho que isso não é injusto porque ainda é longo, e eu o faço principalmente para mostrar recursos de haskell que raramente são vistos em soluções de golfe com haskell. Observe que Strings são listas de caracteres.
Isso lida com qualquer número como Duplo:
fonte
data N=S[Char]|I Int|L[N]
uma função recursiva nela.PHP, 91 bytes
se o parâmetro for array: recurs usando
array_map
.caso contrário, se o parâmetro for string: gere uma sequência de espaços com o mesmo comprimento.
mais
0
.is_string
economiza um byteis_numeric
; negaris_array()
torna parênteses obsoletos. Ao todo, são 17 bytes mais curtos do queif()recursion-loop;else x?string:number
com uma chamada por referência.fonte
Python 2, 59 bytes
usa a maneira do GB para determinar os tipos
fonte
Lisp comum, 87
Ungolfed
Exemplo
fonte
Groovy, 53 bytes
Este é um fechamento sem nome. Experimente aqui!
Explicação :
O Groovy possui esse método
.collectNested
que ajuda a percorrer uma lista como se ela fosse achatada.Para lidar com casos especiais em que apenas um número inteiro ou uma string é passada sem uma lista, basta agrupar todas as entradas em uma lista e gerar o primeiro elemento.
fonte
Pyke, 8 bytes (versão antiga)
Explicação:
Isso não funciona mais como uma atualização, tornando-se falsificações de outros tipos em que há verdades convertidas automaticamente para o falsey do tipo verdade.
fonte
C #,
197195 bytesEssa função manipula
char
,string
, qualquer tipo de número builtin e matrizes recursiva.Programa completo, auxiliar de saída ungolfed whit:
A
using
instrução é necessária apenas para o auxiliar de saída, não para a função real.Experimente on-line
fonte
APL (Dyalog) 13.2 e anterior, 1 byte
Até e incluindo a versão 13.2, o monadic
∊
fazia exatamente isso. O comportamento antigo pode ser activada ajustando o⎕ML
( M igration L ível) a zero.Experimente online!
Sem usar o comportamento antigo, são 4 bytes:
Experimente online!
⊂
anexar0⍴
faça uma lista de cópias com comprimento zero de toda a entrada (preserva apenas informações de estrutura e tipo)⊃
coagir um elemento disso (cria uma matriz prototípica)fonte
Javascript ES6, 81 caracteres
Teste:
fonte
Java 7, 262 (268) bytes
282 + 6 para o adicionado
\"
e'
para imprimir de forma bonita a String e os caracteres.Explicação:
Código do teste:
Experimente aqui.
Saída:
fonte