Сократить список до окончательного числа


9

входные

Список (массив) чисел или числовых строк, если это облегчает задачу. Можно предположить, что в списке всегда будет как минимум два элемента, и каждый элемент будет натуральным числом (целое число больше нуля).

Выходы

Одно число или снова числовая строка.

проблема

Идея состоит в том, чтобы уменьшить список чисел, удалив последнюю цифру наибольшего числа на текущем этапе списка, в конце концов заканчивая одним номером (должно быть возвращено только одно число, даже если имеется несколько экземпляров)

пример

[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

Пробелы

Применяются стандартные лазейки

Другие ограничения

Ваша программа должна работать для любого списка случайных чисел (в пределах разумного)

Тестовые случаи

[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

счет

Это так что кратчайший ответ на каждом языке выигрывает!


1
Пожалуйста, дайте мне знать, если я что-то пропустил. Первый вопрос.
Генри

14
Незнайка , если это слишком поздно , чтобы изменить, но этот вопрос может быть лучше , если бы мы так и должны выводить каждый этап. Я думаю, что ответы будут довольно просты в противном случае.
DLosc

8
Так как никто другой не упомянул об этом, это то, что часто попадает в песочницу .
Джеймс

1
Можете ли вы добавить тестовые случаи, когда ответ не является первой цифрой первой записи в списке?
JAD

5
То, как я читаю этот вопрос, ответ на который [12, 123, 124]является 12, что делает каждый отдельный ответ неправильно .
Орджан Йохансен

Ответы:






3

Japt , 8 6 5 байт

-1 байт благодаря @Shaggy

n g g

Принимает ввод в виде массива числовых строк. Попробуйте онлайн!

объяснение

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

5 байт : сортировка массива, получение первого элемента, получение первого символа.
Лохматый

@ Шэгги О, да, я слишком усложнил этот. Спасибо!
Джастин Маринер

Нет проблем :) n v gтакже будет работать на 5 байтов. Кстати, добро пожаловать в Japt.
Лохматый


2

PHP , 45 байт

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

Попробуйте онлайн!


Терпит неудачу за [12,23,12].
Оливье Грегуар

@ OlivierGrégoire [12,23,12] -> [12,2,12] -> [1,2,12] -> [1,2,1] -> [1,1] -> [1] -> 1, на мой взгляд, правильно
Йорг Хюльсерманн

Мой плохой, я неправильно понял. Смотрите предыдущий комментарий .
Оливье Грегуар

2

V , 11 , 5 байтов

ÚxV}p

Попробуйте онлайн!

Я делал это waaay более сложным , чем это на самом деле. Этот ответ просто сортирует каждую строку по значениям ASCII, а затем возвращает самый первый символ. Так как это добрый или скучный ответ, вот более интересный ответ, который фактически реализует алгоритм, описанный изначально:

V 11 байт

òún
/äîä
Lx

Попробуйте онлайн!


Я тоже был, когда задал вопрос. Ваш первоначальный ответ был таким, каким я ожидал больше всего выглядеть. Облом.
Генри

2

Желе ,  3  2 байта

ṂḢ

Полная программа, которая берет список списков символов (строк) и печатает результат.

Попробуйте онлайн!

Как?

Нам просто нужно вернуть самую маленькую начальную цифру ...

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

Нет проблем, так бывает.
Джонатан Аллан

2

JavaScript (ES6), 17 байт

Принимает ввод в виде массива строк.

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

Попробуй это

Введите разделенный запятыми список чисел.

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

Брайнгольф , 17 байт

VVR{Mvd<M&$_R}vvx

Попробуйте онлайн!

объяснение

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

Другими словами, он создает стек, состоящий только из первой цифры каждого элемента, а затем выводит наименьший.

Эта задача дала мне несколько полезных идей для встроенных в Braingolf идей, и теперь, благодаря добавлению «специального» цикла foreach, Braingolf может сделать это за 5 байтов:

Braingolf , 5 байт [не конкурирует]

(d<)x

объяснение

(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

Попробуйте онлайн!

Обычно я против добавления встроенных функций только для выполнения одной задачи, но я вижу множество применений для нового (...)цикла foreach, поэтому я не думаю, что он добавляет функцию только для этой задачи.


Терпит неудачу за [12,23,12]. Ожидаемый результат есть 2, вы вернулись 1.
Оливье Грегуар

@ OlivierGrégoire Ожидаемый результат этого 1:[12,23,12] > [12,2,12] > [1,2,1] > [1,1]
Skidsdev

Мой плохой, я неправильно понял. Смотрите предыдущий комментарий .
Оливье Грегуар


0

Пип , 5 байт

Принимает список входных чисел в качестве аргументов командной строки.

@@SSg

Попробуйте онлайн!

С другой стороны:

MN@Zg

Попробуйте онлайн!

Пояснения

В обеих программах gесть список аргументов командной строки.

@@SSg

SSсортирует, используя сравнение строк, таким образом, номера с наименьшими первыми цифрами ставятся первыми, независимо от их величины. Унарный @дает первый элемент списка или скаляр. Мы применяем его дважды, чтобы получить первую цифру первого числа после сортировки.

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

С другой стороны:

MN@Zg

Zэто почтовый индекс; его унарная версия может быть использована для транспонирования списка. Первый элемент транспонированного списка - это список первых цифр всех чисел. @получает этот список цифр; MNберет свой минимум.

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

0

PHP, 27 байт

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

(Ух ты, совершенно неправильно понял вопрос. Это не работает. Отредактирую позже.)


0

Pyth , 9 7 байт

hSmsh`d

Попробуйте онлайн!

объяснение

Это в основном возвращает наименьшую начальную цифру.

       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

Pyth, 3 байта

hhS

Ввод - это список строковых представлений чисел.

Попробуйте онлайн

Объяснение:

hhS
    # Q=input
  S # Sort Q
 h  # First Element of sorted list
h   # First element of string
    # Implicitly print result
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.