Aby zneutralizować dane, rekurencyjnie zamień wszystkie liczby (nie cyfry!) Zerami i wszystkie znaki (nie ciągi znaków!) Spacjami.
Musisz zaakceptować dowolny pojedynczy numer, znak lub ciąg znaków lub ewentualnie tablicę rekurencyjną * mieszanych danych liczbowych / znaków, które Twój język może obsłużyć. Na przykład musisz zaakceptować rzeczywiste ciągi znaków (i nie ograniczać wprowadzania danych do list pojedynczych znaków), jeśli Twój język to obsługuje.
Jeśli twój język zawiera wbudowaną funkcję, która wykonuje całość lub większość tego zadania, byłbym wdzięczny za dodatkową alternatywną wersję bez niego.
Najkrótsze zgłoszenie w każdym języku jest zwycięzcą i otrzyma ode mnie opinię.
Przykładowe przypadki
""
→""
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]," "]]
* Jeśli twój język ma kilka typów, które równie dobrze mogą reprezentować tablice jak powyższe przykłady, możesz wybrać obsługę tylko jednego. Dwa wpisy mogą wygrać, nawet jeśli używają tego samego języka, każdy z innym typem danych.
Odpowiedzi:
JavaScript (ES6),
5347 bajtówPrzypadki testowe
Pokaż fragment kodu
źródło
big()
! Chociaż prawdopodobnie zapewniłbyśraw()
zamiast tego lepsze zabezpieczenie na przyszłość .raw()
? Nie sądzę, żeString.prototype.raw()
jest zdefiniowane. TylkoString.raw()
jest.Python 2 , 52 bajty
Wypróbuj online!
Jak to działa
Python pozwala porównywać różne typy. Typy liczbowe są zawsze mniejsze niż iterowalne, a iterowalne są sortowane według nazw typów, więc
W ten sposób f wykonuje następujące czynności.
Jeśli x jest liczbą,
x<{}
zwraca True i1-(x<{})
zwraca 0 . Kod poand
nie zostanie wykonany.Jeśli x jest iterowalny,
1-(x<{})
zwraca 1 (prawda), więc kod poand
wykonaniu zostaje wykonany.Jeśli x jest listą,
x<''
jest prawdziwe, a f jest mapowane na jej elementy.Jeśli x jest ciągiem,
x<''
oznacza fałsz, a x jest zastępowany ciągiem spacji o tej samej długości.źródło
Rubin,
54 5349 bajtówMoże jest lepszy sposób, ale:
źródło
a.map
na[*a].map
to, działa zgodnie z oczekiwaniamiMathematica, 51 bajtów
Obecnie mam dwa rozwiązania w tej liczbie bajtów:
Drugi generuje kilka ostrzeżeń, które można zignorować.
Wyjaśnienie
W obu przypadkach zaczynamy od zamiany liczb na zera za pomocą
Następnie, aby przetworzyć ciąg, istnieją dwie opcje. Albo używamy innego podstawienia, które dotyczy tylko ciągów:
Lub używamy
MapAll
operatora,//@
który mapuje funkcję na każdy element na zagnieżdżonej liście. Problem polega na tym, że będziemy próbować używać zarównoStringReplace
zer, jak i symboluList
(ponieważ//@
również przechodzą przez głowy wyrażeń), więc musimy użyćCheck
(coś w rodzajucatch
wyrażenia w innych językach), aby uniknąć spustoszenia te wartości:źródło
Galaretka , 4 bajty
To jest link monadyczny. Utajone drukowanie Jelly powoduje wiele rozprysków; aby sprawdzić, czy dane wyjściowe są takie, jakie powinny być, możesz wyświetlić wewnętrzną reprezentację za pomocą
ŒṘ
. Zauważ, że to odsłania ciągi jako listy znaków, i tak interpretuje je Jelly.Wypróbuj online!
Jak to działa
źródło
[[["H"],"e",1,1,0],[[-3],"arth"]]
w APL ...JSON2APLexpr←⎕SE.Dyalog.Utils.repObj 7159⌶ ⋄ JSON2APLexpr'[[["H"],"e",1,1,0],[[-3],"arth"]]'
daje((,⊂,'H') (,'e') 1 1 0) ((,¯3) 'arth')
. FYI,7159⌶
będzie⎕JSON
w wersji 16.0.Perl 6,
3448 bajtówRozszerzony:
źródło
.deepmap
Nie działa poprawnie dla pojedynczych wejść podobnych"X"
lub7
, ponieważ zawsze zwraca listę.GAP , 91 bajtów
GAP ma metodę,
Zero
która zwraca neutralny element addytywny odpowiadający elementowi struktury addytywnej. To obsługuje liczby, a nawet listy liczb, które są uważane za wektory, ale nie listy arbitralne. Dodajmy więc te i Znaki i użyjmy, że Ciągi to listy Znaków:(Nie liczę nowej linii, ponieważ nie jest potrzebna.) Oczywiście jest to dalekie od zamierzonego użycia
Zero
, a GAP narzekałby, gdybym nie użyłInstall
InnegoMethod
. Teraz mogę zrobić:Nie powiedziałbym, że wbudowane wykonuje większość zadań, można raczej podejrzewać, że pisanie normalnej funkcji powinno być krótsze, ale moja najlepsza próba zrobienia tego miała długość 92 bajtów:
źródło
Haskell, 115 bajtów
Mój język nie obsługuje żadnej kombinacji liczb i ciągów na listach (ale oczywiście możesz zdefiniować typ sumy i umieścić go na liście), a jego standardowe listy nie mogą obsługiwać list zagnieżdżonych w różny sposób. Więc robię to, co da się poradzić. Myślę, że to nie jest niesprawiedliwe, ponieważ wciąż jest długie i robię to głównie, aby pokazać cechy haskell, które rzadko są spotykane w rozwiązaniach golfowych haskell. Zauważ, że ciągi to listy znaków.
To obsługuje dowolną liczbę jako Double:
źródło
data N=S[Char]|I Int|L[N]
pomocą funkcji rekurencyjnej powinno być krótsze .PHP, 91 bajtów
jeśli parametrem jest tablica: użyj rekurencji
array_map
.w przeciwnym razie, jeśli parametr jest łańcuchem: wygeneruj ciąg spacji o tej samej długości.
indziej
0
.is_string
oszczędza jeden bajtis_numeric
; negowanieis_array()
powoduje, że nawiasy stają się przestarzałe. W sumie jest 17 bajtów krótszych niżif()recursion-loop;else x?string:number
w przypadku wywołania przez odniesienie.źródło
Python 2, 59 bajtów
używa sposobu GB do określania typów
źródło
Common Lisp, 87
Nie golfił
Przykład
źródło
Groovy, 53 bajty
To jest nienazwane zamknięcie. Wypróbuj tutaj!
Objaśnienie :
Groovy ma tę metodę,
.collectNested
która pomaga iterować listę tak, jakby była spłaszczona.Aby obsłużyć specjalne przypadki, w których przekazywana jest tylko liczba całkowita lub ciąg znaków bez listy, po prostu zawiń wszystkie dane wejściowe do listy i wyślij pierwszy element.
źródło
Pyke, 8 bajtów (stara wersja)
Wyjaśnienie:
To nie działa już jako aktualizacja, dlatego falsi innych typów, w których istnieją prawdy, automatycznie przekształcają się w falsey typu prawdomównego.
źródło
C #,
197195 bajtówFunkcja ta obsługuje
char
,string
każdy rodzaj i numer wbudowane rekurencyjne tablice.Pełny program, pomocnik bez wyjściowego whit:
using
Oświadczenie jest potrzebne tylko dla pomocnika wyjściowej, a nie do rzeczywistej funkcji.Wypróbuj online
źródło
APL (Dyalog) 13.2 i wcześniejsze, 1 bajt
Aż do wersji 13.2 włącznie, monadic
∊
robił dokładnie to. Stary zachowanie może być aktywowany przez ustawienie⎕ML
( M igration L PECJALNOŚĆ) do zera.Wypróbuj online!
Bez użycia starego zachowania ma 4 bajty:
Wypróbuj online!
⊂
ująć0⍴
sporządzić listę kopii całego wejścia o zerowej długości (zachowuje tylko informacje o strukturze i typie)⊃
wymuś z tego jeden element (tworzy tablicę prototypową)źródło
JavaScript ES6, 81 znaków
Test:
źródło
Java 7, 262 (268) bajtów
282 + 6 dla dodanych
\"
i'
ładnie wydrukować Łańcuch i znaki.Wyjaśnienie:
Kod testowy:
Wypróbuj tutaj.
Wydajność:
źródło