Anonymes Präfix Lambda. Gibt einen Programmkörper zurück.
{
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
}
Probieren Sie es online aus!
Methoden
Dies untersucht verschiedene Methoden und gibt die erste verwendbare zurück, wobei schließlich auf eine universell anwendbare Methode zurückgegriffen wird.
Einzelelement
Wenn die Liste nur ein Element enthält, wird sie unverändert zurückgegeben.
2, 22 usw.
Eine einzelne Ziffer kann einfach wiederholt werden, um die 11-mal größere Zahl zu generieren.
Alles das selbe
Wir geben nur die ⊢
Nummer ganz rechts ( ) zurück.
Linear
f (n) = k × n Sequenzen fügen einfach ein Plus vor dem ersten Term ein.
Faktoriell gefolgt von allen Einsen
Wenn die erste Zahl n =! M und die nachfolgenden Zahlen 1 sind, !m
ist dies eine Lösung, da !m
n und m!m
1 ist und !1
1 ist.
b ab ab ab
Da alle zweistelligen Zahlen größer sind als alle einstelligen Zahlen, ist ein laufendes Maximum, bei dem die Vorderseite der ersten Zahl auf die Rückseite der zweiten Zahl geklebt wird, eine Lösung.
Der dreizeilige Code
Überprüfen Sie, ob eine Formel des Typs +a×b
gültig ist.
String-Fallback
Lange Sequenzen ohne Zahlen unter 5 (da 4 ein Zeilenumbruch ist) können als Zeichen des SBCS codiert werden.
Fallback für versetzte Zeichenfolgen
Wenn es Zahlen unter 5 gibt, verschieben wir uns um 9, um diese zu vermeiden.
Zurückfallen
Einfache Verkettung der Zeichenfolge "{⍺←⊃⋄1⌽⍺⊢⍵}"
und der ⍕
Eingabe stringified ( ). ZB [3,1,4]
gibt den Programmkörper zurück {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
.
Der Teil in geschweiften Klammern ist eine ambivalente Funktion, dh er kann entweder eine Präfixfunktion oder eine Infixfunktion sein. Daher wird die Instanz ganz links im Präfixmodus und alle anderen im Infixmodus ausgeführt. Der Unterschied zwischen den Modi besteht darin, ob ⍺
das linke Argument einen Wert hat. Ist dies nicht der Fall, wird ihm die Funktion ⊃
(zuerst) zugewiesen .
Erläuterung der Fallback-Methode
{
… }
Anonymes Lambda:
⍺←⊃
Wenn kein linkes Argument ( ⍺
) vorhanden ist, weisen Sie die Funktion ⊃
(zuerst) zu⍺
⋄
dann:
An dieser Stelle bedeutet der folgende Code zwei verschiedene Dinge, je nachdem, ob ⍺
es sich um eine Liste von Nummern (Infix-Aufruf) oder um die Funktion "first" (Präfix-Aufruf) handelt.
Wenn ⍺
ist eine Liste von Zahlen:
⍺⊢⍵
Verwerfen Sie das linke Argument zugunsten des rechten Arguments
1⌽
Drehe diesen einen Schritt nach links
Wenn ⍺
ist die Funktion "zuerst":
⊢⍵
das richtige Argument liefern
⍺
Wählen Sie das erste Element davon
1⌽
drehe es einen Schritt (ein No-Op auf einem Skalar)
Beispiellauf der Fallback-Methode
Durch Ausführen 3 1 4
des Codes wird {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
die "erste" Funktion zugewiesen ⍺
und somit das erste Element zurückgegeben. 3
.
Durch Ausführen kann {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
das Lambda ganz rechts die Linke 3 1 4
als linkes Argument "erfassen" , ⍺
hat also einen Wert, der verworfen 3 1 4
wird, der dann einen Schritt nach links gedreht wird und 1 4 3
als Ergebnis ergibt . Dies wird dann als einziges Argument für das Lambda ganz links verwendet, wo es ⍺
zur "ersten" Funktion wird, wodurch das Ergebnis das erste Element ist. 1
.
Durch Ausführen {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
"erfasst" das Lambda ganz rechts die Mitte 3 1 4
als linkes Argument, das dann zugunsten des rechten Arguments verworfen wird 3 1 4
, das bei Drehung um einen Schritt nach links ist 1 4 3
. Dies wird dann als rechtes Argument des mittleren Lambda zusammen mit dem 3 1 4
Argument ganz links als linkes verwendet. Das linke Argument wird für das rechte verworfen, das einen Schritt nach links gedreht ergibt 4 3 1
. Dies wird dann das einzige Argument des Lambdas ganz links, wird also ⍺
zur "ersten Funktion" und gibt das erste Element zurück; 4
.
Wertung
Wenn es Zeit wird, anhand der tatsächlichen Daten zu testen, verwenden Sie dieses Testkabel (verknüpft mit Vortestdaten). Die Testfälle werden in das Eingabefeld eingegeben, und die Ausgabe ist die Gesamtbytezahl aller 500 Programme zusammen. (Es wird auch ein Fehler ausgegeben, aber das liegt nur daran, dass anschließend versucht wird, die Eingabe unverändert zu bewerten.)