Просте завдання вирішено тричі


15

Ви повинні написати 3 програми та / або функції однією мовою.

Усі ці програми повинні вирішити одне і те ж завдання, але всі вони повинні давати різні (але дійсні) результати. (Тобто для кожної пари програм їх має бути деякий вхід, який генерує різні (але дійсні) набори вихідних чисел.)

Завдання

  • Вам дається ціле число n, більше 1
  • Ви повинні повернути або вивести n окремі додатні цілі числа, і жодне з них не слід ділити наn .
  • Порядок чисел не має значення, а перестановка чисел не вважається різними результатами.

Дійсний трійки програм з кількома input => outputпарами:

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

Оцінка балів

  • Ваш бал - це сума тривалості трьох програм або функцій.
  • Нижча оцінка - краща.
  • Якщо ваші програми / функції діляться кодом, загальний код слід враховувати в довжину кожної програми, яка використовує цей код.

1
Чи повинна кожна програма може бути запущена із власного файлу без будь-якого включення, чи можуть програми залежати від якогось спільного модуля / бібліотеки, що рахується лише один раз?
Кінтопія

@quintopia Програми / функції не повинні спільно використовувати код. Якщо вони є, загальний код слід віднести до довжини всіх програм, які використовують цей код.
randomra

Відповіді:


4

Pyth, 17 16 байт

5 байт:

^LhQQ

Виходи:

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

6 байт:

mh*QdQ

Виходи:

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

5 байт:

|RhQQ

Виходи:

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

Альтернативна версія, у порядку збільшення: -ShQQ


1
О-о. Мені подобається ця третя схема.
Кінтопія

@isaacg о, вибачте
Maltysen

8

J, 16 байт

Функція 1, 5 байт

p:^i.

Функція 2, 6 байт

+p:^i.

Функція 3, 5 байт

>:^i.

Як це працює

Функція 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).

Оскільки P є простим і P> y , y не можна розділити P e .

Функція 2

+p:^i.    Right argument: y

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

Якщо y розділить P e + y , це також поділило б P e + y - y = P e .

Функція 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).

Якщо у розділений (у + 1) е деякий простий фактор Q від у повинен ділити (у + 1) е .

Але тоді Q ділить і y, і y + 1 і, отже, y + 1 - y = 1 .



2

Віті , 54 байти

Програми:

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

Виходи:

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

Як це працює (використовуючи першу програму як пояснення):

V1V \ [DV * 1 + N '' O1 +]
V Захоплюйте неявний вхід як остаточну глобальну змінну.
 1 Натисніть один на стек для подальшого використання.
  V \ [] Виконайте все, що в дужках вводиться.
     D Дублюйте верхній елемент стека.
      V Натисніть глобальну змінну до стеку.
       * 1 + Помножте, а потім додайте 1. Це робить його нероздільним.
          N '' O Виведіть число, за яким пробіл.
               1+ Додайте його до числа, залишеного у стеку.

Спробуйте в Інтернеті!


2

Перл, 79

До кожної програми додається по одному знаку, оскільки для цього потрібен -nпрапор.

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

Досить прямо.


2

Математика, 12 + 12 + 12 = 36 байт

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

Тести:

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

Чи можете ви додати кілька прикладних результатів?
Paŭlo Ebermann

2

CJam, 8 + 8 + 8 = 24 байти

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

Це три безіменні функції, які очікують, що nвони будуть в стеку і залишать список цілих чисел на своєму місці. Я не впевнений, що це оптимально, але пізніше мені доведеться полювати на більш коротке рішення.

Тестовий набір.

Результати:

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

Перший також працює як

{_),:)^}

або

{_(,+:)}

ваші результати показують, що всі троє дають однаковий результат, коли n = 2
Sparr

@Sparr Це дозволено. Перевірте приклади у виклику. Єдина вимога - вони обчислюють різні функції, а не різні результати на кожному введенні.
Мартін Ендер

Ах, вони повинні мати різні результати на деякому вході. Це я неправильно прочитав.
Спарр

2

Python 2, 79 байт

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)

Три анонімних функції , які починаються з 1і підраховувати кожен з n, 2*n, 3*nдля nтермінів.



1

Пар , 16 байт

В описуваному тут кодуванні використовується лише один байт на символ.

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

Виходи

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 байти

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

Ці три функції досить прості, тому ...



1

Python 2, 125 байт

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

Кожен рядок тут - це повна програма. Найбільш очевидне рішення в моєму розумі.

EDIT @ Sherlock9 врятував два байти.



0

Гольфскрипт, 50 51 57 байт

Версія Golfscript того, що раніше було кодом Python у кінотопії . Кожна функція знімає nстек.

{.,{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), загалом 55 40 байт

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

Простий, подібний до багатьох інших відповідей тут, кожен відображає список чисел (X + A) N + 1 для X у діапазоні (N) та з A, яка є програмою (1, 2 або 3).

Старе рішення (55 байт):

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

Простий, подібний до багатьох інших відповідей тут, кожен відображає числа (X + A) N + 1 для X у діапазоні (N) та з A, яка є програмою (1, 2 або 3).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.