Oto wyzwanie. Napisz kod, aby wyprowadzić wszystkie liczby całkowite z zakresu. Brzmi łatwo, ale oto podstępna część. Zacznie się od najniższej liczby, a następnie najwyższej. Następnie najniższa liczba, która nie jest jeszcze w tablicy. Zatem najwyższy, którego jeszcze nie ma.
Przykład:
Weźmy od 1 do 5 jako nasz początek
Liczby to [1, 2, 3, 4, 5].
Bierzemy pierwszy, więc [1]. Pozostałe liczby to [2, 3, 4, 5]. Bierzemy ostatnią, nową tablicę to [1, 5]. Pozostałe liczby to [2, 3, 4]. Przyjmujemy pierwszą, nową tablicę to [1, 5, 2]. Pozostałe liczby to [3, 4]. Bierzemy ostatnią, nową tablicę to [1, 5, 2, 4]. Pozostałe liczby to [3]. Przyjmujemy pierwszą, nową tablicę to [1, 5, 2, 4, 3]. Nie ma już żadnych liczb, gotowe. Wyjście [1, 5, 2, 4, 3]
Zasady:
- To jest kod golfowy, napisz go w jak najmniejszej liczbie bajtów, w dowolnym języku.
- Brak standardowych luk.
- Proszę podać linki do tłumacza online? (Np. Https://tio.run/ )
- Dwa wejścia, obie liczby całkowite. Niski koniec zakresu i wysoki koniec zakresu.
- Nie przeszkadza mi, jaki jest typ danych wyjściowych, ale musi pokazywać liczby we właściwej kolejności.
Przykłady
Niski: 4 Wysoki: 6 Wynik: 4 6 5
Niski: 1 Wysoki: 5 Wynik: 1 5 2 4 3
Niski: -1 High: 1 Wynik: -1 1 0
Niski: -1 wysoki: 2 Wynik: -1 2 0 1
Niski: -50 Wysoki: 50 Wynik: -50 50-49 49-48 48 -47 47 -46 46 -45 45-44 44-43 43-42 42-41 41-40 40-39 39-38 38-37 37 -36 36 -35 35 -34 34 -33 33 -32 32-31 31-30 30 -29 29 -28 28 -27 27 -26 26-25 25 -24 24 -23 23 -22 22-21 21 - 20 20-19 19-18 18-17 17-16 16-15 15-14 14-13 13-12 12-11 11-10 10-9 9-8 8-7 7-6 6-5 5-4 4 -3 3 -2 2 -1 1 0
Miłej gry w golfa!
Odpowiedzi:
R ,
383736 bajtówWypróbuj online!
Wykorzystanie faktu, że R przechowuje macierze według kolumn
źródło
rbind
jest znacznie lepsze niż moje podejście, ale możesz zaoszczędzić 1 bajt, używając[seq(a:b)]
zamiastunique
.seq(a:b)
Haskell , 30 bajtów
Wypróbuj online!
źródło
R ,
65646160 bajtów-1 bajt dzięki Robert S.
-4 więcej dzięki digEmAll
Wypróbuj online!
źródło
length(z)
zesum(z|1)
aby zapisać 1 bajt :)|
edytowany za pomocą 1. Co jest zawsze równe 1. Kiedy bierzesz sumę, masz wektor wypełnionyTRUE
s, więc wynik jest równy długości wektora. Jeśli wektor jest pusty, to nie ma|
z czym, więc wektor wyjściowy jestlogical(0)
. Gdy weźmiesz tę sumę, będzie to 0Haskell , 39 bajtów
Wypróbuj online!
źródło
Python 2 , 44 bajty
Wypróbuj online!
źródło
PowerShell ,
5948 bajtówWypróbuj online!
(Wydaje się długi ...)Pobiera dane wejściowe
$a
i$b
konstruuje zakres0 .. ($b-$a)
, zapisuje go$z
, a następnie zapętla ten zakres. Pętla w tym zakresie służy tylko jako licznik, aby zapewnić wystarczającą liczbę iteracji. Każda iteracja, stawiamy$a
i$b
na rurociągu z dodawaniem / odejmowaniem. To daje nam coś takiego1,5,2,4,3,3,4,2,5,1
, więc musimy się że kawałek od0
przygotowań do$b-$a
(tj liczą) oryginalnej tablicy, tak my zostajemy tylko z odpowiednimi elementami. Pozostaje to w potoku, a wyniki są niejawne.-11 bajtów dzięki mazzy.
źródło
$b-$a
sztuczka - to sprytne!05AB1E , 6 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
.ι
;)Japt , 14 bajtów
Wypróbuj online!
źródło
Stax , 7 bajtów
Uruchom i debuguj
źródło
R , 51 bajtów
Wypróbuj online!
Objaśnienie: Dla sekwencji
x:y
długościN
utwórz macierz dwa na N składającą się z sekwencji x: y w górnym rzędzie i y: x w dolnym rzędziematrix(c(z,rev(z)),2,,T)
. Jeśli wybierzemy pierwszyN
elementy macierzy[seq(z)]
, zostaną one wybrane według kolumny, dając wymagany wynik.Outgolfed by digEmAll
źródło
cQuents , 19 bajtów
Wypróbuj online!
Pamiętaj, że obecnie nie działa w TIO, ponieważ interpreter TIO nie jest aktualny.
Wyjaśnienie
źródło
Haskell, 39 bajtów
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 46 bajtów
Zaoszczędź 4 bajty dzięki dana!
Wypróbuj online!
C # (interaktywny kompilator Visual C #) , 65 bajtów
Wypróbuj online!
źródło
Kod bajtowy JVM (OpenJDK asmtools JASM), 449 bajtów
Niegolfowany (i nieco czystszy)
Funkcja samodzielna, należy wywołać z Java as
b.a(num1,num2)
.Wyjaśnienie
Ten kod wykorzystuje parametry metody jako zmienne, a także wartość logiczną w lokalnym numerze 3 decydującym o tym, którą liczbę wyprowadzić. Każda iteracja pętli, albo w lewo, albo w prawo, jest wyprowadzana, a liczba ta jest zwiększana dla lewej lub zmniejszana dla prawej. Pętla trwa do momentu, aż obie liczby będą równe, a następnie ta liczba jest wyprowadzana.
... Mam wyraźne przeczucie, że jestem ogromnie oszołomiony pod względem liczby bajtów
źródło
Wolfram Language (Mathematica) ,
5654 bajtówTo mój pierwszy raz w golfa!
Wypróbuj online!
Zapisano 2 bajty za pomocą notacji infix.
Wyjaśnienie:
Alternatywnie możemy użyć
Take[...,b-a+1]
tego samego rezultatu.Testy:
Ouput:
źródło
APL (dzaima / APL) , 21 bajtów
Wypróbuj online!
źródło
Japt, 7 bajtów
Pobiera dane wejściowe jako tablicę.
Wypróbuj lub uruchom wszystkie przypadki testowe
źródło
MATL , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript, 40 bajtów
Wypróbuj online!
źródło
Dalej (gforth) , 52 bajty
Wypróbuj online!
Wyjaśnienie
Pętla od 0 do (End - Start). Umieść End i Start na wierzchu stosu.
Każda iteracja:
Objaśnienie kodu
źródło
Julia 0,7 , 29 bajtów
Wypróbuj online!
źródło
Haskell, 30 bajtów
Użycie:
3%7
daje „[3,7,4,6,5]W przypadku danych wejściowych
l, h
funkcja wywołuje rekurencyjnie dane wejściowel+1, h-1
i dodajel,h
do początku. Zamiast warunków zatrzymania, kod używatake(h-l)
do skrócenia sekwencji do odpowiedniej długości (co w innym przypadku byłoby nieskończoną sekwencją rosnących i malejących liczb).źródło
Brachylog , 15 bajtów
Dane wejściowe to lista 2-elementowa [lo, hi]. Zauważ, że dla liczb ujemnych używany jest znak podkreślenia.Wypróbuj online!
Wyjaśnienie
źródło
MathGolf , 6 bajtów
Wypróbuj online!
Wyjaśnienie za pomocą
(1, 5)
Powodem, dla którego to działa, jest fakt, że wszystkie elementy na wyjściu powinny być unikalne, więc operator elementów unikatowych odfiltruje drugą połowę tablicy, wytwarzając prawidłowe dane wyjściowe.
źródło
Perl 5
-ln
, 37 bajtówWypróbuj online!
źródło
Java (JDK) , 52 bajty
Wypróbuj online!
źródło
Czysty , 48 bajtów
Wypróbuj online!
źródło
Rubin ,
373633 bajtówWypróbuj online!
Wersja rekurencyjna z 3 bajtami zapisanymi przez G B.
Rubinowy , 38 bajtów
Wypróbuj online!
Wersja nierekurencyjna.
źródło
Cubix, 16 bajtów
Wypróbuj tutaj
Cubified
Wyjaśnienie
Zasadniczo przesuwa to dwie granice bliżej siebie o krok, aż się spotkają. Za każdym razem, gdy pętla, wapujemy
s
granice,O
utput, bierzemy różnicę i zwiększamy)
lub zmniejszamy za(
pomocą znaku.źródło
Pyth,
108 bajtówWypróbuj tutaj
Wyjaśnienie
źródło