Giảm danh sách xuống số cuối cùng


9

Đầu vào

Một danh sách (mảng) các số hoặc chuỗi số nếu điều đó làm cho nó dễ dàng hơn. Bạn có thể giả sử sẽ luôn có ít nhất hai phần tử trong danh sách và mọi phần tử sẽ là số tự nhiên (số nguyên lớn hơn 0).

Đầu ra

Một số duy nhất, hoặc một lần nữa, một chuỗi số.

Vấn đề

Ý tưởng là giảm danh sách các số bằng cách xóa chữ số cuối của số lớn nhất ở giai đoạn hiện tại của danh sách, cuối cùng kết thúc bằng một số (chỉ nên trả về một số, ngay cả khi có nhiều trường hợp)

Thí dụ

[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

Lỗ hổng

Áp dụng sơ hở tiêu chuẩn

Các ràng buộc khác

Chương trình của bạn phải hoạt động cho bất kỳ danh sách các số ngẫu nhiên (trong lý do tất nhiên)

Các trường hợp thử nghiệm

[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

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất trong mọi ngôn ngữ đều thắng!


1
Xin vui lòng cho tôi biết nếu tôi bỏ lỡ bất cứ điều gì. Câu hỏi đầu tiên.
Henry

14
Dunno nếu nó quá muộn để thay đổi, nhưng câu hỏi có thể được tốt hơn nếu chúng ta đã phải ra từng giai đoạn. Tôi nghĩ rằng câu trả lời sẽ khá đơn giản nếu không.
DLosc

8
Vì không có ai khác đề cập đến nó, đây là loại điều thường xuyên bị bắt trong hộp cát .
James

1
Bạn có thể thêm testcase trong đó câu trả lời không phải là chữ số đầu tiên của mục đầu tiên trong danh sách?
JAD

5
Cách tôi đọc câu hỏi này câu trả lời [12, 123, 124]12, làm cho mỗi câu trả lời được đăng sai .
Ørjan Johansen

Câu trả lời:






3

Japt , 8 6 5 byte

-1 byte nhờ @Shaggy

n g g

Đưa đầu vào như một mảng các chuỗi số. Hãy thử trực tuyến!

Giải trình

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

5 byte : Sắp xếp mảng, lấy phần tử đầu tiên, lấy ký tự đầu tiên.
Shaggy

@Shaggy Oh duh, tôi hoàn toàn quá phức tạp này. Cảm ơn!
Justin Mariner

Không có vấn đề :) n v gcũng sẽ làm việc cho 5 byte. Chào mừng bạn đến với Japt.
Shaggy



2

V , 11 , 5 byte

ÚxV}p

Hãy thử trực tuyến!

Tôi đã làm điều này waaay phức tạp hơn thực tế. Câu trả lời này chỉ đơn giản là sắp xếp mọi dòng theo các giá trị ASCII, và sau đó trả về ký tự đầu tiên. Vì đây là một câu trả lời tử tế hoặc nhàm chán, đây là một câu trả lời thú vị hơn thực sự thực hiện thuật toán được mô tả ban đầu:

V , 11 byte

òún
/äîä
Lx

Hãy thử trực tuyến!


Tôi cũng vậy khi tôi đặt câu hỏi. Câu trả lời ban đầu của bạn là những gì tôi mong đợi nhất. Bummer.
Henry

2

Thạch ,  3  2 byte

ṂḢ

Một chương trình đầy đủ bao gồm một danh sách các danh sách các ký tự (chuỗi) và in kết quả.

Hãy thử trực tuyến!

Làm sao?

Chúng ta chỉ cần trả về chữ số hàng đầu nhỏ nhất ...

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

Không có vấn đề, nó xảy ra.
Jonathan Allan

2

JavaScript (ES6), 17 byte

Đưa đầu vào như một mảng của chuỗi.

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

Thử nó

Nhập một danh sách các số được phân tách bằng dấu phẩy.

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⊣

Giải trình

⫰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

Hãy thử trực tuyến!

Giải trình

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

Nói cách khác, nó xây dựng một ngăn xếp chỉ bao gồm chữ số đầu tiên của mỗi mục, sau đó xuất ra giá trị thấp nhất.

Thử thách này đã cho tôi một loạt các ý tưởng hữu ích cho các nội dung bổ sung để thêm vào Braingolf, và bây giờ nhờ có thêm vòng lặp foreach "đặc biệt", Braingolf có thể thực hiện trong 5 byte:

Braingolf , 5 byte [không cạnh tranh]

(d<)x

Giải trình

(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

Hãy thử trực tuyến!

Tôi thường chống lại việc thêm các nội dung chỉ để hoàn thành một thử thách, nhưng tôi có thể thấy rất nhiều cách sử dụng cho (...)vòng lặp foreach mới , vì vậy tôi không thực sự xem xét việc thêm một tính năng chỉ cho thử thách này.


Thất bại cho [12,23,12]. Sản lượng dự kiến ​​là 2, bạn trả lại 1.
Olivier Grégoire

@ OlivierGrégoire Sản lượng dự kiến ​​của điều đó là 1:[12,23,12] > [12,2,12] > [1,2,1] > [1,1]
Skidsdev

Xấu của tôi, tôi đọc sai. Xem bình luận trước .
Olivier Grégoire


0

Pip , 5 byte

Lấy danh sách các số đầu vào làm đối số dòng lệnh.

@@SSg

Hãy thử trực tuyến!

Luân phiên:

MN@Zg

Hãy thử trực tuyến!

Giải thích

Trong cả hai chương trình, glà danh sách các đối số dòng lệnh.

@@SSg

SSsắp xếp bằng cách sử dụng so sánh chuỗi, do đó đặt các số có chữ số đầu tiên nhỏ nhất trước, bất kể cường độ của chúng. Unary @đưa ra phần tử đầu tiên của danh sách hoặc vô hướng. Chúng tôi áp dụng nó hai lần để có được chữ số đầu tiên của số đầu tiên sau khi sắp xếp.

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

Luân phiên:

MN@Zg

Zlà zip; phiên bản đơn nguyên của nó có thể được sử dụng để hoán chuyển một danh sách. Phần tử đầu tiên của danh sách chuyển đổi là danh sách các chữ số đầu tiên của tất cả các số. @có được danh sách các chữ số đó; MNmất tối thiểu của nó.

    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);

(Wow, hoàn toàn hiểu nhầm câu hỏi. Điều này không hoạt động. Sẽ chỉnh sửa sau.)


0

Bình thường , 9 7 byte

hSmsh`d

Hãy thử trực tuyến!

Giải trình

Điều này về cơ bản trả về chữ số hàng đầu nhỏ nhất.

       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

Bình thường, 3 byte

hhS

Đầu vào là danh sách các chuỗi biểu diễn số.

Dùng thử trực tuyến

Giải trình:

hhS
    # Q=input
  S # Sort Q
 h  # First Element of sorted list
h   # First element of string
    # Implicitly print result
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.