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 4
O 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 4
permite que o lambda mais à direita "capture" a esquerda 3 1 4
como seu argumento à esquerda, portanto, ⍺
tenha um valor que é descartado a favor do 3 1 4
qual é então girado um passo à esquerda e produz 1 4 3
como 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 4
permite que o lambda mais à direita "capture" o meio 3 1 4
como 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 4
argumento 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á.)