Tugas Sederhana Dipecahkan Tiga Kali


15

Anda harus menulis 3 program dan / atau fungsi dalam satu bahasa.

Semua program ini harus menyelesaikan tugas yang sama tetapi mereka semua harus memberikan hasil yang berbeda (tetapi valid). (Yaitu untuk setiap pasangan program, mereka harus berupa input yang menghasilkan set yang berbeda (tetapi valid) dari nomor-nomor keluaran.)

Tugas

  • Anda diberi bilangan bulat n, lebih besar dari 1
  • Anda harus mengembalikan atau menampilkan bilangan bulat positif yang n berbeda , dan tidak ada yang harus dibagin .
  • Urutan angka tidak masalah dan permutasi angka tidak dihitung sebagai output yang berbeda.

Triplet program yang valid dengan beberapa input => outputpasangan:

program A:
    2 => 5 9
    4 => 5 6 9 10
    5 => 2 4 8 7 1

program B:
    2 => 1 11
    4 => 6 9 1 2
    5 => 4 44 444 4444 44444

program C (differs only in one number from program B):
    2 => 1 13
    4 => 6 9 1 2
    5 => 4 44 444 4444 44444

Mencetak gol

  • Skor Anda adalah jumlah dari panjang 3 program atau fungsi.
  • Skor yang lebih rendah lebih baik.
  • Jika program / fungsi Anda membagikan kode, kode yang dibagikan harus dihitung dalam panjang setiap program yang menggunakan kode tersebut.

1
Apakah setiap program harus dapat dijalankan dari file sendiri tanpa menyertakan, atau dapatkah program bergantung pada beberapa modul / perpustakaan bersama yang hanya dihitung sekali?
kuintopia

@quintopia Program / fungsi tidak boleh berbagi kode. Jika ya, kode bersama harus dihitung dalam panjang semua program yang menggunakan kode.
randomra

Jawaban:


4

Pyth, 17 16 byte

5 byte:

^LhQQ

Output:

2: [1, 3]
3: [1, 4, 16]
4: [1, 5, 25, 125]

6 byte:

mh*QdQ

Output:

2: [1, 3]
3: [1, 4, 7]
4: [1, 5, 9, 13]

5 byte:

|RhQQ

Output:

2: [3, 1]
3: [4, 1, 2]
4: [5, 1, 2, 3]

Versi alternatif, dalam urutan meningkat: -ShQQ


1
Ooh. Saya suka skema ketiga itu.
kuintopia

@isaacg oh, maaf
Maltysen

8

J, 16 byte

Fungsi 1, 5 byte

p:^i.

Fungsi 2, 6 byte

+p:^i.

Fungsi 3, 5 byte

>:^i.

Bagaimana itu bekerja

Fungsi 1

p:^i.     Right argument: y

   i.     Compute (0 ... y-1).
p:        Compute P, the prime at index y (zero-indexed).
  ^       Return all powers P^e, where e belongs to (0 ... y-1).

Karena P adalah prima dan P> y , y tidak dapat membagi P e .

Fungsi 2

+p:^i.    Right argument: y

 p:^i.    As before.
+         Add y to all results.

Jika y membagi P e + y , itu juga akan membagi P e + y - y = P e .

Fungsi 3

>:^i.     Right argument: y

   i.     Compute (0 ... y-1).
>:        Compute y+1.
  ^       Return all powers (y+1)^e, where e belongs to (0 ... y-1).

Jika y dibagi (y + 1) e beberapa faktor utama Q dari y harus membagi (y + 1) e .

Tapi kemudian, Q akan membagi y dan y + 1 dan, oleh karena itu, y + 1 - y = 1 .



2

Vitsy , 54 byte

Program:

V1V \ [DV * 1 + N '' O1 +]
V2V \ [DV * 1 + N '' O1 +]
V3V \ [DV * 1 + N '' O1 +]

Output:

2 => 3 7
4 => 5 9 13 17
5 => 6 11 16 21 26
2 => 5 7
4 => 9 13 17 21
5 => 11 16 21 26 31
2 => 7 9
4 => 13 17 21 25 
5 => 16 21 26 31 36

Cara kerjanya (menggunakan program pertama sebagai penjelasan):

V1V \ [DV * 1 + N '' O1 +]
V Menangkap input implisit sebagai variabel global final.
 1 Dorong satu ke tumpukan untuk digunakan nanti.
  V \ [] Lakukan segala sesuatu di kurung waktu input.
     D Gandakan item teratas dari tumpukan.
      V Dorong variabel global ke tumpukan.
       * 1 + Multiply, lalu tambahkan 1. Ini membuatnya tidak dapat dibagi.
          N '' O Keluarkan angka yang diikuti spasi.
               1+ Tambahkan satu ke nomor yang tersisa di tumpukan.

Cobalah online!


2

Perl, 79

Satu char ditambahkan ke setiap program karena ini membutuhkan -nflag.

for$a(0..$_-1){say$_*$a+1}
for$a(1..$_){say$_*$a+1}
for$a(2..$_+1){say$_*$a+1}

Cukup mudah.


2

Mathematica, 12 + 12 + 12 = 36 byte

# Range@#-1&
# Range@#+1&
#^Range@#+1&

Tes:

# Range@#-1&[10]
(* -> {9, 19, 29, 39, 49, 59, 69, 79, 89, 99} *)
# Range@#+1&[10]
(* -> {11, 21, 31, 41, 51, 61, 71, 81, 91, 101} *)
#^Range@#+1&[10]
(* -> {11, 101, 1001, 10001, 100001, 1000001, 10000001, 100000001, 1000000001, 10000000001} *)

Bisakah Anda menambahkan beberapa contoh output?
Paŭlo Ebermann

2

CJam, 8 + 8 + 8 = 24 byte

{,:)))+}
{_,f*:)}
{)_(,f#}

Ini adalah tiga fungsi yang tidak disebutkan namanya yang diharapkan nberada di tumpukan dan meninggalkan daftar bilangan bulat di tempatnya. Saya tidak yakin ini optimal, tetapi saya harus mencari solusi yang lebih pendek nanti.

Suite uji.

Hasil:

{,:)))+}
2 => [1 3]
3 => [1 2 4]
4 => [1 2 3 5]
5 => [1 2 3 4 6]

{_,f*:)}
2 => [1 3]
3 => [1 4 7]
4 => [1 5 9 13]
5 => [1 6 11 16 21]

{)_(,f#}
2 => [1 3]
3 => [1 4 16]
4 => [1 5 25 125]
5 => [1 6 36 216 1296]

Yang pertama juga berfungsi sebagai

{_),:)^}

atau

{_(,+:)}

Hasil Anda menunjukkan ketiganya memberikan output yang sama ketika n = 2
Sparr

@Parr Itu diizinkan. Lihat contoh di tantangan. Satu-satunya persyaratan adalah mereka menghitung fungsi yang berbeda, bukan hasil yang berbeda pada setiap input.
Martin Ender

Ahh, mereka harus memiliki hasil berbeda pada beberapa input. Itu yang saya salah baca.
Sparr

2

Python 2, 79 byte

lambda n:range(1,n*n,n)
lambda n:range(1,2*n*n,2*n)
lambda n:range(1,3*n*n,3*n)

Tiga fungsi anonim yang dimulai pada 1dan dihitung oleh masing-masing n, 2*n, 3*nuntukn istilah.


1

Serius, 20 byte

,;r*1+

,;R*1+

,;R1+*1+

Ya, ini tidak optimal ...


1

Par , 16 byte

Pengkodean khusus, yang dijelaskan di sini , hanya menggunakan satu byte per karakter.

✶″{*↑                   ## 3 => (0 1 2) => (0 3 6)  => (1 4 7)
✶″U{ⁿ↑                  ## 3 => (1 2 3) => (3 9 27) => (4 10 28)
✶U¡↑◄                   ## 3 => (1 2 3) =>             (1 2 4)

Keluaran

2 => (1 3)
3 => (1 4 7)
4 => (1 5 9 13)
5 => (1 6 11 16 21)

2 => (3 5)
3 => (4 10 28)
4 => (5 17 65 257)
5 => (6 26 126 626 3126)

2 => (1 3)
3 => (1 2 4)
4 => (1 2 3 5)
5 => (1 2 3 4 6)

1

Haskell, 54 byte

f n=n+1:[1..n-1]
g n=5*n+1:[1..n-1]
h n=9*n+1:[1..n-1]

Ketiga fungsi ini cukup mudah sehingga ...


1

Oktaf, 11 + 13 + 13 = 37 byte

@(a)1:a:a^2
@(a)a-1:a:a^2
@(a)(1:a)*a+1

1

Python 2, 125 byte

N=input();print[i*N+1for i in range(N)]
N=input();print[i*N+1for i in range(1,N+1)]
N=input();print[i*N+1for i in range(2,N+2)]

Setiap baris di sini adalah program lengkap. Solusi paling jelas dalam pikiran saya.

EDIT @ Sherlock9 menyimpan dua byte.


1

Haskell, 50

f n=n+1:[1..n-1]
f n=1:[n+1..2*n-1]
f n=[1,n+1..n^2]

Contoh:

 f1 5=[6,1,2,3,4]
 f2 5=[1,6,7,8,9]
 f3 5=[1,6,11,16,21]

0

Golfscript, 50 51 57 byte

Versi Golfscript dari apa yang dulunya adalah kode Python quintopia . Setiap fungsi nmenghilangkan tumpukan.

{.,{1$*)}%\;}:f;    i*n+1 for i in range(n)
{.,{)1$*)}%\;}:g;   i*n+1 for i in range(1,n+1)
{.,{1$)\?}%\;}:h;   (n+1)**i for i in range(n)

0

TI-Basic (TI-84 Plus CE), total 55 40 byte

PRGM:C 12 bytes
    seq(AnsX+1,X,1,Ans
PRGM:B 14 bytes
    seq(AnsX+1,X,2,Ans+1
PRGM:C 14 bytes
    seq(AnsX+1,X,3,Ans+2

Sederhana, mirip dengan banyak jawaban lain di sini, masing-masing menampilkan daftar angka (X + A) N +1 untuk rentang X (N) dan dengan program A menjadi yang mana (1, 2, atau 3).

Solusi lama (55 byte):

PRGM:C 17 bytes
    Prompt N
    For(X,1,N
    Disp XN+1
    End
PRGM:B 19 bytes
    Prompt N
    For(X,2,N+1
    Disp XN+1
    End
PRGM:C 19 bytes
    Prompt N
    For(X,3,N+2
    Disp XN+1
    End

Sederhana, mirip dengan banyak jawaban lain di sini, masing-masing menampilkan angka (X + A) N +1 untuk rentang X (N) dan dengan program A menjadi yang mana (1, 2, atau 3).

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.