W standardowych lukach zabronione jest :
Twierdzenie, że twoja odpowiedź jest napisana w „MyOwnLanguage”, gdzie polecenie
x
oznacza „przeczytaj sekwencję liczb, podziel je na grupy po trzy i wydrukuj ostatnie liczby z tych grup, w których druga liczba jest mniejsza niż pierwsza”
Tutaj zrobimy dokładnie to samo.
Zadanie
Biorąc pod uwagę ciąg dodatnich liczb całkowitych, których długość dzieli się przez 3, podziel je na grupy po trzy i wydrukuj ostatnie liczby z tych grup, w których druga liczba jest mniejsza niż pierwsza.
Przypadki testowe
Input Output
[] []
[1,2,3,4,5,6,7,8,9] []
[2,1,3,5,4,6,8,7,9] [3,6,9]
[3,1,4,1,5,9,2,6,5] [4]
[100,99,123] [123]
[123,123,456] []
[456,123,789] [789]
Punktacja
To jest golf golfowy . Najkrótsza odpowiedź w bajtach wygrywa.
Obowiązują standardowe luki , więc pamiętaj, aby nie mieć wbudowanego polecenia x
wykonującego to zadanie.
code-golf
arithmetic
array-manipulation
Leaky Nun
źródło
źródło
MyOwnLanguage
i dodaćx
polecenie ...: Px
funkcje wykonujące tę funkcję.p
mogę użyć wbudowanego wywołania ?Odpowiedzi:
Oktawa, 32 bajty
Wypróbuj online!
lub
Sprawdź przypadki testowe!
źródło
Galaretka ,
98 bajtówWypróbuj online!
Jak to działa
źródło
Haskell,
3029 bajtówMoja pierwsza próba gry w golfa w Haskell, więc mogłem przegapić optymalizację
-1 bajt dzięki @JulianWolf
źródło
x d=d
może zaoszczędzić bajtMathematica, 37 bajtów
Zakładając, że spełnia to specyfikację, ngenisis zyskuje uznanie za to podejście prowadzące do oszczędności 1-bajta!
Czysta funkcja.
BlockMap[...,#,3]&
dzieli listę wejściową na podlisty o długości 3, a następnie działa na każdej podlistie z funkcjąIf[#>#2,Print@#3]&@@#&
. W rezultacie drukowany jest każdy ostatni numer kwalifikujący się. Ta funkcja zwraca również wartość (mianowicie listęNull
sa trzeciego tak długo, jak lista wejściowa), co wydaje się być dozwolonym zachowaniem.Mathematica,
4238 bajtówDzięki Martin Ender za oszczędność 4 bajtów!
Czysta funkcja.
#~Partition~3
robi to, co myślisz.Cases[X,P:>Q]
wybiera wszystkie elementyX
dopasowania wzorcaP
i zwraca wynik reguły transformacji:>Q
zastosowanej do każdej instancji. Tutaj dopasowywany wzorzec to{a__,b_}/;a>0
:b_
dopasuje ostatni element listy ia__
wszystkie pozostałe elementy (w tym przypadku pierwsze dwa); zadzwoń do nichy
iz
na razie. Sneakya>0
następnie rozwija się doy>z>0
testu, który chcemy zastosować (ważny, ponieważ specyfikacja mówi, że wszystko będzie dodatnią liczbą całkowitą). Reguła transformacji polega na tym:>b
, że po prostu zamienia każdy dopasowany uporządkowany potrójny na ostatni element.Oryginalne zgłoszenie:
Czysta funkcja; prawie prosta implementacja, inna niż ta,
#.{1,-1,0}
która oblicza różnicę między pierwszym i drugim elementem każdej 3-elementowej listy podrzędnej.źródło
#>#2&@@#&
krótszy. Ale ogólnie rzecz biorąc, nadal jest krótszy w użyciuCases
zamiastSelect
:Cases[#~Partition~3,{a__,b_}/;a>0:>b]&
a>0:>
ma w sobie dwa rodzaje magii!BlockMap
jest tu kuszące.BlockMap[If[#>#2,#3,Nothing]&@@#&,#,3]&
działa i czy ma tylko 39 bajtów ... czy możemy zapisać kilka bajtów?BlockMap[If[#>#2,Print@#3]&@@#&,#,3]&
prawdopodobnie spełnia specPyth, 10 bajtów
Zestaw testowy
źródło
R, 35 bajtów
źródło
Brachylog (2), 14 bajtów
Wypróbuj online!
Brachylog raczej zmaga się z tego rodzaju problemem. Zauważ, że ten program ma straszną złożoność obliczeniową, ponieważ brutalne siły dzielą dane wejściowe na grupy 3 (bez wbudowanego „podziału na grupy”); działa szybko z czterema grupami, ale bardzo powoli z pięcioma.
Wyjaśnienie
źródło
l÷₃;?ḍ₍
jest to szybsza alternatywa./
nie÷
; są tutaj równoważne), ale jest to bajt dłużej, więc odrzuciłem go podczas gry w golfa.J , 14 bajtów
To odnosi się do czasownika monadycznego. Wypróbuj online!
Wyjaśnienie
źródło
Alice ,
1211 bajtówDzięki Leo za oszczędność 1 bajtu.
Wypróbuj online!
Używa punktów kodowych ciągu jako listy wejściowej i wypisuje znak odpowiadający wyjściowym, które powinny zostać zachowane.
Wyjaśnienie
źródło
r
zamiastex
. TIO05AB1E , 8 bajtów
Kod:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
dc , 30 bajtów
I / O: jedna liczba na linię.
źródło
Perl 5 , 31 bajtów
30 bajtów kodu +
-p
flaga.Wypróbuj online!
Zastępuje każdą grupę 3 liczb (
\d+ (\d+) (\d+)
) trzecią ($2
), jeśli druga ($1
) jest mniejsza niż pierwsza ($&
) i nic innego.źródło
CJam , 15 bajtów
Anonimowy blok, który oczekuje argumentu na stosie i pozostawia wynik na stosie.
Wypróbuj online! (Uruchamia wszystkie przypadki testowe)
Wyjaśnienie
źródło
Brain-Flak , 82 bajty
Wypróbuj online!
źródło
Galaretka , 10 bajtów
Wypróbuj online!
lub
Sprawdź przypadki testowe
-3 bajty dzięki @LeakyNun
Wyjaśnienie
źródło
s3µṪ×>/µ€ḟ0
s3µṪWx>/µ€
R, 37 bajtów
Wersja, z
scan()
którą mi się nie podoba, ale czyni ją krótszą.Wersja, z
function()
którą łatwiej jest przetestować (41 bajtów)Dzięki @Giuseppe! Fajny pomysł na wykorzystanie recyklingu indeksu.
Test:
Wynik:
źródło
x
od standardowego wejścia, używającx=scan()
na początku zamiast definiowania funkcji, Możesz także po prostu ustawić,i=c(1,2,0)
ponieważ indeksy logiczne są ponownie przetwarzane, tj.x=scan();i=c(1,2,0);x[!i][x[i>1]<x[i==1]]
x=scan()
podejście, ponieważ sprawia, że wkład jest bardzo kłopotliwy. I nie mogę uczynić tego powtarzalnym.matrix()
ale jakoś nie wierzyłem, że będzie to możliwe tak krótko.JavaScript (ES6),
4644424139 bajtówSpróbuj
Wprowadź listę liczb oddzieloną przecinkami, bez spacji.
Wyjaśnienie
źródło
y%3>1&a[y-1]<a[y-2]
działaŁuska , 8 bajtów
Wypróbuj online!
Wyjaśnienie
Ten program jest trochę zaangażowany, więc trzymaj się mnie.
Funkcja
ΓȯΓ↑<
pobiera listę długości 3x = [a,b,c]
. PierwszyΓ
dzieli sięx
naa
i[b,c]
przekazuje je jako argumenty do funkcjiȯΓ↑<
. Powinno to być równoważne((Γ↑)<)
, ale z powodu błędu / funkcji interpretera, w rzeczywistości jest równoważne(Γ(↑<))
, interpretowane jako kompozycjaΓ
i↑<
. Teraza
jest podawany do tej ostatniej funkcji przy użyciu częściowej aplikacji, wynikowa funkcja↑<a
jest przekazywana doΓ
, która dekonstruuje[b,c]
dob
i[c]
. Następnieb
jest podawany do↑<a
, w wyniku czego funkcja pobiera pierwszeb<a
elementy z listy. Ta funkcja jest w końcu stosowana do[c]
; wynikiem jest,[c]
jeślia>b
i[]
Inaczej. Listy te są łączone wṁ
celu uzyskania końcowego wyniku, który jest drukowany w sposób dorozumiany.Bez „funkcji” miałbym 9 bajtów:
źródło
Python 3 ,
4342 bajty1 bajt dzięki xnor.
Wypróbuj online!
źródło
MATL , 10 bajtów
Wynik jest wyświetlany jako liczby oddzielone spacjami.
Wypróbuj online!
Lub sprawdź wszystkie przypadki testowe . Wyświetla ciąg znaków reprezentujący dane wyjściowe, dzięki czemu pusta tablica jest faktycznie postrzegana jako
[]
. Zauważ, że w MATL liczba jest taka sama jak tablica singletonów, więc[4]
jest pokazana jako4
.Wyjaśnienie
źródło
Röda , 15 bajtów
Röda jest prawie tak krótka, jak języki gry w golfa ...
To pobiera trzy wartości ze strumienia i wypycha trzecią (
_3
) z powrotem, jeśli druga (_2
) jest mniejsza niż pierwsza (_1
).Podkreślenia to cukier składniowy dla
for
pętli, więc program można zapisać jako{{[a]if[b<c]}for a,b,c}
lub nawet{[a]for a,b,c if[b<c]}
.Brak linku TIO, ponieważ z jakiegoś powodu nie działa na TIO (chociaż działa z najnowszą wersją Rödy, która poprzedza wyzwanie).
źródło
Java 7,
8685 bajtów-1 bajt dzięki @ PunPun1000
Wyjaśnienie:
Wypróbuj tutaj.
źródło
3,9
w przypadku testowym1,2,3,4,5,6,7,8,9
zamiast3,6,9
).C #, 126 bajtów
Jeśli chcesz cały program z tą metodą, będzie to 175 bajtów :
Zapisano 7 bajtów za pomocą TheLethalCoder
źródło
(int[]i)
może być po prostui
niepotrzebny dla tego typu.(i)
.Python 2 , 57 bajtów
Wypróbuj online!
źródło
CJam , 16 bajtów
Dane wyjściowe są wyświetlane jako liczby oddzielone spacjami.
Wypróbuj online!
Wyjaśnienie
źródło
PHP, 89 bajtów
Wypróbuj online!
źródło
JavaScript,
108107108 bajtówTo jest poprawna funkcja anonimowa JS (lambda). Dodaj
x=
na początku i wywołaj jakx([5,4,9,10,5,13])
. Wyjścia jako funkcjareturn
.Fragment przyjmuje dane wejściowe jako listę liczb całkowitych oddzielonych przecinkami.
źródło
martin
idennis
jako identyfikatora?[5,4,9,10,5,13]
.,
spowodowało, że powstał szereg ciągów zamiast liczb! Rozwiązanie jest w porządku. Tylko fragment przypadku testowego był niepoprawny. Naprawiłem to teraz. Dzięki za zwrócenie na to uwagi! :)Perl5.8.9,
7360 bajtów(58 + 2 dla flagi „n”, aby odczytać cały plik i a dla automatycznego podziału). Zakłada, że dane wejściowe to linie liczb oddzielonych spacją
Redukcja dzięki Dadzie. Uwzględniając nadruk na końcu dla widoczności, co pozwoliłoby zaoszczędzić 8 bajtów, jeśli nie.
źródło
print"\n"
na końcu. Możesz także zrobić,$b[1]<$b[0]&&print"$b[2] "while@b=splice@a,0,3
aby zapisać 7 bajtów. Na koniec możesz użyć-a
flagi zamiast@a=split
(zrobi to samo automatycznie i zapisze wynik@F
zamiast@a
); z Perl 5.8.9, trzeba-na
natomiast z ostatnich Perls,-a
wystarczy. To powinno doprowadzić Cię do 47-48 bajtów.Clojure, 43 bajty
Nudny :/
źródło
Bash , 61 bajtów
Wypróbuj online!
źródło