Tâche simple résolu trois fois


15

Vous devez écrire 3 programmes et / ou fonctions dans une langue.

Tous ces programmes devraient résoudre la même tâche mais ils devraient tous donner des résultats différents (mais valides). (C'est-à-dire que pour chaque paire de programmes, leur entrée devrait générer des ensembles différents (mais valides) de numéros de sortie.)

La tâche

  • Vous recevez un entier nsupérieur à 1
  • Vous devez retourner ou produire des entiers positifs n distincts , et aucun d'entre eux ne doit être divisible parn .
  • L'ordre des nombres n'a pas d'importance et une permutation de nombres ne compte pas comme des sorties différentes.

Un triplet valide de programmes avec quelques input => outputpaires:

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

Notation

  • Votre score est la somme des longueurs des 3 programmes ou fonctions.
  • Un score plus bas est meilleur.
  • Si vos programmes / fonctions partagent du code, le code partagé doit être compté dans la longueur de chaque programme qui utilise le code.

1
Chaque programme doit-il pouvoir être exécuté à partir de son propre fichier sans aucune inclusion, ou les programmes peuvent-ils dépendre d'un module / bibliothèque partagé qui n'est compté qu'une seule fois?
— quintopie

@quintopia Les programmes / fonctions ne doivent pas partager de code. S'ils le font, le code partagé doit être compté dans la longueur de tous les programmes qui utilisent le code.
— randomra

Réponses:


4

Pyth, 17 16 octets

5 octets:

^LhQQ

Les sorties:

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

6 octets:

mh*QdQ

Les sorties:

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

5 octets:

|RhQQ

Les sorties:

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

Version alternative, dans l'ordre croissant: -ShQQ


1
Ooh. J'aime ce troisième schéma.
— quintopie

@isaacg oh, désolé
— Maltysen

8

J, 16 octets

Fonction 1, 5 octets

p:^i.

Fonction 2, 6 octets

+p:^i.

Fonction 3, 5 octets

>:^i.

Comment ça fonctionne

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

Puisque P est premier et P> y , y ne peut pas diviser P e .

Fonction 2

+p:^i.    Right argument: y

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

Si y divisait P e + y , il diviserait également P e + y - y = P e .

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

Si y divisait (y + 1) e, un facteur premier Q de y devrait diviser (y + 1) e .

Mais alors, Q diviserait à la fois y et y + 1 et, par conséquent, y + 1 - y = 1 .



2

Vitsy , 54 octets

Programmes:

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

Les sorties:

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

Comment ça marche (en utilisant le premier programme comme explication):

V1V \ [DV * 1 + N '' O1 +]
V Capturez l'entrée implicite en tant que variable globale finale.
 1 Poussez-en un dans la pile pour une utilisation ultérieure.
  V \ [] Faites tout dans les temps de saisie entre parenthèses.
     D Dupliquez l'élément supérieur de la pile.
      V Poussez la variable globale dans la pile.
       * 1 + Multipliez, puis ajoutez 1. Cela le rend non divisible.
          N '' O Affiche le nombre suivi d'un espace.
               1+ Ajoutez un au nombre restant dans la pile.

Essayez-le en ligne!


2

Perl, 79

Un caractère a été ajouté à chaque programme car cela nécessite l' -nindicateur.

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

Assez simple.


2

Mathematica, 12 + 12 + 12 = 36 octets

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

Tests:

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

Pourriez-vous ajouter quelques exemples de sorties?
— Paŭlo Ebermann,

2

CJam, 8 + 8 + 8 = 24 octets

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

Ce sont trois fonctions sans nom qui s'attendent nà être sur la pile et à laisser une liste d'entiers à sa place. Je ne suis pas sûr que ce soit optimal, mais je devrai chercher une solution plus courte plus tard.

Suite de tests.

Résultats:

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

Le premier fonctionne également comme

{_),:)^}

ou

{_(,+:)}

vos résultats montrent tous les trois donnant la même sortie lorsque n = 2
— Sparr

@Sparr C'est autorisé. Vérifiez les exemples du défi. La seule exigence est qu'ils calculent des fonctions différentes, pas des résultats différents sur chaque entrée.
— Martin Ender

Ahh, ils doivent avoir des résultats différents sur certaines entrées. C'est ce que j'ai mal lu.
— Sparr

2

Python 2, 79 octets

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)

Trois fonction anonyme qui commencent à 1et compter par chacun n, 2*n, 3*npour les ntermes.


1

Sérieusement, 20 octets

,;r*1+

,;R*1+

,;R1+*1+

Ouais, ce n'est pas optimal ...


1

Par , 16 octets

L'encodage personnalisé, décrit ici , utilise un seul octet par caractère.

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

Les sorties

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 octets

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

Ces trois fonctions sont assez simples donc…


1

Octave, 11 + 13 + 13 = 37 octets

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

1

Python 2, 125 octets

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

Chaque ligne ici est un programme complet. La solution la plus évidente dans mon esprit.

EDIT @ Sherlock9 a enregistré deux octets.


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]

Exemples:

 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 octets

Une version Golfscript de ce qui était autrefois le code Python de la quintopie . Chaque fonction enlève nla pile.

{.,{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 octets au total

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

Simple, similaire à de nombreuses autres réponses ici, chacune affiche une liste des nombres (X + A) N + 1 pour X dans la plage (N) et avec A étant le programme (1, 2 ou 3).

Ancienne solution (55 octets):

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

Simple, similaire à de nombreuses autres réponses ici, chacune affiche les nombres (X + A) N + 1 pour X dans la plage (N) et avec A étant le programme (1, 2 ou 3).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.