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 !mjest rozwiązanie, ponieważ !mjest n i m!mwynosi 1, a !1wynosi 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×bjest 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 4kod, {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4przypisuje funkcję „first” do, ⍺a tym samym zwraca pierwszy element; 3.
Wykonanie {⍺←⊃⋄1⌽⍺⊢⍵}3 1 4{⍺←⊃⋄1⌽⍺⊢⍵}3 1 4pozwala lambda najbardziej wysuniętej na prawo „uchwycić” 3 1 4lewy argument jako lewy argument, więc ⍺ma wartość, która jest odrzucana, na rzecz 3 1 4której jest następnie obracana o jeden krok w lewo i daje 1 4 3wynik. 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 4pozwala lewemu lambda „uchwycić” środek 3 1 4jako 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 4jako 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).