Préfixe anonyme lambda. Renvoie un corps de programme.
{
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
}
Essayez-le en ligne!
Les méthodes
Cela explore diverses méthodes et renvoie la première utilisable, pour finalement retomber sur une méthode universellement applicable.
Élément unique
Si la liste ne contient qu'un seul élément, il est renvoyé tel quel.
2, 22 etc.
Un seul chiffre peut simplement être répété pour générer le nombre 11 fois plus grand,
Tous les mêmes
Nous retournons simplement le ⊢
numéro le plus à droite ( ).
Linéaire
f (n) = k × n séquences insérez simplement un plus avant le premier terme.
Factorielle suivie de tous les 1
Lorsque le premier nombre n =! M et les nombres suivants sont 1, alors !m
est une solution car !m
est n et m!m
est 1 et !1
est 1.
b ab ab ab
Étant donné que tous les nombres à deux chiffres sont plus grands que tous les nombres à un chiffre, un maximum courant, où l'avant du premier numéro est collé à l'arrière du deuxième numéro, est une solution.
Le code à trois lignes
Vérifiez si une formule du type +a×b
est valide.
Remplacement de chaîne
Les séquences longues sans numéro inférieur à 5 (car 4 est un saut de ligne) peuvent être codées en tant que caractères du SBCS.
Remplacement de chaîne de décalage
S'il y a des nombres inférieurs à 5, nous augmentons de 9 pour éviter ceux-ci.
Se retirer
Concaténation de chaîne simple de la chaîne "{⍺←⊃⋄1⌽⍺⊢⍵}"
et de l' ⍕
entrée stringified ( ). Par exemple, [3,1,4]
renvoie le corps du programme {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
.
La partie entre accolades est une fonction ambivalente, ce qui signifie qu'elle peut être soit une fonction préfixe, soit une fonction infixe. Ainsi, l'instance la plus à gauche s'exécutera en mode préfixe, et toutes les autres en mode infixe. La différence entre les modes est de savoir si ⍺
, signifiant l'argument de gauche, a une valeur. Si ce n'est pas le cas, la fonction lui sera attribuée ⊃
(en premier).
Explication de la méthode de secours
{
… }
Lambda anonyme:
⍺←⊃
S'il n'y a pas d'argument gauche ( ⍺
), affectez la fonction ⊃
(en premier) à⍺
⋄
puis:
À ce stade, le code suivant signifie deux choses différentes selon qu'il ⍺
s'agit d'une liste de numéros (appel infixe) ou de la fonction "premier" (appel préfixe).
Si ⍺
est une liste de nombres:
⍺⊢⍵
jeter l'argument de gauche en faveur de l'argument de droite
1⌽
faire pivoter cette étape vers la gauche
Si ⍺
est la fonction "première":
⊢⍵
donner le bon argument
⍺
choisir le premier élément de cette
1⌽
faites-le pivoter d'un pas (pas d'opération sur un scalaire)
Exemple d'exécution de la méthode de secours
En exécutant 3 1 4
le code {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
,, assigne la "première" fonction ⍺
et renvoie donc le premier élément; 3
.
L'exécution {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
permet au lambda le plus à droite de "capturer" la gauche 3 1 4
comme argument gauche, donc ⍺
a une valeur qui est rejetée en faveur de 3 1 4
laquelle est ensuite tournée d'un pas vers la gauche et donne 1 4 3
le résultat. Ceci est ensuite utilisé comme seul argument pour le lambda le plus à gauche, où ⍺
devient la "première" fonction, faisant du résultat le premier élément; 1
.
L'exécution {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
permet au lambda le plus à droite de "capturer" le milieu 3 1 4
comme son argument de gauche qui est ensuite rejeté en faveur de l'argument de droite 3 1 4
, qui, une fois tourné d'un pas vers la gauche, l'est 1 4 3
. Il est ensuite utilisé comme argument de droite du lambda du milieu avec l' 3 1 4
argument de gauche comme argument de gauche. L'argument de gauche est ignoré pour la droite, qui tourne d'un pas vers la gauche donne 4 3 1
. Cela devient alors le seul argument de la lambda la plus à gauche, ⍺
devient ainsi la "première fonction", renvoyant le premier élément; 4
.
Notation
Lorsqu'il est temps de tester à l'aide de données réelles, utilisez ce faisceau de test (lié rempli de données de prétest). Les cas de test vont dans le champ d'entrée et la sortie sera le nombre total d'octets des 500 programmes ensemble. (Il générera également une erreur, mais c'est simplement parce qu'il essaie ensuite d'évaluer l'entrée telle quelle.)