Pengaturan 465

24

Inilah tantangannya. Tulis beberapa kode untuk menampilkan semua bilangan bulat dalam suatu rentang. Kedengarannya mudah, tapi inilah bagian yang sulit. Itu akan mulai dengan angka terendah, lalu tertinggi. Kemudian angka terendah yang belum ada dalam array. Maka yang tertinggi yang belum ada di dalamnya.

Contoh:

Mari kita ambil 1 hingga 5 sebagai permulaan kita

Jumlahnya adalah [1, 2, 3, 4, 5].

Kita ambil yang pertama, jadi [1]. Angka yang tersisa adalah [2, 3, 4, 5]. Kami mengambil yang terakhir, array baru adalah [1, 5]. Angka yang tersisa adalah [2, 3, 4]. Kami mengambil yang pertama, array baru adalah [1, 5, 2]. Angka yang tersisa adalah [3, 4]. Kami mengambil yang terakhir, array baru adalah [1, 5, 2, 4]. Angka yang tersisa adalah [3]. Kami mengambil yang pertama, array baru adalah [1, 5, 2, 4, 3]. Tidak ada angka yang tersisa, kita sudah selesai. Keluaran [1, 5, 2, 4, 3]

Aturan:

  • Ini adalah kode golf, tulis dalam byte paling sedikit, bahasa apa pun.
  • Tidak ada celah standar.
  • Tautan ke penerjemah online, tolong? (Misalnya, https://tio.run/ )
  • Dua input, keduanya bilangan bulat. Kisaran ujung bawah, dan kisaran ujung atas.
  • Saya tidak keberatan apa tipe data dari output, tetapi harus menunjukkan angka dalam urutan yang benar.

Contohnya

Rendah: 4 Tinggi: 6 Hasil: 4 6 5


Rendah: 1 Tinggi: 5 Hasil: 1 5 2 4 3


Rendah: -1 Tinggi: 1 Hasil: -1 1 0


Rendah: -1 tinggi: 2 Hasil: -1 2 0 1


Rendah: -50 Tinggi: 50 Hasil: -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


Selamat bermain golf!

AJFaraday
sumber
2
Hampir duplikat (perbedaannya adalah bahwa ini membutuhkan pembalikan babak kedua sebelum penggabungan).
Peter Taylor
Apakah input akan selalu dalam urutan low-end, high-end?
Sumner18
1
@ Sumner18 ya. Komunitas di sini benar-benar menentang validasi input, dan saya belum meminta input reverse-order, jadi kita bisa berasumsi itu akan selalu rendah - tinggi.
AJFaraday
1
@ Sumner18 Bagaimana biasanya tantangan ini berhasil adalah kita tidak peduli bagaimana input yang tidak valid ditangani. Kode Anda hanya dinilai berhasil dengan cara berurusan dengan input yang valid (yaitu keduanya bilangan bulat, yang pertama lebih rendah dari yang kedua)
AJFaraday
1
@AJFaraday: Anda harus menambahkan catatan ke posting utama yang menunjukkan bahwa X akan selalu lebih rendah dari Y (yaitu X! = Y), saya melewatkan komentar ini;)
digEmAll

Jawaban:

15

R , 38 37 36 byte

function(a,b)rbind(a:b,b:a)[a:b-a+1]

Cobalah online!

  • -1 byte terima kasih kepada @ user2390246
  • -1 byte terima kasih kepada @Kirill L.

Mengeksploitasi fakta bahwa R menyimpan matriks dengan bijaksana

menggali semua
sumber
Menggunakan rbindjauh lebih baik daripada pendekatan saya, tetapi Anda dapat menyimpan 1 byte dengan menggunakan [seq(a:b)]bukan unique.
user2390246
Anda benar, saya melewatkan komentar di mana telah ditentukan bahwa <b (tidak pernah sama), sehingga kita dapat menggunakanseq(a:b)
digEmAll
@digEmAll Solusi saya pada dasarnya adalah interpretasi literal dari teka-teki, saya tidak akan pernah berpikir untuk melakukan sesuatu seperti ini. Mengesankan, dapatkan upvote!
Sumner18
1
-1 lagi
Kirill L.
11

Haskell , 30 byte

a%b=a:take(b-a)(b:(a+1)%(b-1))

Cobalah online!

Tidak
sumber
Sialan! Saya baru saja menemukan solusi yang sama persis. Oh well
bangga haskeller
8

R , 65 64 61 60 byte

-1 byte terima kasih kepada Robert S.

-4 Terima kasih lagi untuk digEmAll

x=scan();z=x:x[2];while(sum(z|1)){cat(z[1],"");z=rev(z[-1])}

Cobalah online!

Sumner18
sumber
Anda dapat menggantinya length(z)dengan sum(z|1)menghemat 1 byte :)
Robert S.
Saya tidak mengerti cara kerjanya tetapi saya kira itu bisa. jumlah (z | 1) sepertinya akan selalu mengevaluasi setidaknya 1, yang akan menyebabkan loop sementara berulang tanpa henti. tetapi ternyata tidak
Sumner18
4
z adalah vektor. setiap elemen dari vektor itu adalah |ed dengan 1. Yang selalu sama dengan 1. Ketika Anda mengambil jumlah, Anda memiliki vektor yang diisi dengan TRUEs sehingga hasilnya sama dengan panjang vektor. Jika vektornya kosong, Anda tidak ada artinya |dengan demikian vektor keluarannya logical(0). Ketika Anda mengambil jumlah itu, itu 0
OganM
5

PowerShell , 59 48 byte

param($a,$b)(($z=0..($b-$a))|%{$a+$_;$b-$_})[$z]

Cobalah online!

(Sepertinya lama ...)

Mengambil input $adan $b, membangun rentang 0 .. ($b-$a), menyimpannya ke dalam $z, kemudian loop melalui rentang itu. Perulangan melalui rentang itu hanya digunakan sebagai penghitung untuk memastikan kami mendapatkan iterasi yang cukup. Setiap iterasi, kami menempatkan $adan $bdi pipa dengan penambahan / pengurangan. Itu memberi kita sesuatu seperti itu 1,5,2,4,3,3,4,2,5,1sehingga kita perlu mengirisnya dari 0hingga $b-$a(yaitu, hitungan) dari array asli sehingga kita hanya tersisa dengan elemen yang sesuai. Yang tersisa pada pipa dan output tersirat.

-11 byte berkat mazzy.

AdmBorkBork
sumber
48 byte
mazzy
@ Mazzy Ah, saya suka $b-$atrik itu - itu pintar!
AdmBorkBork
5

05AB1E , 6 byte

ŸDvć,R

Cobalah online!

Penjelasan

Ÿ        # push range [min ... max]
 D       # duplicate
  v      # for each element in the copy
   ć,    # extract and print the head of the original list
     R   # and then reverse it
Emigna
sumber
Ÿ2ä`R.ι tidak berulang menggunakan interleave, tapi ini masih jauh lebih baik.
Magic Octopus Mm
1
@MagicOctopusUrn: Saya mencoba solusi non-iteratif dulu, tapi itu lebih buruk karena saya tidak tahu tentang ;)
Emigna
Mirip dengan apa yang ada dalam pikiran saya, +1 begitu jelas dari saya. Saya suka alternatif 7-byter Anda juga, @MagicOctopusUrn. :)
Kevin Cruijssen
1
@KristianWilliams: Tampaknya bisa bekerja untuk saya.
Emigna
1
@KevinCruijssen: Saya beralih ke pasangan sebagai gantinya yang terasa lebih intuitif :)
Emigna
4

Japt , 14 byte

òV
íUs w)c vUl

Cobalah online!

Luis felipe De jesus Munoz
sumber
13 byte , menggunakan pendekatan yang sama.
Shaggy
4

R , 51 byte

function(x,y,z=x:y)matrix(c(z,rev(z)),2,,T)[seq(z)]

Cobalah online!

Penjelasan: Untuk urutan x:ypanjang N, buat matriks dua-oleh-N yang terdiri dari urutan x: y di baris atas dan y: x di baris bawah matrix(c(z,rev(z)),2,,T). Jika kita memilih Nelemen pertama dari matriks [seq(z)], mereka akan dipilih oleh kolom, memberikan output yang diperlukan.

Dikalahkan oleh digEmAll

pengguna2390246
sumber
1
Saya baru saja memposting pendekatan yang sangat mirip 30 detik sebelum Anda: D
digEmAll
@digEmAll Ya, tetapi milik Anda jauh lebih baik!
user2390246
4

cQuents , 19 byte

#|B-A+1&A+k-1,B-k+1

Cobalah online!

Perhatikan bahwa ini tidak berfungsi pada TIO sekarang karena juru bahasa TIO tidak mutakhir.

Penjelasan

#|B-A+1&A+k-1,B-k+1
                      A is the first input, B is the second input
#|B-A+1               n = B - A + 1
       &              Print the first n terms of the sequence
                      k starts at 1 and increments whenever we return to the first term
        A+k-1,         Terms alternate between A + k - 1 and
              B-k+1     B - k + 1
                       increment k
Stephen
sumber
4

Haskell, 39 byte

f(a:b)=a:f(reverse b)
f x=x
a#b=f[a..b]

Cobalah online!

nimi
sumber
4

Bytecode JVM (OpenJDK asmtools JASM), 449 byte

enum b{const #1=Method java/io/PrintStream.print:(I)V;static Method a:(II)V stack 2 locals 4{getstatic java/lang/System.out:"Ljava/io/PrintStream;";astore 3;ldc 0;istore 2;l:iload 2;ldc 1;if_icmpeq t;aload 3;iload 0;invokevirtual #1;iinc 0,1;iinc 2,1;goto c;t:aload 3;iload 1;invokevirtual #1;iinc 1,-1;iinc 2,-1;c:aload 3;ldc 32;i2c;invokevirtual java/io/PrintStream.print:(C)V;iload 0;iload 1;if_icmpne l;aload 3;iload 0;invokevirtual #1;return;}}

Tidak disatukan (dan sedikit lebih bersih)

 enum b {    
    public static Method "a":(II)V stack 5 locals 4 {
        getstatic "java/lang/System"."out":"Ljava/io/PrintStream;";
        astore 3;
        ldc 0;
        istore 2;
    loop:
        iload 2;
        ldc 1;
        if_icmpeq true;
    false:
        aload 3;
        iload 0;
        invokevirtual "java/io/PrintStream"."print":"(I)V";
        iinc 0,1;
        iinc 2,1;
        goto cond;
    true:
        aload 3;
        iload 1;
        invokevirtual "java/io/PrintStream"."print":"(I)V";
        iinc 1,-1;
        iinc 2,-1;
        goto cond;
    cond:
        iload 0;
        iload 1;
        if_icmpne loop;
        aload 3;
        iload 0;
        invokevirtual "java/io/PrintStream"."print":"(I)V";
        return;
    }
}

Fungsi mandiri, perlu dipanggil dari Jawa sebagai b.a(num1,num2).

Penjelasan

Kode ini menggunakan parameter metode sebagai variabel, serta boolean di # 3 lokal yang memutuskan nomor mana yang akan di-output. Setiap iterasi loop baik kiri atau kanan adalah output, dan angka itu bertambah untuk kiri atau dikurangi untuk kanan. Lingkaran berlanjut sampai kedua angka sama, maka angka itu adalah output.

... Saya memiliki perasaan yang berbeda. Saya secara besar - besaran kalah dalam jumlah byte

Anak kucing
sumber
4

Bahasa Wolfram (Mathematica) , 56 54 byte

Ini adalah kali pertama saya bermain golf!

f[a_,b_]:=(c=a~Range~b;Drop[c~Riffle~Reverse@c,a-b-1])

Cobalah online!

Disimpan 2 byte menggunakan notasi infiks.

Penjelasan:

f[a_,b_]:=                                   \function of two variables
c=a~Range~b;                                 \list of integers from a to b 
                           Reverse@c         \same list in reverse
                  c~Riffle~Reverse@c         \interleave the two lists
             Drop[c~Riffle~Reverse@c,a-b-1]  \drop last |a-b-1| elements (note a-b-1 < 0)

Atau, kita bisa menggunakan Take[...,b-a+1]untuk hasil yang sama.

Tes:

f[4, 6]
f[1, 5]
f[-1, 1]
f[-1, 2]

Ouput:

{4, 6, 5}
{1, 5, 2, 4, 3}
{-1, 1, 0}
{-1, 2, 0, 1}
Kai
sumber
Tautan "Coba online" menghasilkan 403. "Maaf, Anda tidak memiliki izin untuk mengakses item ini."
Rohit Namjoshi
@RohitNamjoshi Saya memperbarui tautan
Kai
perhatikan bahwa pada TIO Anda dapat menempatkan kode header dan footer di kotak teks di atas dan di bawah kotak kode yang sebenarnya. Ini membuat kode terlihat lebih bersih, dan juga memungkinkan Anda untuk mengambil manfaat formatter jawaban PPCG (esc-sg) Cobalah online!
Jo King
@JoKing sangat dihargai, saya belum pernah menggunakannya sebelumnya!
Kai
3

Japt, 7 byte

Mengambil input sebagai array.

rõ
ÊÆÔv

Cobalah atau jalankan semua test case

         :Implicit input of array U=[low,high]
r        :Reduce by
 õ       :  Inclusive, reversed range (giving the range [high,low])
\n       :Reassign to U
Ê        :Length
 Æ       :Map the range [0,Ê)
  Ô      :  Reverse U
   v     :  Remove the first element
Shaggy
sumber
3

MATL , 8 byte

&:t"1&)P

Cobalah online!

Penjelasan

&:      % Take two inputs (implicit). Two-input range
t       % Duplicate
"       % For each
  1&)   %   Push first element, then an array with the rest
  P     %   Reverse array
        % End (implicit). Display (implicit)
Luis Mendo
sumber
3

Keempat (gforth) , 52 byte

: f 2dup - 1+ 0 do dup . i 2 mod 2* 1- - swap loop ;

Cobalah online!

Penjelasan

Putaran dari 0 ke (Akhir - Mulai). Tempatkan Akhir dan Mulai di atas tumpukan.

Setiap Iterasi:

  • Keluarkan nomor saat ini
  • Tambahkan (atau kurangi) 1 dari angka saat ini
  • Ganti nomor saat ini dengan nomor lainnya

Penjelasan Kode

: f           \ start new word definition
  2dup -      \ get the size of the range (total number of integers)
  1+ 0        \ add 1 to the size because forth loops are [Inclusive, Exclusive) 
  do          \ start counted loop from 0 to size+1
    dup .     \ output the current top of the stack
    i 2 mod   \ get the index of the loop modulus 2
    2* 1-     \ convert from 0,1 to -1,1
    -         \ subtract result from top of stack (adds 1 to lower bound and subtracts 1 from upper)
    swap      \ swap the top two stack numbers 
  loop        \ end the counted loop
;             \ end the word definition
reffu
sumber
3

Haskell, 30 byte

l%h=l:take(h-l)(h:(l+1)%(h-1))

Penggunaan: 3%7memberi `[3,7,4,6,5]

Untuk input l, h, fungsi panggilan secara rekursif dengan input l+1, h-1, dan menambah l,hawal. Alih-alih kondisi penghentian apa pun, kode ini digunakan take(h-l)untuk mempersingkat urutan ke panjang yang benar (yang sebaliknya akan menjadi urutan tak berhingga dari peningkatan dan penurunan angka).

haskeller bangga
sumber
3

Brachylog , 15 byte

⟦₂{∅|b↔↰T&hg,T}

Input adalah daftar 2-elemen [lo, hai]. Perhatikan bahwa garis bawah digunakan untuk angka negatif. Cobalah online!

Penjelasan

⟦₂               2-argument inclusive range: [1,5] -> [1,2,3,4,5]
  {           }  Call this recursive predicate to calculate the output:
   ∅               Base case: the input is empty list; nothing to do
    |              Otherwise (recursive case):      [1,2,3,4,5]
     b             Behead the input list            [2,3,4,5]
      ↔            Reverse                          [5,4,3,2]
       ↰           Call the predicate recursively   [5,2,4,3]
        T          Label the result T
         &         Also, with the input list,
          h        Take the head                    1
           g       Wrap it in a list                [1]
            ,T     Append T from earlier            [1,5,2,4,3]
DLosc
sumber
3

MathGolf , 6 byte

↨_x^─▀

Cobalah online!

Penjelasan dengan (1, 5)

↨        inclusive range from a to b    [1, 2, 3, 4, 5]
 _       duplicate TOS                  [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]
  x      reverse int/array/string       [1, 2, 3, 4, 5], [5, 4, 3, 2, 1]
   ^     zip top two elements on stack  [[1, 5], [2, 4], [3, 3], [4, 2], [5, 1]]
    ─    flatten array                  [1, 5, 2, 4, 3, 3, 4, 2, 5, 1]
     ▀   unique elements of string/list [1, 5, 2, 4, 3]

Alasan mengapa ini bekerja adalah karena fakta bahwa semua elemen dalam output harus unik, sehingga operator elemen unik akan menyaring paruh kedua array, menghasilkan output yang benar.

maks
sumber
2

Ruby , 37 36 33 byte

f=->a,b{a>b ?[]:[a,b]|f[a+1,b-1]}

Cobalah online!

Versi rekursif dengan 3 byte disimpan oleh G B.

Ruby , 38 byte

->a,b{d=*c=a..b;c.map{d.reverse!.pop}}

Cobalah online!

Versi non-rekursif.

Kirill L.
sumber
2

Cubix, 16 byte

;w(.II>sO-?@;)^/

Coba di sini

Kubus

    ; w
    ( .
I I > s O - ? @
; ) ^ / . . . .
    . .
    . .

Penjelasan

Pada dasarnya, ini memindahkan kedua batas lebih dekat bersama satu langkah pada satu waktu sampai mereka bertemu. Setiap kali melalui loop, kami swap batas, Output, mengambil perbedaan, dan kenaikan dengan )atau pengurangan (berdasarkan pada tanda.


sumber
2

Pyth, 10 8 byte

{.iF_B}F

Coba di sini

Penjelasan

{.iF_B}F
      }FQ  Generate the range between the (implicit) inputs.
 .iF_B     Interleave it with its reverse.
{          Deduplicate.

sumber