Anonimowy przedrostek lambda. Zwraca treść programu.
{
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
}
Wypróbuj online!
Metody
To bada różne metody i zwraca pierwszą użyteczną, ostatecznie wracając do powszechnie stosowanej metody.
Pojedynczy element
Jeśli lista zawiera tylko jeden element, jest zwracana w niezmienionej postaci.
2, 22 itd.
Pojedynczą cyfrę można po prostu powtórzyć, aby wygenerować liczbę 11 razy większą,
Wszystkie takie same
Zwracamy tylko najbardziej prawą ( ⊢
) liczbę.
Liniowy
f (n) = k × n sekwencji wystarczy wstawić plus przed pierwszym terminem.
Czynnikowe, a następnie wszystkie 1
Gdy pierwsza liczba n =! Mi kolejne liczby to 1, to !m
jest rozwiązanie, ponieważ !m
jest n i m!m
wynosi 1, a !1
wynosi 1.
b ab ab ab
Ponieważ wszystkie liczby dwucyfrowe są większe niż wszystkie liczby jednocyfrowe, rozwiązaniem jest maksimum, w którym przód pierwszej liczby jest przyklejony z tyłu drugiej liczby.
Trzywierszowy kod
Sprawdź, czy jakaś formuła tego typu +a×b
jest poprawna.
Powrót łańcucha
Długie sekwencje bez liczb poniżej 5 (ponieważ 4 to podział linii) mogą być kodowane jako znaki SBCS.
Zastąpienie ciągu zastępczego
Jeśli liczb jest poniżej 5, przeskakujemy o 9, aby ich uniknąć.
Fallback
Prosta konkatenacja ciągu znaków "{⍺←⊃⋄1⌽⍺⊢⍵}"
i ⍕
wejście stringified ( ). Np. [3,1,4]
Zwraca treść programu{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
.
Część nawiasów klamrowych jest funkcją ambiwalentną, co oznacza, że może to być funkcja przedrostka lub funkcja przedrostka. W ten sposób jego najbardziej lewa instancja będzie działać w trybie przedrostka, a wszystkie pozostałe w trybie przedrostka. Różnica między trybami polega na tym, czy ⍺
oznaczenie lewego argumentu ma wartość. Jeśli nie, to zostanie mu przypisana funkcja ⊃
(pierwsza).
Wyjaśnienie metody rezerwowej
{
… }
Anonimowa lambda:
⍺←⊃
Jeśli nie ma lewego argumentu ( ⍺
), przypisz funkcję ⊃
(pierwszą) do⍺
⋄
następnie:
W tym momencie poniższy kod oznacza dwie różne rzeczy w zależności od tego, czy ⍺
jest to lista numerów (połączenie infix), czy funkcja „pierwsza” (połączenie prefiksu).
Jeśli ⍺
jest to lista liczb:
⍺⊢⍵
odrzuć lewy argument na rzecz prawego argumentu
1⌽
obróć o jeden krok w lewo
Jeśli ⍺
jest funkcja „pierwsza”:
⊢⍵
podać właściwy argument
⍺
wybierz pierwszy element tego
1⌽
obróć go o jeden krok (no-op na skalar)
Przykład uruchomienia metody rezerwowej
Wykonując 3 1 4
kod, {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
przypisuje funkcję „first” do, ⍺
a tym samym zwraca pierwszy element; 3
.
Wykonanie {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
pozwala lambda najbardziej wysuniętej na prawo „uchwycić” 3 1 4
lewy argument jako lewy argument, więc ⍺
ma wartość, która jest odrzucana, na rzecz 3 1 4
której jest następnie obracana o jeden krok w lewo i daje 1 4 3
wynik. Jest to następnie wykorzystywane jako jedyny argument dla lewej skrajnej lambdy, gdzie ⍺
staje się „pierwszą” funkcją, powodując, że wynik jest pierwszym elementem;1
.
Wykonywanie {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4
pozwala lewemu lambda „uchwycić” środek 3 1 4
jako lewy argument, który jest następnie odrzucany na korzyść prawego argumentu 3 1 4
, którym jest obrócenie o jeden krok w lewo 1 4 3
. Jest to następnie wykorzystywane jako prawy argument środkowej lambdy wraz z lewym skrajnym 3 1 4
jako lewy argument. Lewy argument jest odrzucany dla prawej, która obraca się o jeden krok w lewo daje 4 3 1
. To staje się wówczas jedynym argumentem lambda położonej najbardziej na lewo, a więc ⍺
staje się „pierwszą funkcją”, zwracającą pierwszy element; 4
.
Punktacja
Kiedy przyjdzie czas na testowanie przy użyciu rzeczywistych danych, użyj tej wiązki testowej (połączonej z danymi z testu wstępnego). Przypadki testowe trafiają do pola Input, a Output będzie całkowitą liczbą bajtów wszystkich 500 programów razem. (Zgłasza również błąd, ale tylko dlatego, że później próbuje ocenić dane wejściowe w obecnej postaci).