연결된 정수의 최대 값 및 최소값


14

이 문제는 모든 소프트웨어 엔지니어가 1 시간 이내에 해결할 수있는 5 가지 프로그래밍 문제 에서 비롯된 입니다. 처음 몇 가지 문제는 사소한 것이지만 네 번째 문제는 좀 더 흥미로울 수 있습니다.

표준 입력에서 단일 공백으로 구분 된 정수 목록이 제공되면 정수를 자신의 행에 연결하여 얻을 수있는 최대 값과 최소값을 인쇄하십시오.

예를 들면 다음과 같습니다.

입력:

5 56 50

산출:

50556
56550

다양한 주문 포인트 :

  • 결과의 순서는 가장 작고 가장 큽니다.
  • 최소 및 최대 값은 (모든 통해 변화를 반복하고를 인쇄하는 것은 유효하지 않습니다) 인쇄 할 수있다.
  • 목록에는 항상 두 개 이상의 정수가 있습니다.
  • 가장 큰 결과와 가장 작은 결과가 동일 할 수 있습니다. 입력시 5 55숫자 555는 두 번 인쇄되어야합니다.
  • 정수가 반드시 다른 것은 아닙니다. 5 5유효한 입력입니다.
  • 0정수의 선행 s는 유효한 입력 이 아닙니다 . 계정을 지정할 필요 가 없습니다05 55 .

이것이 코드 골프이기 때문에 가장 짧은 참가작이 승리합니다.


입력 번호 중 하나에 선행 0이 포함 된 경우 (예 :) 단순히 또는 단순히 05고려 합니까? 055
Optimizer

@Optimizer 선행 0은 유효한 입력이 아닙니다.

출력에 선행 0이 허용됩니까?
Tim

@Tim 입력에 선행 0이 없으면 어디에서 오는가?
마틴 엔더

@ MartinBüttner 아, 멍청 해!
Tim

답변:


8

CJam, 14 13 바이트

qS/e!:s$(N@W=

꽤 직설적 인. 이것이 작동하는 방식입니다.

qS/                  e# Split the input on spaces
   e!                e# Get all permutations of the input numbers
     :s              e# Join each permutation order into a single string
       $             e# Sort them. This sorts the strings based on each digit's value
        (N@W=        e# Choose the first and the last out of the array separated by '\n'

여기에서 온라인으로 사용해보십시오


1
좋아, 나는 포기한다. 나는 지금 e!존재하지 않았다 (아직 위키에는 나타나지 않았다).
데니스

5
@Dennis 거기 당신은 간다
최적화

1
잘 읽었습니다. 유용한 새로운 것들이 많이 있습니다.
데니스

이러한 추가 트릭으로 CJam에서 골프 팁 을 업데이트하는 것이 유용 할 수 있습니다 .

1
@MichaelT 팁에는 일반적으로 언어의 내장 기능을 설명하는 답변이 포함되어 있지 않습니다. 이 새로운 기능의 이점을 누릴 수 있으므로 몇 가지 답변을 업데이트해야 할 수도 있습니다.
Optimizer

5

Pyth, 14 13 바이트

hJSmsd.pcz)eJ

모든 순열을 생성하고 정렬하여 첫 번째 요소와 마지막 요소를 인쇄합니다.


J인라인 할당 :hJSmsd.pcz)eJ
isaacg

@isaacg 좋은 하나! 나는 우리가 그 더러운 더러운 CJam보다 열등하지 않을 것을 알았습니다!
orlp

4

파이썬 2, 104 99 바이트

네.

from itertools import*;z=[''.join(x)for x in permutations(raw_input().split())];print min(z),max(z)

편집 : xnor 덕분에 -5 바이트!


1
독해력의 내부는 sorted괄호없이 작동하지만, 당신은 또한 정렬 피할 수 그냥 가지고 minmax.
xnor

네 감사합니다!
sirpercival

3

매스 매 티카, 64 58 바이트

Print/@Sort[""<>#&/@Permutations@StringSplit@#][[{1,-1}]]&

문자열을 사용하여 두 줄을 인쇄하는 명명되지 않은 함수를 정의합니다. 모든 순열을 얻고 함께 결합하여 정렬하고 첫 번째와 마지막 결과를 인쇄합니다.

alephalpha 덕분에 6 바이트가 절약되었습니다.


{#&@@#,Last@#}=>#[[{1,-1}]]
alephalpha

@alephalpha 때로는 단순할수록 좋습니다. 감사! : D
Martin Ender

2

자바 스크립트 (ES6) 54 72 85

생각보다 쉽습니다. 사전 식으로 정렬하면됩니다. 좋은 소식은 정확히 일반 자바 스크립트 정렬이 작동하는 방식입니다. 글쎄 ... 아니, 그건 잘못이야 ... 아직도 (보다 복잡한) 사전 기록 비교가 일을 할 수 있습니다.

참고 : a와 b 숫자를 갖는 a + [b]는 a + ''+ b의 지름길입니다. 문자열 연결은 필요하지만 합계는 필요하지 않습니다.
참고 2 :``안의 개행은 중요하며 계산해야합니다.

편집 중재자와 논쟁하지 마십시오 (농담)

Edit2 팝업을 사용한 고정 I / O 형식 ( 코드 골프 기본값 : 입력 / 출력 방법 참조 )

// Complete program with I/O
// The sorting function is shorter as input are strings

alert((l=prompt().split(' ')).sort((a,b)=>a+b>b+a).join('')+`
`+l.reverse().join(''))

// Testable function (67 chars)
// With an integer array parameter, the sorting function must convert to string 

F=l=>(l.sort((a,b)=>a+[b]>b+[a]).join('')+`
`+l.reverse().join(''))

Firefox / FireBug 콘솔에서 테스트

F([50, 2, 1, 9])
F([5,56,50])
F([52,36,526])
F([52,36,525])
F([52,36,524]

12509
95021

50556
56550

3652526
5265236

3652525
5255236

3652452
5252436


1
입력 형식이 잘못되었다고 생각합니다. "표준 입력에서 단일 공백으로 구분 된 정수"여야합니다.
nimi

@nimi you 're right. 고정
edc65 12

2

J, 34 36 , 42 바이트

단순한 무차별 대입 :

h=:3 :'0 _1{/:~;"1":&.>y A.~i.!#y'

h 5 50 56
50556 
56550

h 50 2 1 9
12509
95021

1

하스켈, 98 바이트

import Data.List
g=sort.map concat.permutations.words
h i=unlines[g i!!0,last$g i]
main=interact h

공백으로 입력 문자열을 분할하고 모든 순열과 정렬을 연결하십시오. 첫 번째 요소와 마지막 요소를 인쇄하십시오.


1

줄리아, 77 바이트

v->(Q=extrema([int(join(x)) for x in permutations(v)]);print(Q[1],"\n",Q[2]))

이것은 벡터를 입력으로 받아들이고 결합 된 요소의 순열의 최소값과 최대 값을 인쇄하는 명명되지 않은 함수를 만듭니다. 호출하려면 이름을 지정하십시오 (예 :) f=v->....

언 골프 + 설명 :

function f(v)
    # Create an integer vector of the joined permutations using comprehension,
    # then get the minimum and maximum as a tuple using extrema().

    Q = extrema([int(join(x)) for x in permutations(v)])

    # Print the minimum and the maximum, separated by a newline.
    print(Q[1], "\n", Q[2])
end

제안은 환영합니다!


1

자바 스크립트 ( ES6 ) 134

슬프게도 JS에는 내장 순열 함수가 없습니다.

f=(o,y,i,a)=>y?o.concat(a[1]?a.filter((k,j)=>j^i).reduce(f,[]).map(z=>y+z):y):(q=o.split(' ').reduce(f,[])).sort().shift()+`
`+q.pop()
<!-- Snippet Demo (Firefox only) -->

<input id="input" value="5 56 50" />
<input type="button" onclick="output.innerHTML=f(input.value)" value="Run" />
<pre id="output"></pre>


1

R, 59 바이트

write(range(combinat:::permn(scan(),paste,collapse="")),"")

1
잘 했어. 그래도 콜론을 두 개만 사용하여 바이트를 저장할 수 있습니다 combinat::permn.
Alex A.

::패키지를로드 ( library또는 통해 require) 해야 한다고 생각 했지만 그렇지 않았습니다 :::. 내가 틀렸을 수도있다; 그것에 대해 조금 더 읽어야합니다. 감사.
flodel

라이브러리가로드 된 경우 콜론이 전혀 필요하지 않습니다. 패키지가 네임 스페이스에 첨부되어 있으므로 함수를 직접 호출 할 수 있습니다. 패키지가 설치되었지만로드되지 않은 경우 콜론이 두 개인 특정 패키지의 기능을 참조 할 수 있습니다.
Alex A.

58이 될 수 있습니다. 본인 permn없이 직접 사용할 수 없습니다 library(combinat).
flodel

그래, 어쨌든 library(combinat)사용하기 전에 라이브러리를로드해야하기 때문에 permn. ;)
Alex A.

1

루비 75

내 '네이티브'언어는 아니지만 시도해 볼 것이라고 생각한 언어는 골프 팁을 사용할 수 있습니다. 여전히 나쁜 참가자는 아닙니다.

puts STDIN.read.split(" ").permutation.map{|x|x.join}.sort.values_at(0,-1)

나는 모든 것이 언어에 내장되어 있다는 것이 우아 하지 않다고 말하지 않을 것입니다. 이것이 어떻게 작동하는지 매우 분명해야합니다.


당신은 대체 할 수 {|x|x.join}(&:join)3 바이트 절감.
앤드류

48 바이트에 대한 몇 가지 루비 단축키 :puts$<.read.split.permutation.map(&:join).minmax
blutorange


입력을 읽기 위해 더 짧아집니다 :puts gets.split.permutation.map(&:join).minmax
blutorange

1

펄, 79 70B (68 + 2)

use Math::Combinatorics;say for(sort map{join'',@$_}permute@F)[0,-1]

로 전화하십시오 echo 13 42 532 3 6|perl -M5.10.0 -an scratch.pl. 에 +2 바이트의 페널티가 -an있습니다. 모듈 이름의 길이에 대한 수치심 ...


0

자바 스크립트 (ES6), 85 바이트

F=a=>(c=a.split(" ").sort((b,a)=>b+a-(a+b)),`${c.join("")}
${c.reverse().join("")}`)

용법:

F("50 2 1 9")
/*
    12509
    95021
*/

1
템플릿 문자열을 좋아하지 마십시오. a +``+ b는`$ {a} $ {b}`보다 짧습니다
edc65
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.