Ridurre l'elenco a un numero finale


9

ingressi

Un elenco (array) di numeri o stringhe numeriche, se ciò rende più semplice. Puoi presumere che ci saranno sempre almeno due elementi nell'elenco e ogni elemento sarà un numero naturale (intero più grande di zero).

Uscite

Un singolo numero o, ancora, una stringa numerica.

Problema

L'idea è di ridurre l'elenco dei numeri rimuovendo l'ultima cifra del numero più grande in quella fase corrente dell'elenco, terminando infine con un numero (dovrebbe essere restituito un solo numero, anche se ci sono più istanze)

Esempio

[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

scappatoie

Si applicano scappatoie standard

Altri vincoli

Il tuo programma deve funzionare per qualsiasi elenco di numeri casuali (a ragione ovviamente)

Casi test

[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

punteggio

Questo è , quindi vince la risposta più breve in ogni lingua!


1
Per favore fatemi sapere se ho perso qualcosa. Prima domanda.
Henry,

14
Non so se è troppo tardi per cambiare, ma la questione potrebbe essere migliore se abbiamo dovuto uscita ogni fase. Penso che le risposte saranno piuttosto semplici altrimenti.
DLosc,

8
Dal momento che nessun altro lo ha menzionato, questo è il tipo di cose che verrebbero frequentemente catturate nella sandbox .
James,

1
Puoi aggiungere testcase in cui la risposta non è la prima cifra della prima voce nell'elenco?
JAD,

5
Il modo in cui ho letto questa domanda la risposta per [12, 123, 124]IS 12, che rende ogni singola risposta sbagliata Ripubblicato .
Ørjan Johansen,

Risposte:






3

Japt , 8 6 5 byte

-1 byte grazie a @Shaggy

n g g

Accetta l'input come una matrice di stringhe numeriche. Provalo online!

Spiegazione

        // implicit input: array of strings
n       // sort the array
  g     // get the first element
    g   // get the first character
        // implicit output

5 byte : ordina l'array, ottieni il primo elemento, ottieni il primo carattere.
Shaggy,

@Shaggy Oh duh, ho completamente complicato questo. Grazie!
Justin Mariner,

Nessun problema :) n v gfunzionerebbe anche per 5 byte. Benvenuto a Japt, comunque.
Shaggy,



2

V , 11 , 5 byte

ÚxV}p

Provalo online!

Stavo facendo questo waaay più complicato di quanto non sia in realtà. Questa risposta ordina semplicemente ogni riga in base ai valori ASCII, quindi restituisce il primo carattere. Poiché questa è una risposta gentile o noiosa, ecco una risposta più interessante che implementa effettivamente l'algoritmo descritto in origine:

V , 11 byte

òún
/äîä
Lx

Provalo online!


Lo ero anche quando ho posto la domanda. La tua risposta originale era quella che mi aspettavo di più. Bummer.
Henry,

2

Gelatina ,  3  2 byte

ṂḢ

Un programma completo che prende un elenco di elenchi di caratteri (stringhe) e stampa il risultato.

Provalo online!

Come?

Dobbiamo solo restituire la cifra iniziale più piccola ...

ṂḢ - Main link: list of lists of characters
Ṃ  - minimum (lexicographical ordering ensures this will start with the minimal digit)
 Ḣ - head (get that first digit character)

Nessun problema, succede.
Jonathan Allan,

2

JavaScript (ES6), 17 byte

Accetta input come una matrice di stringhe.

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

Provalo

Immettere un elenco di numeri separato da virgole.

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>


1

,,, 3 byte

⫰1⊣

Spiegazione

⫰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

1

Braingolf , 17 byte

VVR{Mvd<M&$_R}vvx

Provalo online!

Spiegazione

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

In altre parole, costruisce uno stack costituito solo dalla prima cifra di ciascun elemento, quindi genera il valore più basso.

Questa sfida mi ha dato un sacco di idee utili per i builtin da aggiungere a Braingolf, e ora grazie all'aggiunta del ciclo foreach "speciale", Braingolf può farlo in 5 byte:

Braingolf , 5 byte [non competitivo]

(d<)x

Spiegazione

(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

Provalo online!

Normalmente sono contrario all'aggiunta di builtin solo per completare una sfida, ma posso vedere una moltitudine di usi per il nuovo (...)ciclo foreach, quindi non considero davvero l'aggiunta di una funzione solo per questa sfida.


Non funziona per [12,23,12]. L'output previsto è 2, hai restituito 1.
Olivier Grégoire,

@ OlivierGrégoire L'output previsto è 1:[12,23,12] > [12,2,12] > [1,2,1] > [1,1]
Skidsdev

Mio male, ho letto male. Vedi il commento precedente .
Olivier Grégoire,


0

seme , 5 byte

Prende l'elenco dei numeri di input come argomenti della riga di comando.

@@SSg

Provalo online!

In alternativa:

MN@Zg

Provalo online!

spiegazioni

In entrambi i programmi, gè l'elenco degli argomenti della riga di comando.

@@SSg

SSordina usando il confronto delle stringhe, mettendo così i numeri con le prime cifre più piccole per prime, indipendentemente dalla loro grandezza. Unario @fornisce il primo elemento di un elenco o scalare. Lo applichiamo due volte per ottenere la prima cifra del primo numero dopo l'ordinamento.

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

In alternativa:

MN@Zg

Zè zip; la sua versione unaria può essere utilizzata per trasporre un elenco. Il primo elemento dell'elenco trasposto è un elenco delle prime cifre di tutti i numeri. @ottiene quell'elenco di cifre; MNprende il suo minimo.

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

0

PHP, 27 byte

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

(Caspita, ho completamente frainteso la domanda. Questo non funziona. Verrà modificato in seguito.)


0

Pyth , 9 7 byte

hSmsh`d

Provalo online!

Spiegazione

Questo sostanzialmente restituisce la cifra iniziale più piccola.

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

0

Python 3 , 33 byte

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

Provalo online!

@DJMcMayhem e @totallyhuman hanno soluzioni migliori, ma il mio assume input numerici anziché stringhe.


0

Pyth, 3 byte

hhS

L'input è un elenco di rappresentazioni di stringhe di numeri.

Provalo online

Spiegazione:

hhS
    # Q=input
  S # Sort Q
 h  # First Element of sorted list
h   # First element of string
    # Implicitly print result
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.