Reduza a lista para um número final

9

Entradas

Uma lista (matriz) de números ou seqüências numéricas, se isso facilitar. Você pode assumir que sempre haverá pelo menos dois elementos na lista e cada elemento será um número natural (número inteiro maior que zero).

Saídas

Um único número, ou novamente, uma sequência numérica.

Problema

A idéia é reduzir a lista de números removendo o último dígito do maior número no estágio atual da lista, terminando com um número (apenas um número deve ser retornado, mesmo se houver várias instâncias)

Exemplo

[123,343,121,76,465,786] -- The last digit in 786 is dropped, so it becomes 78
[123,343,121,76,465,78]  -- New largest number is 465, so the 5 is dropped, making it 46
[123,343,121,76,46,78]   -- Repeat until left with one number
[123,34,121,76,46,78]
[12,34,121,76,46,78]
[12,34,12,76,46,78]
[12,34,12,76,46,7]
[12,34,12,7,46,7]
[12,34,12,7,4,7]
[12,3,12,7,4,7]
[1,3,1,7,4,7]            -- If there are multiple max numbers, you **must** remove the last digit from all of them
[1,3,1,4]
[1,3,1]
[1,1]                    -- You have your answer when there is one number, or multiple numbers that are equal
1                        -- Result

Lacunas

Aplicam-se brechas padrão

Outras restrições

Seu programa deve funcionar para qualquer lista de números aleatórios (dentro da razão do curso)

Casos de teste

[24,72,4]
[24,7,4]
[2,7,4]
[2,4]
[2]
2

[14, 7]
[1, 7]
[1]
1

[1278,232,98273,2334]
[1278,232,9827,2334]
[1278,232,982,2334]
[1278,232,982,233]
[127,232,982,233]
[127,232,98,233]
[127,232,98,23]
[127,23,98,23]
[12,23,98,23]
[12,23,9,23]
[12,2,9,2]
[1,2,9,2]
[1,2,2]
[1]
1

Pontuação

Isso é , então a resposta mais curta em todos os idiomas vence!

Henry
fonte
11
Por favor me avise se eu perdi alguma coisa. Primeira pergunta.
Henry
14
Não sei se é tarde demais para mudar, mas a pergunta pode ser melhor se tivermos que produzir cada estágio. Eu acho que as respostas serão bem diretas caso contrário.
DLosc 6/07
8
Como ninguém mais o mencionou, esse é o tipo de coisa que frequentemente seria pega na caixa de areia .
James
11
Você pode adicionar casos de teste em que a resposta não seja o primeiro dígito da primeira entrada da lista?
JAD
5
A maneira como leio esta pergunta é a resposta , o que faz com que todas as respostas postadas[12, 123, 124] estejam erradas . 12
Ørjan Johansen

Respostas:

4

Python 2 , 24 bytes

-4 bytes graças a notjagan.

lambda l:min(zip(*l)[0])

Experimente online!

totalmente humano
fonte
2
Isso pode ser reduzido em 4 bytes, mantendo a mesma idéia usando min(zip(*l)[0]).
notjagan
3

Mathematica, 29 bytes

Min[First@*IntegerDigits/@#]&
J42161217
fonte
3

Japonês , 8 6 5 bytes

-1 byte graças a @Shaggy

n g g

Recebe a entrada como uma matriz de seqüências numéricas. Experimente online!

Explicação

        // implicit input: array of strings
n       // sort the array
  g     // get the first element
    g   // get the first character
        // implicit output
Justin Mariner
fonte
5 bytes : classifique a matriz, obtenha o primeiro elemento, obtenha o primeiro caractere.
Shaggy
@ Shaggy Oh duh, eu totalmente mais complicado este. Obrigado!
Justin Mariner
Não tem problema :) n v gtambém funcionaria para 5 bytes. Bem-vindo ao Japt, a propósito.
Shaggy
2

05AB1E , 3 bytes

€нW

Experimente online!

Emigna
fonte
Falha em [12,23,12].
Olivier Grégoire
@ OlivierGrégoire: Como? A remoção dos dígitos na ordem 3,2,2,2,1resulta em 1 conforme o esperado.
Emigna
Meu mal, eu interpretei errado. Veja o comentário anterior .
Olivier Grégoire
2

PHP , 45 bytes

<?foreach($_GET as$v)$r[]=$v[0];echo min($r);

Experimente online!

Jörg Hülsermann
fonte
Falha em [12,23,12].
Olivier Grégoire
@ OlivierGrégoire [12,23,12] -> [12,2,12] -> [1,2,12] -> [1,2,1] -> [1,1] -> [1] -> 1 na minha opinião é correta
Jörg Hülsermann
Meu mal, eu interpretei errado. Veja o comentário anterior .
Olivier Grégoire
2

V , 11 , 5 bytes

ÚxV}p

Experimente online!

Eu estava fazendo esse waaay mais complicado do que realmente é. Essa resposta simplesmente classifica cada linha por valores ASCII e, em seguida, retorna o primeiro caractere. Como essa é uma resposta gentil ou chata, aqui está uma resposta mais interessante que realmente implementa o algoritmo descrito originalmente:

V , 11 bytes

òún
/äîä
Lx

Experimente online!

James
fonte
Eu também estava quando fiz a pergunta. Sua resposta original era como eu mais esperava. Vadio.
Henry
2

Geléia ,  3  2 bytes

ṂḢ

Um programa completo que pega uma lista de listas de caracteres (strings) e imprime o resultado.

Experimente online!

Como?

Só precisamos retornar o menor dígito inicial ...

ṂḢ - Main link: list of lists of characters
Ṃ  - minimum (lexicographical ordering ensures this will start with the minimal digit)
 Ḣ - head (get that first digit character)
Jonathan Allan
fonte
Não tem problema, isso acontece.
Jonathan Allan
2

JavaScript (ES6), 17 bytes

Recebe entrada como uma matriz de seqüências de caracteres.

a=>a.sort()[0][0]

Tente

Insira uma lista de números separados por vírgula.

o.innerText=(f=
a=>a.sort()[0][0]
)((i.value="1278,232,98273,2334").split`,`);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>

Shaggy
fonte
1

,,,, 3 bytes

⫰1⊣

Explicação

⫰1⊣

⫰    pop the whole stack and push the minimum element
 1   push 1
  ⊣  pop the minimum and 1 and push the first character of it
totalmente humano
fonte
1

Braingolf , 17 bytes

VVR{Mvd<M&$_R}vvx

Experimente online!

Explicação

VVR{Mvd<M&$_R}vvx  Implicit input from commandline args
VVR                Create stack2 and stack3, return to stack1
   {.........}     Foreach item in stack..
    M              ..Move item to next stack
     v             ..Switch to next stack
      d            ..Split item into digits
       <M          ..Move first item to next stack
         &$_       ..Clear stack
            R      ..Return to stack1
              vv   Switch to stack3
                x  Reduce to lowest value
                   Implicit output of last item on stack

Em outras palavras, ele constrói uma pilha que consiste apenas no primeiro dígito de cada item e gera o menor valor.

Esse desafio me deu um monte de idéias úteis para os integrados adicionarem ao Braingolf, e agora, graças à adição do loop foreach "especial", Braingolf pode fazê-lo em 5 bytes:

Braingolf , 5 bytes [não concorrente]

(d<)x

Explicação

(d<)x  Implicit input from commandline args
(..)   Special foreach loop, iterates over the stack, moving each item to a special
       Sandboxed stack environment, and prepends the last item of the sandboxed
       stack to the real stack at the end of each iteration
 d<    Split into digits, move first digit to end of stack
    x  Reduce to lowest value
       Implicit output of last item on stack

Experimente online!

Normalmente sou contra a adição de componentes internos apenas para concluir um desafio, mas posso ver uma infinidade de usos para o novo (...)loop foreach, por isso não considero realmente adicionar um recurso apenas para esse desafio.

Skidsdev
fonte
Falha em [12,23,12]. A saída esperada é 2, você retornou 1.
Olivier Grégoire
@ OlivierGrégoire A saída esperada disso é 1:[12,23,12] > [12,2,12] > [1,2,1] > [1,1]
Skidsdev 07/07
Meu mal, eu interpretei errado. Veja o comentário anterior .
Olivier Grégoire
0

Pip , 5 bytes

Leva a lista de números de entrada como argumentos de linha de comando.

@@SSg

Experimente online!

Alternativamente:

MN@Zg

Experimente online!

Explicações

Nos dois programas, gestá a lista de argumentos da linha de comando.

@@SSg

SSclassifica usando comparação de cadeias, colocando assim os números com os primeiros dígitos menores primeiro, independentemente de suas magnitudes. Unary @fornece o primeiro elemento de uma lista ou escalar. Nós o aplicamos duas vezes para obter o primeiro dígito do primeiro número após a classificação.

    g  [24 72 491]
  SS   [24 491 72]
 @     24
@      2

Alternativamente:

MN@Zg

Zé zip; sua versão unária pode ser usada para transpor uma lista. O primeiro elemento da lista transposta é uma lista dos primeiros dígitos de todos os números. @obtém essa lista de dígitos; MNleva o seu mínimo.

    g  [24 72 491]
   Z   [[2 7 4] [4 2 9]]
  @    [2 7 4]
MN     2
DLosc
fonte
0

PHP, 27 bytes

<?=substr(max($_GET),0,-1);

(Uau, entendi totalmente a pergunta. Isso não funciona. Será editado mais tarde.)

Liren
fonte
0

Pitão , 9 7 bytes

hSmsh`d

Experimente online!

Explicação

Isso basicamente retorna o menor dígito inicial.

       Q    # Implicit input
  msh`d     # For each number in Q, convert to string, take the first character, convert to integer
hS          # Return the minimum
Jim
fonte
0

Python 3 , 33 bytes

lambda l:min(str(x)[0]for x in l)

Experimente online!

@DJMcMayhem e @totallyhuman têm soluções melhores, mas a minha assume entrada numérica em vez de string.

Simon
fonte
0

Pitão, 3 bytes

hhS

Entrada é uma lista de representações de sequência de números.

Experimente Online

Explicação:

hhS
    # Q=input
  S # Sort Q
 h  # First Element of sorted list
h   # First element of string
    # Implicitly print result
jacoblaw
fonte