W kolejce z przyjaciółmi

16

Jesteś ze swoim najlepszym kumplem, Jimem, w wesołym miasteczku, a gdy pojawia się twoja ulubiona jazda, ty i Jim wymieniacie spojrzenia. Oczywiście ścigasz się, aby stać w kolejce. Niestety wygrywa, ponieważ jesteś golfistą i uprawia prawdziwy sport (przepraszam przyjaciół). W rzeczywistości jesteś tak daleko w tyle, że ty i Jim jesteście oddzieleni przez xludzi. Zakładając, że linia jest długa, na ty jesteś z tyłu, a linia zygzakuje i zagrywa każdego jludu, w jakich pozycjach w linii ty i Jim będziecie w tej samej kolumnie, umożliwiając wam czat (tylko jeden rząd od siebie)?

Wejście

3 liczby całkowite

  • n- długość linii. Liczba ta jest zawsze większe lub równe ji będzie w formie y * j, gdy yjest dodatnia (liczbę wierszy w kolejce).
  • j- Liczba osób w jednym rzędzie linii (liczba kolumn w jednym rzędzie). Liczba ta zawsze będzie większa niż 0.
  • x- Liczba osób między tobą a Jimem taka, że 0 <= x < 2j - 1. Wskazówka: jeśli liczba ta jest nieparzysta, wynik powinien być pusty.

Wynik

Lista pozycji liczb całkowitych w linii, w której Jim znajduje się w tej samej kolumnie co ty.
1 Te liczby całkowite mogą być indeksowane 0 lub 1, o ile podano w odpowiedzi.
2 Te liczby całkowite mogą zakładać, że zaczynasz od pozycji 0 lub pozycji n-1, o ile podasz w odpowiedzi.

Przykład

Przykład kolejkowania Mały
W tym przykładzie dane wejściowe to n = 9, j = 3, x = 0. Wynik powinien być taki, 2, 5że twoja pozycja wynosi 2 lub 5, gdy jesteś w tej samej kolumnie co Jim

Przypadki testowe

[9, 3, 0] -> [2, 5]
[12, 3, 0] -> [2, 5, 8]
[9, 3, 1] -> []
[9, 3, 2] -> [1, 4]
[14, 7, 10] -> [1]
[24, 4, 6] -> [0, 4, 8, 12, 16]

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź (w bajtach).

Szturchać
źródło
4
Jestem kolejka rious zobaczyć kilka ciekawych rozwiązań tego! (przepraszam, zła gra słów, a także niewłaściwe użycie tego słowa, ale nieważne, nie oceniaj mnie: P)
HyperNeutrino
1
Czy możemy zwrócić wartość fałsz zamiast pustej tablicy?
Rɪᴋᴇʀ
@Riker Nie widzę powodu, aby to zabronić. Idź na
całość

Odpowiedzi:

9

Python 2 , 45 41 40 37 bajtów

lambda n,j,x:range(j-x/2,x%2or n-x,j)

Prawie trywialne rozwiązanie. Po prostu szybko poszukałem wzorów i znalazłem wzór. 1 indeksowany, 1 znajduje się z tyłu kolejki.

-4 bajty poprzez unikanie trójek i użycie tablicy wartości zamiast
-1 bajt dzięki pewnej inspiracji z @DeadPossum, poprzez użycie andzamiast trójek lub selektorów tablic
-3 bajty poprzez przełączenie na orw odwrotnej kolejności. Działa tylko z powodu indeksowania 1

Przekreślone 4 to nadal 4 na wszystkich 4 :(

Wypróbuj online!

HyperNeutrino
źródło
Lol, napisałeś zaledwie 14 minut przede mną :) Moja wersja jest krótsza o 3 bajty:lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
Dead Possum
@DeadPossum Nice. Mam inne rozwiązanie, które jest o jeden bajt krótsze, lol
HyperNeutrino
Miałem błąd w drugim argumencie zakresu. Nie powinno tak być n-j+1, więc lambda n,j,x:x%2-1and range(j-x/2,n-x,j)jest krótszy o jeden w sumie 40 bajtów
Dead Possum
@DeadPossum Czekaj, czy wolno nam było zwrócić wartość fałsz zamiast pustej tablicy?
HyperNeutrino
3
@FelipeNardiBatista to właśnie oznacza „1-indeksowany”, btw.
Rɪᴋᴇʀ
2

Pip , 22 21 bajtów

20 bajtów kodu, +1 dla -pflagi.

c%2?lv-c/2+b*\,a/b-1

Bierze n, ji xjako argumenty wiersza poleceń. Indeksowane od 0, zaczynając od pozycji 0. Wypróbuj online!

Wyjaśnienie

To jest moja oryginalna 22-bajtowa wersja, ponieważ jest nieco bardziej zrozumiała.

                       a, b, c are cmdline args; l is [] (implicit)
c%2?                   Test c mod 2
    l                  If it's 1 (truthy), return empty list; else:
                a/b-1  Number of rows in the queue minus 1
               ,       Range(^)
             b*        Multiply each element by b
     b-1-c/2+          Add (b-1)-c/2 to each element
                       Output in [1;2;3] format (implicit, -p flag)

Preparat otrzymano przez obserwację wzór do n=9, j=3:

x Output
0 [2;5]
2 [1;4]
4 [0;3]

Jeśli weźmiemy x/2( 0, 1, 2), odjąć go od j-1( 2, 1, 0), i dodać, że do [0;3]otrzymujemy poprawny wynik we wszystkich przypadkach.

DLosc
źródło
1

Java 8 lambda, 101 bajtów

(n,j,x)->{int[]i=new int[n/j-1];int c=0,k=j-x/2;for(;k<n-x;k+=j)i[c++]=k;return x/2==0?i:new int[0];}

Prawie bezpośredni port mojej odpowiedzi w Pythonie. Zasięg nie istnieje jednak w Javie.

HyperNeutrino
źródło
0

Haskell, 43 bajty

(n#j)x|odd$round x=[]|m<-j-x/2=[m,m+j..n-x]

Prawie bezpośrednio przeniesione z odpowiedzi Pythona od HyperNeutrino

Bardziej dobrze sformatowany kod:

f n j x |odd$round x = []
        |otherwise   = let m=j-x/2 in [m,m+j..n-x]

EDYCJA: Zapomniałem wspomnieć, że był to jeden indeks

Ogólna nazwa wyświetlana
źródło
0

C # - 91 bajtów

int[]r=new int[n/j-1];for(int i=1;i<n/j;i++){r[i-1]=i*j-x/2-1;}return(x%2==0)?r:new int[0];
CHENGLIANG YE
źródło