Disons que nous avons un ensemble particulier de fonctions sur les chaînes. Ces fonctions sont un peu comme remplir les blancs ou les madlibs, sauf qu'ils ne prennent qu'une seule entrée et l'utilisent pour remplir tous leurs blancs. Par exemple, nous pourrions avoir une fonction qui ressemble à
I went to the ____ store and bought ____ today.
Si nous appliquions cette fonction à la chaîne, cheese
le résultat serait:
I went to the cheese store and bought cheese today.
Nous pouvons représenter ces fonctions comme une liste de chaînes non vide, où les blancs sont simplement les espaces entre les chaînes. Par exemple, notre fonction ci-dessus serait:
["I went to the ", " store and bought ", " today."]
Avec cette représentation, il n'y a qu'une seule représentation pour chaque fonction de ce type et une seule fonction pour chaque représentation.
Une chose vraiment intéressante est que l'ensemble de ces fonctions est fermé sous la composition. C'est-à-dire que la composition de deux de nos fonctions est toujours une autre de ces fonctions. Par exemple, si je compose notre fonction ci-dessus avec
["blue ", ""]
(la fonction qui précède blue
l'entrée) On obtient la fonction:
["I went to the blue ", " store and bought blue ", " today."]
Celles-ci peuvent cependant devenir un peu plus complexes. Par exemple, si nous composons la première fonction avec
["big ", " and ", ""]
Le résultat est
["I went to the big ", " and ", " store and bought big ", "and", " today."]
Tâche
Votre tâche consiste à prendre deux fonctions décrites comme des listes de chaînes non vides et à afficher leur composition sous forme de liste de chaînes non vide.
Aux fins de ce défi, une liste peut être n'importe quel conteneur ordonné qui autorise les doublons et une chaîne peut être un type de chaîne natif, une liste de caractères ou une liste d'entiers.
Il s'agit de réponses au code-golf qui seront notées en octets, moins d'octets étant meilleurs.
Cas de test
["","xy"] ["ab",""] -> ["ab","xy"]
["x","y","z"] ["a","b"] -> ["xa","bya","bz"]
["xy"] ["ab"] -> ["xy"]
["","",""] ["a",""] -> ["a","a",""]
["x",""] ["","",""] -> ["x","",""]
["x","y","z"] ["a","b","c"] -> ["xa","b","cya","b","cz"]
["x","x","x"] ["a"] -> ["xaxax"]
["w","x","y","z"] ["ab","cd","e"] -> ["wab","cd","exab","cd","eyab","cd","ez"]
Réponses:
Gelée , 6 octets
Un lien dyadique acceptant la première représentation de fonction à droite et la deuxième représentation de fonction à gauche qui donne la représentation de fonction résultante. Chaque représentation de fonction est une liste de listes de caractères (Jelly n'a pas d'autres chaînes).
Essayez-le en ligne! (les arguments du programme complet sont donnés en notation Python; les chaînes deviennent des listes. Le pied de page montre une représentation Python de la sortie du lien.)
Voici une suite de tests qui reformate la sortie du lien comme les entrées.
Comment?
Profite des listes de types mixtes de Jelly pour autoriser tout le domaine des représentations (toute liste de listes de caractères) en utilisant le zéro entier comme espace réservé:
Si nous avions besoin de traiter l'une des listes mixtes de Jelly (y compris celles de n'importe quelle profondeur ou forme), nous pourrions utiliser ce huit octets:
j,©⁹jœṣ®
qui utilise les arguments appariés comme espace réservé .la source
Haskell , 78 octets
Essayez-le en ligne!
la source
Python 3.8 (pré-version) ,
6058 octetsUne fonction sans nom acceptant deux listes de chaînes
a
etb
qui renvoie une liste de chaînes.Essayez-le en ligne! Ou consultez la suite de tests .
Comment?
Forme d'abord une chaîne de séparation,
v
introuvable dansa
oub
. Forme ensuite une chaîne en joignant les chaînesb
avec des copies dev
. Forme ensuite une chaîne en joignant les chaînesa
avec des copies de cela. Enfin, divise cette chaîne aux instances dev
pour donner une liste de chaînes.Tout en veillant à
v
n'est pasa
oub
nous devons également veiller à ce quev
font wont nous séparons tôt dans le cas où toutes les chaînesa
etb
sont égales. Pour ce faire, nous formonsv
en joignant toutes les chaînes des deux listes avec des instances d'une chaîne (ici'&'
) et en ajoutant un caractère différent et différent (ici'$'
). Notez que faire l'une ou l'autre isolément n'est pas suffisant car toutes les chaînes dans les entrées peuvent être égales au caractère choisi.la source
&
est requis? et l'utilisation''.join(a+b)+'$'
ne suffit pas?['$','$'] ['$','$']
serais un.'$'
caractère choisi et que le résultat sera plus d'une chaîne, nous avons besoin d'un caractère différent pour éviter de les séparer tôt.05AB1E ,
41519911 octetsContrairement à la réponse Jelly, la chaîne
"0"
, l'entier0
et le flottant de 05AB1E0.0
sont tous (quelque peu) égaux, donc je ne peux pas séparer / joindre par un entier. C'est pourquoi nous avons eu les +15 octets comme solutions de contournement, bien que je les ai revus à 9 octets maintenant. Merci à @JonathanAllan d' avoir trouvé 2 bugs.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Wolfram Language (Mathematica) ,
6261 octetsEssayez-le en ligne!
-1 grâce à Roman
Bien que ce ne soit pas une sortie valide, cela renvoie une fonction qui fait le travail. (34 octets)
Essayez-le en ligne!
la source
Riffle
.Japt , 8 octets
Adapte l'approche de Jonathan .
Essayez-le
la source
N
ce que dans ce cas? Si je le comprends bien (en utilisant la fonctionnalité de recherche du lien TryIt), il se répèteN
deux fois (N²
). Il utilise ensuite cela pour joindre la deuxième entréeV
(VqN²
), puis utilise cette chaîne entière pour rejoindre la première entréeU
( implicite) (q...)
). Et finalement, divise la chaîne résultante surN
(qN
). Mais qu'est-ce queN
dans ce cas?p(...)
méthode dans la recherche. Il ajoute le2
aux deux entrées appariées, n'est-ce pas. NeN²
résulte qu'en[["w","x","y","z"],["ab","cd","e"],2]
et il utilise cette liste entière pour se joindre. Pourquoi la finaleqN
ne laisse-t-elle2
pas la liste des résultats dans ce cas? OuN²
modifie-t-il l'originalN
?push
ing éléments dans un tableau dans JS modifie le tableau d'origine.Haskell , 62 octets
Essayez-le en ligne!
Voici ma réponse Haskell. Il fonctionne sur tout type de liste.
la source
J ,
44434229 octetsEssayez-le en ligne!
-13 octets grâce aux miles!
Cette approche utilise des nombres entiers et est due aux miles.
approche originale avec des cordes
Essayez-le en ligne!
Remarque: J'ai ajusté -3 du TIO pour tenir compte de
f=.
Utilise la méthode de Jonathan Allen, adaptée pour J.
Cela a été étonnamment difficile à jouer au golf, car J n'a pas de méthode intégrée de «jointure», et je serais curieux de voir si elle peut être améliorée de manière significative.
g
est un verbe auxiliaire qui nous donne "rejoindre"la source
_<;._1@,(;@}:@,@,.(,_&,)&.>/)
utilise l'infini_
comme valeur sentinelle pour savoir où se diviser<;._1
. La jointure se fait d'abord en utilisant réduire/
pour former une grande boîte, puis sa mise en forme de tableau juste.g&.:(a.&i.&.>)
décompte des octets ne devrait-il pas se produire ou manque-t-il quelque chose?JavaScript (Node.js) ,
8579 octetsEssayez-le en ligne!
la source
JavaScript, 37 octets
Adapte également l'approche de Jonathan .
Essayez-le en ligne
la source
Perl 5 (
-lp
), 20 octetsComme l'a commenté @JonathanAllan, il s'agit d'un programme complet utilisant, pour IO, un onglet comme séparateur de liste et une nouvelle ligne pour séparer les deux listes.
TIO
l'onglet et le retour à la ligne ont été choisis parce qu'il est plus pratique de vérifier les cas de test, sinon ils pourraient être modifiés en caractères non imprimables
\1
et\2
.(
-02l012p
)TIO
Comment ça fonctionne,
-02
: pour définir le séparateur d'enregistrement d'entrée sur\2
-l
: pour supprimer le séparateur d'entrée de l'argument par défaut$_
et pour ajouter le séparateur d'enregistrement de sortie à la sortie par défaut-012
: pour définir le séparateur d'enregistrement de sortie sur\012
(\n
) afin que la sortie soit plus facile à vérifier-p
: pour afficher l'argument par défaut$n=<>;
: pour lire l'enregistrement suivant et attribuer à$n
chop$n;
: pour supprimer le séparateur de$n
s/\x1/$n/g
: pour remplacer toutes les occurrences de\1
par$n
la source
JavaScript (ES6),
6259 octetsEnregistré 3 octets grâce à @Shaggy
Il s'agit d'une version fixe de la réponse de Luis (maintenant supprimée) pour prendre en charge tous les personnages.
Essayez-le en ligne!
la source