Différentes tâches, mêmes personnages


36

Dans ce défi, vous devez résoudre 4 tâches différentes en utilisant le même jeu de caractères. Vous pouvez réorganiser les caractères, mais vous ne pouvez pas ajouter ou supprimer des caractères.

Le gagnant sera la soumission qui résoudra toutes les tâches en utilisant le plus petit nombre de caractères. Toutes les tâches doivent être résolues dans la même langue.

Notez que c'est le plus petit nombre de caractères, pas le plus petit nombre de caractères uniques .

Tache 1:

Affiche les premiers Nnombres de chaque troisième nombre composé . Le bloc de code ci-dessous montre les 19 premiers nombres composés de la première ligne et tous les trois nombres composés de la ligne ci-dessous.

4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30
4,       9,         14,         18,         22,         26,         30

Si N=5alors la sortie devrait être 4, 9, 14, 18, 22. Vous devez soutenir 1<=N<=50.

Les nombres composés sont des nombres positifs qui ne sont ni des nombres premiers ni 1.

Le résultat pour N=50est:

4, 9, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 57, 62, 65, 69, 74, 77, 81, 85, 88, 92, 95, 99, 104, 108, 112, 116, 119, 122, 125, 129, 133, 136, 141, 144, 147, 152, 155, 159, 162, 166, 170, 174, 177, 182, 185, 188, 192

Tâche 2:

Sort une N-by-Ntable de multiplication. Vous devez soutenir1<=N<=20

Exemple:

N = 4
1   2   3   4
2   4   6   8
3   6   9  12
4   8  12  16

Le format de sortie est facultatif, voici une sortie acceptable [[1,2,3,4],[2,4,6,8],[3,6,9,12],[4,8,12,16]].

Tâche 3:

Déterminez si un nombre est un nombre de Fibonacci . Vous devez prendre en charge positif Njusqu'à la limite entière par défaut de votre langue. S'il existe à la fois des entiers 32 bits et des entiers 64 bits, vous pouvez choisir d'utiliser celui qui requiert le code le plus court. Par exemple, utilisez intplutôt que long intsi vous avez le choix. Vous ne pouvez pas choisir un nombre entier inférieur à 32 bits, à moins que ce soit la valeur par défaut (vous ne pouvez pas utiliser d'entiers 8 bits si 32 bits est la valeur par défaut).

true/false, false/true, 1/0, 1/-1, a/bSont toutes les sorties acceptables tant qu'il est cohérent.

Tâche 4:

Prendre Nen entrée et en sortie le résultat de 1^1+2^2+3^3+...N^N. Vous devez soutenir 1<=N<=10.

Les 10 résultats différents sont:

1, 5, 32, 288, 3413, 50069, 873612, 17650828, 405071317, 10405071317

C'est du , donc la soumission la plus courte dans chaque langue gagne!

Cet extrait de pile aidera à vérifier votre solution. Il mesure le nombre minimum de caractères requis pour inclure les quatre solutions et affiche les caractères restants.


1
Binary: two characters
coredump

@coredump Oui, deux personnages uniques ...
Stewie Griffin

Réponses:


12

Python, 88 87 octets

lambda n:[a for a in range(11*n)if any(a%b<1for b in range(2,a))][:3*n:3]#1,,,=====bd++
lambda n:[[a*b for b in range(1,n+1)]for a in range(1,n+1)]#,,::ybaaa(*i%n< =====2)d33f
f=lambda n,a=1,b=1:a<n and f(n,b,a+b)or n==a#2eerrrfo::((**iii11[[aannn+     ]]y))%33gg
f=lambda n,a=1:a<=n and a**a+f(n,a+1)#::ooeeiii]]      y))bbbgg,,rrrra((11[[nnnnf==2%33

Ne pas avoir mis trop d’efforts à partager des personnages ou les golfs eux-mêmes, ce sera sûrement battu.


1
Contiendra range(11*n)toujours assez de composites?
FlipTack

1
@ FlipTack Oui, 5*nest suffisant.
Martin Ender

12

Jelly , 19 18 17 caractères

Tache 1

Ḟþe*S
×5µḊḟÆRm3ḣ³

Essayez-le en ligne!

Tâche 2

5µḊḟÆRm3ḣ³Ḟe*S
×þ

Essayez-le en ligne!

Tâche 3

5µḊḟmḣþ*S
×3RÆḞ³e

Essayez-le en ligne!

Tâche 4

×5ḊḟÆm3ḣ³þe
Rµ*ḞS

Essayez-le en ligne!

Comment ça marche

Chaque ligne d'un programme Jelly définit un lien séparé (fonction). Le dernier est le lien principal et est appelé automatiquement lorsque le programme est exécuté. À moins que ce lien principal ne se réfère d'une manière ou d'une autre aux autres, ils n'ont aucun effet. Notez que même les liens non appelés peuvent ne pas contenir d’erreurs d’analyseur.

Tache 1

×5µḊḟÆRm3ḣ³  Main link. Argument: n

×5           Yield 5n.
  µ          Begin a new chain, with argument 5n.
   Ḋ         Dequeue; yield [2, ..., 5n].
     ÆR      Prime range; yield all primes in [1, ..., 5n].
    ḟ        Filter; remove the elements to the right from the ones to the left.
       m3    Pick every third element.
         ḣ³  Keep the first n results.

Tâche 2

Celui-ci est trivial: ×c'est l'atome de multiplication, et le quick þ(tableau) s'applique ×à chaque combinaison d'éléments dans les arguments gauche et droit. Si les arguments sont des entiers (ce qu'ils sont ici), cela les renvoie également en premier.

Tâche 3

×3RÆḞ³e  Main link. Argument: n

×3       Yield 3n.
  R      Range; yield [1, ..., 3n].
   ÆḞ    Fibonacci; yield [F(1), ... F(3n)].
     ³e  Test if n exists in the result.

Tâche 4

Rµ*ḞS  Main link. Argument: n

R      Range; yield [1, ..., n].
 µ     Begin a new chain with argument [1, ..., n].
   Ḟ   Floor; yield [1, ..., n].
  *    Yield [1**1, ..., n**n].
    S  Take the sum.

Heureux de voir, cela ÆḞse révèle déjà utile!
Lynn

9

Mathematica, 60 caractères

Tâche 1: composites

#/AFF^abcinoruy{};Select[Range[2,9#],!PrimeQ@#&][[;;3#;;3]]&

Tâche 2: Table de multiplication

!29;F@FPQRS[];a^b;c[c[e]];eeegiilmnnotu;Array[3##&,{#,#}]/3&

Tâche 3: Fibonacci

##&;239;A/PS[]^e[];lmrtuy;{,};!FreeQ[Fibonacci@Range[3#],#]&

Tâche 4: somme des pouvoirs

!###&;23/39;A@F;F[P[Q[]]];Raabccegiilnnorrty;Sum[e^e,{e,#}]&

Chaque soumission est un ensemble d'expressions ignorées, suivies d'une fonction non nommée qui implémente la tâche donnée.

J'ai écrit un script simple CJam qui combine "de manière optimale" des solutions brutes en ajoutant un commentaire. J'ai fini par économiser trois octets en supprimant manuellement chaque commentaire (ce qui nécessitait un réarrangement pour obtenir une syntaxe valide dans chaque cas). Le script a beaucoup facilité l’essai de variantes simples des solutions pour voir si elles réduiraient le score global. N'hésitez pas à utiliser le script vous-même.


J'ai un commentaire, mais il ne s'agit pas de votre code lui-même: P. (Bonne réponse, d'ailleurs). Votre script CJam néglige un défaut simple: si j'entre abet en batant que scripts, il me donnera (**)abet (**)ba, au lieu de abet ba.
HyperNeutrino

@ AlexL. Oui, il ne tient pas compte non plus du fait que (**)lui - même pourrait être utilisé pour couvrir certains caractères s’ils étaient utilisés dans n’importe quel autre programme.
Martin Ender

9

MATL , 29 28 26 caractères

Tâche 1 (chaque troisième nombre composé)

6*:tZp~)G:3*q)%G"$]vwm^sl+

Essayez-le en ligne!

Tâche 2 (table de multiplication)

:l$*%6*tZp~)G:3q)G"]vwm^s+

Essayez-le en ligne!

Tâche 3 (détecteur de Fibonacci)

l6Zp~G:"3q$t+]vGwm%):*)^s*

Cela affiche 1/0 pour Fibonacci / non-Fibonacci respectivement.

Essayez-le en ligne!

Tâche 4 (somme des pouvoirs)

:t^s%6*Zp~)G:3*q)G"$]vwml+

Essayez-le en ligne!

Vérifier

Ce programme les quatre chaînes et les affiche triées afin de vérifier visuellement qu’elles utilisent les mêmes caractères.

Des explications

%est le symbole de commentaire. Tout à sa droite est ignoré.

Tâche 1 (chaque troisième nombre composé)

6*    % Input N. Multiply by 6
:     % Range [1 2 ... 6*N]. This is enough because every even number is composite,
      % so this contains at least 3*N composite numbers
t     % Duplicate
Zp    % Isprime
~     % Negate
)     % Use as index to select composite numbers, including 1, from [1 2 ... 6*N]
G:    % Push [1 2 ... N]
3*q   % Multiply by 3 and subtract 1: gives [2 5 ... 3*N-1]
)     % Pick those composite numbers. Implicitly display

Tâche 2 (table de multiplication)

:     % Input N. Range [1 2 ... N]
l     % Push 1
$     % Specify that next function will take 1 input
*     % Product of array. With 1 input it produces all pair-wise products
      % Implicitly display

Tâche 3 (détecteur de Fibonacci)

l     % Push 1
6     % Push 6
Zp    % Isprime. Gives false
~     % Negate. Gives true, or 1
G:    % Push [1 2 ... N], where N is the input
"     % For each
  3q  %   3, subtract 1
  $   %   Specify that next function will take 2 inputs
  t   %   Duplicate the top two elements of the stack
  +   %   Add
]     % End
v     % Vertically concatenate the entire stack. This produces a column vector
      % with a sufficient amount of Fibonacci numbers
G     % Push input N
w     % Swap
m     % Ismember. Gives true if input is in the vector of Fibonacci numbers
      % Implicitly display

Tâche 4 (somme des pouvoirs)

:     % Implicitly input N. Push [1 2 ... N]
t     % Duplicate
^     % Power, element-wise
s     % Sum of array. Implicitly display

Quand j'ai regardé le défi pour la première fois, je pensais que Hey MATL would be perfect for this!tu m'y battais. +1
DJMcMayhem

@DJMcMayhem Désolé, j'ai tendance à beaucoup répondre. La prochaine fois, cinglez-moi et je m'abstiendrai si vous y travaillez :-) Quoi qu'il en soit, pourquoi ne pas y aller? Peut-être que vous pouvez jouer au golf
Luis Mendo

3
@DJMcMayhem, merci de poster aussi une réponse, même si tu n'arrives pas à battre le golfe Luis. J'aimerais que davantage de personnes publient des réponses dans les langues déjà utilisées, même si elles ne parviennent pas à sur-jouer la première.
Stewie Griffin

@ stewiegriffin Haha, d'accord, bien sûr. Je n'ai pas encore de réponse valable, mais si j'en ai une (elle est suffisamment différente), je la posterai.
DJMcMayhem

7

Perl 6 , 61 octets

{(4..*).grep(!*.is-prime)[0,3...^*>=$_*3]}#$$&+1==>X[]__oot{}
{[X*](1..$_,!0..$_).rotor($_)}#&***+-..334===>>[]^eegiimpps{}
{(1,&[+]...*>=$_)[*-!0]==$_}#$()**....334>X^_eegiimoopprrst{}
{[+]((1..$_)>>.&{$_**$_})}#!**,-....0334===X[]^eegiimoopprrst

Le second revient ((1,2,3,4),(2,4,6,8),(3,6,9,12),(4,8,12,16)) quand donné4

Perl 6 n’a pas vraiment d’entier maximum, mais le troisième fonctionne instantanément avec une entrée de 15156039800290547036315704478931467953361427680642 . Les seuls facteurs limitants seraient la mémoire et le temps.

Sinon, ils fonctionneront tous "instantanément" pour des entrées bien au-delà de ce qui est nécessaire.

Essayez-le en ligne


6

JavaScript (ES6), 101 100 95 93 91 octets

(n,r=[],a=(y,m)=>n?y%m?a(y,++m):a(y+1,2,y==m||n--%3||r.push(y)):r)=>a(4,2,n*=3)//>....p*A&&
n=>[...Array(n)].map((r,y,m)=>m.map((s,n)=>y*++n,y+=1))//22334(,,,,===ayy)??%%::||||--uh*&&
r=(n,y=1,a=2)=>n==y||n>y&&r(n,a,y+a)//2334((((,,,,r=[]ayymmmm))))>??%%++::||--.....ppush**A
r=y=>y&&y**y+r(y-1)//22334(((((nnnn,,,,,,,,r=====[]aaaaymmmm)))))>>??%%++::||||-.....ppushA

Éditer: 1 octet enregistré en ne prenant pas en charge 0le nombre de Fibonacci. 5 octets enregistrés plus 2 octets supplémentaires (1 grâce à @Arnauld) en renommant les variables. 2 octets enregistrés en passant entre +1, ++et +=1.


Remplacer toutes les occurrences de la cvariable par Adevrait sauvegarder un octet.
Arnauld

(J'étais sur le point de suggérer que vous pouvez également remplacer dpar y, mais dn'est pas défini dans la version actuelle, vous voudrez probablement résoudre ce problème en premier)
Arnauld

@Arnauld Merci de remarquer que, mais j'ai réussi à arranger les choses et enregistrer un octet plus en renommant aà m.
Neil

4

MATL , 30 caractères

Le jeu de caractères avec lequel je suis allé est:

!%))*+001233::<=GGQZ\]^`pstvyy~

Je ne pouvais pas oublier que l'autre MATL répondait, mais je me suis amusé à proposer cette solution.

Tache 1:

Troisièmes nombres composés.

4t^:QtZp~)G3*:3\1=)%!`yy+<]vGs

Essayez-le en ligne!

Tâche 2:

Table de multiplication. Certainement la tâche la plus facile, en raison du fonctionnement de MATL

:t!*%4QZp~)G3:3\1=)`yy+<]vGs^t

Essayez-le en ligne!

Tâche 3:

Testeur de Fibonacci. Imprime un entier positif (1 ou 2) pour les entrées de vérité et 0 pour les entrées de fausseté.

1t`yy+tG<]vG=s%4:QZp~)3*:3\)!^

Essayez-le en ligne!

Tâche 4:

Somme des pouvoirs

:t^s%1`yy+tG<]vG=4QZp~)3*:3\)!

Essayez-le en ligne!

Je posterai une explication plus complète plus tard, mais pour l'instant, notez que %c'est le caractère de commentaire, donc les programmes sont vraiment:

4t^:QtZp~)G3*:3\1=)
:t!*
1t`yy+tG<]vG=s
:t^s

4

PowerShell , 95 à 94 octets

( TimmyD savin 'mon bacon encore une fois)

Tache 1:

(""..999|?{'1'*$_-match'^(?=(..+)\1+$)..'})[(0..("$args"-1)|%{$_*3})]#|$$$$===ss%``iiex!!nnnq;

Essayez-le en ligne!


Tâche 2:

($s=1.."$args")|%{"`$s|%{$_*`$_}"|iex}#0113999((((......??''''*$$$--match^===++))))\[]i!!nnnq;

Essayez-le en ligne!


Tâche 3:

!!(($i="$args")..($s=1)|?{($n=($s+=$n)-$n)-eq$i})#0113999......||?{''''**__match^+\}[""%%]``x;

Essayez-le en ligne!


Tâche 4:

"$args"..1|%{$s+="$_*"*$_+1|iex};$s#013999(((((......|??{''''$$$--match^===)))))\}[%]``i!!nnnq

Essayez-le en ligne!


Oh, cette stringification "$args"au lieu de $args[0]est brillante. Je vais l'utiliser à partir de maintenant.
AdmBorkBork

@TimmyD Ouais, je l'utilise pour les économies d'un octet sur tout ce qui a un paramètre unique.
Briantist

@TimmyD bon point! Il faudrait que je les réécrive tous pour être sûr, je pourrais le revoir et l'appliquer. Une fois tous les 4 terminés, je me suis un peu effondré en termes d’optimisation.
Briantist

Eh bien, je voulais dire que je refaisais les liens TIO, mais FINE @TimmyD, je cesserai d’être paresseux et utiliserai votre suggestion généreuse qui n’est pas du tout le travail que je suis en train de faire! (édité)
:-p

Vous pouvez éliminer le ;problème de la tâche 4 en manipulant le calcul avec ("$args"..1|%{$s+="$_*"*$_+1|iex})-(-$s)pour enregistrer un autre octet global.
AdmBorkBork

3

Haskell , 77 76 caractères

m n=[[x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]!!y|y<-[1,4..3*n]]--2 n===y();^
s n=[(*y)<$>[1..n]|y<-[1..n]]--0112234mmm  ====[[[xxxx||<<--..]]],,/uod!!y;^
n x|x<2=1|1<3=sum(n<$>[x-1,x-2]);d y=[0|m<-[1..y],y==n m]--4[[[....]]]/o!!*^
o n=sum[x^x|x<-[1..n]]--01112234mm  n====[[[[x||<<<--....]]]],,/d$>!!yyy*();

Essayez-le en ligne!

--commence un commentaire de ligne, donc les quatre programmes sont de la forme <program>--<unused chars>.

Tache 1:

m n=[[x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]!!y|y<-[1,4..3*n]]

Le programme le plus long. [x|x<-[1..],2/=sum[1|0<-mod x<$>[1..x]]]donne une liste infinie de nombres composés plus un début 1corrigeant l'indexation 0. Usage:

Prelude> m 5
[4,9,14,18,22]

Tâche 2:

s n=[(*y)<$>[1..n]|y<-[1..n]]

Usage:

Prelude> s 5
[[1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15],[4,8,12,16,20],[5,10,15,20,25]]

Tâche 3:

n x|x<2=1|1<3=sum(n<$>[x-1,x-2]);d y=[0|m<-[1..y],y==n m]

Retour [0]pour la vérité et []pour la fausseté. Usage:

Prelude> d 5
[0]
Prelude> d 6
[]

Tâche 4:

o n=sum[x^x|x<-[1..n]]

Usage:

Prelude> o 5
3413

3

05AB1E , 21 octets

Tache 1

3ÅFOL¦DâPÙï{3ôø¬¹£qåm

Essayez-le en ligne!

Tâche 2

LDâP¹ôq3m¦Ùï{3ø¬£ÅFåO

Essayez-le en ligne!

Tâche 3

3mÅF¹åqL¦DâPÙï{3ôø¬£O

Essayez-le en ligne!

Tâche 4

LDmOq3¦âPÙï{3ôø¬¹£ÅFå

Essayez-le en ligne!

Des explications

Pour toutes les tâches, le qprogramme se termine afin que le code qui suit ne soit jamais exécuté.

Tache 1

C'est le plus gros porc byte. Une petite amélioration ici pourrait aller très loin.

3ÅFO                 # sum the first 4 fibonacci numbers
    L¦               # range [2 ... above]
      Dâ             # cartesian product with itself
        P            # product
         Ù           # remove duplicates
          ï{         # sort
            3ô       # split in pieces of size 3
              ø      # transpose
               ¬     # get the first lits
                ¹£   # get the first input-nr elements of the list

Tâche 2

L       # range [1 ... input]
 D      # duplicate
  â     # cartesian product
   P    # product
    ¹ô  # split in pieces of input size

Tâche 3

3m      # input**3
  ÅF    # get a list of that many (+1) fibonacci numbers
    ¹å  # check if input is in that list

Tâche 4

L     # range [1 ... input]
 D    # duplicate
  m   # elementwise power of ranges
   O  # sum

1

Ruby, 83 82 80 78 caractères

->m{'*+-=';[*0..m-1].map{|b|(4..516).select{|p|(2...p).any?{|n|p%n==0}}[3*b]}}
->n{'()%**+--......00123456==?[[]]clmnsty{||}';(b=1..n).map{|e|b.map{|p|e*p}}}
->m{'%+-......001236bclnnpt[[]]{{||||}}';(1..e=m*m).any?{|p|(p*p-5*e).abs==4}}
->n{'%*.......023456=?[]abbceelnsty{{||||}}';((m=0)..n).map{|p|m+=p**p}[-1]-1}

Remarque: Le détecteur de nombres de Fibonacci utilise la méthode du carré parfait décrite sur Wikipedia: https://en.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_numbers


si vous avez des caractères à graver, pourquoi ne pas utiliser un commentaire à la fin au lieu d'une chaîne? Cela vous évite 2 caractères par ligne''; vs#
Alexis Andersen

Merci, mais pour moi, c'est comme tricher.
GB
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.