더 큰 숫자를 유지하면서 숫자 제거


22

소개

이 문제는 제거 가장 많은 찾는 구성 Y 원래 번호에서 숫자를 NX 자리.

가정 y=2 n=5263 x=4, 제거 가능한 번호 Y = 2 진수이다 :

[52, 56, 53, 26, 23, 63]

따라서 가장 큰 숫자는 63이 예제의 출력이어야합니다.


또 다른 논리는 다음과 같습니다. 각 y에 대해 오른쪽에서 다음 숫자가 큰 숫자를 왼쪽에서 오른쪽으로 검색 한 다음 제거하고, 일치하지 않으면 마지막 y 숫자를 제거합니다 .

y=3 n=76751432 x=8설명하는 데 사용 :

y=3
76751432
-^------ remove 6 because right next 7 is greater

y=2
7751432
---^--- remove 1 because right next 4 is greater

y=1
775432
-----^ the search failed, then remove last y digits

result = 77543

위에서 설명한 두 가지 방법 모두 작동합니다. 물론 다른 방법도 사용할 수 있습니다. :)

도전

숫자 n 은 8 자리를 초과하지 않으며 y 는 항상 0보다 크고 x 보다 작습니다 .

엄격한 입력 형식을 피하기 위해 y n x원하는 방식 : 값 을 함수의 매개 변수, 원시 입력 또는 기타 유효한 방법으로 사용할 수 있습니다. 답변에서 어떻게했는지 말하십시오.

결과는 결과 번호 여야합니다.

이것은 이며 바이트 단위로 가장 짧은 답변입니다.

입력 및 출력 예

다시 : 너무 엄격 할 필요는 없습니다. :)

4 1789823 7 -> 983
1 54132 5   -> 5432
3 69314 5   -> 94
2 51794 5   -> 794

편집하다

일부 사용자는 문제를 해결하기 위해 x 값이 필요하지 않을 수도 있다는 사실을 반영하여 입력 순서를 변경했습니다 . x 는 이제 선택적 값입니다.


2
보다 일반적인 입력 및 출력을 허용하십시오 . 특정 문자열 형식을 요구하는 것은 일반적으로 나쁜 생각 입니다.
xnor

1
@LuisMendo 내 I / O를 편집하는 것은 마음에 들지 않습니다. ¯ \ _ (ツ) _ / ¯
Alex A.

4
엄격한 I / O 요구 사항으로 인해 -1, 흥미로운 도전에 +1. 전반적으로 견고한 사이드 보트.
Mego

1
다른 사람들이 말했듯이 입력 형식이 너무 엄격하며 특히 x쓸모없는 정보 라고 생각하면 됩니다.
Fatalize

1
@Fatalize 실제로, 나는 당신이 취하는 접근법에 따라 x입력으로 코드를 줄일 수 있다고 생각합니다 . (예시 : 나의 Julia 답변)
Alex A.

답변:


3

A-Ray , 9 7 바이트

나의 새로운 언어! 메타에 따르면 이것은 허용되지만 이것이 허용되지 않으면 제거하겠습니다.

pM:i-II

설명:

  :i-II       Gets all permutations possible for the given number converted to an array,
                      with the length of y-x, which is the -II part
 M            Gets the maximum of the result above
p             Prints the resulting array above, with no separators

입력 예 (숫자, x, y) :

1736413 7 4

산출:

764

github 링크에 제공된 .jar 파일을 사용하여 이것을 테스트 할 수 있습니다.


4

MATL , 10 바이트

-jowXncUX>

이 문제보다 빠른 언어 / 컴파일러 버전 (9.2.1) 을 사용합니다.

문자열 순서, 제거 된 문자 수, 문자열의 순서로 stdin에서 세 개의 입력이 필요합니다.

>> matl
 > -jowXncUX>
 > 
> 7
> 4
> 1789823
983

편집 : 온라인으로 사용해보십시오!(링크의 코드가 XN대신에 Xn, 또한,이 도전 후 언어의 변화에 맞도록 o더 이상 필요하지 않습니다)

설명

(옥타브와 Matlab의 nchoosek기능이 다르게 동작 하기 때문에 여전히 2 바이트 더 비쌉니다. 컴파일러의 다음 릴리스에서 수정되었습니다.)

-        % implicitly input two numbers, and subtract them
jo       % input string, and convert to ASCII codes
wXn      % swap inputs. Generate all combinations, each in a row
c        % convert to char array
U        % convert each row to a number
X>       % get maximum. Implicitly display

원래 챌린지에 대한 답변 (보다 엄격한 입력 요구 사항) : 16 바이트

jYbZ)b-wowXncUX>

용도 최신 버전 (9.2.1) 언어 / 컴파일러를.

>> matl jYbZ)b-wowXncUX>
> 4 1789823 7
983

설명

(이것은 4 바이트가 작아야했지만 Matlab과 달리 wow...cOctave의 nchoosek기능은 문자 입력에서 작동하지 않기 때문에 필요합니다 . 컴파일러의 다음 릴리스에서는 수정 될 것입니다.)

j              % input string
YbZ)           % split at spaces into strings
b-             % subtract first and third (1-digit) strings
wow            % convert middle string into ASCII codes
Xn             % get all combinations, each in a row
c              % convert to char array
U              % convert each row to a number
X>             % get maximum. Implicitly display

3
wow코드 자체가 부족
하다는

3
@ETHproductions 하하. 글쎄, 새로운 입력 요구 사항으로 6 바이트를 잃어 버렸습니다 ... 말문이 없음
Luis Mendo

3

Pyth- 11 9 8 바이트

eS.cz-QE

테스트 스위트 .


좋은 골프이지만 입력 형식을 준수하지 않습니까?
Lui

@ 루이 오, 그것이 엄격하고 고정 된 것을 보지 못했습니다.
Maltysen

공평하게도, 질문 자체에 대한 의견에서 그것에 대한 토론이있는 것처럼 보이지만 해결되지는 않습니다.
Lui

@L 고정. 스페이스 필러.
Maltysen

더 좋아 보이지만 입력에 동일한 줄에 x가 있다고 생각합니다. 여기서 x는 기본 정수의 자릿수입니까? 즉 : 2 5263 4.
Lui

1

apt, 19 바이트

Vs ¬àW-U m¬mn n!- g

온라인으로 사용해보십시오!

작동 원리

        // Implicit: U = y, V = n, W = x
Vs ¬    // Convert V into a string, then split into an array of chars.
àW-U    // Generate all combinations of length W-U.
m¬mn    // Join each pair back into a string, then convert each string to a number.
n!-     // Sort by backwards subtraction (b-a instead of a-b; highest move to the front).
g       // Get the first item in this list.
        // Implicit: output last expression

1

Brachylog , 30 바이트

,{,[N:Y].hs?lL,Nl-Y=L}?:1forh.

OP가 IO에 대한 제약을 완화했기 때문에 [Number, NumberOfDigitsRemoved]입력으로 예상하고 출력으로 응답을 반환합니다 (예 :) brachylog_main([1789823,4], Z)..

설명

,{                   }?:1f     § Declare sub-predicate 1 and find all inputs which satisfy
                               § this sub-predicate with output = Input of the main predicate
                               § (i.e. [Number, Number of digits to remove])

                               § -- Sub-predicate 1 --
  ,[N:Y].                      § Output = [N, Y]
         hs?                   § Input = a subset of N
            lL,Nl-Y=L          § Length of Input = Length of N - Y

                          orh. § Order the list of answers, reverse it an return the first
                               § element (i.e. the biggest number of the list)

1

파이썬 3, 69 바이트

이것은 세 가지 인수를 모두 허용하는 익명 함수를 정의합니다. "당신이 값을 사용할 수 있습니다 규칙을 최대한 활용 y n x당신이 선호하는 방식"나는 동의하기로 선택한 yx정수로하고 n문자열로. 반환 값은 문자열입니다.

from itertools import*
lambda y,n,x:''.join(max(combinations(n,x-y)))

누군가가 이것이 규칙을 너무 확장하고 있다고 생각하는 경우,이 버전은 모든 입력을 정수로 취하고 74 바이트입니다.

from itertools import*
lambda y,n,x:''.join(max(combinations(str(n),x-y)))

그냥 재미로, 나는 또한 복용, 두 인수 버전을 작성 y하고 n명령 줄에서하고 그 결과를 인쇄 STDOUT. 92 바이트입니다.

import sys,itertools as i
_,y,n=sys.argv
print(*max(i.combinations(n,len(n)-int(y))),sep='')

1

ES6, 70 바이트

r=(y,n)=>y?r(y-1,Math.max(...`${n}`.replace(/./g," $`$'").split` `)):n

y거짓이 아닌 한 숫자 결과를 반환합니다.n 문자열이 합니다. 나는 재귀를 잘못하는 것이 여전히 작동한다는 것을 확신했다. (나의 해결책은 올바른 재귀를하는 데 적용 할 수 없다).

또한 세 개의 따옴표 (모두 따옴표는 아니지만)를 모두 사용하는 첫 번째 코드 골프로 인해 길이를 사소하게 계산하지 못했습니다.


1

줄리아, 128 95 바이트

f(y,n,x)=maximum(i->parse(join(i)),filter(k->endof(k)==x-y,reduce(vcat,partitions(["$n"...]))))

세 가지 값을 매개 변수로 받아들이고 정수를 반환하는 함수입니다.

언 골프 드 :

function f{T<:Integer}(y::T, n::T, x::T)
    # Get all ordered partitions of the digits of n
    p = reduce(vcat, partitions(["$n"...]))

    # Filter to groups of size x-y
    g = filter(k -> endof(k) == x - y, p)

    # Get the maximum resulting number
    return maximum(i -> parse(join(i)), g)
end

1

하스켈, 64 바이트

import Data.List
y#x=maximum.filter((==x-y).length).subsequences

사용 예 : (4#7)"1789823"->"983" .

원래 번호 n 는 문자열로 사용됩니다. ( "엄격한 입력 형식 없음"규칙을 과도하게 사용하고 있는지 확실하지 않지만 첫 번째 버전에서는 문자열 입력이 필요했습니다 (!)).

작동 방식 :의 모든 하위 시퀀스 목록을 작성하고 n길이를 유지 x-y하고 최대 값을 선택하십시오.


1

루비, 40 바이트

->y,n,x{n.chars.combination(x-y).max*''}

이 소요 익명 함수 yx정수로하고 n문자열을 문자열로 반환합니다. 예를 들어 다음과 같이 호출 할 수 있습니다

->y,n,x{n.chars.combination(x-y).max*''}[2,"5263",4]

그리고 반환 "63"됩니다.


1

MATLAB 40 바이트

@(n,y)max(str2num(nchoosek(n,nnz(n)-y)))

테스트:

ans('76751432',3)
ans = 77543


0

자바 스크립트 (ES6), 78

2 개의 인수 y와 d를 갖는 재귀 함수 y숫자 또는 문자열 일 d수 있으며 문자열이어야합니다.

r=(y,d)=>y?Math.max(...[...d].map((x,i)=>r(y-1,d.slice(0,i)+d.slice(i+1)))):+d

챌린지가 변경되기 전에 107-... 모든 입력 / 출력 홀수 이상 ...

x=>(r=(n,d)=>n?Math.max(...[...d].map((x,i)=> r(n-1,d.slice(0,i)+d.slice(i+1)))):+d)(...x.match(/\d+/g))+'\n'

테스트

r=(y,d)=>y?Math.max(...[...d].map((x,i)=>r(y-1,d.slice(0,i)+d.slice(i+1)))):+d

function test() {
  [a,b]=I.value.match(/\d+/g)
  O.textContent=r(a,b)
}

test()
y,n: <input id=I value='4 1789823' oninput="test()">
<pre id=O></pre>


오타 : n-1이어야합니다 y-1.
Neil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.