Простая задача решена трижды

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

счет

  • Ваша оценка - это сумма длин трех программ или функций.
  • Чем ниже балл, тем лучше.
  • Если ваши программы / функции совместно используют код, общий код должен учитываться в длине каждой программы, которая использует этот код.
randomra
источник
1
Должна ли каждая программа запускаться из своего собственного файла без каких-либо включений, или программы могут зависеть от какого-то общего модуля / библиотеки, который учитывается только один раз?
Quintopia
@quintopia Программы / функции не должны делиться кодом. Если они это сделают, общий код должен быть учтен в длине всех программ, которые используют код.
Рандомра

Ответы:

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

isaacg
источник
1
Ooh. Мне нравится эта третья схема.
Quintopia
@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).

Если y разделить (y + 1) e, то некоторый простой множитель Q of y должен будет разделить (y + 1) e .

Но тогда Q разделит и y, и y + 1 и, следовательно, y + 1 - y = 1 .

Деннис
источник
3

Дьялог АПЛ, 16 17 байт

1+⊢×⍳

⊢+1+⊢×⍳

1+⊢*⍳
lirtosiast
источник
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

Perl, 79

В каждую программу добавлен один символ, потому что для этого требуется -nфлаг.

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

Довольно просто.

Дверная ручка
источник
2

Mathematica, 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} *)
LegionMammal978
источник
Не могли бы вы добавить пример выходных данных?
Пауло Эберманн
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 терминов.

XNOR
источник
1

Серьезно, 20 байтов

,;r*1+

,;R*1+

,;R1+*1+

Да, это не оптимально ...

lirtosiast
источник
1

Par , 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)
Ypnypn
источник
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]

Эти три функции довольно просты, так что ...

arjanen
источник
1

Октава, 11 + 13 + 13 = 37 байт

@(a)1:a:a^2
@(a)a-1:a:a^2
@(a)(1:a)*a+1
alephalpha
источник
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 сохранил два байта.

quintopia
источник
1

Хаскелл, 50

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

Примеры:

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

Golfscript версия того , что раньше quintopia Python кода «s. Каждая функция принимает 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)
Sherlock9
источник
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) и с существом, какая программа (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

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

pizzapants184
источник