Задний план
Вдохновленный очень удобной интерпретацией Octave (и, как следствие, MATL) матриц истина / ложь, Jelly получил атом Ȧ ( все в стиле Octave ).
Ȧ принимает массив в качестве входных данных и возвращает 1, если массив не пустой и не содержит числа 0 (целое число, число с плавающей запятой или комплексное) где-либо в древовидной структуре ; в противном случае возвращается 0 .
Например, массив [[]] является правдивым, потому что он не пуст и не содержит нулей, но [[0]] является ложным, потому что он содержит 0 на самом внутреннем уровне.
задача
На выбранном вами языке программирования напишите полную программу или функцию, которая принимает в качестве входных данных возможно пустой, возможно зубчатый массив целых чисел и печатает или возвращает истинное или ложное значение, указывающее, вернет ли Ȧ 1 или 0 соответственно.
Ваша заявка должна соответствовать следующим правилам.
Значения достоверности и ложности должны быть согласованы для всех входных данных , т. Е. Все массивы, для которых Ȧ возвращает 1, должны отображаться на одно и то же значение истинности, а все массивы, для которых Ȧ возвращает 0, должны отображаться на одно и то же значение ложных значений.
Поскольку полные программы могут принимать только строковые представления массивов в качестве входных данных, это разрешено. Тем не менее, вы должны использовать каноническое представление вашего языка, возвращенное
repr
или подобное.В частности, вы не можете предполагать, что первому элементу массива будет предшествовать пробел.
Если (и только если) ваш язык не может представлять неровные массивы изначально, вы можете взять строковое представление ввода, используя канонический синтаксис любого ранее существовавшего языка программирования.
Если у вашего языка есть несколько способов представления зубчатых массивов (например, списков и кортежей), вам нужно поддерживать только один из них.
Если на вашем языке есть встроенная программа, которая сама по себе является действительным предложением для этого задания, вы не можете использовать ее в своем ответе . Все остальные встроенные модули разрешены.
Вам предлагается публиковать ответы, используя манипуляции с массивами и строками, даже если один из них значительно короче другого.
Действуют все стандартные правила игры в гольф .
Пусть победит самый короткий код в байтах!
Правдивые тесты
[1]
[10]
[[]]
[[[[1]]]]
[[], [1], [1, 2]]
[[1], [1, [2]], [1, [2, [3]]]]
[[8], [8, [9]], [8, [9, [10]]]]
Ложные тесты
[]
[0]
[0, -1]
[-1, 0]
[[[[0]]]]
[[0], [1, 2], [3, 4, 5]]
[[8], [8, [9]], [8, [9, [1, 0]]]]
[-1, 0, 0, 0]
Object
... мой любимый язык - это Haskell, где это не так. Ни в C, по крайней мере, не так, чтобы вы могли безопасно смешивать массивы и целые. Оба этих языка вполне способны использовать зубчатые массивы, но все еще не могут использовать их для этой проблемы.