Anstehen bei Freunden

16

Sie sind mit Ihrem besten Kumpel, Jim, im Vergnügungspark und als Ihre Lieblingsfahrt in Sicht kommt, tauschen Sie und Jim einen Blick aus. Natürlich rennst du, um in die Reihe zu kommen. Leider gewinnt er, weil Sie ein Golfspieler sind und er eine echte Sportart ausübt (sorry Freunde). Tatsächlich sind Sie so weit dahinter, dass Sie und Jim von xMenschen getrennt werden . Angenommen, die Leitung ist lang nund Sie sind hinten und die Leitung zickzackt bei jedem jMenschen. An welchen Positionen in der Leitung werden Sie und Jim in derselben Spalte sein, in der Sie sich unterhalten können (nur eine Zeile auseinander)?

Eingang

3 ganze Zahlen

  • n- Die Länge der Linie. Diese Zahl ist immer größer oder gleich jund hat die Form, y * jin der yes sich um eine positive Ganzzahl handelt (die Anzahl der Zeilen in der Warteschlange).
  • j- Die Anzahl der Personen in einer Zeile der Zeile (die Anzahl der Spalten in einer Zeile). Diese Zahl ist immer größer als 0.
  • x- Die Anzahl der Leute zwischen dir und Jim, so dass 0 <= x < 2j - 1. Hinweis: Wenn diese Zahl ungerade ist, sollte Ihre Ausgabe leer sein.

Ausgabe

Eine Liste von Ganzzahlpositionen in der Zeile, in der sich Jim in derselben Spalte wie Sie befindet.
1 Diese Ganzzahlen können 0- oder 1-indiziert sein, solange Sie dies in Ihrer Antwort angeben.
2 Bei diesen Ganzzahlen kann davon ausgegangen werden, dass Sie an Position 0 oder n-1 beginnen, solange Sie dies in Ihrer Antwort angeben.

Beispiel

Warteschlangenbeispiel Klein
In diesem Beispiel wäre die Eingabe n = 9, j = 3, x = 0. Die Ausgabe sollte erfolgen, 2, 5weil Ihre Position 2 oder 5 ist, wenn Sie sich in derselben Spalte wie Jim befinden

Testfälle

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

Wertung

Das ist , also gewinnt die kürzeste Antwort (in Bytes).

Sack
quelle
4
Ich bin Warteschlange rious einige interessante Lösungen für diese zu sehen! (sorry schlechtes Wortspiel und auch unsachgemäße Verwendung des Wortes, aber was auch immer, beurteilen Sie mich nicht: P)
HyperNeutrino
1
Können wir einen falschen Wert anstelle eines leeren Arrays zurückgeben?
27.
@Riker Ich sehe keinen Grund, das zu verbieten. Los geht's
Poke

Antworten:

9

Python 2 , 45 41 40 37 Bytes

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

So ziemlich die triviale Lösung. Ich habe nur schnell nach Mustern gesucht und ein Muster gefunden. 1-indiziert, 1 steht ganz hinten in der Warteschlange.

-4 Bytes durch Vermeiden von Ternären und Verwenden eines Arrays für die Werte statt
-1 Bytes dank einiger Inspirationen von @DeadPossum, durch Verwenden andvon Ternären oder Array-Selektoren anstelle von
-3 Bytes durch Umschalten orin umgekehrter Reihenfolge. Funktioniert nur wegen 1-Indizierung

Auch durchgestrichen 4 ist immer noch 4 auf allen 4s :(

Probieren Sie es online!

HyperNeutrino
quelle
Lol, du hast nur 14 Minuten vor mir gepostet :) Meine Version ist um 3 Bytes kürzer:lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
Dead Possum
@DeadPossum Schön. Ich habe eine andere Lösung, die ein Byte kürzer ist, lol
HyperNeutrino
Ich hatte einen Fehler im zweiten Argument der Reichweite. Es sollte nicht sein n-j+1, lambda n,j,x:x%2-1and range(j-x/2,n-x,j)ist also um eins kürzer, insgesamt 40 Bytes
Dead Possum
@DeadPossum Warten Sie, durften wir einen falschen Wert anstelle eines leeren Arrays zurückgeben?
HyperNeutrino
3
@FelipeNardiBatista das ist, was "1-indiziert" bedeutet, übrigens.
27.
2

Pip , 22 21 Bytes

20 Byte Code, +1 für -pFlag.

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

Dauert n, jund xals Befehlszeilenargumente. 0-indiziert ab Position 0. Probieren Sie es online!

Erläuterung

Dies ist meine ursprüngliche 22-Byte-Version, da sie etwas verständlicher ist.

                       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)

Die Formel wurde durch Beobachten des Musters erhalten für n=9, j=3:

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

Wenn wir x/2( 0, 1, 2), subtrahieren sie von j-1( 2, 1, 0), und fügen Sie das zu [0;3], wir das richtige Ergebnis in allen Fällen erhalten.

DLosc
quelle
1

Java 8 Lambda, 101 Bytes

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

Fast direkter Port meiner Python-Antwort. Range existiert in Java allerdings nicht.

HyperNeutrino
quelle
0

Haskell, 43 Bytes

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

Ziemlich direkt aus der Python-Antwort von HyperNeutrino portiert

Gut formatierter Code:

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

EDIT: Ich habe vergessen zu erwähnen, dass es ein Index war

Generischer Anzeigename
quelle
0

91 Bytes

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
quelle