Maior e menor número possível

16

Tarefa

Dada uma matriz de números não negativos, produza o maior e menor número possível que pode ser formado juntando-os.

Regras

Entrada, Saída pode estar em qualquer formato conveniente.

A matriz pode ter no máximo 1 número decimal.

Exemplos

input:[22,33,44,55.55,33]
output:4433332255.55,55.5522333344

input:[34,900,3,11,9]
output:990034311,113349009

input:[99.93,9,3,39]
output:939399.93,99.933399

input:[45.45,45,45,45]
output:45454545.45,45.45454545

input:[12,21,34,43,45.1]
output:4334211245.1,45.112213443

Isso é código-golfe, então o código mais curto vence.

Vedant Kandoi
fonte
1
A primeira saída não seria: 4422333355.55, 55.5544333322? Esses são menores e maiores, respectivamente.
ouflak
@ouflak, você deve produzir o maior e o menor.
Vedant Kandoi
1
Deixa pra lá, vê agora. Ficou confuso com a casa decimal.
ouflak
Seria [[55.55,22,33,33,44],[44,33,33,22,55.55]]um formato de saída aceitável?
Shaggy
1
Qualquer maneira está bem @ Jordânia
Vedant Kandoi

Respostas:

4

Python 2 , 84 80 78 76 bytes

lambda a:[''.join(sorted(a,key=lambda s:'.'in s or s+s)[::i])for i in[-1,1]]

Experimente online!

-2 bytes, graças a Arnauld

TFeld
fonte
3

05AB1E , 11 bytes

œJΣ'.¡ï}Á2£

Experimente online! ou como um conjunto de testes

Explicação

 œ             # get permutations of input
  J            # join each
   Σ    }      # sort by
    '.¡        # splitting into [before decimal, after decimal]
       ï       # and converting each to int
         Á     # rotate the result right
          2£   # and take the first 2 values
Emigna
fonte
Pena que não temos cast to float. Lembro-me que havia um no Legacy, mas eu só olhei para cima e, aparentemente, era um stringified cast to float, que é bastante inútil desde que você quer flutua em vez de cordas para classificar .. xD
Kevin Cruijssen
@KevinCruijssen: Sim. Nós teve um is_number, mas infelizmente não to_number.
Emigna
3

JavaScript (ES6), 68 66 bytes

a=>[1,-1].map(n=>a.sort((a,b)=>[a%1||a]+b<[b%1||b]+a?n:-n).join``)

Experimente online!

Quão?

Usamos o seguinte teste para comparar dois valores na matriz de entrada:

[a % 1 || a] + b < [b % 1 || b] + a

x % 1 || xxxx inalterado.

A expressão [x % 1 || x] + y coage o resultado acima a uma string e concatena-o com o outro valor.

Se houver um número decimal na lista, ele sempre deve ser considerado como o menor valor. Ao aplicar nossa conversão, um número decimal é transformado em uma sequência iniciada por "0.", lexicograficamente ordenada antes de qualquer outra coisa.

Exemplos:

  a |   b | [a%1||a]+b | [b%1||b]+a
----+-----+------------+------------
  4 |   5 | "45"       | "54"
 10 |  11 | "1011"     | "1110"
  8 |  80 | "880"      | "808"
  7 | 9.5 | "79.5"     | "0.57"
Arnauld
fonte
3

Japonês, 14 11 bytes

á m¬ñn é v2

Tente

1 byte economizado graças ao Luis , por favor, +1sua solução também.

á               :Permutations
  m             :Map
   ¬            :  Join
    ñ           :Sort by
     n          :  Converting each to a number
       é        :Rotate right
         v2     :Remove & return the first 2 elements
Shaggy
fonte
Ok, isso é melhor !! Droga!! que éficou escondido esse tempo todo !!
Luis felipe De jesus Munoz
3

Japonês , 14 11 10 bytes

á m¬ñn gJò

Experimente online!

Luis felipe De jesus Munoz
fonte
Agradável. Eu tinha á ®¬nÃnpara a primeira linha - chutando a mim mesmo que eu não pense em seu caminho.
Shaggy
12 bytes , usando o -hsinalizador
Shaggy
11 bytes , usando o -gsinalizador Também funciona com em ívez deï .
Shaggy
@ Shaggy Excelente! Obrigado!!
Luis felipe De jesus Munoz
Dang! Parece que desisti em breve; muito bem feito.
Shaggy
3

Gelatina , 6 bytes

Œ!VṢ.ị

Experimente online!

Explicação:

Œ!VṢ.ị Arguments: x
Œ!     Permutations of x
  V    Concatenate the representations of each permutation's elements and evaluate the result as Jelly code
   Ṣ   Sort
    .ị Get element at index 0.5, i.e. elements at indices 0 (last) and 1 (first)
Erik, o Outgolfer
fonte
Eu nunca programa em Jelly, mas .ịé uma maneira muito legal de obter o primeiro e o último item de uma lista. Boa resposta! +1 de mim.
Kevin Cruijssen
1
@KevinCruijssen Na verdade, ele recebe o último e o primeiro item. : P
Erik the Outgolfer
Também nunca programei em Jelly, mas estou confuso sobre como .ịfunciona. Se eu estiver lendo os documentos corretamente, acho que obtém o elemento y no piso (x) e no teto (x), e .é 0.5. Isso não significa que obterá elementos de y no índice 0 e 1?
Cowabunghole
O Jelly 1 é indexado? Isso explicaria esse comportamento, mas não vejo nada disso nos documentos.
Cowabunghole
1
@ Cowabunghole Sim, a Jelly é indexada em 1.
Erik the Outgolfer
3

Ruby , 56 45 bytes

->a{a.permutation.map{|p|p.join.to_f}.minmax}

Experimente online!

-11 bytes, obrigado Jordan

Travis
fonte
1
Bom trabalho! Você pode salvar 2 bytes, largando os parênteses em torno de seu argumento ( ->a{...) e outra 9 usando o prático minmaxmétodo: tio.run/...
Jordan
2

Pitão, 13 12 bytes

hM_BSvsM.p`M

Saídas no formulário [smallest, largest]. Experimente online aqui ou verifique todos os casos de teste de uma vez aqui .

hM_BSvsM.p`MQ   Implicit: Q=eval(input())
                Trailing Q inferred
          `MQ   Stringify all elements of Q
        .p      Generate all permutations of the above
      sM        Concatenate each permutation
     v          Evaluate each as a number
    S           Sort them
  _B            Pair the sorted list with its reverse
hM              Take the first element of each, implicit print

Editar: salvou um byte removendo a stringification da função de mapeamento. Versão anterior: hM_BSmvs`Md.p

Sok
fonte
2

Perl 6 , 41 bytes

{.max,.min}o+<<*.permutations.map(*.join)

Experimente online!

Alternativas:

{.max,.min}o+<<*.permutations.map:{.join}
{.max,.min}o{[map +*.join,.permutations]}
{.max,.min}o{+<<map *.join,.permutations}
Nwellnhof
fonte
1

Casca , 10 bytes

§,▼▲morṁsP

Experimente online ou verifique tudo!

Explicação

§,▼▲m(rṁs)P  -- example input: [2,3,1.1]
          P  -- permutations: [[2,3,1.1],[3,2,1.1],[1.1,3,2],[3,1.1,2],[1.1,2,3],[2,1.1,3]]
    m(   )   -- map the following
                (example with [1.1,2,3])
       ṁs    -- | show each and join: "1.123"
      r      -- | read: 1.123
             -- : [231.1,321.1,1.132,31.12,1.123,21.13]
§,           -- fork and join as tuple
  ▼          -- | min: 1.123
   ▲         -- | max: 321.1
             -- : (1.123,321.1)
ბიმო
fonte