Arkadaşlarla Kuyruk


16

Eğlence parkında en iyi tomurcukunuz Jim ile birliktesiniz ve en sevdiğiniz yolculuk görünmeye başladığınızda, Jim ve bakış alışverişi yapıyorsunuz. Doğal olarak sıraya girmek için yarışıyorsunuz. Maalesef kazanıyor çünkü sen bir golfçüsün ve gerçek bir spor oynuyor (üzgünüm arkadaşlar). Aslında, o kadar geridesiniz ki Jim ve siz xinsanlar tarafından ayrıldınız. Hattın uzunluk olduğunu nve arkada olduğunuzu varsayarsak ve hat her jinsanın zig ve zag'larıdır , siz ve Jim aynı sütunda aynı sütunda olacak ve sohbet etmenizi sağlayacak (sadece bir satır arayla)?

Giriş

3 Tamsayı

  • n- Hattın uzunluğu. Bu sayı, her zaman daha yüksek veya eşit olacaktır jve şeklinde olacak pozitif bir tamsayı (kuyruğunda satır sayısını) 'dir.y * jy
  • j- Satırın bir satırındaki kişi sayısı (bir satırdaki sütun sayısı). Bu sayı her zaman 0'dan büyük olacaktır.
  • x- Jim ile aranızdaki insanların sayısı öyle ki 0 <= x < 2j - 1. İpucu: Bu sayı tuhafsa, çıktınız boş olmalıdır.

Çıktı

Jim'in sizinle aynı sütunda olduğu satırdaki tamsayı konumlarının listesi.
1 Bu tamsayılar, cevabınızda belirttiğiniz sürece 0 veya 1 dizinli olabilir.
2 Bu tamsayılar, yanıtınızda belirttiğiniz sürece 0 konumunda başladığınızı veya n-1 konumunda olduğunuzu varsayabilir.

Misal

Kuyruk Örneği Küçük
Bu örnekte, girdi olacaktır n = 9, j = 3, x = 0. Çıktı 2, 5, Jim ile aynı sütunda olduğunuzda konumunuzun 2 veya 5 olması nedeniyle olmalıdır

Test Durumları

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

puanlama

Bu , bu yüzden en kısa cevap (bayt cinsinden) kazanır.


4
Buna ilginç çözümler görmek için sıraya giriyorum ! (üzgünüm kötü kelime ve ayrıca yanlış kelime kullanımı ama ne olursa olsun, beni yargılama: P)
HyperNeutrino

1
Boş bir dizi yerine yanlış bir değer döndürebilir miyiz?
Rɪᴋᴇʀ

@Riker Buna izin vermemek için bir neden göremiyorum.
Onun

Yanıtlar:


9

Python 2 , 45 41 40 37 bayt

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

Hemen hemen önemsiz çözüm. Kısa sürede kalıpları taradım ve bir kalıp buldum. 1 dizinli, 1 kuyruğun arkasında.

Üçgenlerden kaçınarak ve değerler için bir dizi kullanarak -4 bayt @DeadPossum'dan
biraz ilham alarak , ters sıraya geçerek andüçlü veya dizi seçici
-3 bayt yerine kullanarak or. Yalnızca 1 endeksleme nedeniyle çalışır

Ayrıca, çarpı işareti 4 tüm 4'lerde hala 4 :(

Çevrimiçi deneyin!


Lol, benden önce sadece 14 dakika yayınladın :) lambda n,j,x:x%2-1and range(j-x/2,n-j+1,j)
Sürümüm

@DeadPossum Güzel. Ben lol, daha bir byte daha kısa başka bir çözüm var
HyperNeutrino

Menzilin ikinci argümanında bir hata yaptım. Olmamalı n-j+1, bu yüzden lambda n,j,x:x%2-1and range(j-x/2,n-x,j)toplam 40 bayt daha bir daha kısadır
Dead Possum

@DeadPossum Bekleyin, boş bir dizi yerine yanlış bir değer döndürmemize izin verildi mi?
HyperNeutrino

3
@FelipeNardiBatista "1 endeksli" nin anlamı bu, btw.
Rɪᴋᴇʀ

2

Pip , 22 21 bayt

20 bayt kod, -pbayrak için +1 .

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

Alır n, jve xkomut satırı bağımsız değişkenleri olarak. 0 dizinli, 0 konumundan başlayarak. Çevrimiçi deneyin!

açıklama

Bu benim orijinal 22 baytlık versiyonum çünkü biraz daha anlaşılır.

                       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)

Formül deseni gözlenmesiyle elde edilmiştir n=9, j=3:

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

Biz alırsak x/2( 0, 1, 2), onu çıkarmak j-1( 2, 1, 0) ve bu ekleyebilir [0;3], biz her durumda doğru sonuç almak.


1

Java 8 lambda, 101 bayt

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

Python cevabımın neredeyse doğrudan limanı. Java'da aralık yok.


0

Haskell, 43 bayt

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

Hemen hemen HyperNeutrino'nun Python cevabından taşındı

Daha iyi biçimlendirilmiş kod:

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

EDIT: Tek endeksli olduğunu söylemeyi unuttum


0

91 bayt

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];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.