Você não odeia quando deseja copiar e colar uma lista de números (vetor, matriz ...), de um programa para outro, mas o formato em que você tem os números não corresponde ao formato em que você precisa ?
Por exemplo, no MATLAB, você pode ter uma lista separada por espaços como esta:
[1 2 3 4 5] (you can also have it comma separated, but that's not the point)
No Python, você precisará inserir vírgulas para tornar essa lista uma entrada válida; portanto, você precisará convertê-la para
[1, 2, 3, 4, 5]
para fazer funcionar. Em C ++, você pode querer algo como:
{16,2,77,29}
e assim por diante.
Para simplificar a vida de todos, vamos criar um conversor de lista, que pega uma lista em qualquer formato * e gera uma lista em outro formato especificado.
Os colchetes válidos são:
[list]
{list}
(list)
<list>
list (no surrounding brackets)
Os delimitadores válidos são:
a,b,c
a;b;c
a b c
a, b, c <-- Several spaces. Must only be supported as input.
a; b; c <-- Several spaces. Must only be supported as input.
a b c <-- Several spaces. Must only be supported as input.
Observe que a entrada pode ter qualquer número de espaços entre os números, mas a saída pode optar por ter zero espaços (se ,
ou ;
for usado como delimitador) ou um único espaço (se for delimitado por espaço).
Além da lista de entrada, haverá uma sequência (ou dois caracteres) que define o formato de saída. A cadeia de formato irá primeiro ser o tipo de suporte de abertura (apenas), [
, (
, <
, {
ou (o último é um único espaço utilizado quando não há nenhum suporte circundante). O tipo de colchete será seguido pelo tipo de delimitador
,
, ;
ou (o último é um espaço único). Os dois caracteres do formato de entrada devem ser tomados como um único argumento (sequência ou dois caracteres consecutivos) na ordem descrita acima.
Alguns exemplos de cadeias de formato:
[, <-- Output format: [a,b,c]
{; <-- Output format: {a;b;c}
<-- Two spaces, output list has format: a b c
Regras:
- A saída não pode ter espaços à esquerda
- A saída pode ter espaços à direita e uma nova linha
- A saída deve ser apenas a lista de números, não
ans =
ou similar
- A saída deve ser apenas a lista de números, não
- A entrada será uma lista de números inteiros ou decimais (positivos e negativos (e zero)) e uma sequência de dois caracteres
- Se a entrada consistir apenas em números inteiros, a lista de saída deverá ter apenas números inteiros. Se a lista de entrada consistir em números inteiros e decimais, todos os números de saída poderão ser números decimais. (É opcional manter os números inteiros como números inteiros)
- O número máximo de dígitos após o ponto decimal que deve ser suportado é 3.
- A entrada será dois argumentos. Ou seja, os números estão em um argumento e a string de formato é um único argumento.
- O código pode ser um programa ou função
- A entrada pode ser argumento de função ou STDIN
Alguns exemplos:
1 2 3 4
[,
[1,2,3,4]
<1; 2; 3>
; <-- Space + semicolon
1;2;3
not valid: 1.000;2.000;3.000 (Input is only integers => Output must be integers)
{-1.3, 3.4, 4, 5.55555555}
[,
[-1.300,3.400,4.000,5.556] (5.555 is also valid. Rounding is optional)
also valid: [-1.3,3.4,4,5.55555555]
O código mais curto em bytes vence. Como sempre, o vencedor será selecionado uma semana a partir do dia em que o desafio foi lançado. As respostas postadas mais tarde ainda podem vencer se forem mais curtas que o vencedor atual.
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
_
para denotar elementos negativos. :(Respostas:
CJam, 27 bytes
Experimente aqui.
Explicação
fonte
JavaScript (ES6), 75
82Como uma função anônima
Edit: 2 bytes salvos thx @ user81655 (e mais 5 apenas analisando)
Snippet de teste
fonte
CJam,
3534 bytesTeste aqui.
Espera o formato na primeira linha e a lista na segunda.
Explicação
fonte
Pitão, 33 bytes
Experimente on-line: Demonstration or Test Suite
Explicação:
fonte
PowerShell,
1081009585 bytes(consulte o histórico de revisões para versões anteriores)
Golfou outros 15 bytes removendo
$b
e$s
variáveis e alterando os parênteses na cadeia interna.Isso recebe a entrada como duas strings e as armazena em ,
$i
e$z
então construímos uma nova string de saída. O interno analisa-split
s$i
com um regex para selecionar apenas dígitos numéricos e, em seguida,-join
volta com o delimitador solicitado. Concatenamos isso com o primeiro caractere da entrada do delimitador (por exemplo,[
) e o fechamos com a indexação em uma string com base no valor ASCII do primeiro caractere e em alguns truques de formulação. O exterior.Trim()
remove todos os espaços iniciais ou finais.fonte
"]})>"["[{(< ".IndexOf($b[0])]
por algo assim' }) >]'[($b[0]-32)%6]
. A($b[0]-32)%6
dá-lhe0,2,4,5,1
para abrir personagens do suporte, que você pode usar para índice para a seqüência de colchete de fechamento' }) >]'
. Pode haver uma "fórmula" mais curta, mas isso parece bom o suficiente.()
estar um ao lado do outro, mas os outros colchetes têm um caractere entre eles, então fui com a indexação. Obrigado!String.Replace()
em vez do-replace
operador iria comprar mais 2 bytes (sem necessidade de escapar ou definir uma classe de caráter com[]
).Replace('[]{}()<>;,',' ')
texto não capta caracteres individuais, mas tenta combinar o todo simbólico, que não existe. Nós precisaríamos usar o Regex.Replace , que envolve uma[regex]::
chamada do .NET e, em vez disso, aumentaria o código.-ne''
vez de|?{$_}
.Python 2, 96 bytes
Ligue como:
Saída:
fonte
JavaScript (ES6),
829211692 bytesUma função anônima, execute-a assim
Provavelmente isso pode ser jogado muito longe ..
Ungolfed
fonte
The input will be a list of integer or decimal numbers (both positive and negative (and zero)), and a string of two characters
. Corrigido, obrigadoMathematica, 108 bytes
O Mathematica geralmente é desajeitado com entradas de string, a menos que a string seja interpretada como um texto.
Explicação
StringCases[t,NumberString]
retorna a lista de seqüências numéricas.Riffle
insere os separadores entre os números./.Thread[c@"[ {<(" -> c@"] }>)"])
substitui o "suporte" esquerdo pelo suporte direito.<>
é a forma infix deStringJoin
. Cola as substrings.fonte
Matlab, 85 bytes
Exemplo de uso:
fonte
Julia, 95 bytes
Esta é uma função
f
que aceita duas strings e retorna uma string.Ungolfed:
fonte
Utilitários Bash + GNU, 90
fonte