Zaskakujące, że nie mieliśmy jeszcze prostego wyzwania „znajdź najwyższą cyfrę”, ale myślę, że to trochę zbyt trywialne.
Biorąc pod uwagę nieujemną liczbę całkowitą, zwróć najwyższą unikalną (tj. Nie powtórzoną) cyfrę znalezioną w liczbie całkowitej. Jeśli nie ma żadnych unikalnych cyfr, twój program może zrobić wszystko (niezdefiniowane zachowanie).
Dane wejściowe mogą być traktowane jako pojedyncza liczba całkowita, ciąg znaków lub lista cyfr.
Przypadki testowe
12 -> 2
0 -> 0
485902 -> 9
495902 -> 5
999999 -> Anything
999099 -> 0
1948710498 -> 7
To jest golf golfowy, więc wygrywa najmniej bajtów w każdym języku !
Odpowiedzi:
05AB1E ,
43 bajtyZapisano 1 bajt dzięki panu Xcoderowi powiadamiającemu, że lista cyfr jest prawidłowym wprowadzeniem.
Wypróbuj online!
Wyjaśnienie
źródło
2
nie jest prawdą; tylko1
? : oPython 3 , 40 bajtów
Oszczędność 2 bajtów dzięki movatica .
Wypróbuj online!
42 bajty
Działa zarówno z typem parametru Ciąg, jak i z listą cyfr. Zgłasza błąd w przypadku braku niepowtarzalnych cyfr, rodzaj nadużycia tej specyfikacji:
Wypróbuj online!
Wyjaśnienie
lambda i:
- Deklaruje funkcję lambda za pomocą ciągu lub listy cyfr parametru i.max(...)
- Znajduje maksymalną wartość generatora.x for x in i
- Iteruje po znakach / cyfrachi
.if i.count(x)<2
- Sprawdza, czy cyfra jest unikalna.źródło
lambda i:max(x*(i.count(x)<2)for x in i)
Alice , 15 bajtów
Wypróbuj online!
Wyjaśnienie
Jest to prosta struktura dla kodu liniowego, która działa całkowicie w trybie porządkowym (co oznacza, że ten program działa całkowicie poprzez przetwarzanie ciągów). Rozłożony kod liniowy jest wtedy po prostu:
Co to robi:
źródło
Siatkówka , 16 bajtów
Wypróbuj online!
Wyjaśnienie
Sortuj cyfry.
Usuń powtarzające się cyfry.
Pobierz ostatnią (maksymalną) cyfrę.
źródło
Węgiel drzewny ,
1812 bajtówWypróbuj online! (Link do pełnej wersji)
Prints nothing if no solution is found. The trick is that the
for
loop prints every unique number in the input string, but without moving the cursor, thus the value keeps reprinting itself until the final solution is found.The previous version printed the characters A to Z when no solution was found, hence the comments:
Try it online! (Link to verbose version)
źródło
Husk, 7 bytes
Try it online! (Test suite, crashes on the last test case since it has no unique digits)
This is a composition of functions in point-free style (the arguments are not mentioned explicitely anywhere). Takes input and returns output as a string, which in Husk is equivalent to a list of characters.
Explanation
*The check for length 1 is done by taking the head of the list (all elements except the last one) and negating it (empty lists are falsy, non-empty lists are truthy).
źródło
Haskell, 37 bytes
Try it online!
How it works:
źródło
R, 41 bytes
An anonymous function that takes a list of digits, either as integers or single character strings. It precomputes
y
as an optional argument to avoid using curly braces for the function body. Returns the digit as a string. This takes a slightly different approach than the other R answer and ends up being the tiniest bit shorter! looks like my comment there was wrong after all...table
computes the occurrences of each element in the list, withnames(table(x))
being the unique values inx
(as strings). Since digits are fortunately ordered the same lexicographically as numerically, we can still usemax
.Try it online!
źródło
table
would be shorter (plus I can never remember how to getnames
to work).<2
for another byte. There should never be a zero in the counts.y=table(scan());max(names(y[y<2]))
is a few bytes shorter.JavaScript (ES6),
464140 bytesTakes input as a string. Returns RangeError if there are no unique digits.
-7 bytes thanks to Rick Hitchcock
-1 byte thanks to Shaggy
Test cases
Show code snippet
źródło
(s,i=9)=>s.split(i).length-2?f(s,--i):i
. You can avoid the stack overflow for 42 bytes:(s,i=9)=>s.split(i).length-2?i&&f(s,--i):i
.s=>g=(i=9)=>s.split(i).length-2?g(--i):i
and then call it withf("12")()
Python 3, 40 bytes
Only works for lists of digits. The edge case '990' works fine :)
Try it online!
źródło
Brachylog, 8 bytes
Try it online!
Explanation
źródło
Husk,
98 bytesThanks to Leo for suggesting a slightly neater solution at the same byte count.
Try it online!
Explanation
źródło
¬←
could be more simply=1
, same bytecount though :)Mathematica, 41 bytes
thanks @Martin Ender
here is Martin's approach on my answer
Mathematica, 35 bytes
źródło
R,
4543 bytesfunction(x)max(setdiff(x,x[duplicated(x)]))
Try it online!
Takes input as a vector of integers. Finds the duplicated elements, removes them, and takes the maximum. (Returns
-Inf
with a warning if there is no unique maximum.)Edited into an anonymous function per comment
źródło
max(x[!duplicated(x)])
is quite a bit shorter, but this is a great answer. I knew the way I was going to do it was not this good. Also you can remove thef=
from the beginning, as anonymous functions are perfectly valid answers. Also, you can use TIO to test your functions if you use this format: Try it online!duplicated
but I actually thought up another, shorter answer!Ruby, 42 bytes
Try it online!
źródło
->x{x.chars.select{|r|x.count(r)<2}.max}
APL (Dyalog Unicode), 10 chars = 19 bytes
Method: multiply elements that occur multiple times by zero, and then fine the highest element.
⌸
for each unique element and its indices in the argument:×
multiply the unique element∘(
…)
with:1=
the Boolean for whether one is equal to≢
the tally of indices (how many times the unique element occurs)⌈/
the max of thatTry it online!
APL (Dyalog Classic), 15 bytes
Try it online!
Identical to the above, but uses
⎕U2338
instead of⌸
.źródło
Bash + coreutils,
3028 bytes-2 bytes thanks to Digital Trauma
Try it online!
Bash + coreutils, 20 bytes
Try it online!
If input is given as a list of digits, one per line, we can skip the fold stage. That feels like cheating though.
źródło
grep -o .
withfold -1
to save 2 bytes. I agree that an input integer given as a list of digits is stretching the rules too far.Python 2, 39 bytes
Try it online!
źródło
C# (.NET Core),
279786585775 bytesTry it online!
Thanks @CarlosAlejo
źródło
using System.Linq;
to the byte count.OrderBy(...).Last()
instead of.OrderByDescending(...).First()
, for instance. Or even better, change your last part with.Max(i=>i.Key)
after theWhere
clause.JavaScript (ES6),
5250 bytesTakes input as a list of digits. Returns
0
if there are no unique digits.Test cases
Show code snippet
źródło
Japt,
121110 bytesTakes input as an array of digits.
Test it
Explanation
źródło
Java (OpenJDK 8),
898579 bytesTry it online!
-6 bytes thanks to @KevinCruijssen's insight!
źródło
return i>0?i:0;
withreturn i;
. The output will be -1 for test case[9,9,9,9,9,9]
, but that is fine with the challenge: "If there are no unique digits, your program can do anything (undefined behavior).".0
. It's something I oversaw in the previous golf! :)APL (Dyalog), 14 bytes
-2 thanks toTwiNight.
⌈/
the largest of⊢
the arguments×
multiplied by1=(
…)
the Boolean for each where one equals+/
the row sums of∘.=⍨
their equality tableTry it online!
źródło
0
is never the highest unique digit except for0
itself, you can save 1 byte using×
instead of/⍨
, then save another byte converting that into a trainPHP, 40 bytes
Try it online!
PHP, 42 bytes
Try it online!
źródło
<?=array_flip(count_chars($argn))[1]-48;
Java (JDK), 67 bytes
Try it online!
źródło
Mathematica, 42 bytes
źródło
F#, 88 bytes
Try it online!
An improved approach from my first effort, results in less bytes.
Points of interest:
fst
andsnd
return the first and second elements of a tuple respectively.źródło
Jelly, 9 bytes
Try it online!
źródło
Pyth, 6 bytes
Test suite
Explanation:
źródło
Perl 5, 59 bytes
Try it online!
źródło
-F
flag on perlrun if needed)