Prefisso anonimo lambda. Restituisce un corpo del programma.
{
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
}
Provalo online!
metodi
Questo esplora vari metodi e restituisce il primo utilizzabile, ricadendo infine su un metodo universalmente applicabile.
Singolo elemento
Se l'elenco ha solo un elemento, viene restituito così com'è.
2, 22 ecc.
Una sola cifra può essere ripetuta per generare il numero 11 volte più grande,
Lo stesso
Restituiamo solo il ⊢
numero più a destra ( ).
Lineare
f (n) = k × n le sequenze devono solo inserire un segno più prima del primo termine.
Fattoriale seguito da tutti gli 1 secondi
Quando il primo numero n =! M e i numeri successivi sono 1, allora !m
è una soluzione perché !m
è n em!m
è 1 e!1
è 1.
b ab ab ab
Poiché tutti i numeri a due cifre sono più grandi di tutti i numeri a una cifra, un massimo corrente, in cui la parte anteriore del primo numero è incollata sul retro del secondo numero, è una soluzione.
Il codice a tre righe
Controlla se esiste una formula del tipo +a×b
è valida.
Fallback delle stringhe
Le sequenze lunghe senza numeri inferiori a 5 (poiché 4 è un'interruzione di riga) possono essere codificate come caratteri dell'SBCS.
Fallback della stringa di offset
Se ci sono numeri inferiori a 5, aumentiamo di 9 per evitarli.
Ricaderci
"{⍺←⊃⋄1⌽⍺⊢⍵}"
Concatenazione di stringhe semplice della stringa e dell'input stringified ( ⍕
). Ad esempio, [3,1,4]
restituisce il corpo del programma {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
.
La parte tra parentesi graffe è una funzione ambivalente, il che significa che può essere una funzione prefisso o una funzione infisso. Pertanto l'istanza più a sinistra verrà eseguita in modalità prefisso e tutte le altre in modalità infisso. La differenza tra le modalità è se ⍺
, a significare l'argomento sinistro, ha un valore. In caso contrario, verrà assegnata la funzione ⊃
(prima).
Spiegazione del metodo di fallback
{
... }
lambda anonimo:
⍺←⊃
Se non è presente alcun argomento sinistro ( ⍺
), assegnare la funzione ⊃
(prima) a⍺
⋄
poi:
A questo punto, il codice seguente significa due cose diverse a seconda che ⍺
si un elenco di numeri (chiamata infisso) o della funzione "prima" (chiamata prefisso).
Se ⍺
è un elenco di numeri:
⍺⊢⍵
scartare l'argomento sinistro a favore dell'argomento giusto
1⌽
ruota quel passo a sinistra
Se ⍺
la funzione è "prima":
⊢⍵
cedere l'argomento giusto
⍺
scegli il primo elemento
1⌽
ruotalo di un passo (una no-op su uno scalare)
Esempio di esecuzione del metodo di fallback
3 1 4
Il codice di esecuzione {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
, assegna la "prima" funzione ⍺
e quindi restituisce il primo elemento; 3
.
L'esecuzione {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
consente alla lambda più a destra di "catturare" la sinistra 3 1 4
come argomento sinistro, quindi ⍺
ha un valore che viene scartato a favore del 3 1 4
quale viene quindi ruotato di un passo a sinistra e produce 1 4 3
come risultato. Questo viene quindi usato come unico argomento per la lambda più a sinistra, dove ⍺
diventa la "prima" funzione, facendo sì che il risultato sia il primo elemento;1
.
L'esecuzione {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
consente alla lambda più a destra di "catturare" il mezzo 3 1 4
come argomento di sinistra, che viene quindi scartato a favore dell'argomento di destra 3 1 4
, che quando viene ruotato di un passo a sinistra è 1 4 3
. Questo viene quindi usato come argomento destro del lambda medio insieme 3 1 4
all'argomento più a sinistra come argomento di sinistra. L'argomento sinistro viene scartato per quello destro, che ruotava di un passo a sinistra 4 3 1
. Questo diventa quindi il solo argomento della lambda più a sinistra, quindi ⍺
diventa la "prima funzione", restituendo il primo elemento; 4
.
punteggio
Quando diventa il momento di testare utilizzando i dati effettivi, utilizzare questo cablaggio di test (collegato popolato con dati preliminari). I casi di test vanno nel campo Input e l'output sarà il conteggio totale dei byte di tutti i 500 programmi insieme. (Inoltre genererà un errore, ma è solo perché in seguito tenta di valutare l'input così com'è.)