Анонимный префикс лямбда. Возвращает тело программы.
{
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 программ вместе. (Он также выдаст ошибку, но это только потому, что впоследствии он пытается оценить входные данные как есть.)