Cela a été inspiré par une fonction que j'ai récemment ajoutée à mon langage Add ++ . Par conséquent, je soumettrai une réponse courte dans Add ++ mais je ne l'accepterai pas si elle gagne (ce ne serait pas juste)
Ne détestez-vous pas quand vous pouvez multiplier des nombres mais pas des chaînes? Vous devriez donc corriger cela, non?
Vous devez écrire une fonction ou un programme complet qui prend en entrée deux chaînes non vides et affiche leur version multipliée.
Comment multipliez-vous les cordes? Je te le dirai!
Pour multiplier deux chaînes, vous prenez deux chaînes et comparez chaque caractère. Le caractère avec le point de code le plus élevé est ensuite ajouté à la sortie. S'ils sont égaux, ajoutez simplement le caractère à la sortie.
La longueur des chaînes n'est pas garantie. Si les longueurs sont différentes, la longueur de la chaîne finale est la longueur de la chaîne la plus courte. L'entrée sera toujours en minuscules et peut contenir n'importe quel caractère de la plage ASCII imprimable ( 0x20 - 0x7E
), à l'exclusion des lettres majuscules.
Vous pouvez produire dans n'importe quel format raisonnable, comme une chaîne, une liste, etc.
Avec les entrées de hello,
et world!
, voici comment cela fonctionne
hello,
world!
w > h so "w" is added ("w")
o > e so "o" is added ("wo")
r > l so "r" is added ("wor")
l = l so "l" is added ("worl")
d < o so "o" is added ("worlo")
! < , so "," is added ("worlo,")
Donc, la sortie finale pour hello,
et world!
serait worlo,
!
Plus de cas de test
(sans étapes)
input1
input2 => output
programming puzzles & code golf!?
not yet graduated, needs a rehaul => prtgyetmirgduuzzlesneedsde rolful
king
object => oing
blended
bold => boln
lab0ur win.
the "super bowl" => the0usuwir.
donald j.
trumfefe! => trumlefj.
C'est un code-golf donc le code le plus court gagne! Luok!
Réponses:
Haskell, 11 octets
Essayez-le en ligne!
Rien à expliquer.
la source
zipWith
n'est pas trop étrange. C'est une primitive fonctionnelle assez courante. L'idée de "zipper" deux listes ensemble se pose dans de nombreux problèmes, et une fois que vous faites cela, vous voulez souvent appliquer une fonction aux éléments résultants à 2 éléments, d'où la partie "avec".05AB1E , 4 octets
Utilise l' encodage 05AB1E . Essayez-le en ligne!
la source
ø€à
devrait marcher, mais ça ne marche pas.Perl 6 , 22 octets
En prime, il accepte n'importe quel nombre de multiplicandes, pas seulement deux.
la source
Japt , 16 octets
Testez-le en ligne! Prend l'entrée comme un tableau de deux chaînes.
Le manque de min et max intégrés fait mal à Japt ici, mais il parvient toujours à obtenir un score quelque peu décent ...
Explication
la source
Gelée , 5 octets
Essayez-le en ligne!
Comment ça marche
Exemple
Soit s = blended et t = bold .
ż
rendements["bb", "lo", "el", "nd", 'd', 'e', 'd']
. Les trois derniers éléments sont des personnages.«
est le minimum dyadique vectorisant, donc il donne['b', 'l', 'e', 'd', 'd', 'e', 'd']
.œ-"
supprime exactement une occurrence du n ème caractère du deuxième tableau de la n ème chaîne / caractère du premier tableau, ce qui donne["b", "o", "l", "n", "", "", ""]
.œ-
est l' atome de soustraction multiset , et le rapide le"
rend vectorisé.Une fois imprimé, il lit simplement boln .
la source
PHP> = 7.1, 52 octets
PHP Sandbox Online
PHP> = 7.1, 69 octets
PHP Sandbox Online
PHP> = 7.1, 70 octets
PHP Sandbox Online
la source
for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;
.Alice , 8 octets
Essayez-le en ligne!
Explication
Alice a également cet opérateur (que j'ai appelé superposition ) mais il ne limite pas la sortie à la longueur de la chaîne la plus courte (à la place, les caractères restants de la chaîne plus longue sont ajoutés). Cependant, il dispose également d'un opérateur pour tronquer la plus longue de deux chaînes à la longueur de la plus courte.
la source
Rétine , 28 octets
Essayez-le en ligne!
Explication
Le
{
dit à Retina d'exécuter le programme entier en boucle jusqu'à ce qu'il ne parvienne pas à changer la chaîne de travail.O
en fait une étape de tri qui trie les lignes non vides par défaut. L'^
option inverse le résultat. Donc, en fait, nous obtenons un tri inverse des deux lignes si elles ne sont pas vides, en plaçant la ligne avec le plus grand caractère de tête en haut.Jeter les lignes vides s'il y en a.
S'il ne reste qu'une ligne, l'une des lignes était vide et nous supprimons également l'autre pour arrêter le processus.
Beaucoup de configuration en cours ici. Cela correspond à (
M
) le premier caractère de la chaîne de travail (^.
), le renvoie (!
), l'imprime sans retour à la ligne (\
), puis rétablit la chaîne de travail à sa valeur précédente (*
). En d'autres termes, nous imprimons simplement le premier caractère de la chaîne de travail (qui est le premier caractère maximal) sans réellement changer la chaîne.Enfin, nous supprimons le premier caractère de chaque ligne, afin que la prochaine itération traite le caractère suivant.
la source
G`.
n'est pas nécessaire, bien que cela génère une nouvelle ligne supplémentaire que vous pouvez supprimer en utilisant^.+¶$
ou en préfixant a\
au début de la réponse.\
).C, 58 octets
Essayez en ligne
la source
f(s,t)char*s,*t;{
donne la même longueur.JavaScript (ES6),
4745 octetsRenvoie
c>b[i]
commodément false après la fin deb
. Edit: sauvé 2 octets grâce à @ETHproductions.la source
Gelée , 6 octets
Essayez-le en ligne!
la source
żṢ€Ḋ€
et lesżṢ€ZṪ
deux enregistrent un octet.Mathematica, 78 octets
Il y a déjà une autre réponse dans Mathematica . Cette réponse prend l'entrée comme une liste de chaînes, elle
/@
peut donc être utilisée à la#
place de{##}
. Et nous pouvons simplementMap
le nom de fonction long sur l'objet au lieu de l'assigner à des variables. (en fait, chaque nom de symbole intégré Mathematica est utilisé au plus une fois dans la fonction)la source
Java 8,
12412011763 octets-4 octets grâce à @ Khaled.K .
-3 octets grâce à @Jakob .
Les entrées sont deux tableaux de caractères, et cela s'arrête avec un
ArrayIndexOutOfBoundsException
.Explication:
Essayez-le ici.
la source
C #,
8178 octetsC # a implicite
char
à laint
conversion (car achar
est en fait unint
dessous), ce qui est bien, et au lieu de chercher la chaîne la plus courte, essayez jusqu'à l'échecla source
a=>b=>
en le compilant en aFunc<string, Func<string, string>>
. Vous pouvez supprimer les accolades autour de la boucle for pour économiser 2 octets.C# has implicit char to int conversion
est vrai car achar
est unint
dessous.sizeof(int) == 4
maissizeof(char) == 2
.MATL , 8 octets
L'entrée est un tableau de cellules de chaînes, au format
{'abcd' 'efg'}
Essayez-le en ligne!
En passant, cela fonctionne aussi pour plus de deux chaînes .
Explication
Tenez compte des commentaires
{'blended' 'bold'}
. La pile est montrée à l'envers, avec des éléments plus récents ci-dessous.la source
R, 103 octets
Code:
Cas de test:
la source
Python 2 ,
474434 octets-3 octets grâce à musicman523. -10 octets grâce à Blender.
Prend l'entrée comme une liste de chaînes.
Essayez-le en ligne!
la source
V ,
28, 24, 21 octetsEssayez-le en ligne!
Hexdump:
Trois octets enregistrés grâce à @ nmjcman101!
Explication:
la source
dG
nécessaire? Toutes les nouvelles lignes ne sont-elles pas supprimées avec leÍî
anyways?CJam , 12 octets
L'entrée est une liste de deux chaînes. Le programme se termine avec une erreur (après avoir produit la bonne sortie) si les deux chaînes ont des longueurs différentes.
Essayez-le en ligne!
Explication
la source
Clojure, 31 octets
Oui pour la composition des fonctions :) Renvoie une séquence de caractères au lieu d'une chaîne, mais ils fonctionnent principalement de la même manière dans Clojure, sauf lors de l'impression ou de la correspondance d'expression régulière.
Malheureusement,
max
ne fonctionne pas avec les personnages.la source
max
ne fonctionne pas, maismax-key
fonctionne.#(map(partial max-key int)% %2)
C'est exactement le même nombre d'octets, cependant.(ffirst (sort-by second ...)
.Javascript (ES2015),
666349 octetsExplication:
Versions précédentes:
la source
Rétine ,
5536 octetsEssayez-le en ligne! Explication: une ligne est préfixée pour contenir le résultat. Alors que les deux chaînes ont encore des caractères, les entrées sont triées et le caractère de tête avec le point de code le plus élevé est déplacé vers le résultat tandis que l'autre caractère de tête est supprimé. Enfin, le résultat est imprimé.
la source
Husk , 2 octets
Essayez-le en ligne!
"Ungolfed" / Expliqué
Fait usage de
zip f
cela tronque la liste plus courte de sorte qu'il y a toujours deux arguments pourf
, par exemplezip f [1,2] [3,4,5] == zip f [1,2] [3,4] == [f 1 3, f 2 4]
:la source
Kotlin,
504137 octets-9 octets avec la syntaxe de référence de fonction -4 octets avec la fonction d'extension
Si s et x sont dans la portée et non dans une fonction, cette méthode ne fait que 16 octets
Démo
la source
PowerShell, 75 octets
Enregistrer en tant que fichier .ps1 et exécuter
Auparavant, 78 octets:
la source
J, 25 octets
explication
la moitié des octets vont à la résolution en s'assurant que les deux entrées ont la longueur des entrées la plus courte (j'aimerais voir une amélioration sur cette partie, si quelqu'un en a une):
<.&#
est le minimum des deux longueurs, et{."1,:
prend autant de caractères des deux lignes du tableau à 2 lignes composé de la chaîne de gauche empilée en haut de la droite.Utilisez le verbe Under
&.
pour convertir chaque caractère en son index ascii, prenez le maximum des deux nombres, puis reconvertissez-le en caractères.Essayez-le en ligne!
la source
[:>./&.(3&u:)<.&#$&>;
u:
était aussi un TIL pour moi.Collections Java 8 + Eclipse,
7064 octetsa
etb
sont tous deuxMutableList<Character>
issus de collections eclipse.la source
Ajouter ++ , 8 octets
Essayez-le en ligne!
Dans les versions 0.4 à 1.11,
^
exposants deux nombres ou "multiplie" deux chaînes, selon le type des arguments.la source
Mathematica, 102 octets
contribution
la source
L@a~Min~L@b
enregistre un octetAPL (Dyalog) , 22 octets
Prend deux (ou plus!) Chaînes comme argument de droite.
Essayez-le en ligne!
{
une fonction anonyme où le bon argument est représenté par ⍵⎕UCS
les symboles de l' U nicode C haracter S et qui correspondent à la⌈⌿
valeur maximale dans chaque colonne de⎕UCS
les points de code à partir du U nicode C haracter S et pour la↑
matrifié (matrice de la liste des chaînes)⍵
arguments↑¨⍨
chacun plafonné au⌊/
minimum de≢¨
les longueurs⍵
des arguments}
la source