Zredukuj listę do ostatecznej liczby

9

Wejścia

Lista (tablica) liczb lub ciągów liczbowych, jeśli to ułatwia. Możesz założyć, że na liście zawsze będą co najmniej dwa elementy, a każdy element będzie liczbą naturalną (liczba całkowita większa od zera).

Wyjścia

Pojedyncza liczba lub ponownie ciąg liczbowy.

Problem

Chodzi o to, aby zmniejszyć listę liczb, usuwając ostatnią cyfrę największej liczby na bieżącym etapie listy, ostatecznie kończąc na jednym numerze (powinna zostać zwrócona tylko jedna liczba, nawet jeśli jest wiele wystąpień)

Przykład

[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

Luki

Obowiązują standardowe luki

Inne ograniczenia

Twój program musi działać z dowolną listą liczb losowych (oczywiście w granicach rozsądku)

Przypadki testowe

[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

Punktacja

To jest wygrywa najkrótsza odpowiedź w każdym języku!

Henz
źródło
1
Daj mi znać, jeśli coś przeoczyłem. Pierwsze pytanie.
Henry
14
Nie wiem, czy jest już za późno na zmiany, ale pytanie może być lepiej, jeśli nie mają do wyjścia każdego etapu. Myślę, że w przeciwnym razie odpowiedzi będą dość proste.
DLosc
8
Ponieważ nikt o tym nie wspominał, tego rodzaju rzeczy często łapałyby się w piaskownicy .
James
1
Czy możesz dodać przypadki testowe, w których odpowiedź nie jest pierwszą cyfrą pierwszego wpisu na liście?
JAD
5
Sposób czytam to pytanie odpowiedź dla [12, 123, 124]Is 12, co czyni każdą Wysłany odpowiedź źle .
Ørjan Johansen

Odpowiedzi:

4

Python 2 , 24 bajty

-4 bajty dzięki notjagan.

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

Wypróbuj online!

całkowicie ludzki
źródło
2
Można to skrócić o 4 bajty, zachowując ten sam pomysł min(zip(*l)[0]).
notjagan
3

Mathematica, 29 bajtów

Min[First@*IntegerDigits/@#]&
J42161217
źródło
3

Japt , 8 6 5 bajtów

-1 bajt dzięki @Shaggy

n g g

Pobiera dane wejściowe jako tablicę ciągów liczbowych. Wypróbuj online!

Wyjaśnienie

        // implicit input: array of strings
n       // sort the array
  g     // get the first element
    g   // get the first character
        // implicit output
Justin Mariner
źródło
5 bajtów : Sortuj tablicę, uzyskaj pierwszy element, uzyskaj pierwszy znak.
Kudłaty
@Shaggy Oh duh, całkowicie to skomplikowałem. Dzięki!
Justin Mariner
Żaden problem :) n v gdziałałby również dla 5 bajtów. Przy okazji, witaj w Japt.
Kudłaty
2

05AB1E , 3 bajty

€нW

Wypróbuj online!

Emigna
źródło
Nie działa na [12,23,12].
Olivier Grégoire,
@ OlivierGrégoire: Jak? Usunięcie cyfr w kolejności 3,2,2,2,1powoduje 1 zgodnie z oczekiwaniami.
Emigna
Mój zły, źle odczytałem. Zobacz poprzedni komentarz .
Olivier Grégoire,
2

PHP , 45 bajtów

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

Wypróbuj online!

Jörg Hülsermann
źródło
Nie działa na [12,23,12].
Olivier Grégoire,
@ OlivierGrégoire [12,23,12] -> [12,2,12] -> [1,2,12] -> [1,2,1] -> [1,1] -> [1] -> 1 jest moim zdaniem poprawny
Jörg Hülsermann
Mój zły, źle odczytałem. Zobacz poprzedni komentarz .
Olivier Grégoire,
2

V , 11 , 5 bajtów

ÚxV}p

Wypróbuj online!

Sprawiłem, że ten dzień był bardziej skomplikowany niż w rzeczywistości. Ta odpowiedź po prostu sortuje każdą linię według wartości ASCII, a następnie zwraca pierwszy znak. Ponieważ jest to miła lub nudna odpowiedź, oto bardziej interesująca odpowiedź, która faktycznie implementuje pierwotnie opisany algorytm:

V , 11 bajtów

òún
/äîä
Lx

Wypróbuj online!

James
źródło
Ja też byłem, kiedy zadałem pytanie. Twoja oryginalna odpowiedź brzmiała tak, jak się spodziewałem. Porażka.
Henry,
2

Galaretka ,  3  2 bajty

ṂḢ

Pełny program, który pobiera listę list znaków (ciągów znaków) i wypisuje wynik.

Wypróbuj online!

W jaki sposób?

Musimy tylko zwrócić najmniejszą wiodącą cyfrę ...

ṂḢ - 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
źródło
Żaden problem, to się zdarza.
Jonathan Allan
2

JavaScript (ES6), 17 bajtów

Pobiera dane wejściowe jako tablicę ciągów.

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

Spróbuj

Wprowadź listę liczb oddzieloną przecinkami.

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>

Kudłaty
źródło
1

,,,, 3 bajty

⫰1⊣

Wyjaśnienie

⫰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
całkowicie ludzki
źródło
1

Braingolf , 17 bajtów

VVR{Mvd<M&$_R}vvx

Wypróbuj online!

Wyjaśnienie

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

Innymi słowy, konstruuje stos składający się tylko z pierwszej cyfry każdego elementu, a następnie wyprowadza najniższą.

To wyzwanie dało mi wiele przydatnych pomysłów na wbudowane dodatki, które mogę dodać do Braingolfa, a teraz dzięki dodaniu „specjalnej” pętli foreach Braingolf może to zrobić w 5 bajtach:

Braingolf , 5 bajtów [niekonkurencyjny]

(d<)x

Wyjaśnienie

(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

Wypróbuj online!

Zwykle jestem przeciwny dodawaniu wbudowanych elementów tylko po to, aby ukończyć jedno wyzwanie, ale widzę mnóstwo zastosowań dla nowej (...)pętli foreach, więc tak naprawdę nie uważam, aby dodawała funkcję tylko dla tego wyzwania.

Skidsdev
źródło
Nie działa na [12,23,12]. Oczekiwany wynik to 2: wróciłeś 1.
Olivier Grégoire,
@ OlivierGrégoire Oczekiwany wynik to 1:[12,23,12] > [12,2,12] > [1,2,1] > [1,1]
Skidsdev
Mój zły, źle odczytałem. Zobacz poprzedni komentarz .
Olivier Grégoire,
0

Pip , 5 bajtów

Pobiera listę liczb wejściowych jako argumenty wiersza polecenia.

@@SSg

Wypróbuj online!

Na przemian:

MN@Zg

Wypróbuj online!

Objaśnienia

W obu programach gznajduje się lista argumentów wiersza polecenia.

@@SSg

SSsortuje za pomocą porównania ciągów, umieszczając na początku liczby o najmniejszych pierwszych cyfrach, niezależnie od ich wielkości. Unary @daje pierwszy element listy lub skalara. Stosujemy go dwa razy, aby uzyskać pierwszą cyfrę pierwszej liczby po sortowaniu.

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

Na przemian:

MN@Zg

Zjest zip; jego jednoargumentowa wersja może służyć do transponowania listy. Pierwszym elementem transponowanej listy jest lista pierwszych cyfr wszystkich liczb. @pobiera tę listę cyfr; MNbierze swoje minimum.

    g  [24 72 491]
   Z   [[2 7 4] [4 2 9]]
  @    [2 7 4]
MN     2
DLosc
źródło
0

PHP, 27 bajtów

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

(Wow, całkowicie źle zrozumiałem pytanie. To nie działa. Będzie edytować później.)

Liren
źródło
0

Pyth , 9 7 bajtów

hSmsh`d

Wypróbuj online!

Wyjaśnienie

To w zasadzie zwraca najmniejszą cyfrę wiodącą.

       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
źródło
0

Python 3 , 33 bajty

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

Wypróbuj online!

@DJMcMayhem i @totallyhuman mają lepsze rozwiązania, ale moje zakłada dane liczbowe zamiast ciągu.

Szymon
źródło
0

Pyth, 3 bajty

hhS

Dane wejściowe to lista ciągów znaków liczb.

Wypróbuj online

Wyjaśnienie:

hhS
    # Q=input
  S # Sort Q
 h  # First Element of sorted list
h   # First element of string
    # Implicitly print result
Jakub
źródło