Анонимный префикс лямбда. Возвращает тело программы.
{
1=≢⍵:⍕⍵ ⍝ single element
(2=≢⍵)∧(⍵[2]=11×⍵[1]):⍕⍵[1] ⍝ 2, 22 etc.
1=≢∪⍵:'⊢',⍕⊃⍵ ⍝ all the same
(⊢≡⊃×⍳∘≢)⍵:'+',⍕⊃⍵ ⍝ linear
((⌊=⊢)!⍣¯1⊢⊃⍵)∧(1∧.=1↓⍵):'!',⍕!⍣¯1⊃⍵ ⍝ factorial followed by all 1s
(⍵[2]∧.=1↓⍵)∧(⍵[1]=10|2⊃⍵):(⍕⊃⍵),'⌈',(⊃⍕2⊃⍵) ⍝ b ab ab ab
e←{∊⍉2 2⍴'+×',⍕¨⍵}¨⍸(⊃⍵)=∘.×⍨⍳10
b←⍵∘≡¨e(({0::⍬ ⋄ ⍎⍵}¨,\)⍴∘⊂)¨⍨(≢⍵)
∨/b:⊃b/e
Q←{'''',⍨⍵/⍨1+''''=⍵}
(5∧.≤⍵)∧(≢⍕⍵)>6+(+/14=⍵)+≢⍵:'{⍺←⎕AV⍳⊃⋄1⌽⍺⊢⍵}''',Q ⎕AV[⍵] ⍝ string fallback
(≢⍕⍵)>9+(+/5=⍵)+≢⍵:'{⍺←¯4+⎕AV⍳⊃⋄1⌽⍺⊢⍵}''',Q ⎕AV[4+⍵] ⍝ offset string fallback
'{⍺←⊃⋄1⌽⍺⊢⍵}',⍕⍵ ⍝ fallback
}
Попробуйте онлайн!
методы
Это исследует различные методы и возвращает первый пригодный для использования, в конечном счете возвращаясь к универсально применимому методу.
Один элемент
Если список имеет только один элемент, он возвращается как есть.
2, 22 и т. Д.
Одну цифру можно просто повторить, чтобы получить число в 11 раз больше,
Все так же
Мы просто возвращаем самый правый ( ⊢) номер.
линейный
f (n) = k × n последовательностей просто вставьте плюс перед первым членом.
Факториал, за которым следуют все 1
Когда первое число n =! M и последующие числа равны 1, тогда !mэто решение, потому что !mравно n, m!mравно 1 и !1равно 1.
б аб аб аб
Поскольку все двузначные числа больше, чем все однозначные числа, рабочий максимум, где передняя часть первого числа приклеена к задней части второго числа, является решением.
Трехстрочный код
Проверьте, является ли любая формула типа +a×bдействительной.
Строка запасной
Длинные последовательности без чисел ниже 5 (потому что 4 - это разрыв строки) могут быть закодированы как символы SBCS.
Отступ смещения строки
Если число меньше 5, мы сдвигаемся на 9, чтобы избежать этого.
Отступать
Простая конкатенация строк "{⍺←⊃⋄1⌽⍺⊢⍵}"и ⍕ввода stringified ( ). Например, [3,1,4]возвращает тело программы {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4.
Часть в фигурных скобках является амбивалентной функцией, что означает, что она может быть префиксной или инфиксной функцией. Таким образом, самый левый экземпляр будет работать в режиме префикса, а все остальные в режиме инфикса. Разница между режимами заключается в том ⍺, имеет ли значение , обозначающее левый аргумент, значение. Если этого не произойдет, ему будет назначена функция ⊃(первая).
Объяснение резервного метода
{… } Анонимная лямбда:
⍺←⊃ Если левого аргумента нет ( ⍺), присвойте функцию ⊃(первую)⍺
⋄ тогда:
На этом этапе следующий код означает две разные вещи в зависимости от того, ⍺является ли список чисел (вызов инфикса) или функцией «first» (вызов префикса).
Если ⍺это список номеров:
⍺⊢⍵ отбросить левый аргумент в пользу правого аргумента
1⌽ поверните этот шаг влево
Если ⍺функция «первая»:
⊢⍵ привести правильный аргумент
⍺ выбрать первый элемент этого
1⌽ поверните его на один шаг (нет на скаляре)
Пример выполнения резервного метода
Выполняя 3 1 4код, {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4назначает «первую» функцию ⍺и, таким образом, возвращает первый элемент; 3,
Выполнение {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4позволяет самой правой лямбде «захватывать» левый 3 1 4как свой левый аргумент, поэтому ⍺имеет значение, которое отбрасывается, в пользу 3 1 4которого затем поворачивается на один шаг влево и выдает 1 4 3результат. Затем он используется в качестве единственного аргумента для самой левой лямбды, где ⍺становится «первой» функцией, в результате чего результат становится первым элементом; 1,
Выполнение {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4позволяет самой правой лямбде «захватить» середину в 3 1 4качестве левого аргумента, который затем отбрасывается в пользу правого аргумента 3 1 4, который при повороте на один шаг влево равен 1 4 3. Затем он используется в качестве правого аргумента средней лямбды, а левый - в 3 1 4качестве левого аргумента. Левый аргумент отбрасывается для правого, который поворачивался на один шаг влево 4 3 1. Затем это становится единственным аргументом самой левой лямбды, поэтому ⍺становится «первой функцией», возвращающей первый элемент; 4,
счет
Когда наступит время для тестирования с использованием фактических данных, используйте этот тестовый комплект (связанный с данными предварительного тестирования ). Контрольные примеры помещаются в поле ввода, и выводом будет общее количество байтов всех 500 программ вместе. (Он также выдаст ошибку, но это только потому, что впоследствии он пытается оценить входные данные как есть.)