Чтобы нейтрализовать данные, рекурсивно замените все числа (не цифры!) Нулями, а все символы (не строки!) Пробелами.
Вы должны принять любое одиночное число, символ или строку, или, возможно, рекурсивный массив * смешанных числовых / символьных данных, которые может обработать ваш язык. Например, вы должны принять фактические строки (и не ограничивать свой ввод списками одиночных символов), если ваш язык может обрабатывать такие.
Если ваш язык содержит встроенный, который выполняет все или большую часть этой задачи, я был бы признателен за дополнительную альтернативную версию без него.
Самая короткая заявка на каждом языке является победителем и получит от меня ответ.
Примеры случаев
""
→""
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]," "]]
* Если ваш язык имеет несколько типов, которые могут одинаково хорошо представлять массивы, как в приведенных выше примерах, вы можете выбрать поддержку только одного. Две записи могут выиграть, даже если они используют один и тот же язык, каждая из которых имеет свой тип данных.
Ответы:
JavaScript (ES6),
5347 байтКонтрольные примеры
Показать фрагмент кода
источник
big()
! Хотя, вы, вероятно, обеспечили бы лучшее использование будущегоraw()
.raw()
? Я не думаю, чтоString.prototype.raw()
это определено. ТолькоString.raw()
есть.Python 2 , 52 байта
Попробуйте онлайн!
Как это работает
Python позволяет сравнивать разные типы. Числовые типы всегда меньше, чем итерации, а итерации сортируются по именам типов, поэтому
Таким образом, f делает следующее.
Если x является числовым,
x<{}
возвращает True и1-(x<{})
возвращает 0 . Код послеand
не выполняется.Если x является итеративным,
1-(x<{})
возвращает 1 (правда), поэтому код послеand
выполняется.Если x - это список, он
x<''
имеет значение true и f отображается на его элементы.Если x является строкой,
x<''
ложно и x заменяется строкой пробелов одинаковой длины.источник
Рубин,
54 5349 байтовМожет быть, есть лучший способ, но:
источник
a.map
его,[*a].map
он будет работать, как и ожидалосьMathematica, 51 байт
В настоящее время у меня есть два решения на этот счет байтов:
Второй бросает кучу предупреждений, которые можно игнорировать.
объяснение
В любом случае, мы начинаем с превращения чисел в нули с
Затем для обработки строки есть два варианта. Либо мы используем другую замену, которая применяется только к строкам:
Или мы используем
MapAll
оператор,//@
который отображает функцию на каждый отдельный элемент во вложенном списке. Подвох в том, что мы будем пытаться использоватьStringReplace
как нули, так и символыList
(так как//@
также проходит через главы выражений), поэтому нам нужно использоватьCheck
(вроде какcatch
выражение в других языках), чтобы избежать хаоса с эти значения:источник
Желе , 4 байта
Это монадическая ссылка. Неявная печать Jelly делает много брызг; чтобы убедиться в том, что выходные данные соответствуют требованиям, вы можете просмотреть внутреннее представление с помощью
ŒṘ
. Обратите внимание, что это представляет строки в виде списков символов, как их реализует интерпретатор Jelly.Попробуйте онлайн!
Как это работает
источник
[[["H"],"e",1,1,0],[[-3],"arth"]]
в APL ...JSON2APLexpr←⎕SE.Dyalog.Utils.repObj 7159⌶ ⋄ JSON2APLexpr'[[["H"],"e",1,1,0],[[-3],"arth"]]'
дает((,⊂,'H') (,'e') 1 1 0) ((,¯3) 'arth')
. К вашему сведению,7159⌶
будет⎕JSON
в версии 16.0.Perl 6,
3448 байтExpanded:
источник
.deepmap
Не работает правильно для особых входов , как"X"
и7
, так как он всегда возвращает список.GAP , 91 байт
GAP имеет метод,
Zero
который возвращает нейтральный аддитивный элемент, соответствующий элементу аддитивной структуры. Это обрабатывает числа и даже списки чисел, которые считаются векторами, но не произвольными списками. Итак, давайте добавим эти и символы и используем эти строки как списки символов:(Я не считаю символ новой строки, поскольку он не нужен.) Конечно, это далеко от предполагаемого использования
Zero
, и GAP будет жаловаться, если бы я не использовалInstall
OtherMethod
. Теперь я могу сделать:Я бы не сказал, что встроенная функция выполняет большую часть работы, можно было бы предположить, что написание нормальной функции должно быть короче, но моя лучшая попытка сделать это была бы длиной 92 байта:
источник
Haskell, 115 байт
Мой язык не может обрабатывать любое сочетание чисел и строк в списках (но, конечно, вы можете определить тип суммы и поместить его в список), а его стандартные списки не могут обрабатывать по-разному вложенные списки. Так что я просто делаю то, что он может справиться. Я думаю, что это не несправедливо, потому что это все еще долго, и я в основном делаю это, чтобы показать особенности haskell, которые редко встречаются в решениях для игры в гольф haskell. Обратите внимание, что строки являются списками символов.
Это обрабатывает любое число как Double:
источник
data N=S[Char]|I Int|L[N]
и рекурсивную функцию для этого.PHP, 91 байт
если параметр является массивом: recurse, используя
array_map
.иначе, если параметр является строкой: генерировать строки пробелов одинаковой длины.
остальное
0
.is_string
сохраняет один байтis_numeric
; отрицаниеis_array()
делает скобки устаревшими. В целом это на 17 байт короче, чемif()recursion-loop;else x?string:number
при вызове по ссылке.источник
Python 2, 59 байт
использует способ GB для определения типов
источник
Common Lisp, 87
Ungolfed
пример
источник
Groovy, 53 байта
Это безымянное закрытие. Попробуй это здесь!
Пояснение :
Groovy имеет этот метод,
.collectNested
который помогает перебирать список, как если бы он был сплющен.Для обработки особых случаев, когда без списка передается только целое число или строка, просто оберните каждый вход в список и выведите первый элемент.
источник
Пайк, 8 байт (Старая версия)
Объяснение:
Это больше не работает, поскольку обновление сделало его таким, что союзники других типов, где есть истины, автоматически преобразуются в ложь типа правдивых.
источник
C #,
197195 байтЭта функция обрабатывает
char
,string
любой тип номера и встроенный рекурсивные массивы.Полная программа, вспомогательная программа вывода:
using
Заявление требуется только для вывода помощника, а не для реальной функции.Попробуйте онлайн
источник
APL (Dyalog) 13,2 и ранее, 1 байт
До и включая версию 13.2, monadic
∊
делал именно это. Старое поведение может быть активирована путем установки⎕ML
( M igration L Evel) к нулю.Попробуйте онлайн!
Без использования старого поведения это 4 байта:
Попробуйте онлайн!
⊂
Вложите0⍴
составить список копий всего ввода с нулевой длиной (сохраняет только информацию о структуре и типе)⊃
вынудить один элемент из этого (создает прототипный массив)источник
Javascript ES6, 81 символ
Тест:
источник
Java 7, 262 (268) байтов
282 + 6 для добавленных
\"
и'
красивой печати строки и символов.Объяснение:
Тестовый код:
Попробуй это здесь.
Выход:
источник