Instruções
Barry é um desenvolvedor de back-end não tão bom encarregado de uma pequena API que deve fornecer informações sobre compras feitas na loja de um cliente. No entanto, ele não fez um ótimo trabalho e seu chefe pede que você o conserte no lado do cliente. Idealmente, você deve receber valores separados por vírgulas, como 927,2,45,90
o que corresponde a algo como item_id
, item_amount
, unit_price
,total
Neste primeiro quebra-cabeça, nos preocupamos apenas item_id
e item_amount
precisamos dos outros campos para apresentar o problema. Barry às vezes fica coisas misturadas e retornos de ruído como parte da saída, ele também recebe o errado ordem, retornando noise
, noise
, unit_price
, total
, item_id
, item_amount
.
Sua tarefa
Você precisa armazenar em um mapa (ou estrutura semelhante) os pares de item_id
e, item_amount
independentemente de Barry os retornar corretamente ou não, e imprimir cada elemento em uma nova linha no menor número de caracteres possível. (O armazenamento não é obrigatório, apenas nos preocupamos com a saída)
Entrada de amostra (formatos corretos e confusos misturados)
103,2,50,100
106,1,900,900
459,40,150,300,67,2
4,20,30,6000
Em outras palavras, a entrada será a,b,x,x
ou x,x,x,x,a,b
onde o que nos importa é a
& b
. Você precisa fornecer o código assumindo que temos uma variável chamada G
(ou qualquer outro nome) com todas as linhas de csv.
Saída de amostra
103,2
106,1
67,2 //This one was messy
4,20
Tolerância
Existe uma certa margem de tolerância quando se trata da resposta. Respostas em formatos semelhantes, mas aderentes aos valores corretos, também serão aceitas. Formatos como [a,b]
, (a,b)
ou {a,b}
são válidos, mas a,b
é o preferido.
Embora o primeiro quebra-cabeça tivesse aceitação mista devido ao fato de ser fácil e rápido de resolver, também senti que algumas pessoas gostaram disso. Então, eu vou continuar fazendo quickgolfs por enquanto
x,x,x,x
ex,x,x,x,x,x
ondex
denota um número?Respostas:
Pitão, 10 bytes
Experimente on-line: Compilador / Executor Pyth
(Os 4 primeiros caracteres
=G.Q
lê todos os dados e os armazenaG
)Explicação
fonte
Perl, 24
Exemplo:
fonte
Python 3,
123767262 bytesEu sou um novato, tenho que começar em algum lugar ...
Com as sugestões do xnor e do DLosc (62 bytes):
fonte
for
podem estar todas na mesma linha no Python, desde que não haja outra instrução de bloco no corpo.for
para evitar recuos. A condicional[0,4][...]
pode ser reduzida para4*(...)
, usando o fato de que os bools são iguais a 0/1. Além disso, se você escreverd[x:x+2]
comod[x:][:2]
, embora com mais um caractere, evite salvar a expressão emx
uma variável.Sed, 32 bytes
Isso exclui tudo até a quarta vírgula, se houver um. Em seguida, ele exclui tudo da 2ª vírgula (que pode ter sido anteriormente a 6ª).
E eu até consegui justificar direito!
fonte
Javascript, 44 bytes
Assumindo entrada na variável
G
.Edit: Acabei de perceber, isso parece muito com a solução perl do nutki.
Demonstração de trechos:
fonte
Scala, 68 bytes
- MrBones
Scala,
4670 bytesEditar: Imprima o resultado
Demo
fonte
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 bytesExperimente online no intérprete CJam .
Como funciona
fonte
Shell POSIX, 30 bytes
Supondo POSIX
sed
ecut
está presente:Duplica a linha, deixando os dados de interesse prontos para serem extraídos dos campos 5 e 6.
fonte
Javascript,
1171129995847671 bytesJS Fiddle
fonte
;
com,
no corpo do loop e, portanto, removendo as chaves{
e}
for of
você pode salvar 3 bytes. Funciona em qualquer navegador moderno.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 bytes
Usa o
-l
sinalizador, que fornece a saída como listas de números separadas por espaço em cada linha. *Explicação:
g
. Desde ag
normalmente é inicializado a partir dos argumentos da linha de comando, você também pode inserir a entrada para os mesmos resultados.^',
divide (cada string) a lista por vírgulas.M
mapeia uma função para cada elemento no resultado._@[4 5]
define uma função lambda. O argumento para a função é representado por_
;@[4 5]
retorna uma lista de seus 4º e 5º elementos. Se a lista tiver seis elementos, esses serão os dois últimos. Se tiver quatro, os índices serão contornados e, portanto, o resultado serão os dois primeiros. (Por exemplo"abcd"@4 == "abcd"@0 == "a"
)[[103 2] [106 1] [67 2]]
, que é impressa automaticamente no final do programa. O-l
sinalizador une cada sub-lista no espaço e depois a coisa toda na nova linha; portanto, o resultado é o seguinte:* Atualmente. Posso mudar esse comportamento, mas ainda estou planejando ter alguma bandeira que faça a mesma coisa.
fonte
Perl, 37
35
caracteres+2
para-p
e-l
. Não tenho certeza se existe uma abordagem no Perl que superaria a solução da @ nutki , mas imaginei que postaria essa ideia que tinha de qualquer maneira.Correr com:
fonte
festança, 54
fonte
C, 95 bytes
O código é simples. Aqui está a versão não destruída:
Teste aqui
fonte
Ruby, 53
ou é bom.
fonte