Um Daten zu neutralisieren, ersetzen Sie rekursiv alle Zahlen (keine Ziffern!) Durch Nullen und alle Zeichen (keine Zeichenketten!) Durch Leerzeichen.
Sie müssen eine einzelne Zahl, ein Zeichen oder eine Zeichenfolge oder möglicherweise ein rekursives Array * gemischter Zahlen- / Zeichendaten akzeptieren, die Ihre Sprache verarbeiten kann. Beispielsweise müssen Sie tatsächliche Zeichenfolgen akzeptieren (und Ihre Eingabe nicht auf Listen mit einzelnen Zeichen beschränken), wenn Ihre Sprache eine solche verarbeiten kann.
Wenn Ihre Sprache ein eingebautes Programm enthält, das alle oder die meisten dieser Aufgaben erledigt, würde ich eine zusätzliche alternative Version ohne dieses Programm begrüßen.
Die kürzeste Einsendung in jeder Sprache ist ein Gewinner und wird von mir positiv bewertet.
Beispielfälle
""
→""
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]," "]]
* Wenn Ihre Sprache über mehrere Typen verfügt, die Arrays wie die obigen Beispiele darstellen können, können Sie sich dafür entscheiden, nur einen zu unterstützen. Zwei Einträge können beide gewinnen, obwohl sie dieselbe Sprache verwenden, indem sie jeweils einen anderen Datentyp verwenden.
Antworten:
JavaScript (ES6),
53.47ByteTestfälle
Code-Snippet anzeigen
quelle
big()
! Obwohl Sieraw()
stattdessen wahrscheinlich eine bessere Zukunftssicherheit bieten würden .raw()
? Ich glaube nicht, dassString.prototype.raw()
es definiert ist. NurString.raw()
ist.Python 2 , 52 Bytes
Probieren Sie es online!
Wie es funktioniert
Mit Python können Sie verschiedene Typen vergleichen. Numerische Typen sind immer kleiner als iterables, und iterables werden nach ihren Typnamen sortiert
Auf diese Weise führt f Folgendes aus.
Wenn x numerisch
x<{}
kehrt Wahr und1-(x<{})
kehrt 0 . Der Code danachand
wird nicht ausgeführt.Wenn x ist iterable,
1-(x<{})
kehrt 1 (truthy), so dass der Code nachand
wird ausgeführt.Wenn x eine Liste ist,
x<''
ist es wahr und f wird über seine Elemente abgebildet.Wenn x eine Zeichenkette ist,
x<''
ist es false und x wird durch eine Zeichenkette mit der gleichen Länge ersetzt.quelle
Ruby,
54 5349 BytesVielleicht gibt es einen besseren Weg, aber:
quelle
a.map
,[*a].map
funktioniert es wie erwartetMathematica, 51 Bytes
Ich habe derzeit zwei Lösungen bei dieser Byteanzahl:
Der zweite löst eine Reihe von Warnungen aus, die ignoriert werden können.
Erläuterung
In beiden Fällen beginnen wir damit, die Zahlen mit Nullen zu versehen
Dann gibt es zwei Möglichkeiten, um die Zeichenfolge zu verarbeiten. Entweder verwenden wir eine andere Ersetzung, die nur für Zeichenfolgen gilt:
Oder wir verwenden den
MapAll
Operator,//@
der eine Funktion über jedes einzelne Element in einer verschachtelten Liste abbildet. Der Haken hier ist, dass wir versuchen werden, sowohlStringReplace
Nullen als auch das Symbol zu verwendenList
(da dies//@
auch durch die Köpfe der Ausdrücke geht), also müssen wirCheck
(eine Artcatch
Aussage in anderen Sprachen) verwenden, um zu verhindern, dass Chaos entsteht diese Werte:quelle
Gelee , 4 Bytes
Dies ist eine monadische Verbindung. Jellys implizites Drucken macht viel Spaß; Um zu überprüfen, ob die Ausgabe so ist, wie sie sein sollte, können Sie die interne Darstellung mit anzeigen
ŒṘ
. Beachten Sie, dass auf diese Weise Zeichenfolgen als Listen von Zeichen verfügbar gemacht werden, wie sie vom Jelly-Interpreter implementiert werden.Probieren Sie es online!
Wie es funktioniert
quelle
[[["H"],"e",1,1,0],[[-3],"arth"]]
in APL darstellen soll ...JSON2APLexpr←⎕SE.Dyalog.Utils.repObj 7159⌶ ⋄ JSON2APLexpr'[[["H"],"e",1,1,0],[[-3],"arth"]]'
gibt((,⊂,'H') (,'e') 1 1 0) ((,¯3) 'arth')
. Zu Ihrer Information,7159⌶
wird⎕JSON
in Version 16.0 sein.Perl 6,
3448 BytesErweitert:
quelle
.deepmap
funktioniert bei singulären Eingaben wie"X"
oder nicht richtig7
, da es immer eine Liste zurückgibt.SPALT , 91 Bytes
GAP verfügt über eine Methode
Zero
, die das neutrale additive Element zurückgibt, das einem Element einer additiven Struktur entspricht. Das behandelt Zahlen und gerade Listen von Zahlen, die als Vektoren betrachtet werden, aber keine willkürlichen Listen. Also lassen Sie uns diese und Zeichen hinzufügen und verwenden, dass Strings Listen von Zeichen sind:(Ich zähle den Zeilenumbruch nicht, da er nicht benötigt wird.) Natürlich ist dies weit entfernt von der beabsichtigten Verwendung von
Zero
, und GAP würde sich beschweren, wenn ich nichtInstall
Other verwendet hätteMethod
. Jetzt kann ich tun:Ich würde nicht sagen, dass das eingebaute Programm den größten Teil der Arbeit erledigt, man könnte eher vermuten, dass das Schreiben einer normalen Funktion kürzer sein sollte, aber mein bester Versuch, dies zu tun, war 92 Bytes lang:
quelle
Haskell, 115 Bytes
Meine Sprache kann keine Mischung aus Zahlen und Zeichenfolgen in Listen verarbeiten (aber Sie können natürlich einen Summentyp definieren und diesen in eine Liste einfügen), und ihre Standardlisten können keine unterschiedlich verschachtelten Listen verarbeiten. Also mache ich einfach, was es kann. Ich denke, das ist nicht unfair, weil es immer noch lang ist, und ich mache es hauptsächlich, um Features von Haskell zu zeigen, die in Haskell-Golflösungen selten zu finden sind. Beachten Sie, dass Strings Listen von Zeichen sind.
Dies behandelt eine beliebige Zahl als Double:
quelle
data N=S[Char]|I Int|L[N]
und eine rekursive Funktion darauf zu definieren.PHP, 91 Bytes
Wenn der Parameter ein Array ist: rekursiv mit
array_map
.sonst, wenn der Parameter string ist: Erzeugt eine Folge von Leerzeichen mit der gleichen Länge.
sonst
0
.is_string
spart ein Byte mehris_numeric
; Negierenis_array()
macht Klammern überflüssig. Insgesamt sind es 17 Bytes kürzer alsif()recursion-loop;else x?string:number
bei einem Call by Reference.quelle
Python 2, 59 Bytes
Verwendet die Methode von GB, um Typen zu bestimmen
quelle
Common Lisp, 87
Ungolfed
Beispiel
quelle
Groovy, 53 Bytes
Dies ist eine namenlose Schließung. Probieren Sie es hier aus!
Erläuterung :
Groovy verfügt über diese Methode, mit
.collectNested
der Sie eine Liste durchlaufen können, als wäre sie reduziert.Um spezielle Fälle zu behandeln, in denen nur eine Ganzzahl oder eine Zeichenfolge ohne Liste übergeben wird, müssen Sie einfach jede Eingabe in eine Liste einschließen und das erste Element ausgeben.
quelle
Pyke, 8 Bytes (Alte Version)
Erläuterung:
Dies funktioniert nicht mehr, da ein Update dazu geführt hat, dass Falschdarstellungen anderer Typen, bei denen es Wahrheiten gibt, automatisch in die Falschdarstellung des Wahrheitstyps konvertiert werden.
quelle
C #,
197195 BytesDiese Funktion verarbeitet
char
,string
jeder builtin Nummerntyp und rekursive Arrays.Volles Programm, ungolfed mit Ausgabehilfe:
Die
using
Anweisung wird nur für die Ausgabehilfe benötigt, nicht für die eigentliche Funktion.Versuchen Sie es online
quelle
APL (Dyalog) 13.2 und früher, 1 Byte
Bis einschließlich Version 13.2 hat monadic
∊
genau dies getan. Das alte Verhalten kann durch Setzen aktiviert werden⎕ML
( M igration L evel) auf Null.Probieren Sie es online!
Ohne altes Verhalten sind es 4 Bytes:
Probieren Sie es online!
⊂
umschließen0⍴
Erstellt eine Liste der Kopien der gesamten Eingabe mit der Länge Null (behält nur Struktur- und Typinformationen bei)⊃
ein Element daraus erzwingen (ein prototypisches Array erstellen)quelle
Javascript ES6, 81 Zeichen
Prüfung:
quelle
Java 7, 262 (268) Bytes
282 + 6 für das hinzugefügte
\"
und'
hübschen Ausdruck der Zeichenfolge und der Zeichen.Erläuterung:
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle