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!


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


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



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!


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.



@ 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

Ÿ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

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


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



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


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}

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

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)


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


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).


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]

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.






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.


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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.