Para neutralizar los datos, reemplace recursivamente todos los números (¡no dígitos!) Con ceros y todos los caracteres (¡no cadenas!) Con espacios.
Debe aceptar cualquier número, carácter o cadena, o posiblemente una matriz * recursiva de datos numéricos / caracteres mixtos que su idioma pueda manejar. Por ejemplo, debe aceptar cadenas reales (y no restringir su entrada a listas de caracteres individuales) si su idioma puede manejarlas.
Si su idioma contiene una función integrada que realiza toda o la mayor parte de esta tarea, agradecería una versión alternativa adicional sin ella.
El envío más corto en cada idioma es un ganador, y recibiré un voto positivo de mi parte.
Casos de muestra
""
→""
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 su idioma tiene varios tipos que pueden representar igualmente matrices como los ejemplos anteriores, puede optar por admitir solo uno. Dos entradas pueden ganar, aunque estén usando el mismo idioma, cada una con un tipo de datos diferente.
Respuestas:
JavaScript (ES6),
5347 bytesCasos de prueba
Mostrar fragmento de código
fuente
big()
! Sinraw()
embargo , es probable que en su lugar proporcione mejores pruebas de futuro .raw()
? No creo queString.prototype.raw()
esté definido. SoloString.raw()
esPython 2 , 52 bytes
Pruébalo en línea!
Cómo funciona
Python te permite comparar diferentes tipos. Los tipos numéricos siempre son más pequeños que los iterables, y los iterables se ordenan por sus nombres de tipo, por lo que
De esta manera, f hace lo siguiente.
Si x es numérico,
x<{}
devuelve True y1-(x<{})
devuelve 0 . El código posteriorand
no se ejecuta.Si x es iterable,
1-(x<{})
devuelve 1 (verdadero), por lo que el código posteriorand
se ejecuta.Si x es una lista,
x<''
es verdadero y f se asigna sobre sus elementos.Si x es una cadena,
x<''
es falsa y x se reemplaza con una cadena de espacios de la misma longitud.fuente
Ruby,
54 5349 bytesTal vez hay una mejor manera, pero:
fuente
a.map
a[*a].map
él funciona como se esperabaMathematica, 51 bytes
Actualmente tengo dos soluciones en este recuento de bytes:
El segundo arroja un montón de advertencias que pueden ignorarse.
Explicación
En cualquier caso, comenzamos convirtiendo los números en ceros con
Luego, para procesar la cadena, hay dos opciones. O bien, usamos otra sustitución que solo se aplica a cadenas:
O bien, utilizamos el
MapAll
operador//@
que asigna una función sobre cada elemento individual en una lista anidada. El problema aquí es que intentaremos usar tantoStringReplace
en ceros como en el símboloList
(ya que//@
también pasa por las cabezas de las expresiones), por lo que debemos usarCheck
(algo así como unacatch
declaración en otros idiomas) para evitar causar estragos en esos valores:fuente
Jalea , 4 bytes
Este es un enlace monádico. La impresión implícita de Jelly hace mucho ruido; para verificar que la salida es lo que debería ser, puede ver la representación interna con
ŒṘ
. Tenga en cuenta que esto expone las cadenas como listas de caracteres, que es cómo los implementa el intérprete Jelly.Pruébalo en línea!
Cómo funciona
fuente
[[["H"],"e",1,1,0],[[-3],"arth"]]
en APL ...JSON2APLexpr←⎕SE.Dyalog.Utils.repObj 7159⌶ ⋄ JSON2APLexpr'[[["H"],"e",1,1,0],[[-3],"arth"]]'
da((,⊂,'H') (,'e') 1 1 0) ((,¯3) 'arth')
. FYI,7159⌶
estará⎕JSON
en la versión 16.0.Perl 6,
3448 bytesExpandido:
fuente
.deepmap
no funciona correctamente para entradas singulares como"X"
o7
, porque siempre devuelve una Lista.GAP , 91 bytes
GAP tiene un método
Zero
que devuelve el elemento aditivo neutral correspondiente a un elemento de una estructura aditiva. Eso maneja números e incluso listas de números que se consideran vectores, pero no listas arbitrarias. Así que agreguemos estos y Chars y usemos que las cadenas son listas de Chars:(No estoy contando la nueva línea ya que no es necesaria). Por supuesto, esto está muy lejos del uso previsto de
Zero
, y GAP se quejaría si no hubiera usadoInstall
OtroMethod
. Ahora puedo hacer:No diría que la mayoría de los trabajos incorporados, uno podría sospechar que escribir una función normal debería ser más corta, pero mi mejor intento fue de 92 bytes:
fuente
Haskell, 115 bytes
Mi idioma no puede manejar ninguna combinación de números y cadenas en las listas (pero, por supuesto, puede definir un tipo de suma y ponerlo en una lista), y sus listas estándar no pueden manejar listas anidadas de manera diferente. Así que solo estoy haciendo lo que puede manejar. Creo que no es injusto porque todavía es largo, y lo hago principalmente para mostrar características de Haskell que rara vez se ven en las soluciones de golf de Haskell. Tenga en cuenta que las cadenas son listas de caracteres.
Esto maneja cualquier número como Doble:
fuente
data N=S[Char]|I Int|L[N]
una función recursiva sobre eso.PHP, 91 bytes
si el parámetro es array: recurse usando
array_map
.de lo contrario, si el parámetro es una cadena: genera una cadena de espacios con la misma longitud.
otra cosa
0
.is_string
ahorra un byteis_numeric
; Negaris_array()
hace que los paréntesis sean obsoletos. En total, es 17 bytes más corto queif()recursion-loop;else x?string:number
con una llamada por referencia.fuente
Python 2, 59 bytes
usa la forma de GB para determinar tipos
fuente
Lisp común, 87
Sin golf
Ejemplo
fuente
Groovy, 53 bytes
Este es un cierre sin nombre. Pruébalo aquí!
Explicacion :
Groovy tiene este método
.collectNested
que ayuda a recorrer una lista como si estuviera aplanada.Para manejar casos especiales donde solo se pasa un número entero o una cadena sin una lista, simplemente ajuste cada entrada en una lista y envíe el primer elemento.
fuente
Pyke, 8 bytes (versión anterior)
Explicación:
Esto ya no funciona como una actualización, por lo que las falsificaciones de otros tipos donde hay verdades se convierten automáticamente en falsey del tipo de verdad.
fuente
C #,
197195bytesEsta función maneja
char
,string
cualquier tipo de número incorporado y matrices recursivas.Programa completo, ayudante de salida sin problemas:
La
using
declaración solo es necesaria para el asistente de salida, no para la función real.Probar en línea
fuente
APL (Dyalog) 13.2 y anterior, 1 byte
Hasta e incluyendo la versión 13.2, monadic
∊
hizo exactamente esto. El comportamiento anterior se puede activar mediante el establecimiento⎕ML
( M igraci L evel) a cero.Pruébalo en línea!
Sin usar el comportamiento anterior es de 4 bytes:
Pruébalo en línea!
⊂
encerrar0⍴
hacer una lista de longitud cero de copias de toda la entrada (conserva solo la estructura y la información de tipo)⊃
coaccionar un elemento a partir de eso (crea una matriz prototípica)fuente
Javascript ES6, 81 caracteres
Prueba:
fuente
Java 7, 262 (268) bytes
282 + 6 para el agregado
\"
y'
para imprimir bonitas las Cadenas y los caracteres.Explicación:
Código de prueba:
Pruébalo aquí
Salida:
fuente