In coda con gli amici


16

Sei con il tuo migliore amico, Jim, al parco dei divertimenti e quando viene visualizzato il tuo giro preferito, tu e Jim vi scambiate un'occhiata. Naturalmente corri per metterti in fila. Sfortunatamente vince perché sei un giocatore di golf e pratica un vero sport (scusate amici). In effetti, sei così indietro che tu e Jim siete separati dalle xpersone. Supponendo che la linea sia lunga ne tu sei sul retro e la linea zig e zag ogni jpersona, in quali posizioni nella linea tu e Jim sarete nella stessa colonna permettendovi di chattare (solo una fila di distanza)?

Ingresso

3 numeri interi

  • n- La lunghezza della linea. Questo numero sarà sempre maggiore o uguale a je sarà nella forma in y * jcui yè un numero intero positivo (il numero di righe nella coda).
  • j- Il numero di persone in una riga della riga (il numero di colonne in una riga). Questo numero sarà sempre maggiore di 0.
  • x- Il numero di persone tra te e Jim tale che 0 <= x < 2j - 1. Suggerimento: se questo numero è dispari, l'output dovrebbe essere vuoto.

Produzione

Un elenco di posizioni intere nella riga in cui Jim è nella stessa colonna di te.
1 Questi numeri interi possono essere indicizzati 0 o 1 purché sia ​​specificato nella risposta.
2 Questi numeri interi possono presumere che inizi dalla posizione 0 o dalla posizione n-1 purché specifichi nella risposta.

Esempio

Esempio di accodamento piccolo
In questo esempio, l'input sarebbe n = 9, j = 3, x = 0. L'output dovrebbe essere 2, 5perché la tua posizione è 2 o 5 quando sei nella stessa colonna di Jim

Casi test

[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]

punteggio

Questo è , quindi vince la risposta più breve (in byte).


4
Sono in coda per vedere alcune soluzioni interessanti a questo! (scusate il cattivo gioco di parole e anche l'uso improprio della parola, ma qualunque cosa, non giudicatemi: P)
HyperNeutrino

1
Possiamo restituire un valore errato anziché un array vuoto?
Rɪᴋᴇʀ

@Riker Non vedo alcun motivo per impedirlo. Go for it
Poke

Risposte:


9

Python 2 , 45 41 40 37 byte

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

Praticamente la soluzione banale. Ho appena cercato rapidamente i modelli e ho trovato un modello. 1 indicizzato, 1 è sul retro della coda.

-4 byte evitando ternari e usando una matrice per i valori invece
-1 byte grazie a qualche ispirazione da @DeadPossum, usando andinvece ternari o selettori di matrice
-3 byte passando a ornell'ordine opposto. Funziona solo a causa dell'indicizzazione 1

Inoltre, il 4 barrato è ancora 4 su tutti i 4 :(

Provalo online!


Lol, hai pubblicato solo 14 minuti prima di me :) La mia versione è più corta di 3 byte:lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
Dead Possum

@DeadPossum Nice. Ho un'altra soluzione che è un byte più corta di quella, lol
HyperNeutrino

Ho avuto un errore nel secondo argomento di portata. Non dovrebbe essere n-j+1, quindi lambda n,j,x:x%2-1and range(j-x/2,n-x,j)è più breve di un altro in totale di 40 byte
Dead Possum

@DeadPossum Aspetta, ci è stato permesso di restituire un valore errato anziché un array vuoto?
HyperNeutrino,

3
@FelipeNardiBatista è questo che significa "1-indicizzato", tra l'altro.
R

2

Pip , 22 21 byte

20 byte di codice, +1 per la -pbandiera.

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

Prende n, je xcome argomenti della riga di comando. 0-indicizzato, a partire dalla posizione 0. Provalo online!

Spiegazione

Questa è la mia versione originale a 22 byte perché è un po 'più comprensibile.

                       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)

La formula è stata ottenuta osservando il modello per n=9, j=3:

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

Se prendiamo x/2(0 , 1, 2), sottrarre da j-1( 2, 1, 0), e aggiungiamo che a [0;3], si ottiene il risultato corretto in tutti i casi.


1

Java 8 lambda, 101 byte

(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];}

Porta quasi diretta della mia risposta Python. L'intervallo non esiste in Java però.


0

Haskell, 43 byte

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

Praticamente portato direttamente dalla risposta Python di HyperNeutrino

Codice più formattato:

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

EDIT: Ho dimenticato di menzionare che era un indice


0

C # - 91 byte

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];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.