Instructions
Barry n'est pas un bon développeur backend en charge d'une petite API qui devrait vous donner des informations sur les achats effectués dans la boutique d'un client. Cependant, il n'a pas fait un excellent travail et votre patron vous dit de le réparer côté client à la place. Idéalement , vous devriez recevoir des valeurs séparées par des virgules, comme 927,2,45,90
qui correspondent à quelque chose comme item_id
, item_amount
, unit_price
,total
Dans ce premier puzzle que nous sur les soins que item_id
et , item_amount
mais nous avons besoin des autres champs en place pour présenter le problème. Barry a parfois des choses mélangées et retourne le bruit dans le cadre de la sortie, il obtient également le mauvais de l' ordre, le retour noise
, noise
, unit_price
, total
, item_id
, item_amount
.
Ta tâche
Vous devez stocker dans une carte (ou une structure similaire) les paires de item_id
et item_amount
indépendamment du fait que Barry les renvoie correctement ou non et imprimer chaque élément dans une nouvelle ligne avec le moins de caractères possible. (Le stockage n'est pas obligatoire, nous nous soucions juste de la sortie)
Exemple d'entrée (formats mixtes corrects et salissants)
103,2,50,100
106,1,900,900
459,40,150,300,67,2
4,20,30,6000
En d'autres termes, l'entrée sera soit a,b,x,x
ou x,x,x,x,a,b
où ce qui nous intéresse est a
& b
. Vous devez fournir du code en supposant que nous avons une variable appelée G
(ou tout autre nom) avec toutes les lignes de csv.
Exemple de sortie
103,2
106,1
67,2 //This one was messy
4,20
Tolérance
Il existe une certaine marge de tolérance en ce qui concerne la réponse. Les réponses dans des formats similaires mais respectant les valeurs correctes seront également acceptées. Formats comme [a,b]
, (a,b)
ou {a,b}
sont valides, maisa,b
on préfère.
Bien que le premier casse-tête ait rencontré une acceptation mitigée en raison du fait qu'il était facile et rapide à résoudre, j'ai également estimé que certaines personnes l'appréciaient également. Je vais donc continuer à faire des quickgolfs pour l'instant
x,x,x,x
etx,x,x,x,x,x
oùx
désigne un nombre?Réponses:
Pyth, 10 octets
Essayez-le en ligne: Pyth Compiler / Executor
(Les 4 premiers caractères
=G.Q
lisent toutes les données et les stockentG
)Explication
la source
Perl, 24
Exemple:
la source
Python 3,
123767262 octetsJe suis un nouveau venu, je dois commencer quelque part ...
Avec les suggestions de xnor et DLosc (62 octets):
la source
for
peuvent être toutes sur la même ligne en Python, tant qu'il n'y a pas d'autre instruction de bloc dans le corps.for
pour éviter les retraits. Le conditionnel[0,4][...]
peut être raccourci en4*(...)
utilisant le fait que bools est égal à 0/1. De plus, si vous écrivez end[x:x+2]
tant qued[x:][:2]
, même si un caractère est plus long, vous évitez d'enregistrer l'expression pourx
dans une variable.Sed, 32 octets
Cela supprime tout jusqu'à la 4ème virgule s'il y en a un. Ensuite, il supprime tout de la 2e virgule (qui était peut-être auparavant la 6e).
Et j'ai même réussi à justifier à droite!
la source
Javascript, 44 octets
En supposant l'entrée en variable
G
.Edit: Je viens de réaliser, cela ressemble beaucoup à la solution Perl de Nutki.
Démo d'extrait:
la source
Scala, 68 octets
- MrBones
Scala,
4670 octetsModifier: imprimer le résultat
Démo
la source
G.map{k=>val x=k.split(",");println((x++x).slice(4,6).mkString(","))}
G.map(_.split(",")).map(x=>println((x++x).slice(4,6).mkString(",")))
CJam,
181514 octetsEssayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source
Shell POSIX, 30 octets
En supposant que POSIX
sed
etcut
sont présents:Duplique la ligne, laissant les données d'intérêt prêtes à être extraites des champs 5 et 6.
la source
Javascript,
1171129995847671 octetsJS Fiddle
la source
;
par,
dans le corps de la boucle et donc retirer les bretelles{
et}
for of
vous pouvez économiser 3 octets. Cela fonctionne dans n'importe quel navigateur moderne.for(r of q=G.split('\n'))s=r.split(','),console.log(s[t=s[4]?4:0],s[t+1])
Pip , 12 + 1 = 13 octets
Utilise l'
-l
indicateur, qui donne la sortie sous forme de listes de nombres séparés par des espaces sur chaque ligne. *Explication:
g
. Comme ilg
est normalement initialisé à partir des arguments de ligne de commande, vous pouvez également y placer l'entrée pour les mêmes résultats.^',
divise (chaque chaîne) la liste par des virgules.M
mappe une fonction à chaque élément du résultat._@[4 5]
définit une fonction lambda. L'argument de la fonction est représenté par_
;@[4 5]
renvoie une liste de ses 4e et 5e éléments. Si la liste comporte six éléments, ce seront les deux derniers. S'il en a quatre, les indices s'enroulent et le résultat est donc les deux premiers. (Par exemple"abcd"@4 == "abcd"@0 == "a"
.)[[103 2] [106 1] [67 2]]
, qui est imprimée automatiquement à la fin du programme. Le-l
drapeau rejoint chaque sous-liste sur l'espace, puis le tout sur la nouvelle ligne, le résultat est donc le suivant:* Actuellement. Je peux changer ce comportement, mais je prévois toujours d'avoir un indicateur qui fait la même chose.
la source
Perl, 37
35
caractères+2
pour-p
et-l
. Je ne sais pas s'il y a une approche en Perl qui battrait la solution de @ nutki , mais j'ai pensé que je publierais cette idée que j'avais quand même.Courir avec:
la source
bash, 54
la source
C, 95 octets
Le code est simple. Voici la version non golfée:
Testez-le ici
la source
Rubis, 53
ou est bon.
la source