Prefijo anónimo lambda. Devuelve un cuerpo del 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
}
Pruébalo en línea!
Métodos
Esto explora varios métodos y devuelve el primero utilizable, eventualmente recurriendo a un método universalmente aplicable.
Solo elemento
Si la lista tiene solo un elemento, se devuelve tal cual.
2, 22 etc.
Se puede repetir un solo dígito para generar el número 11 veces más grande,
Todos iguales
Acabamos de devolver el ⊢
número ( ) más a la derecha .
Lineal
Las secuencias f (n) = k × n simplemente insertan un signo más antes del primer término.
Factorial seguido de todos los 1s
Cuando el primer número n =! My los números siguientes son 1, entonces !m
es una solución porque !m
es n y m!m
es 1 y !1
es 1.
b ab ab ab
Como todos los números de dos dígitos son más grandes que todos los números de un solo dígito, un máximo continuo, donde el frente del primer número está pegado a la parte posterior del segundo número, es una solución.
El código de tres líneas
Compruebe si alguna fórmula del tipo +a×b
es válida.
Caída de cuerda
Las secuencias largas sin números inferiores a 5 (porque 4 es un salto de línea) se pueden codificar como caracteres del SBCS.
Desplazamiento de la cadena de retroceso
Si hay números menores a 5, subimos 9 para evitarlos.
Retroceder
Concatenación de cadena simple de la cadena "{⍺←⊃⋄1⌽⍺⊢⍵}"
y la ⍕
entrada stringified ( ). Por ejemplo, [3,1,4]
devuelve el cuerpo del programa {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
.
La parte entre llaves es una función ambivalente, lo que significa que puede ser una función de prefijo o una función de infijo. Por lo tanto, la instancia más a la izquierda se ejecutará en modo prefijo y todas las demás en modo infijo. La diferencia entre los modos es si ⍺
, significando el argumento izquierdo, tiene un valor. Si no es así, se le asignará la función ⊃
(primero).
Explicación del método alternativo
{
… }
Lambda anónima:
⍺←⊃
Si no hay argumento izquierdo ( ⍺
), asigne la función ⊃
(primero) a⍺
⋄
entonces:
En este punto, el siguiente código significa dos cosas diferentes dependiendo de si se ⍺
trata de una lista de números (llamada infijada) o la función "primero" (llamada prefijada).
Si ⍺
es una lista de números:
⍺⊢⍵
descartar el argumento izquierdo a favor del argumento derecho
1⌽
gire ese paso hacia la izquierda
Si ⍺
es la función "primero":
⊢⍵
dar el argumento correcto
⍺
elige el primer elemento de eso
1⌽
gírelo un paso (un no-op en un escalar)
Ejemplo de ejecución del método alternativo
Al ejecutar 3 1 4
el código {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
,, asigna la "primera" función ⍺
y, por lo tanto, devuelve el primer elemento; 3
.
La ejecución {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
permite que la lambda más a la derecha "capture" la izquierda 3 1 4
como su argumento izquierdo, por lo que ⍺
tiene un valor que se descarta a favor del 3 1 4
cual luego se gira un paso hacia la izquierda y se obtiene 1 4 3
como resultado. Esto se usa como único argumento para el lambda más a la izquierda, donde se ⍺
convierte en la "primera" función, lo que hace que el resultado sea el primer elemento; 1
.
La ejecución {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
permite que la lambda más a la derecha "capture" el medio 3 1 4
como su argumento izquierdo, que luego se descarta a favor del argumento derecho 3 1 4
, que cuando se gira un paso hacia la izquierda lo es 1 4 3
. Esto se usa como argumento derecho de la lambda media junto con el 3 1 4
argumento más a la izquierda como izquierdo. El argumento de la izquierda se descarta por el de la derecha, que gira un paso hacia la izquierda 4 3 1
. Esto se convierte en el único argumento de la lambda más a la izquierda, por lo que se ⍺
convierte en la "primera función", devolviendo el primer elemento; 4
.
Puntuación
Cuando llegue el momento de realizar la prueba con datos reales, use este arnés de prueba (vinculado con datos de prueba previa). Los casos de prueba van en el campo Entrada, y la Salida será el recuento total de bytes de los 500 programas juntos. (También arrojará un error, pero eso es solo porque luego intenta evaluar la entrada tal como está).