Ceci est ma première question sur le codegolf, donc je m'excuse à l'avance si ce n'est pas approprié, et je me réjouis de tout commentaire.
J'ai un fichier avec ce format:
a | rest of first line
b | rest of second line
b | rest of third line
c | rest of fourth line
d | rest of fifth line
d | rest of sixth line
Le contenu réel varie, tout comme le délimiteur. Le contenu n'est que du texte. Le délimiteur n'apparaît qu'une fois par ligne. Pour ce puzzle, n'hésitez pas à modifier le délimiteur, par exemple, utilisez "%" comme délimiteur.
Sortie désirée:
a | rest of first line
b | rest of second line % rest of third line
c | rest of fourth line
d | rest of fifth line % rest of sixth line
J'ai déjà des scripts ruby et awk pour fusionner cela, mais je soupçonne qu'il est possible d'avoir un court oneliner. c'est-à-dire une doublure qui peut être utilisée avec des tuyaux et d'autres commandes sur la ligne de commande. Je ne peux pas le comprendre, et mon propre script est trop long pour simplement compresser sur la ligne de commande.
Les caractères les plus courts sont préférés. L'entrée n'est pas nécessairement triée, mais nous souhaitons uniquement fusionner les lignes consécutives avec les premiers champs correspondants. Il y a un nombre illimité de lignes avec les premiers champs correspondants. Le champ 1 peut être n'importe quoi, par exemple des noms de fruits, des noms propres, etc.
(Je fonctionne sur MacOS, donc je suis personnellement le plus intéressé par les implémentations qui fonctionnent sur Mac).
Voici un deuxième exemple / test. Remarquez "|" est le délimiteur. L'espace avant le "|" est hors de propos, et si le renvoi doit être considéré comme faisant partie de la clé. J'utilise "%" comme délimité dans la sortie, mais encore une fois, n'hésitez pas à changer le délimiteur (mais n'utilisez pas de crochets).
Contribution:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination
whom|[possessive] whose
whom|[subjective] who
whoever|[objective] whomever
whoever|[possessive] whosever
who|[possessive] whose
who|[objective] whom
Sortie désirée:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
whoever|[objective] whomever%[possessive] whosever
who|[possessive] whose%[objective] whom
la source
["A|some text", "B|other text", "A|yet some other text"]
n'est pas une entrée souhaitée à tester, car les mots clés pourA
ne sont pas l'un après l'autre dans la liste.Réponses:
Rétine , 17 octets
Noté en octets codés ISO 8859-1.
Utilise
;
au lieu de|
comme séparateur de champ d'entrée.Essayez-le en ligne.
la source
V ,
1613 octetsEssayez-le en ligne!
Tu as dit
J'ai donc choisi
|
comme délimiteur. Si ce n'est pas valide, faites-le moi savoir et je le changerai.Explication:
la source
Perl
-0n
, 2 + 43 = 45 octetsDémo:
la source
SQL (PostgreSQL),
4372 octetsCela tire parti de la fonction d'agrégation string_agg pratique dans PostgreSQL. L'entrée provient d'une table appelée
T
avec 2 colonnesA
etB
. Pour mieux répondre à la question, j'ai inclus de commander pour charger les données d'un fichier dans la table. Le fichier l'estT
aussi. Je n'ai pas compté l'instruction create table.La sortie ne sera pas ordonnée, mais si c'est un problème, elle peut être corrigée avec un
ORDER BY A
SQLFiddle ne voulait pas jouer pour moi, mais c'est ce que j'obtiens dans ma configuration.
la source
C, 127 octets
Fonctionne avec gcc. Délimiteur remplacé par
/
. Prend l'entrée de stdin et écrit la sortie dans stdout, donc appelez avec la redirection d'entrée./a.out <filename
Non golfé:
la source
Pyth - 15 octets
Faire quelques hypothèses sur le problème changera lorsque OP clarifiera.
Essayez-le en ligne ici .
la source
Python 3 - 146 octets
L'entrée est le nom de fichier ou le chemin d'accès au fichier, la sortie est vers stdout. Pourrait être beaucoup plus court si je pouvais prendre l'entrée comme texte brut à partir de la ligne de commandePrend les entrées de stdin et les sorties vers stdin. Configuration avec séparateur
"|"
. Pour tester le premier exemple d'entrée, utilisez le séparateur" | "
la source
Java 7, 167 octets
Il peut probablement être joué plus en utilisant une approche différente.
REMARQUE: la méthode ci-dessus crée et renvoie un
HashMap
avec les paires clé-valeur souhaitées. Cependant, il ne l'imprime pas dans la sortie exacte comme dans la question OP avec|
comme délimiteur de sortie entre les clés et les nouvelles valeurs. À en juger par la réponse SQL de MickeyT où il a renvoyé une table de base de données, je me suis dit que c'était autorisé; sinon, plus d'octets doivent être ajoutés pour une fonction d'impression.Code non testé et testé:
Production:
la source
PowerShell, 85 octets
Les chaînes sont fusionnées à l'aide de la table de hachage:
Exemple
Étant donné que PowerShell ne prend pas en charge la redirection stdin via
<
, je suppose que ceGet-Content .\Filename.txt |
sera utilisé comme méthode d'E / S par défaut.Production
la source
APL, 42 caractères
la source
⌸
n'est pas un octet dans l'encodage APL.Sed, 55 octets
Essai :
la source
q / kdb +, 46 octets
Solution:
Exemple:
Explication:
la source