Basit Görev Üç kez Çözüldü


15

Tek bir dilde 3 program ve / veya fonksiyon yazmalısınız.

Tüm bu programlar aynı görevi çözmelidir ancak hepsi farklı (ancak geçerli) çıktılar vermelidir. (Yani her program çifti için farklı (ancak geçerli) çıkış sayıları seti üreten bir girdi olmalıdır.)

Görev

  • Size bir tam sayı verilir n büyük
  • n Farklı pozitif tamsayılar döndürmeli ya da çıktı vermelisiniz ve hiçbiri tarafından bölünemezn .
  • Sayıların sırası önemli değildir ve sayıların permütasyonu farklı çıktılar olarak sayılmaz.

Bazı input => outputçiftleri içeren geçerli bir program üçlüsü :

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

puanlama

  • Puanınız 3 program veya fonksiyonun uzunluklarının toplamıdır.
  • Düşük puan daha iyidir.
  • Programlarınız / işlevleriniz kodu paylaşıyorsa, paylaşılan kod, kodu kullanan her programın uzunluğu olarak sayılmalıdır.

1
Her program herhangi bir eklenti olmadan kendi dosyasından çalıştırılabilir mi veya programlar yalnızca bir kez sayılan bazı paylaşılan modüllere / kitaplıklara bağımlı olabilir mi?
quintopia

@kintopia Programlar / fonksiyonlar kodu paylaşmamalıdır. Bunu yaparlarsa, paylaşılan kod, kodu kullanan tüm programların uzunluğunda sayılmalıdır.
randomra

Yanıtlar:


4

Pyth, 17 16 bayt

5 bayt:

^LhQQ

Çıktılar:

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

6 bayt:

mh*QdQ

Çıktılar:

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

5 bayt:

|RhQQ

Çıktılar:

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

Artan sırada alternatif versiyon: -ShQQ


1
Ooh. Üçüncü şemayı seviyorum.
quintopia

@isaacg oh, özür dilerim
Maltysen

8

J, 16 bayt

İşlev 1, 5 bayt

p:^i.

İşlev 2, 6 bayt

+p:^i.

İşlev 3, 5 bayt

>:^i.

Nasıl çalışır

İşlev 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).

Yana P asal ve bir P> y , y bölemezsiniz P e .

İşlev 2

+p:^i.    Right argument: y

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

Eğer y bölünmüş P E + y , bu elemanı da bölmek P , e + y - y = P , e .

İşlev 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).

Eğer y bölünmüş (y + 1) e bir ana faktör S ve y bölmek gerekir (y + 1) e .

Sonra, S hem bölmek y ve y + 1 , bu nedenle, ve y = 1 - y + 1 .



2

Vitsy , 54 bayt

Programlar:

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

Çıktılar:

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

Nasıl çalışır (ilk programı açıklama olarak kullanarak):

V1V \ [DV * 1 + N '' O1 +]
V Örtülü girdiyi son bir global değişken olarak yakalayın.
 1 Daha sonra kullanmak için birini desteye itin.
  V \ [] Parantez giriş sürelerindeki her şeyi yapın.
     D Yığının en üst öğesini çoğaltır.
      V Global değişkeni yığına doğru itin.
       * 1 + Çarpın, sonra 1 ekleyin. Bu bölünemez hale getirir.
          N '' O Sayının ardından boşluk bırakır.
               1+ Yığında kalan sayıya bir tane ekleyin.

Çevrimiçi deneyin!


2

Perl, 79

Her programa bir karakter eklendi çünkü bu işaret gerektiriyor -n.

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

Yeterince açıksözlü.


2

Mathematica, 12 + 12 + 12 = 36 bayt

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

Testler:

# 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} *)

Bazı örnek çıktılar ekleyebilir misiniz?
Paŭlo Ebermann

2

CJam, 8 + 8 + 8 = 24 bayt

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

Bunlar n, yığın üzerinde olmasını ve yerine bir tamsayı listesi bırakmayı bekleyen üç adlandırılmamış işlevdir . Bunun en uygun olduğundan emin değilim, ancak daha sonra daha kısa bir çözüm aramak zorunda kalacağım.

Test odası.

Sonuçlar:

{,:)))+}
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]

İlki aynı zamanda

{_),:)^}

veya

{_(,+:)}

Sonuçlarınız n = 2 olduğunda aynı sonucu veren üçünü de gösterir
Sparr

@Sparr Buna izin verilir. Meydan okumadaki örnekleri kontrol edin. Tek gereklilik, her girdide farklı sonuçlar değil, farklı işlevleri hesaplamalarıdır.
Martin Ender

Ahh, bazı girdilerde farklı sonuçlar almalılar. Yanlış okuduğum bu.
Sparr

2

Python 2, 79 bayt

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)

Terimler için 1her birinde başlayan ve sayılan üç anonim işlev .n, 2*n, 3*nn



1

Par , 16 bayt

Burada açıklanan özel kodlama, karakter başına yalnızca bir bayt kullanır.

✶″{*↑                   ## 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)

çıktılar

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 bayt

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

Bu üç işlev oldukça basittir…


1

Oktav, 11 + 13 + 13 = 37 bayt

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

1

Python 2, 125 bayt

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

Buradaki her satır eksiksiz bir programdır. Aklımdaki en bariz çözüm.

@ Sherlock9 EDIT iki bayt kurtardı.


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]

Örnekler:

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

0

Golf Yazıları, 50 51 57 bayt

Eskiden quintopia'nın Python kodu olan Golfscript sürümü . Her fonksiyon nyığını kaldırır.

{.,{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), toplam 55 40 bayt

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

Basit, buradaki diğer birçok cevaba benzer şekilde, her biri X (N) aralığında ve A'nın hangi programın (1, 2 veya 3) olduğu sayıların (X + A) N + 1'in bir listesini görüntüler.

Eski çözüm (55 bayt):

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

Basit, buradaki diğer birçok cevaba benzer şekilde, her biri X (N) aralığında ve A'nın hangi program (1, 2 veya 3) olduğu (X, A) N + 1 sayılarını görüntüler.

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.