Inspiration. * Je ne peux pas croire que nous n'ayons pas eu ce défi auparavant:
Tâche
Étant donné une ou plusieurs chaînes ASCII imprimables, entrelacez-les en prenant un caractère de chaque chaîne, de manière cyclique jusqu'à ce qu'il n'y ait plus de caractères. Si une chaîne manque de caractères avant les autres, sautez simplement celle-là à partir de là.
Exemples
SIMPLE
donne SIMPLE
POLLS
et EPEES
donnePEOPLELESS
LYES
et APRONS
donneLAYPERSONS
ABCDE
et a c
et 123 567
donneAa1B 2Cc3D E567
"\n$?*
et
(chaîne vide) et ,(.)"
(espace de fin) donne ",\(n.$)?"*
(espace de fin)
* Il existe des solutions APL plus courtes.
Réponses:
Gelée , 1 octet
Essayez-le en ligne!
Le transposé intégré fera exactement cela à une liste de chaînes.
la source
z⁶
.z
est «transposer à gauche, rembourrage à droite»;⁶
est un espace.;"
(concaténation élément par élément) résoudrait la tâche sans intégré.Python 2,
101898669 octetsJ'espère que je pourrai intégrer cela dans un lambda, le raccourcir en le rendant récursif.Ce n'est pas idéal parce que vous espérez que la transposition est plus courte, malheureusement ce n'est pas le cas (d'après ce que j'ai réussi à trouver jusqu'à présent).Anciennes solutions:
lambda s:''.join(''.join([c,''][c<' ']for c in x)for x in map(None,*[list(y)for y in s]))
merci à mathmandan de m'avoir rendu stupide;) m'a sauvé un tas d'octets! (sur une ancienne solution)
la source
while any(w):
? Les chaînes vides sont falsey en Python.f=
.[]
appel récursif, en le laissantf(x[1:] for x in s)
, ce qui en fait une compréhension de générateur, qui agit de la même manière qu'une liste dans ce contexte.Perl 6 ,
3432 octetsUn lambda qui prend un tableau de chaînes comme argument et renvoie une chaîne.
( Essayez-le en ligne )
la source
@_
place de$_
CJam , 4 octets
Essayez-le en ligne!
Nous pouvons également écrire une fonction sans nom pour 4 octets, qui attend une liste de chaînes en haut de la pile:
Essayez-le en ligne!
la source
Pyth - 3 octets
Très simple, ajoutera une extension plus tard, sur mobile.
Suite de tests
la source
JavaScript (ES6),
5246 octetsPrend l'entrée comme un tableau de chaînes et les sorties comme une seule chaîne.
Extrait de test
la source
f=([[c,...s],...a])=>c?c+f([...a,s]):a+a&&f(a)
Haskell, 33 octets
Essayez-le sur Ideone. Usage:
Sans utiliser de build-in: (
3834 octets)Essayez-le sur Ideone. 4 octets de réduction grâce à Zgarb! Usage:
la source
f a=a
pour enregistrer un octet car les deux[]
ont un type différent ... si proches.C,
11484 octets-20 octets pour ne pas calculer la longueur.
Accepte un tableau de pointeurs de caractères et requiert que le dernier élément soit un pointeur nul (voir utilisation).
Non golfé et utilisation:
la source
malloc
etreturn
avant et c'était plus long que l'impressionPHP,
6867 octetsBoucle sur les arguments de ligne de commande. Courir avec
-r
.Après la boucle intérieure,
$f
est1
quand toutes les chaînes sont finies, le0
reste ( au niveau du bit&
moulages""==$c
à int).Prochaine itération de la boucle externe: copier
$f
vers$k
(enregistre un octet$k=0
) et basculer$f
:lorsque toutes les chaînes sont terminées,
$f
c'est maintenantfalse
et la boucle est rompue.la source
Rétine , 13 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
Explication
Ceci est basé sur la technique de transposition standard dans la rétine. Nous trions (
O
) tous les caractères non sauts de ligne (.
), par ($#
) le nombre de caractères devant eux sur la même ligne ($.%`
), c'est-à-dire leur position horizontale.Le deuxième étage supprime ensuite simplement les sauts de ligne de l'entrée.
la source
Java,
19 + 155 = 174160Non golfé:
Sortie:
Première modification: déclaration de chaîne fusionnée pour économiser quelques octets. Supprimé
import
, il a été utilisé par lamain()
méthode (non illustrée ici) qui était également nécessaireLinkedList
. Il y a moins d'octets à référencerQueue
directement.la source
String f(java.util.Queue<String>q){String s,r="";for(;!q.isEmpty();r+=s.isEmpty()?"":s.charAt(0))if((s=q.poll()).length()>1)q.add(s.substring(1));return r;}
PHP, 77 octets
Golfé
Fonction anonyme qui prend un tableau de chaînes.
Je suis sûr que cela pourrait être joué davantage, mais c'est tôt. À chaque itération, nous récupérons la i-ème lettre de chaque chaîne donnée et l'ajoutons à notre chaîne finale, une à la fois. PHP lance simplement des avertissements si nous accédons à des bits de chaînes qui n'existent pas, donc ça va. Nous nous arrêtons uniquement lorsqu'aucune modification n'a été effectuée après avoir parcouru toutes les chaînes une fois.
J'ai l'impression que l'utilisation de
$d
peut être jouée davantage, mais c'est tôt. : Pla source
En fait ,
76 octetsSuggestions de golf bienvenues! Essayez-le en ligne!
Edit: -1 octet grâce au pélican sarcelle.
Ungolfing
la source
Z♂#Σ
àZ♂Σ
toutes. Merci pour le conseil: DJavaScript (ES6), 46 octets
la source
Python 2 , 58 octets
Essayez-le en ligne!
la source
lambda *m
?J , 13 octets
Essayez-le en ligne!
Basé sur l' inspiration de cette question.
Une autre façon de le faire prend 27 octets mais fonctionne en utilisant la transposition. La plupart des octets doivent gérer les zéros ajoutés automatiquement à partir du remplissage.
Explication
la source
Utilitaires Bash + GNU, 55
E / S via STDIN (ligne séparée) et STDOUT.
Le
sed
formate chaque ligne à une substitution de processus bash . Ceux-ci sont ensuiteeval
éditéspaste
pour effectuer l'entrelacement proprement dit.tr
supprime ensuite les nouvelles lignes et les tabulations inutiles.Ideone.
la source
PHP, 63 octets
Remarque: utilise le codage IBM-850
Courez comme ceci:
Explication
la source
~■
(binaire 254 nié) au lieu de"\x1"
(binaire 1).$$
!Python 3, 75 octets
Je sais que l'autre Python est plus court, mais c'est la première fois que je l'utilise
map
de ma vie, donc j'en suis assez fierla source
C,
7571 octetsLa seule limitation est la longueur de sortie. Il est actuellement de 99, mais peut facilement être étendu à 999 (+1 octet).
Non golfé:
la source
Oracle SQL, 195 octets
Prend son entrée dans une table nommée
i
avec des colonnesa
(contenant la chaîne) eto
(ordre de la chaîne):Explication:
Nous exploitons
CONNECT BY
pour briser les chaînes en chacun des personnages qui les composent.PRIOR SYS_GUID()
êtreNOT NULL
assure que nous ne nous retrouvons pas coincés dans une boucle.Nous concaténons ensuite les caractères simples avec
LISTAGG
mais nous les mélangons avec uneORDER BY
clause, en les classant d'abord par leur position dans la chaîne d'origine et ensuite seulement par la chaîne dont ils sont issus.Pas aussi court que les autres réponses, mais SQL n'est pas vraiment un langage de manipulation de chaînes :)
la source
Python 2,
12896J'espérais ne pas avoir à utiliser itertools
Non golfé
la source
Perl 5 , 28 octets
Code de 26 octets + 2 pour
-0n
.Essayez-le en ligne!
la source
R , 73 octets
Essayez-le en ligne!
Explication: très simple (mais verbeux), il suffit de parcourir
i
le caractère de laj
e chaîne. Heureusement,substr
retourne une chaîne vide si on lui donne une entrée hors plage.la source
Python, 112 octets
la source
x
ety
d'où?Perl 5 , 53 octets
Essayez-le en ligne!
Méthode
Crée un tableau à deux dimensions où le nombre de lignes est égal à la longueur de la chaîne la plus longue et le nombre maximal de colonnes est égal au nombre de chaînes. Puis sortez chaque ligne du tableau sans espacement.
la source
TXR Lisp , 20 octets
Courir:
La
weave
fonction est paresseuse, elle renvoie donc une liste, c'est pourquoi nous devons forcer le résultat sur une chaîne. Paresseux, il peut tisser des séquences infinies. Par exemple, nous pouvons tisser les nombres naturels pairs et impairs, qui sont eux-mêmes des listes paresseuses infinies:la source
K (oK) ,
3529 octetsSolution:
Essayez-le en ligne!
Exemple:
Explication:
Utilisez l'indexation de deuxième niveau pour extraire les index de 0 à max (longueur de la liste aplatie) dans toutes les listes d'entrée. Toute indexation au-delà de la limite de la sous-liste renverra un null. Retourner (rotation de 90), aplatir, puis extraire les résultats non nuls.
Remarques:
i$
) afin que nous obtenions desNull utiles, car space ( ) est considéré comme nul pour une liste de caractères, ce qui signifie que vous ne pouvez pas dire Null à partir d'espaces valides.
la source
Jq 1,5 , 49 octets
Explication
Sample Run
Essayez-le en ligne
la source