가장 높은 고유 숫자 찾기


33

놀랍게도 우리는 단순하지만 도전 "가장 높은 자리를 찾을 수"를 가지고하지 않은,하지만 제 생각에 조금 너무 사소한.

음수가 아닌 정수를 입력 하면 정수에서 찾은 가장 높은 고유 (즉, 반복되지 않는) 숫자를 반환합니다 . 고유 한 숫자가 없으면 프로그램은 무엇이든 할 수 있습니다 (정의되지 않은 동작).

입력은 단일 정수, 문자열 또는 숫자 목록으로 취할 수 있습니다.

테스트 사례

12         -> 2
0          -> 0
485902     -> 9
495902     -> 5
999999     -> Anything
999099     -> 0
1948710498 -> 7

이것은 이므로 각 언어에서 가장 적은 바이트 이깁니다!


2
대신 문자열로 입력 할 수 있습니까?
Kritixi Lithos

3
마지막 테스트 사례를 감안할 때 입력을 문자열로 가져와야한다고 생각합니다 ... (앞의 0은 정수로 표현할 수 없습니다)
Leo

@Leo는 실제로 내 키보드에 숫자를 으깨면서 실제로 나쁜 점이 있었지만 0을 앞에 두지 않았습니다. 그러나 예, 입력은 문자열로 취할 수 있습니다
Skidsdev

25
@ Adám "undefined behaviour"는 일반적으로 바이트를 절약 할 경우 빈 공간에서 이름없는 공포를 소환하는 것을 포함하여 무엇이든 할 수 있음을 의미합니다.
Martin Ender 2016 년

22
@MartinEnder 사실 당신의 코드가 고유 숫자가 없을 때 cthulhu를 성공적으로 소환하면 바이트의 50 %를 행복하게 만들 것입니다.)
Skidsdev

답변:


16

05AB1E , 4 3 바이트

숫자 목록이 유효한 입력 임을 알려주는 Mr. Xcoder 덕분에 1 바이트를 절약했습니다 .

¢ÏM

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

설명

¢     # count occurrences of each digit in input
 Ï    # keep only the digits whose occurrences are true (1)
  M   # push the highest

05AB1E에서 기다리 2십시오. 진실이 아닙니다. 만 1? : o
HyperNeutrino 2016 년

@HyperNeutrino : 맞습니다!
Emigna

2
그것은 매우 유용하고 매우 귀찮은 것 같습니다 ... 흥미 롭습니다 : o : D
HyperNeutrino

@HyperNeutrino : 종종 유용하지만 , 많은 언어가 양의 정수를 반환하거나 비어 있지 않은 문자열을 반환 할 수있는 경우 문제 가 true 값을 반환 한다고하면 불리 할 수 ​​있습니다 .
Emigna

수에 대한 취소 선은보기 쉽지 않습니다 !
MrZander

15

파이썬 3 , 40 바이트

movatica 덕분에 2 바이트를 절약했습니다 .

lambda i:max(x*(i.count(x)<2)for x in i)

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

42 바이트

문자열 및 숫자 목록 매개 변수 유형 모두에 대해 작동합니다. 고유 한 숫자가없고 해당 스펙의 남용에 대해 오류가 발생합니다.

lambda i:max(x for x in i if i.count(x)<2)

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


설명

  • lambda i: -문자열 또는 숫자 목록 매개 변수 i를 사용하여 람다 함수를 선언합니다.
  • max(...) -발전기의 최대 값을 찾습니다.
  • x for x in i-의 문자 / 숫자를 반복합니다 i.
  • if i.count(x)<2 -숫자가 고유한지 확인합니다.

40 바이트 :lambda i:max(x*(i.count(x)<2)for x in i)
movatica

1
@movatica 감사합니다!
Mr. Xcoder

8

Alice , 15 바이트

/&.sDo
\i-.tN@/

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

설명

/...
\.../

이것은 서수 모드에서 완전히 작동하는 선형 코드의 간단한 프레임 워크입니다 (이 프로그램은 문자열 처리를 통해 완전히 작동 함을 의미 함). 펼쳐진 선형 코드는 다음과 같습니다.

i..DN&-sto@

그것이하는 일 :

i    Read all input as a string.
..   Make two copies.
D    Deduplicate the characters in the top copy.
N    Get the multiset complement of this deduplicated string in the input.
     This gives us a string that only contains repeated digits (with one
     copy less than the original, but the number of them doesn't matter).
&-   Fold string subtraction over this string, which means that each of
     the repeated digits is removed from the input.
s    Sort the remaining digits.
t    Split off the last digit.
o    Print it.
@    Terminate the program.

-1, 고유 한 숫자가 없으면 " 공백에서 이름없는 공포를 소환 "하지 않습니다 . ;) (읽기 : +1, 항상 좋은 대답).
케빈 Cruijssen

1
@KevinCruijssen 시도했지만 바이트를 절약하지 못했습니다. 어쩌면 Dark 가 더 적절한 언어 일지 모릅니다 .
Martin Ender


7

, 18 12 바이트

Fχ¿⁼№θIι¹PIι

온라인으로 사용해보십시오! (자세한 버전으로 연결)

해결책이 없으면 아무것도 인쇄하지 않습니다. 트릭은 for루프가 입력 문자열의 모든 고유 번호를 인쇄하지만 커서를 이동하지 않고 최종 솔루션을 찾을 때까지 값이 다시 인쇄됩니다.

이전 버전에서는 솔루션을 찾을 수 없을 때 문자 A에서 Z까지 인쇄되었으므로 주석은 다음과 같습니다.

AααFχA⎇⁼№θIι¹Iιααα

온라인으로 사용해보십시오! (자세한 버전으로 연결)


3
그것은 흥미롭고 정의되지 않은 행동입니다 :)
Emigna

핀란드어로 들리는 소리 : D
fedorqui

2
@fedorqui 여기에서 당신을 만나서 반갑습니다! 예, 그러나 숯은 젤리 나 O5AB1E보다 배우기 쉬우 며 ASCII 아트 게임에서 사용하는 것이 더 재미 있습니다. :-)
Charlie

7

껍질 , 7 바이트

→fo¬hgO

온라인으로 사용해보십시오! (테스트 스위트, 고유 숫자가 없으므로 마지막 테스트 케이스에서 충돌)

이것은 포인트 프리 스타일의 함수 구성입니다 (인수는 명시 적으로 언급되지 않았습니다). 입력을 받아서 출력을 문자열로 리턴합니다. Husk에서는 문자 목록과 같습니다.

설명

Test case: "1948710498"

      O    Sort:                             "0114478899"
     g     Group consecutive equal elements: ["0","11","44","7","88","99"]
 fo¬h      Keep only those with length 1*:   ["0","7"]
→          Take the last element:            "7"

* 길이 1에 대한 점검은리스트의 헤드 (마지막리스트를 제외한 모든 요소)를 가져 와서 무시합니다 (빈리스트는 허위, 비어 있지 않은리스트는 사실임).


7

하스켈, 37 바이트

f s=maximum[x|x<-s,[x]==filter(==x)s]

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

작동 방식 :

  [  |x<-s   ]          -- loop x through the input string s
    x                   -- and keep the x where
     [x]==filter(==x)s  -- all x extracted from s equal a singleton list [x]
maximum                 -- take the maximum of all the x

7

R , 41 바이트

function(x,y=table(x))max(names(y[y==1]))

숫자 목록을 정수 또는 단일 문자열로 가져 오는 익명 함수입니다. y함수 본문에 중괄호를 사용하지 않도록 선택적 인수로 사전 계산 됩니다. 숫자를 문자열로 반환합니다. 이것은 다른 R 답변 과 약간 다른 접근 방식을 취하고 가장 작은 비트로 끝납니다! 결국 내 의견이 잘못된 것 같습니다 ...

table(문자열) names(table(x))의 고유 한 값으로 목록에서 각 요소의 발생을 계산합니다 x. 다행스럽게도 숫자는 사전 순으로 숫자와 동일한 순서로 정렬되므로 계속 사용할 수 있습니다 max.

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


좋은! 나는 무언가를하는 table것이 더 짧을 것이라고 기대하지 않았습니다 (또한 names일하는 방법을 기억할 수 없습니다 ).
aPaulT

1
<2다른 바이트. 카운트에 0이 없어야합니다.
MickyT

1
y=table(scan());max(names(y[y<2]))몇 바이트 더 짧습니다.
JAD

6

자바 스크립트 (ES6), 46 41 40 바이트

입력을 문자열로받습니다. 고유 숫자가 없으면 RangeError를 반환합니다.

s=>f=(i=9)=>s.split(i).length-2?f(--i):i

Rick Hitchcock 덕분에 -7 바이트

Shaggy 덕분에 -1 바이트

테스트 사례


39 바이트에 대한 경고를 제거하십시오 (s,i=9)=>s.split(i).length-2?f(s,--i):i. 42 바이트의 스택 오버플로를 피할 수 있습니다 (s,i=9)=>s.split(i).length-2?i&&f(s,--i):i.
Rick Hitchcock

currying으로 바이트를 저장 s=>g=(i=9)=>s.split(i).length-2?g(--i):i하고 다음과 같이 호출하십시오.f("12")()
Shaggy


4

Brachylog , 8 바이트

ọtᵒtᵍhth

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

설명

Example input: 495902

ọ          Occurences:    [[4,1],[9,2],[5,1],[0,1],[2,1]]
 tᵒ        Order by tail: [[0,1],[2,1],[4,1],[5,1],[9,2]]
   tᵍ      Group by tail: [[[0,1],[2,1],[4,1],[5,1]],[[9,2]]]
     h     Head:          [[0,1],[2,1],[4,1],[5,1]]
      t    Tail:          [5,1]
       h   Head:          5

4

껍질 , 9 8 바이트

동일한 바이트 수로 약간 더 깔끔한 솔루션을 제안 해 준 Leo에게 감사합니다.

▲‡ȯf=1`#

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

설명

  ȯ       Compose the following thre functions into one binary function.
      `#  Count the occurrences of the right argument in the left.
    =1    Check equality with 1. This gives 1 (truthy) for values that 
          appear uniquely in the right-hand argument.
   f      Select the elements from the right argument, where the function
          in the left argument is truthy.
          Due to the composition and partial function application this
          means that the first argument of the resulting function actually
          curries `# and the second argument is passed as the second
          argument to f. So what we end up with is a function which selects
          the elements from the right argument that appear uniquely in
          the left argument.
 ‡        We call this function by giving it the input for both arguments.
          So we end up selecting unique digits from the input.
▲         Find the maximum.  

1
¬←=1비록 더 간단 하지만 같은 바이트 수 일 수 있습니다 :)
Leo

1
@Leo Ah 네, 카레가 괄호없이 작동하는지 테스트하기에는 너무 게 으르 셨습니다. 형식 유추에 대해 더 신뢰해야합니다. ;)
Martin Ender 2016 년

4

수학, 41 바이트

(t=9;While[DigitCount[#][[t]]!=1,t--];t)&

감사합니다 @Martin Ender

여기 내 대답에 대한 Martin의 접근법이 있습니다.

Mathematica, 35 바이트

9//.d_/;DigitCount[#][[d]]!=1:>d-1&

4

R, 45 43 바이트

function(x)max(setdiff(x,x[duplicated(x)]))

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

입력을 정수 벡터로 취합니다. 복제 된 요소를 찾아서 제거하고 최대 값을 갖습니다. ( -Inf최대 값이 고유하지 않으면 경고와 함께 반환 됩니다.)

주석별로 익명 함수로 편집


max(x[!duplicated(x)])꽤 짧지 만 이것은 훌륭한 답변입니다. 내가하려고하는 방식이 그렇게 좋지 않다는 것을 알았습니다. 또한 f=익명 함수는 완전히 유효한 답변이므로 처음부터를 제거 할 수 있습니다 . 또한이 형식을 사용하는 경우 TIO를 사용하여 기능을 테스트 할 수 있습니다. 온라인에서 사용해보십시오!
주세페

감사! '중복 된'기능은 중복 요소의 첫 번째 발생을 계산하지 않으므로 버전이 제대로 작동하지 않을 것입니다.
aPaulT

아, 좋은 지적입니다. 나는 거의 사용하지 duplicated않지만 실제로 다른 짧은 대답을 생각했습니다!
주세페


3

APL (Dyalog Unicode) , 10 자 = 19 바이트

방법 : 여러 번 발생하는 요소에 0을 곱한 다음 가장 높은 요소를 세분화하십시오.

⌈/×∘(1=≢)⌸

 인수의 각 고유 요소 및 해당 색인에 대해

× 독특한 요소를 곱하다

∘(... ) 과 :

  1= 1이 같은지 여부에 대한 부울

   인덱스 집계 (고유 요소가 몇 번이나 발생하는지)

⌈/ 그 최대

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

APL (Dyalog Classic) , 15 바이트

⌈/×∘(1=≢)⎕U2338

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

위와 동일하지만 ⎕U2338대신 사용 합니다 .


3

Bash + coreutils, 30 28 바이트

Digital Trauma 덕분에 -2 바이트

fold -1|sort|uniq -u|tail -1

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


배쉬 + coreutils, 20 바이트

sort|uniq -u|tail -1

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

입력을 한 줄에 하나씩 숫자 목록으로 제공하면 접기 단계를 건너 뛸 수 있습니다. 그래도 속임수처럼 느껴집니다.


교체 grep -o .fold -12 저장 바이트. 숫자 목록으로 제공된 입력 정수가 규칙을 너무 많이 확장하고 있음에 동의합니다.
디지털 외상

bash이기 때문에 +1
Anush


3

C # (. NET 코어) , 27 97 86 58 57 75 바이트

using System.Linq;

n=>n.GroupBy(i=>i).Where(i=>i.Count()<2).Max(i=>i.Key)-48

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

감사합니다 @CarlosAlejo


"1948710498"을 입력으로 사용할 수 없으며 ( "7"대신 "9"를 반환 함) using System.Linq;바이트 수에 추가해야합니다 .
Charlie

트윗 담아 가기 죄송합니다! 이제 사양을 완전히 읽으십시오. 솔루션을 곧 편집 할 것입니다.
kakkarot

편집했습니다. 내가 할 수있는 최적화가 있습니까?
kakkarot

예를 들어, OrderBy(...).Last()대신에 사용해보십시오 .OrderByDescending(...).First(). 또는 더 나은 방법 .Max(i=>i.Key)Where절 뒤에 마지막 부분을 변경하는 것 입니다.
Charlie

@CarlosAlejo 감사합니다! 편집했습니다.
kakkarot

2

자바 스크립트 (ES6), 52 50 바이트

숫자 목록으로 입력을받습니다. 0고유 숫자가없는 경우 반환 합니다.

s=>s.reduce((m,c)=>m>c|s.filter(x=>x==c)[1]?m:c,0)

테스트 사례


2

Japt , 12 11 10 바이트

숫자 배열로 입력을받습니다.

k@¬èX ÉÃrw

그것을 테스트


설명

     :Implicit input of array U.
k    :Filter the array to the elements that return false when...
@    :Passed through a function that...
¬    :Joins U to a string and...
èX   :Counts the number of times the current element (X) appears in the string...
É    :Minus 1.
     :(The count of unique digits will be 1, 1-1=0, 0=false)
à   :End function.
r    :Reduce by...
w    :Getting the greater of the current element and the current value.
     :Implicit output of resulting single digit integer.

2

자바 (OpenJDK 8) , 89 85 79 바이트

a->{int i=10,x[]=new int[i];for(int d:a)x[d]++;for(;i-->0&&x[i]!=1;);return i;}

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

@KevinCruijssen의 통찰력 덕분에 -6 바이트!


1
당신은 대체 할 수 있습니다 return i>0?i:0;return i;. 테스트 케이스의 경우 출력은 -1 [9,9,9,9,9,9]이지만 " 고유 한 숫자가 없으면 프로그램이 무엇이든 할 수 있습니다 (정의되지 않은 동작) "라는 문제가 있습니다.
Kevin Cruijssen

사실, 나는 현재 개정 이후부터 할 수 있습니다. 테스트 사례로 인해 실패했습니다 0. 내가 이전 골프에서 감독했던 것입니다! :)
Olivier Grégoire

2

APL (Dyalog) , 14 바이트

TwiNight 덕분에 -2.

⌈/⊢×1=(+/∘.=⍨)

⌈/ 가장 큰

 논쟁

× 곱한

1=() 각각의 부울

+/ 행 합

∘.=⍨ 평등 테이블

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


이후 0를 제외하고 가장 높은 독특한 자리 결코 0그 자체가, 당신이 사용하는 1 바이트를 저장할 수 있습니다 ×대신 /⍨, 그 기차로 변환 다른 바이트 저장
TwiNight

@TwiNight 니스! 고맙습니다.
Adám



1

수학, 42 바이트

Max@Position[RotateRight@DigitCount@#,1]-1&

1

F # , 88 바이트

let f i=Seq.countBy(fun a->a)i|>Seq.maxBy(fun a->if snd a>1 then 0 else int(fst a))|>fst

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

첫 번째 노력에서 개선 된 접근 방식으로 바이트 수가 줄어 듭니다.

관심의 포인트 : fstsnd각각 튜플의 제 1 및 제 2 요소를 반환합니다.


1

젤리 , 9 바이트

ṢŒrṪỊ$ÐfṀ

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



@LeakyNun outgolfed, 아들
Skidsdev

@Mayube 그러나 핵심 알고리즘은 동일합니다
Leaky Nun

@LeakyNun 아니오, 그것은 상당히 다릅니다.
steenbergh

@LeakyNun 나는 별도로 게시하기로 결정했습니다 ... 기본적으로 큰 차이점은 steenbergh가 약간의 머리 나 무언가를 취하는 동안 내 유지할 것만 결정한다는 것입니다.
Erik the Outgolfer

1

Pyth, 6 바이트

eS.m/Q

테스트 스위트

설명:

eS.m/Q
eS.m/QbQ    Implicit variable introduction
  .m   Q    Find all minimal elements of the input by the following function:
    /Qb     Number of appearances in the input
eS          Take the maximum element remaining.

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