АПЛ. Как найти числа-палиндромы в заданном списке продуктов

Конкретный вопрос требует найти все числа палиндрома между 900 и 1000.

new_set ← (900 + ⍳100)
901, 902, 903, 904, ..., 999, 1000

⍕¨(new_set ∘.× new_set)
{⍵≡⌽⍵} ⍕¨(new_set ∘.× new_set)

Первая строка создает новый набор чисел.

Вторая строка умножает все числа в new_set на любое другое число, включая само себя. Создает своего рода таблицу умножения внешнего произведения, а затем преобразует числа в строки.

Последняя строка пытается найти все палиндромы, но терпит неудачу и возвращает 0..

Любая помощь приветствуется!

Вы забыли каждый после dfn

Adalynn 17.10.2022 11:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

⍕¨(new_set ∘.× new_set) имеет форму 100 100, а Match () сравнивает целые массивы, поэтому ваш окончательный dfn сравнивает массив 100 на 100 с обратным () всего массива.

Похоже, вы хотите изменить отдельные строки. Пытаясь скопировать ваш стиль, мы получаем что-то вроде этого:

{(⊃⍵)≡⌽⊃⍵}¨ ⊂∘⍕¨ (new_set ∘.× new_set)

Обратите внимание на двойное использование каждого (¨) и необходимость заключить () строки только для второго каждого, а затем сразу же раскрыть () в dfn. Это, вероятно, должно быть грязным.

Мы можем сделать лучше.

Во-первых, почему бы не объединить две итерации Each?

{(⊃⍵)≡⌽⊃⍵}∘⊂∘⍕¨ (new_set ∘.× new_set)

Но, на самом деле, Outer Product (∘.×) уже работает именно с теми элементами, которые нам нужны, так что имеет смысл просто сделать все там:

new_set ∘.{(⊢≡⌽)⍕⍺×⍵} new_set

Н.Б. Вместо того, чтобы повторять new_set слева и справа, вероятно, более идиоматично использовать Commute (). Я также добавлю другое написание (⊢≡⌽), просто для удовольствия:

∘.{≡∘⌽⍨⍕⍺×⍵}⍨ new_set

Превратить эту бинарную маску в фактический набор палиндромов довольно просто, поэтому я не буду портить вам удовольствие.

Спасибо за помощь, Б. Уилсон! Я попытался понять трюк с двоичной маской... Прямо сейчас у меня есть: ∘.{≡∘⌽⍨⍕⍺×⍵}⍨ new_set / (new_set ∘.× new_set), поскольку я сжимаю все 0 и 1 в таблица продуктов заказа, которая у меня была изначально. Однако это дает мне «Ошибку ранга». Не могли бы вы помочь мне еще немного?

ArbIn 17.10.2022 17:33

Вторая команда, которую я выполнил в TryAPL: {(⊃⍵)≡⌽⊃⍵}¨ ⊂∘⍕¨ (new_set ∘.× new_set) ⊆ ∘⍕¨ (new_set ∘.× new_set). Эта команда работает, но не дает мне того, что я хочу :(.. Когда я превращаю ее в компрессор {(⊃⍵)≡⌽⊃⍵}¨ ⊂∘⍕¨ (new_set ∘.× new_set) / ∘⍕¨ (new_set ∘.× new_set), появляется предупреждение «WS FULL: Максимальное рабочее пространство 512 килобайт».

ArbIn 17.10.2022 18:02

Посмотрим. Во-первых, будьте осторожны с порядком оценки. Ваш левый аргумент для / должен быть заключен в скобки. При этом мы знаем, что левый и правый аргументы в порядке, выполняя их независимо, поэтому ошибка ранга происходит внутри вызова Replicate (/). Вы проверили документы для Replicate на help.dyalog.com? В частности, левый аргумент должен быть вектором, но здесь вы передаете ему двумерный массив. Поскольку вам на самом деле не нужна информация о форме, зачисление () обоих аргументов должно дать вам то, что вы хотите!

B. Wilson 18.10.2022 03:23

Хороший совет. Я сделал это. Я ценю полезные предложения. Я принял ваш ответ, Б. Уилсон.

ArbIn 18.10.2022 04:12

Другие вопросы по теме