Dans ce défi, vous obtiendrez quatre tâches différentes mais quelque peu liées qui doivent être résolues de manière spécifique. Tout d'abord, je vais expliquer les tâches, puis suit une explication de la façon dont vous devez le résoudre.
Votre code doit pour les quatre tâches prendre deux entiers positifs en entrée:, n,m
où n<m
. Toutes les tâches doivent être résolues dans la même langue. L'orientation des matrices est facultative (n sur m peut être interprété comme "n lignes, m colonnes" ou "n colonnes, m lignes").
Tache 1:
Créer (et sortie / impression) un vecteur / liste constituée des éléments suivants: n, n+1 ... m-1, m
. Donc, pour n=4, m=9
, vous devriez sortie: 4,5,6,7,8,9
.
Tâche 2:
Créez (et éditez / imprimez) une matrice / tableau / liste de listes (ou équivalent) ressemblant à ceci:
n, n+1, ... m-1, m
n+1, n+2, ... m-1, m+1
...
n+m, n+m+1, ... 2*m-1, 2*m
Car n=4, m=9
vous devez sortir:
4, 5, 6, 7, 8, 9
5, 6, 7, 8, 9, 10
...
13, 14, 15, 16, 17, 18
Tâche 3:
Créez (et imprimez / imprimez) une table de multiplication n par m (sur n'importe quel format approprié). Exemple pour n=4, m=9
:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
5 10 15 20
6 12 18 24
7 14 21 28
8 16 24 32
9 18 27 36
Tâche 4:
Produire / imprimer un vecteur / liste composé des éléments du tableau de multiplication de la tâche 3, triés par ordre croissant, en conservant les valeurs en double. Pour n=4, m=9
, vous devriez sortie: 1, 2, 2, 3, 3, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 9, 9, 10, 12, 12, 12, 14, 15, 16, 16, 18, 18, 20, 21, 24, 24, 27, 28, 32, 36
.
Le défi:
Maintenant, toutes les tâches ci-dessus sont assez triviales. Le vrai défi ici est que le code de la tâche 2 doit commencer par le code de la tâche 1, le code de la tâche 3 doit commencer par le code de la tâche 2 et le code de la tâche 4 doit commencer par le code de la tâche 3.
Pour être plus clair:
Supposons que le code de la tâche 1 soit (fonctionne en octave):
@(n,m)(n:m)
Ensuite, votre code pour la tâche 2 pourrait être (fonctionne dans Octave):
@(n,m)(n:m)+(0:m)'
Le code de la tâche Tâche 3 doit être (ne fonctionne pas dans Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3"
Et enfin, le code de la tâche 4 doit être (ne fonctionne pas dans Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3""Code_for_task_4"
Il s'agit de code-golf , donc la soumission avec le code le plus court pour la tâche 4 dans chaque langue gagne. Comme toujours: les explications sont fortement encouragées.
>2;
afin que le code de la tâche précédente soit essentiellement rendu non opérationnel?0<n<m
ou0<=n<m
?Réponses:
Gelée , 12 octets
Tache 1
Essayez-le en ligne!
Tâche 2
Essayez-le en ligne!
Tâche 3
Essayez-le en ligne!
Tâche 4
Essayez-le en ligne!
Comment ça fonctionne
Tache 1
r
est l' atome de la gamme dyadique et fait exactement ce que la tâche demande.Tâche 2
Une chaîne dyadique qui commence par trois maillons dyadiques est une fourchette ; les liens les plus extérieurs sont évalués en premier, puis le lien du milieu est appelé avec les résultats des deux côtés comme arguments.
r
se comporte comme auparavant, donnant [n,…, m] .0r$}
est un lien rapide (ou un lien rapide, si vous voulez).La
$
chaîne rapide (chaîne monadich) consomme les maillons0
(rendement 0 ) etr
(plage dyadique) et les transforme en chaîne monadique. Lorsqu'il est appelé avec l'argument k , cela donnera [0,…, k] .Le quick
}
(argument de droite) prend le lien rapide créé par$
et le transforme en un lien dyadique qui appelle0r$
avec0r$}
le bon argument de.0r$}
sera appelé avec l'argument gauche n et l'argument droit m , il0r$
est donc associé à l'argument m et donne [0,…, m] .+þ
est un autre lien rapide.þ
(table) appellera+
(addition) pour chaque élément de son argument de gauche et tout élément de son argument de droite, en regroupant les résultats de chaque argument de droite sur une seule ligne.+þ
sera appelé avec l'argument gauche [n,…, m] et l'argument droit [0,…, m] , donnant la table désirée.Tâche 3
Chaque ligne d'un programme Jelly définit un lien différent. Le dernier est le lien principal et, comme la
main
fonction de C , est le seul lien qui est exécuté par défaut. Les liens restants peuvent être appelés à partir du lien principal, mais nous ne le ferons pas ici.Comme précédemment,
þ
(table) appellera×
(addition) pour chaque élément de son argument de gauche et tout élément de son argument de droite, en regroupant les résultats de chaque argument de droite sur une seule ligne.Comme les deux arguments
×þ
sont des entiers,þ
les convertit en plages, transformant les arguments n et m en [1,…, n] et [1,…, m] .Tâche 4
×þ
fonctionne comme avant. Les liens suivants sont monadiques, ce qui en fait des sommets , c'est-à-dire qu'ils sont appliqués par-dessus les précédents.Après l'exécution
×þ
,F
aplatit le tableau 2D résultant etṢ
trie le tableau 1D résultant.la source
05AB1E ,
1817 octetsTache 1
Essayez-le en ligne
Tâche 2
Essayez-le en ligne
Tâche 3
Essayez-le en ligne
Tâche 4
Essayez-le en ligne
Explications
Tache 1
Tâche 2
Tâche 3
Tâche 4
la source
MATL ,
1817 octetsTache 1
Essayez-le en ligne!
Tâche 2
Essayez-le en ligne!
Tâche 3
Essayez-le en ligne!
Tâche 4
Essayez-le en ligne!
Explication
Tache 1
Tâche 2
Tâche 3
Tâche 4
la source
Mathematica,
8477 octetsEdit: Merci à Martin Ender pour avoir économisé 7 octets.
Tache 1:
Pur
Function
avec des argumentsn
etm
qui produitn~Range~m
, la forme infixe deRange[n,m]
.Tâche 2:
n~Range~m~Table~(m+1)
crée un tableau 2D avec desm+1
lignes, où chaque ligne est la sortie de la tâche précédente. Ensuite, l'//0~Range~m+#&
application postfixe de la fonction0~Range~m+#&
s'ajoute effectivement0
à la première ligne,1
à la deuxième ligne, et ainsi de suite jusqu'àm
lam+1
-ème ligne.Tâche 3:
Cela applique simplement la fonction constante
1##&~Array~{n,m}&
à la sortie de la tâche précédente.Tâche 4:
Flatten
s etSort
s la table de multiplication.la source
Python, 183 octets
Tâche 1, 29 octets
Essayez-le en ligne!
Tâche 2, 84 octets
Essayez-le en ligne!
Tâche 3, 137 octets
Essayez-le en ligne!
Tâche 4,
183167 octetsEssayez-le en ligne!
Explication:
Tache 1:
Assez simple, il génère une
n
à lam
liste à l' aide de Python intégrérange
fonction.Tâche 2:
Pour chaque numéro
0
àm+1
, il ajoute ce numéro à chaque élément d'une liste den
àm
.Tâche 3:
Pour chaque nombre de
1
àm
, il multiplie ce nombre par chaque nombre dans une liste de1
àn
.Tâche 4:
Cela utilise la
sorted
fonction intégrée de Python qui trie une liste du plus petit au plus grand. La compréhension de la liste dans la fonction est utilisée pour aplatir la liste. Il crée une liste de chaque élément de chaque élément de la liste qui lui est attribuée par la tâche 3.Beaucoup d'octets enregistrés grâce à @math_junkie.
la source
def s(n,m):return [[w+i for w in r(n,m)] for i in a(0,m+1)]
est une fonction complète lorsque le code de la tâche 1 a été défini.a=lambda n,m:...
pour chacune de vos définitions de fonction. Les fonctions anonymes sont toujours plus courtes en pythonPHP 7, 200 octets
Utilise le tampon de sortie pour effacer la sortie précédente.
Tache 1
Enregistre le code
$s
pour le réutiliser plus tard. le$v
variable concerne la dernière tâche.Tâche 2
Imprime les lignes restantes.
Tâche 3
Efface le tampon de sortie et imprime la table de multiplication, en enregistrant les nombres dans
$v
.Tâche 4
Efface à nouveau le tampon de sortie et imprime
$v
.la source
PowerShell , 126 octets
Tache 1
Essayez-le en ligne!
Utilise l'
..
opérateur de plage intégré. Le comportement par défaut pour l'impliciteWrite-Output
insère une nouvelle ligne entre les éléments, c'est pourquoi la sortie s'affiche comme une nouvelle ligne séparée.Tâche 2
Essayez-le en ligne!
Vide la première tâche dans STDERR avec
>2;
, puis boucle de0
à$m
, chaque assistant de réglage d'itération$i
avant de boucler à nouveau de$n
vers$m
et d'incrémenter chaque nombre de$i
. Ce sont-join
édités avec des virgules, sinon ce serait une sortie gigantesque longue et ambiguë d'un élément par ligne.Tâche 3
Essayez-le en ligne!
Même chose
>2;
pour vider le précédent dans STDERR. Ensuite, nous faisons simplement une double boucle de1
à$m
puis1
à$n
, en définissant helper le$i
long du chemin, multiplions les valeurs et-join
avec un espace pour le rendre tabulaire. Notez les parens d'encapsulation - ils entreront en jeu lors de la prochaine tâche - mais ici, ils s'assurent simplement que la sortie est placée sur le pipeline (ce qu'elle serait déjà, donc ils sont redondants).Tâche 4
Essayez-le en ligne!
Ah! Enfin une certaine redondance. Étant donné que la tâche précédente a des parens, nous pouvons clouer sur l'
-split
espace blanc sans souci, convertir chacun en un entier|%{+$_}
, puis|sort
. La sortie est à nouveau séparée de la nouvelle ligne.Je pense qu'il existe des moyens de mieux tirer parti de la redondance entre les tâches - tout en jouant au golf.
la source
ES2016-ish,
401384 caractèresVoici un premier essai. Je suis sûr que cela pourrait être un peu condensé, mais c'est assez court. Fonctions flèches FTW! (J'adore ces déclarations de retour implicites.) Nouveau et amélioré avec des chaînes de modèle!
Tache 1
Appelez
z(n,m)
la sortie du journal. (Je suis aliasing console.log pour jouer au golf plus tard.)Tâche 2
Le deuxième verset ... développe le premier.
Maintenant, appelez
y(n,m)
. Jolie, non?Tâche 3
Vous devez contourner la plupart des fonctionnalités existantes
<sadface />
.Maintenant, le nom de la méthode est
v
. Appelez-le de la même manière.Tâche 4
Et maintenant, nous pouvons à nouveau réutiliser.
J'ai dû sauter
u
pour ma méthode, donc c'estt
. Bummed que je devais mettre dans cette fonction de tri, car lesString.match
valeurs retournées sous forme de ... chaînes.la source
Rubis,
121103 octetsTout dans Ruby est truthy à l' exception
nil
etfalse
, ce qui signifie que les tâches peuvent être configurées pour ignorer l' entrée précédente avec rien mais bien placéand
/&&
.Tache 1
Essayez-le en ligne!
Tâche 2
Essayez-le en ligne!
Tâche 3
Essayez-le en ligne!
Tâche 4
Essayez-le en ligne!
la source