Biorąc pod uwagę listę z liczbą, wypisz następujące zakresy:
Wejście: [0, 5, 0]
stanie się [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
.
Jest to mapowanie zakresu przez tablicę, więc najpierw musimy utworzyć zakres [0, 5]
, który jest [0, 1, 2, 3, 4, 5]
. Następnie używamy 5
do utworzenia zakresu [5, 0]
. Dołączone do naszej poprzedniej oferty, daje nam to:
[0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]
Zobaczmy przypadek testowy z dwoma takimi samymi cyframi obok siebie:
[3, 5, 5, 3], ranges:
[3, 5] = 3, 4, 5
[5, 5] = 5 (actually [5, 5] due to overlapping)
[5, 3] = 5, 4, 3
To by nam dało [3, 4, 5, 5, 4, 3]
.
Niektóre inne przypadki testowe:
[1, 9] > [1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, -10] > [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10]
[3, 0, 0, -3] > [3, 2, 1, 0, 0, -1, -2, -3]
[1, 3, 5, 7, 5, 3, 1, -1, -3] > [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3]
Dane wejściowe zawsze będą miały co najmniej 2 liczby całkowite.
Najkrótsza odpowiedź wygrywa!
code-golf
array-manipulation
Lamaro
źródło
źródło
Odpowiedzi:
05AB1E, 1 bajt
Wypróbuj online!
Jak to działa
To jest wbudowane.
źródło
JavaScript,
999593 bajtów46 bajtów off dzięki @Neil .źródło
y<b?b-y:y-b||1
. Zapisz kolejny bajt, używający>b||y-b&&-1
.y<b?-1:y>b
jest jeszcze lepiej.JavaScript (SpiderMonkey 30+),
8176 bajtówTestowany w przeglądarce Firefox 44. Korzysta z niesamowitych możliwości destrukcji argumentów ES6 i interpretacji tablic ES7 (które niestety zostały usunięte ze specyfikacji ES7).
źródło
[3, 0, 0, -3]
. Naprawiłem RangeError i zapisałem 10 bajtów, ale nadal nie działa:([n,...a],z=[n])=>z.concat([for(i of a)for(j of[...Array((r=n<i)?i-n-1:n-i-1),0])i=r?++n:--n])
([n,...a])=>[n].concat([for(i of a)for(j of[...Array((r=n<i)?i-n:n-i)])i=r?++n:--n])
oczywiście miałem na myśli .JavaScript (ES6) 66
72Funkcja rekurencyjna, która wielokrotnie dodaje wartości do tablicy, aby wypełnić luki między liczbami bliskimi
Test
źródło
C, 120 + 12 = 132 bajty
Przykładowe połączenie:
Testuj na żywo na ideone .
źródło
Python 2, 77 bajtów
Wypróbuj online
Dzięki Neilowi, DenkerAffe i Erwanowi za wskazanie ulepszeń, których mi brakowało
źródło
+1
jest to niepotrzebne?lambda n:n[0:1]+sum([range(x,y,[1,-1][y+1<x])[1:]+[y]for(x,y)in zip(n,n[1:])],[])
? oszczędza niektóre bajty.[1,-1][y+1<x]
przez2*(y>x)-1
(również nie rozumiem dlaczego używaszy<=x
i nie tylkoy<x
)n[0:1]
jest równoważne zn[:1]
.Perl, 47 bajtów
Zawiera +3 dla
-p
(kod zawiera$'
więc spację i-
też się liczy)Podaj listę numerów na STDIN:
fluctuating.pl
:Zmienna tymczasowa i wszystkie te nawiasy wydają się nieoptymalne ...
źródło
$'
wspomniałeś nie jest w kodzie ...Haskell,
6355 bajtówPrzykład użycia:
g [3,5,5,3]
->[3,4,5,5,4,3]
.To modyfikacja mojej odpowiedzi na powiązane wyzwanie . Ponownie, główna praca jest wykonywana przez połączenie listy od
a
góry dob-1
i oda
dołu dob+1
(gdzie jedna lista będzie pusta) i wywołanie rekurencyjne. Aby obsłużyća==b
przypadek, w którym obie listy są puste, przygotowujemy,[a|a==b]
która ocenia,[a]
czya==b
i[]
inaczej.źródło
R,
868275 bajtówzapisano 4 bajty przy użyciu rep not rep.int (kod golfa nie wydajność!) zapisano kolejne 7 bajtów przy użyciu wbudowanego częściowego dopasowania podczas używania
$
(i zwijania definicji funkcji do 1 wierszaźródło
(y=...)
raczej niż(y<-...)
jest również poprawny i jeden bajt mniej.Rubin,
11682 bajtówMój pierwszy golf.
Edycja: Wielkie dzięki za niesamowite sugestie.
źródło
map
„s blok kodu może przyjmować szereg postaci wielu parametrów:->n{o,*m=n;o=[o];m.zip(n).map{|t,u|o+=u==t ?[u]:(u<t ?[*u+1..t]:[*t..u-1].reverse)};o}
. W przeciwnym razie fajny pierwszy golf.[[u],[*u+1..t],[*t..u-1].reverse][t<=>u]
.Japt , 12 bajtów
Zaoszczędź 16 bajtów dzięki @ETHproductions !
Przetestuj online
źródło
Perl 6, 94 bajtów
Nie jestem z tego bardzo zadowolony, prawdopodobnie później zrobię kolejne zdjęcie
źródło
PHP 5.4, 86 bajtów
Jest to przeznaczone do użycia jako dołączony plik, który zwraca wynik.
Wartości są przekazywane jako parametry wiersza polecenia.
Niezupełnie ładne czy coś, ale spełnia swoje zadanie.
źródło
Python 3 , 76 bajtów
Pierwsza próba odpowiedzi w języku Python. Podstawową ideą jest wielokrotne identyfikowanie par w sekwencji, w których różnica jest większa niż krok i wstawianie jednego (i tylko jednego) dodatkowego elementu, aby zakończyć sekwencję we właściwym kierunku. Powtarzaj, aż wszystkie różnice między kolejnymi elementami będą wynosić od +1 do -1.
Wypróbuj online!
źródło
Lua, 156 bajtów
Funkcja, która pobiera tablicę w parametrze i zwraca tablicę rozszerzoną.
Bez golfa i wyjaśnienia
Dla ułatwienia możesz użyć poniższej funkcji, aby wydrukować tablicę zwróconą przez
f()
.Podczas testowania tego zgłoszenia możesz je nazwać:
źródło
Mathcad, 62 „bajty”
Ponieważ Mathcad używa 2D „tablicy” i operatorów specjalnych (np. Operatora sumowania, operatora całkującego) i zapisuje w formacie XML, rzeczywisty arkusz roboczy może zawierać kilkaset (lub więcej) znaków. Na potrzeby Code Golf podjąłem „liczbę bajtów” Mathcada, która jest liczbą znaków lub operatorów, które użytkownik musi wprowadzić, aby utworzyć arkusz.
Przekształcenie definicji funkcji w prosty program i zastąpienie zmiennej lst nazwą pojedynczego znaku daje w sumie 62 „bajty”. Dzięki tej funkcji, używając pojedynczego znaku zamiast pełnej nazwy, zwiększa się on do 65 „bajtów” w definicji i kolejnych 4 „bajtów” dla każdego wywołania (zakładając, że utworzenie samej listy nie jest uwzględnione w całym bajcie count (Korzystanie z wbudowanych tabel Mathcada to kolejny sposób wprowadzania listy).
źródło
PHP, 144 bajty
Widok rozstrzelony Wywołanie wejścia / funkcji WynikJest niechlujny i gruby, a później postaram się go zoptymalizować. Tworzy
range()
z każdej pary sąsiednich par wartości, a następnie łączy je ze sobą (popop
oderwaniu końca poprzedniej kumulatywnejArray
).źródło
Perl6, 21
.join jest skrótem od $ _. join
Test (rakudo)
Wynik
źródło
Galaretka , 10 bajtów
Wypróbuj online!
źródło
R , 74 bajty
Kolejne rozwiązanie R.
Wypróbuj online!
źródło