Prefixo anônimo lambda. Retorna um corpo do programa.
{
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
}
Experimente online!
Métodos
Isso explora vários métodos e retorna o primeiro método utilizável, eventualmente voltando a um método universalmente aplicável.
Elemento único
Se a lista tiver apenas um elemento, ela será retornada como está.
2, 22 etc.
Apenas um dígito pode ser repetido para gerar o número 11 vezes maior,
Tudo o mesmo
Acabamos de retornar o ⊢número mais à direita ( ).
Linear
Seqüências f (n) = k × n apenas inserem um sinal de adição antes do primeiro termo.
Fatorial seguido por todos os 1s
Quando o primeiro número n =! Me os números subsequentes são 1, então !mé uma solução porque !mé n e m!mé 1 e !1é 1.
b ab ab ab
Como todos os números de dois dígitos são maiores que todos os números de um dígito, um número máximo máximo, em que a frente do primeiro número está colada na parte de trás do segundo número, é uma solução.
O código de três linhas
Verifique se alguma fórmula do tipo +a×bé válida.
Fallback de cadeia
Sequências longas sem números abaixo de 5 (porque 4 é uma quebra de linha) podem ser codificadas como caracteres do SBCS.
Fallback de string deslocada
Se houver números abaixo de 5, aumentamos 9 para evitá-los.
Cair pra trás
Concatenação simples de string "{⍺←⊃⋄1⌽⍺⊢⍵}"e a ⍕entrada stringified ( ). Por exemplo, [3,1,4]retorna o corpo do programa {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4.
A peça entre chaves é uma função ambivalente, o que significa que pode ser uma função de prefixo ou uma função de infixo. Assim, a instância mais à esquerda será executada no modo prefixo, e todas as outras no modo infix. A diferença entre os modos é se ⍺, significando o argumento esquerdo, tem um valor. Caso contrário, será atribuída a função ⊃(primeiro).
Explicação do método de fallback
{… } Lambda anônima:
⍺←⊃ Se não houver argumento à esquerda ( ⍺), atribua a função ⊃(primeiro) a⍺
⋄ então:
Nesse momento, o código a seguir significa duas coisas diferentes, dependendo se ⍺é uma lista de números (chamada de infixo) ou a função "primeiro" (chamada de prefixo).
Se ⍺é uma lista de números:
⍺⊢⍵ descartar o argumento da esquerda em favor do argumento da direita
1⌽ gire esse passo para a esquerda
If ⍺é a função "first":
⊢⍵ produzir o argumento certo
⍺ escolha o primeiro elemento disso
1⌽ gire um passo (um no-op em um escalar)
Exemplo de execução do método de fallback
3 1 4O código da execução {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4, atribui a função "primeiro" a ⍺e, portanto, retorna o primeiro elemento; 3.
A execução {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4permite que o lambda mais à direita "capture" a esquerda 3 1 4como seu argumento à esquerda, portanto, ⍺tenha um valor que é descartado a favor do 3 1 4qual é então girado um passo à esquerda e produz 1 4 3como resultado. Isso é usado como argumento único para o lambda mais à esquerda, onde ⍺se torna a "primeira" função, fazendo com que o resultado seja o primeiro elemento; 1.
A execução {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4permite que o lambda mais à direita "capture" o meio 3 1 4como argumento à esquerda, que é descartado em favor do argumento à direita 3 1 4, que quando girado um passo à esquerda é 1 4 3. Isso é usado como argumento à direita do lambda do meio junto com o 3 1 4argumento mais à esquerda como à esquerda. O argumento da esquerda é descartado para a direita, que girou um passo para a esquerda 4 3 1. Isso então se torna o único argumento do lambda mais à esquerda, ⍺tornando-se a "primeira função", retornando o primeiro elemento; 4.
Pontuação
Quando chegar a hora de testar usando dados reais, use este equipamento de teste (vinculado preenchido com dados de pré-teste). Os casos de teste vão no campo Entrada e a Saída será a contagem total de bytes de todos os 500 programas juntos. (Ele também gera um erro, mas é apenas porque, posteriormente, tenta avaliar a Entrada como está.)