Sort by Largest Digit(s)
up vote
19
down vote
favorite
Challenge:
Given a list of integer, sort descending by their single largest digit(s). The order for numbers with the same largest digit are then sorted by second largest digit, etc.
We ignore duplicated digits in numbers. And if all digits in a number are the same, the order of those numbers in the list can be in any way you'd like.
Example:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Why? Here are the relevant digits the numbers were sorted on:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Challenge rules:
- We ignore duplicated digits, so
478
and-7738
will be ordered as478, -7738
, because the largest digits are[8,7,4]
and[8,7,3]
, and not[8,7,4]
and[8,7,7,3]
. - If multiple numbers have the same digits, the order of those can be either way. So
373
and-73
can be sorted as both373, -73
or-73, 373
(digits are[7,3]
for both of these numbers). - If a number contains no more digits to check, it will be placed at the back of the relevant numbers. So
123
and3120
will be sorted as3120, 123
, because the largest digits[3,2,1]
are the same, but0
comes beforenone
. - You can assume all numbers in the input are in the range
[-999999,999999]
. - Just one of the possible outputs is enough as result, but you are allowed to output all possible outputs where sublists can be in any permutation if you want (although I doubt it would save bytes in any language).
General rules:
- This is code-golf, so shortest answer in bytes wins.
Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.
Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.
Default Loopholes are forbidden.- If possible, please add a link with a test for your code (i.e. TIO).
- Also, adding an explanation for your answer is highly recommended.
Test cases:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
code-golf number integer sorting
add a comment |
up vote
19
down vote
favorite
Challenge:
Given a list of integer, sort descending by their single largest digit(s). The order for numbers with the same largest digit are then sorted by second largest digit, etc.
We ignore duplicated digits in numbers. And if all digits in a number are the same, the order of those numbers in the list can be in any way you'd like.
Example:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Why? Here are the relevant digits the numbers were sorted on:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Challenge rules:
- We ignore duplicated digits, so
478
and-7738
will be ordered as478, -7738
, because the largest digits are[8,7,4]
and[8,7,3]
, and not[8,7,4]
and[8,7,7,3]
. - If multiple numbers have the same digits, the order of those can be either way. So
373
and-73
can be sorted as both373, -73
or-73, 373
(digits are[7,3]
for both of these numbers). - If a number contains no more digits to check, it will be placed at the back of the relevant numbers. So
123
and3120
will be sorted as3120, 123
, because the largest digits[3,2,1]
are the same, but0
comes beforenone
. - You can assume all numbers in the input are in the range
[-999999,999999]
. - Just one of the possible outputs is enough as result, but you are allowed to output all possible outputs where sublists can be in any permutation if you want (although I doubt it would save bytes in any language).
General rules:
- This is code-golf, so shortest answer in bytes wins.
Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.
Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.
Default Loopholes are forbidden.- If possible, please add a link with a test for your code (i.e. TIO).
- Also, adding an explanation for your answer is highly recommended.
Test cases:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
code-golf number integer sorting
add a comment |
up vote
19
down vote
favorite
up vote
19
down vote
favorite
Challenge:
Given a list of integer, sort descending by their single largest digit(s). The order for numbers with the same largest digit are then sorted by second largest digit, etc.
We ignore duplicated digits in numbers. And if all digits in a number are the same, the order of those numbers in the list can be in any way you'd like.
Example:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Why? Here are the relevant digits the numbers were sorted on:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Challenge rules:
- We ignore duplicated digits, so
478
and-7738
will be ordered as478, -7738
, because the largest digits are[8,7,4]
and[8,7,3]
, and not[8,7,4]
and[8,7,7,3]
. - If multiple numbers have the same digits, the order of those can be either way. So
373
and-73
can be sorted as both373, -73
or-73, 373
(digits are[7,3]
for both of these numbers). - If a number contains no more digits to check, it will be placed at the back of the relevant numbers. So
123
and3120
will be sorted as3120, 123
, because the largest digits[3,2,1]
are the same, but0
comes beforenone
. - You can assume all numbers in the input are in the range
[-999999,999999]
. - Just one of the possible outputs is enough as result, but you are allowed to output all possible outputs where sublists can be in any permutation if you want (although I doubt it would save bytes in any language).
General rules:
- This is code-golf, so shortest answer in bytes wins.
Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.
Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.
Default Loopholes are forbidden.- If possible, please add a link with a test for your code (i.e. TIO).
- Also, adding an explanation for your answer is highly recommended.
Test cases:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
code-golf number integer sorting
Challenge:
Given a list of integer, sort descending by their single largest digit(s). The order for numbers with the same largest digit are then sorted by second largest digit, etc.
We ignore duplicated digits in numbers. And if all digits in a number are the same, the order of those numbers in the list can be in any way you'd like.
Example:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Why? Here are the relevant digits the numbers were sorted on:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Challenge rules:
- We ignore duplicated digits, so
478
and-7738
will be ordered as478, -7738
, because the largest digits are[8,7,4]
and[8,7,3]
, and not[8,7,4]
and[8,7,7,3]
. - If multiple numbers have the same digits, the order of those can be either way. So
373
and-73
can be sorted as both373, -73
or-73, 373
(digits are[7,3]
for both of these numbers). - If a number contains no more digits to check, it will be placed at the back of the relevant numbers. So
123
and3120
will be sorted as3120, 123
, because the largest digits[3,2,1]
are the same, but0
comes beforenone
. - You can assume all numbers in the input are in the range
[-999999,999999]
. - Just one of the possible outputs is enough as result, but you are allowed to output all possible outputs where sublists can be in any permutation if you want (although I doubt it would save bytes in any language).
General rules:
- This is code-golf, so shortest answer in bytes wins.
Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.
Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.
Default Loopholes are forbidden.- If possible, please add a link with a test for your code (i.e. TIO).
- Also, adding an explanation for your answer is highly recommended.
Test cases:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
code-golf number integer sorting
code-golf number integer sorting
asked yesterday
Kevin Cruijssen
34k554181
34k554181
add a comment |
add a comment |
21 Answers
21
active
oldest
votes
up vote
6
down vote
05AB1E, 5 bytes
ΣêR}R
Try it online!
or as a Test suite
Explanation
Σ } # sort input by
ê # its sorted unique characters
R # reversed (to sort descending)
R # reverse the result (to sort descending)
add a comment |
up vote
6
down vote
Python 2, 60 55 bytes
def f(l):l.sort(None,lambda n:sorted(set(`n`))[::-1],1)
Try it online!
Ungolfed
def f(l):
l.sort( # Sort the list in place
cmp = None, # ... with no custom comparison function
key = k, # ... on the function
reverse = 1 # ... in reverse
) # As the arguments are used in the right order, no names are necessary.
k = lambda n:sorted( # sort
set(`n`) # ... the set of digits
)[::-1] # reverse the result
# As '-' is smaller than the digits,
# it will be sorted to the back and ignored for sorting
Try it online!
5
None
can be replaced withcmp
insort
function
– Jonas Ausevicius
yesterday
The [::-1] can be exchanged for a double negation, I think.
– DonQuiKong
15 hours ago
add a comment |
up vote
6
down vote
Perl 6, 36 34 33 31 bytes
-1 byte thanks to Jo King
-2 bytes thanks to Phil H
*.sort:{sort 1,|set -<<m:g/d/}
Try it online!
Explanation
{ } # Map each number, e.g. -373
m:g/d/ # Extract digits: (3, 7, 3)
-<< # Negate each digit: (-3, -7, -3)
set # Convert to set to remove duplicates
| # Pass as list of pairs: (-3 => True, -7 => True)
1, # Prepend 1 for "none": (1, -3 => True, -7 => True)
sort # Sort (compares 1 and pair by string value): (-7 => True, -3 => True, 1)
*.sort: # Sort lexicographically
Nice! -2 bytes for swappingm:g/d./
for.abs.comb
: tio.run/…
– Phil H
10 hours ago
add a comment |
up vote
5
down vote
Python 2, 58 60 bytes
lambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Try it online!
add a comment |
up vote
5
down vote
Pyth, 7 6 bytes
-1 byte by @Sok
_o_{S`
Pyth, which uses only printable ASCII, is at a bit of a disadvantage here. Optimally encoded this would be 6*log(95)/log(256) = 4.927
bytes, beating 05AB1E.
Explained:
o Sort the implicit input by lambda N:
_ reversed
{ uniquified
S sorted
' string representation [of N]
_ then reverse the result.
Try it here.
2
The trailingN
can be left out to save 1 byte - all lambda-type functions infer the presence of the principle lambda variable if any arguments are missing from the end. Examples includem
inferringd
,f
inferringT
,u
inferringG
...
– Sok
yesterday
add a comment |
up vote
5
down vote
R, 97 95 bytes
function(x)x[rev(order(sapply(Map(sort,Map(unique,strsplit(paste(x),"")),T),Reduce,f=paste0)))]
Try it online!
This challenge seems to have been pessimized for R. Explanation of the original version (start at 1. and work up):
f <- function(x) {
x[ # 8. Input vector in
rev( # 7. Reversed
order( # 6. Lexicographical order
sapply( # 5. Paste....
Map(sort, # 4. Sort each using...
Map(unique, # 3. Deduplicate each
strsplit( # 2. Split each string into characters
paste(x), # 1. Coerce each number to string
"")),
T), # 4. ...descending sort.
paste,collapse="") # 5. ...back into strings
)
)
]
}
add a comment |
up vote
4
down vote
Jelly, 8 bytes
ADṢUQµÞU
Try it online!
How it works
ADṢUQµÞU Main link (monad). Input: integer list
µÞU Sort by (reversed):
AD Absolute value converted to decimal digits
ṢUQ Sort, reverse, take unique values
1
I just implemented this then found your post. I went with normal reverses,Ṛ
, rather than the upends,U
. Note, however, that you do not need theD
since sort,Ṣ
, is implemented with aniterable(z, make_digits=True)
call inside. So that wasAṢQṚµÞṚ
for 7.
– Jonathan Allan
yesterday
add a comment |
up vote
4
down vote
Brachylog, 9 bytes
{ȧdṫo₁}ᵒ¹
Note: due to how ordering works in brachylog, it does not work on number correctly. This is fixed by casting the number to a string (ṫ
) at the cost of 1 byte.
Try it online!
2
What do you mean by "Due to how ordering works in brachylog, it does not work as intended."? I've tried all four test cases, and its giving the correct results (unless I accidentally looked past something).
– Kevin Cruijssen
yesterday
@KevinCruijssen Theṫ
(to string) fixes the issue. Ordering digits in a number descending works as follows. Order from smallest to largest then reverse. The problem is that the number3120
ordered from smallest to largest is0123
which is equal to123
which reversed is321
and not3210
– Kroppeb
yesterday
2
Ah ok, so your current code is working due to the added toString (ṫ
). As mentioned by @Arnauld, I thought your comment meant your current code doesn't work. It might be better to mention it like: "This could have been 8 bytes by removing theṫ
(toString), but unfortunately it does not work as intended due to how ordering works in Brachylog."
– Kevin Cruijssen
yesterday
Looking at what I wrote it seems that my brain got distracted midsentence. Fixed it.
– Kroppeb
yesterday
add a comment |
up vote
2
down vote
MathGolf, 7 6 bytes
áÉ░▀zx
Try it online! or as a test suite.
Explanation
After looking at Emigna's 05AB1E solution, I found that I didn't need the absolute operator (and my previous answer was actually incorrect because of that operator). Now the main difference is that I convert to string and get unique characters instead of using the 1-byte operator in 05AB1E.
áÉ Sort by the value generated from mapping each element using the next 3 instructions
░ Convert to string
▀ Get unique characters
z Sort reversed (last instruction of block)
x Reverse list (needed because I don't have a sort-reversed by mapping)
add a comment |
up vote
2
down vote
J, 17 bytes
{~[::~.@:~@":@|
Try it online!
Explanation:
@| - find the absolute value and
@": - convert to string and
@:~ - sort down and
~. - keep only the unique symbols
: - grade down the entire list of strings
[: - function composition
{~ - use the graded-down list to index into the input
add a comment |
up vote
2
down vote
JavaScript (SpiderMonkey), 68 bytes
Thanks for @Arnauld for reminding me again that SpiderMonkey uses stable sort, so -4 bytes for removing ||-1
.
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y))
Try it online!
JavaScript (Node.js), 72 bytes
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y)||-1)
Try it online!
Or 68 bytes with SpiderMonkey.
– Arnauld
yesterday
1
@Arnauld oh stable sort again ;P
– Shieru Asakoto
yesterday
Actually, I think V8 is using at least 2 different sort algorithms. It seems like it's stable if the size of the array is less than or equal to $10$.
– Arnauld
yesterday
1
@Arnauld V8 use quick sort before Chrome 70. The quick sort algorithm perform an insertion sort when array size is small enough. And latest Chrome had changed to stable sort for matching other browsers' (IE/Firefox/Safari) behavior.
– tsh
16 hours ago
add a comment |
up vote
2
down vote
Java (JDK), 98 bytes
l->l.sort((a,b)->{int r=0,i=58;for(;r==0&i-->48;)r=(b.indexOf(i)>>9)-(a.indexOf(i)>>9);return r;})
Try it online!
Explanation
l-> // Consumer<List<String>>
l.sort( // Use the incorporated sort method which uses a...
(a,b)->{ // Comparator of Strings
int r=0, // define r as the result, initiated to 0
i=58; // i as the codepoint to test for.
for(;r==0&i-->48;) // for each digit codepoint from '9' to '0',
// and while no difference was found.
r= // set r as the difference between
(b.indexOf(i)>>9)- // was the digit found in b? then 0 else -1 using the bit-shift operator
(a.indexOf(i)>>9); // and was the digit found in a? then 0 else -1.
return r; // return the comparison result.
}
)
Note:
I needed a way to map numbers to either 0/1
or 0/-1
.
indexOf
has the nice property that it's consistently returning -1
for characters not found. -1
right-shifted by any number is always -1
. Any positive number right-shifted by a big enough number will always produce 0
.
So here we are:
input input.indexOf('9') input.indexOf('9')>>9
"999" 0 0
"111119" 5 0
"123456" -1 -1
1
Ah, yeah, that's what I mean. ;p Nice golf of using>>9
instead of>>32
due to the limited range of the numbers.
– Kevin Cruijssen
yesterday
add a comment |
up vote
2
down vote
Japt, 12 bytes
ñ_a ì â ñnÃw
All test cases
Explanation:
ñ_ Ãw :Sort Descending by:
a : Get the absolute value
ì : Get the digits
â : Remove duplicates
ñn : Sort the digits in descending order
add a comment |
up vote
2
down vote
Haskell, 54 52 bytes
import Data.List
f=r.sortOn(r.sort.nub.show);r=reverse
Try it online!
Definingr=reverse
saves two bytes. We also allow anonymous functions, so thef=
does not need to ve counted.
– Laikoni
yesterday
I moved the import and f= to the TIO header. Is that OK?
– Martin Lütke
yesterday
Same byte count, but maybe of some interest:f=r$r id.nub.show;r=(reverse.).sortOn
.
– Laikoni
yesterday
1
The import actually needs to be counted.
– Laikoni
yesterday
2
You may want to have a look at our Guide to golfing rules in Haskell.
– Laikoni
yesterday
|
show 1 more comment
up vote
2
down vote
Stax, 6 7 bytes
èó≥ü≤♥¥
Run and debug it
This seems to give incorrect results. For example, in the test case of your TIO it outputs-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
instead of the intended8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
or8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. This test case is also used in the example, and to explain the rules, so I would take a look at that to understand it better. It seems you are only sorting by the single largest digit once, without any of the other rules?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen: Yes, my apologies. I mis-read the problem statement. I've adjusted the program to handle the stated requirements. This program is accepting the input integers as quoted strings. That's usually acceptable, but if not I might need to add another byte.
– recursive
7 hours ago
Looks good now, +1 from me. And yes, inputting as strings is completely fine.
– Kevin Cruijssen
7 hours ago
add a comment |
up vote
1
down vote
C (gcc), 114 111 bytes
a;v(n){n=n<0?-n:n;for(a=0;n;n/=10)a|=1<<n%10;n=a;}c(int*a,int*b){a=v(*a)<v(*b);}f(a,n)int*a,n;{qsort(a,n,4,c);}
Try it online!
Explanation:
f() uses qsort() to sort provided array in place. Using comparison function c() to compare numbers which evaluates numbers using v().
v() calculates a higher number if bigger digits are present in parameter.
[Edit 1]
Improved by 3 bytes. 2 byte credits to Kevin. Thanks
You can golfn>0
ton
I think in your loop of your methodv
.
– Kevin Cruijssen
yesterday
Suggestfor(a=0;n=abs(n);
instead ofn=n<?-n:n;for(a=0;n;
– ceilingcat
4 hours ago
add a comment |
up vote
1
down vote
Ruby, 55 bytes
->a{a.sort_by{|x|x.abs.digits.sort.reverse|}.reverse}
Try it online!
add a comment |
up vote
1
down vote
Perl 5 -nl
, 68 bytes
$a{eval"9876543210=~y/$_//dcr"}=$_}{say$a{$_}for reverse sort keys%a
Try it online!
add a comment |
up vote
1
down vote
C# (Visual C# Interactive Compiler), 84 bytes
x=>x.OrderByDescending(y=>String.Concat((y+"-").Distinct().OrderByDescending(z=>z)))
Try it online!
In C#, strings are considered "enumerables" of characters. I use this to my advantage by first converting each number to a string. LINQ is then leveraged to get the unique characters (digits) sorted in reverse order. I convert each sorted character array back into a string and use that as the sort key to order the whole list.
I was scratching my head with how to handle the hyphen for negative numbers. But as it turns out, adding the hyphen character to all of my numbers takes care of the tie breaker when one number has a superset of digits compared to the other.
add a comment |
up vote
1
down vote
Julia 1.0, 50 bytes
x->sort(x,by=y->sort(unique([digits(-abs(y));1])))
Try it online!
add a comment |
up vote
1
down vote
APL (Dyalog Extended), 19 bytes
{⍵[⍒∪¨(∨'¯'~⍨⍕)¨⍵]}
Try it online!
Fixed at a cost of +2 bytes thanks to OP.
I think you are missing an 'uniquify' somewhere? If I try the example test case in your TIO for example,¯7738
is placed before478
, but it should be after it: digits[8,7,4]
come before digits[8,7,3]
.
– Kevin Cruijssen
7 hours ago
Thanks, @KevinCruijssen
– Zacharý
3 hours ago
add a comment |
21 Answers
21
active
oldest
votes
21 Answers
21
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
6
down vote
05AB1E, 5 bytes
ΣêR}R
Try it online!
or as a Test suite
Explanation
Σ } # sort input by
ê # its sorted unique characters
R # reversed (to sort descending)
R # reverse the result (to sort descending)
add a comment |
up vote
6
down vote
05AB1E, 5 bytes
ΣêR}R
Try it online!
or as a Test suite
Explanation
Σ } # sort input by
ê # its sorted unique characters
R # reversed (to sort descending)
R # reverse the result (to sort descending)
add a comment |
up vote
6
down vote
up vote
6
down vote
05AB1E, 5 bytes
ΣêR}R
Try it online!
or as a Test suite
Explanation
Σ } # sort input by
ê # its sorted unique characters
R # reversed (to sort descending)
R # reverse the result (to sort descending)
05AB1E, 5 bytes
ΣêR}R
Try it online!
or as a Test suite
Explanation
Σ } # sort input by
ê # its sorted unique characters
R # reversed (to sort descending)
R # reverse the result (to sort descending)
edited yesterday
answered yesterday
Emigna
44.8k432136
44.8k432136
add a comment |
add a comment |
up vote
6
down vote
Python 2, 60 55 bytes
def f(l):l.sort(None,lambda n:sorted(set(`n`))[::-1],1)
Try it online!
Ungolfed
def f(l):
l.sort( # Sort the list in place
cmp = None, # ... with no custom comparison function
key = k, # ... on the function
reverse = 1 # ... in reverse
) # As the arguments are used in the right order, no names are necessary.
k = lambda n:sorted( # sort
set(`n`) # ... the set of digits
)[::-1] # reverse the result
# As '-' is smaller than the digits,
# it will be sorted to the back and ignored for sorting
Try it online!
5
None
can be replaced withcmp
insort
function
– Jonas Ausevicius
yesterday
The [::-1] can be exchanged for a double negation, I think.
– DonQuiKong
15 hours ago
add a comment |
up vote
6
down vote
Python 2, 60 55 bytes
def f(l):l.sort(None,lambda n:sorted(set(`n`))[::-1],1)
Try it online!
Ungolfed
def f(l):
l.sort( # Sort the list in place
cmp = None, # ... with no custom comparison function
key = k, # ... on the function
reverse = 1 # ... in reverse
) # As the arguments are used in the right order, no names are necessary.
k = lambda n:sorted( # sort
set(`n`) # ... the set of digits
)[::-1] # reverse the result
# As '-' is smaller than the digits,
# it will be sorted to the back and ignored for sorting
Try it online!
5
None
can be replaced withcmp
insort
function
– Jonas Ausevicius
yesterday
The [::-1] can be exchanged for a double negation, I think.
– DonQuiKong
15 hours ago
add a comment |
up vote
6
down vote
up vote
6
down vote
Python 2, 60 55 bytes
def f(l):l.sort(None,lambda n:sorted(set(`n`))[::-1],1)
Try it online!
Ungolfed
def f(l):
l.sort( # Sort the list in place
cmp = None, # ... with no custom comparison function
key = k, # ... on the function
reverse = 1 # ... in reverse
) # As the arguments are used in the right order, no names are necessary.
k = lambda n:sorted( # sort
set(`n`) # ... the set of digits
)[::-1] # reverse the result
# As '-' is smaller than the digits,
# it will be sorted to the back and ignored for sorting
Try it online!
Python 2, 60 55 bytes
def f(l):l.sort(None,lambda n:sorted(set(`n`))[::-1],1)
Try it online!
Ungolfed
def f(l):
l.sort( # Sort the list in place
cmp = None, # ... with no custom comparison function
key = k, # ... on the function
reverse = 1 # ... in reverse
) # As the arguments are used in the right order, no names are necessary.
k = lambda n:sorted( # sort
set(`n`) # ... the set of digits
)[::-1] # reverse the result
# As '-' is smaller than the digits,
# it will be sorted to the back and ignored for sorting
Try it online!
edited yesterday
answered yesterday
ovs
18.3k21059
18.3k21059
5
None
can be replaced withcmp
insort
function
– Jonas Ausevicius
yesterday
The [::-1] can be exchanged for a double negation, I think.
– DonQuiKong
15 hours ago
add a comment |
5
None
can be replaced withcmp
insort
function
– Jonas Ausevicius
yesterday
The [::-1] can be exchanged for a double negation, I think.
– DonQuiKong
15 hours ago
5
5
None
can be replaced with cmp
in sort
function– Jonas Ausevicius
yesterday
None
can be replaced with cmp
in sort
function– Jonas Ausevicius
yesterday
The [::-1] can be exchanged for a double negation, I think.
– DonQuiKong
15 hours ago
The [::-1] can be exchanged for a double negation, I think.
– DonQuiKong
15 hours ago
add a comment |
up vote
6
down vote
Perl 6, 36 34 33 31 bytes
-1 byte thanks to Jo King
-2 bytes thanks to Phil H
*.sort:{sort 1,|set -<<m:g/d/}
Try it online!
Explanation
{ } # Map each number, e.g. -373
m:g/d/ # Extract digits: (3, 7, 3)
-<< # Negate each digit: (-3, -7, -3)
set # Convert to set to remove duplicates
| # Pass as list of pairs: (-3 => True, -7 => True)
1, # Prepend 1 for "none": (1, -3 => True, -7 => True)
sort # Sort (compares 1 and pair by string value): (-7 => True, -3 => True, 1)
*.sort: # Sort lexicographically
Nice! -2 bytes for swappingm:g/d./
for.abs.comb
: tio.run/…
– Phil H
10 hours ago
add a comment |
up vote
6
down vote
Perl 6, 36 34 33 31 bytes
-1 byte thanks to Jo King
-2 bytes thanks to Phil H
*.sort:{sort 1,|set -<<m:g/d/}
Try it online!
Explanation
{ } # Map each number, e.g. -373
m:g/d/ # Extract digits: (3, 7, 3)
-<< # Negate each digit: (-3, -7, -3)
set # Convert to set to remove duplicates
| # Pass as list of pairs: (-3 => True, -7 => True)
1, # Prepend 1 for "none": (1, -3 => True, -7 => True)
sort # Sort (compares 1 and pair by string value): (-7 => True, -3 => True, 1)
*.sort: # Sort lexicographically
Nice! -2 bytes for swappingm:g/d./
for.abs.comb
: tio.run/…
– Phil H
10 hours ago
add a comment |
up vote
6
down vote
up vote
6
down vote
Perl 6, 36 34 33 31 bytes
-1 byte thanks to Jo King
-2 bytes thanks to Phil H
*.sort:{sort 1,|set -<<m:g/d/}
Try it online!
Explanation
{ } # Map each number, e.g. -373
m:g/d/ # Extract digits: (3, 7, 3)
-<< # Negate each digit: (-3, -7, -3)
set # Convert to set to remove duplicates
| # Pass as list of pairs: (-3 => True, -7 => True)
1, # Prepend 1 for "none": (1, -3 => True, -7 => True)
sort # Sort (compares 1 and pair by string value): (-7 => True, -3 => True, 1)
*.sort: # Sort lexicographically
Perl 6, 36 34 33 31 bytes
-1 byte thanks to Jo King
-2 bytes thanks to Phil H
*.sort:{sort 1,|set -<<m:g/d/}
Try it online!
Explanation
{ } # Map each number, e.g. -373
m:g/d/ # Extract digits: (3, 7, 3)
-<< # Negate each digit: (-3, -7, -3)
set # Convert to set to remove duplicates
| # Pass as list of pairs: (-3 => True, -7 => True)
1, # Prepend 1 for "none": (1, -3 => True, -7 => True)
sort # Sort (compares 1 and pair by string value): (-7 => True, -3 => True, 1)
*.sort: # Sort lexicographically
edited 10 hours ago
answered yesterday
nwellnhof
5,8081121
5,8081121
Nice! -2 bytes for swappingm:g/d./
for.abs.comb
: tio.run/…
– Phil H
10 hours ago
add a comment |
Nice! -2 bytes for swappingm:g/d./
for.abs.comb
: tio.run/…
– Phil H
10 hours ago
Nice! -2 bytes for swapping
m:g/d./
for .abs.comb
: tio.run/…– Phil H
10 hours ago
Nice! -2 bytes for swapping
m:g/d./
for .abs.comb
: tio.run/…– Phil H
10 hours ago
add a comment |
up vote
5
down vote
Python 2, 58 60 bytes
lambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Try it online!
add a comment |
up vote
5
down vote
Python 2, 58 60 bytes
lambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Try it online!
add a comment |
up vote
5
down vote
up vote
5
down vote
Python 2, 58 60 bytes
lambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Try it online!
Python 2, 58 60 bytes
lambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Try it online!
answered yesterday
Jonas Ausevicius
1113
1113
add a comment |
add a comment |
up vote
5
down vote
Pyth, 7 6 bytes
-1 byte by @Sok
_o_{S`
Pyth, which uses only printable ASCII, is at a bit of a disadvantage here. Optimally encoded this would be 6*log(95)/log(256) = 4.927
bytes, beating 05AB1E.
Explained:
o Sort the implicit input by lambda N:
_ reversed
{ uniquified
S sorted
' string representation [of N]
_ then reverse the result.
Try it here.
2
The trailingN
can be left out to save 1 byte - all lambda-type functions infer the presence of the principle lambda variable if any arguments are missing from the end. Examples includem
inferringd
,f
inferringT
,u
inferringG
...
– Sok
yesterday
add a comment |
up vote
5
down vote
Pyth, 7 6 bytes
-1 byte by @Sok
_o_{S`
Pyth, which uses only printable ASCII, is at a bit of a disadvantage here. Optimally encoded this would be 6*log(95)/log(256) = 4.927
bytes, beating 05AB1E.
Explained:
o Sort the implicit input by lambda N:
_ reversed
{ uniquified
S sorted
' string representation [of N]
_ then reverse the result.
Try it here.
2
The trailingN
can be left out to save 1 byte - all lambda-type functions infer the presence of the principle lambda variable if any arguments are missing from the end. Examples includem
inferringd
,f
inferringT
,u
inferringG
...
– Sok
yesterday
add a comment |
up vote
5
down vote
up vote
5
down vote
Pyth, 7 6 bytes
-1 byte by @Sok
_o_{S`
Pyth, which uses only printable ASCII, is at a bit of a disadvantage here. Optimally encoded this would be 6*log(95)/log(256) = 4.927
bytes, beating 05AB1E.
Explained:
o Sort the implicit input by lambda N:
_ reversed
{ uniquified
S sorted
' string representation [of N]
_ then reverse the result.
Try it here.
Pyth, 7 6 bytes
-1 byte by @Sok
_o_{S`
Pyth, which uses only printable ASCII, is at a bit of a disadvantage here. Optimally encoded this would be 6*log(95)/log(256) = 4.927
bytes, beating 05AB1E.
Explained:
o Sort the implicit input by lambda N:
_ reversed
{ uniquified
S sorted
' string representation [of N]
_ then reverse the result.
Try it here.
edited yesterday
answered yesterday
lirtosiast
15.1k436102
15.1k436102
2
The trailingN
can be left out to save 1 byte - all lambda-type functions infer the presence of the principle lambda variable if any arguments are missing from the end. Examples includem
inferringd
,f
inferringT
,u
inferringG
...
– Sok
yesterday
add a comment |
2
The trailingN
can be left out to save 1 byte - all lambda-type functions infer the presence of the principle lambda variable if any arguments are missing from the end. Examples includem
inferringd
,f
inferringT
,u
inferringG
...
– Sok
yesterday
2
2
The trailing
N
can be left out to save 1 byte - all lambda-type functions infer the presence of the principle lambda variable if any arguments are missing from the end. Examples include m
inferring d
, f
inferring T
, u
inferring G
...– Sok
yesterday
The trailing
N
can be left out to save 1 byte - all lambda-type functions infer the presence of the principle lambda variable if any arguments are missing from the end. Examples include m
inferring d
, f
inferring T
, u
inferring G
...– Sok
yesterday
add a comment |
up vote
5
down vote
R, 97 95 bytes
function(x)x[rev(order(sapply(Map(sort,Map(unique,strsplit(paste(x),"")),T),Reduce,f=paste0)))]
Try it online!
This challenge seems to have been pessimized for R. Explanation of the original version (start at 1. and work up):
f <- function(x) {
x[ # 8. Input vector in
rev( # 7. Reversed
order( # 6. Lexicographical order
sapply( # 5. Paste....
Map(sort, # 4. Sort each using...
Map(unique, # 3. Deduplicate each
strsplit( # 2. Split each string into characters
paste(x), # 1. Coerce each number to string
"")),
T), # 4. ...descending sort.
paste,collapse="") # 5. ...back into strings
)
)
]
}
add a comment |
up vote
5
down vote
R, 97 95 bytes
function(x)x[rev(order(sapply(Map(sort,Map(unique,strsplit(paste(x),"")),T),Reduce,f=paste0)))]
Try it online!
This challenge seems to have been pessimized for R. Explanation of the original version (start at 1. and work up):
f <- function(x) {
x[ # 8. Input vector in
rev( # 7. Reversed
order( # 6. Lexicographical order
sapply( # 5. Paste....
Map(sort, # 4. Sort each using...
Map(unique, # 3. Deduplicate each
strsplit( # 2. Split each string into characters
paste(x), # 1. Coerce each number to string
"")),
T), # 4. ...descending sort.
paste,collapse="") # 5. ...back into strings
)
)
]
}
add a comment |
up vote
5
down vote
up vote
5
down vote
R, 97 95 bytes
function(x)x[rev(order(sapply(Map(sort,Map(unique,strsplit(paste(x),"")),T),Reduce,f=paste0)))]
Try it online!
This challenge seems to have been pessimized for R. Explanation of the original version (start at 1. and work up):
f <- function(x) {
x[ # 8. Input vector in
rev( # 7. Reversed
order( # 6. Lexicographical order
sapply( # 5. Paste....
Map(sort, # 4. Sort each using...
Map(unique, # 3. Deduplicate each
strsplit( # 2. Split each string into characters
paste(x), # 1. Coerce each number to string
"")),
T), # 4. ...descending sort.
paste,collapse="") # 5. ...back into strings
)
)
]
}
R, 97 95 bytes
function(x)x[rev(order(sapply(Map(sort,Map(unique,strsplit(paste(x),"")),T),Reduce,f=paste0)))]
Try it online!
This challenge seems to have been pessimized for R. Explanation of the original version (start at 1. and work up):
f <- function(x) {
x[ # 8. Input vector in
rev( # 7. Reversed
order( # 6. Lexicographical order
sapply( # 5. Paste....
Map(sort, # 4. Sort each using...
Map(unique, # 3. Deduplicate each
strsplit( # 2. Split each string into characters
paste(x), # 1. Coerce each number to string
"")),
T), # 4. ...descending sort.
paste,collapse="") # 5. ...back into strings
)
)
]
}
edited yesterday
answered yesterday
ngm
2,97923
2,97923
add a comment |
add a comment |
up vote
4
down vote
Jelly, 8 bytes
ADṢUQµÞU
Try it online!
How it works
ADṢUQµÞU Main link (monad). Input: integer list
µÞU Sort by (reversed):
AD Absolute value converted to decimal digits
ṢUQ Sort, reverse, take unique values
1
I just implemented this then found your post. I went with normal reverses,Ṛ
, rather than the upends,U
. Note, however, that you do not need theD
since sort,Ṣ
, is implemented with aniterable(z, make_digits=True)
call inside. So that wasAṢQṚµÞṚ
for 7.
– Jonathan Allan
yesterday
add a comment |
up vote
4
down vote
Jelly, 8 bytes
ADṢUQµÞU
Try it online!
How it works
ADṢUQµÞU Main link (monad). Input: integer list
µÞU Sort by (reversed):
AD Absolute value converted to decimal digits
ṢUQ Sort, reverse, take unique values
1
I just implemented this then found your post. I went with normal reverses,Ṛ
, rather than the upends,U
. Note, however, that you do not need theD
since sort,Ṣ
, is implemented with aniterable(z, make_digits=True)
call inside. So that wasAṢQṚµÞṚ
for 7.
– Jonathan Allan
yesterday
add a comment |
up vote
4
down vote
up vote
4
down vote
Jelly, 8 bytes
ADṢUQµÞU
Try it online!
How it works
ADṢUQµÞU Main link (monad). Input: integer list
µÞU Sort by (reversed):
AD Absolute value converted to decimal digits
ṢUQ Sort, reverse, take unique values
Jelly, 8 bytes
ADṢUQµÞU
Try it online!
How it works
ADṢUQµÞU Main link (monad). Input: integer list
µÞU Sort by (reversed):
AD Absolute value converted to decimal digits
ṢUQ Sort, reverse, take unique values
answered yesterday
Bubbler
5,494754
5,494754
1
I just implemented this then found your post. I went with normal reverses,Ṛ
, rather than the upends,U
. Note, however, that you do not need theD
since sort,Ṣ
, is implemented with aniterable(z, make_digits=True)
call inside. So that wasAṢQṚµÞṚ
for 7.
– Jonathan Allan
yesterday
add a comment |
1
I just implemented this then found your post. I went with normal reverses,Ṛ
, rather than the upends,U
. Note, however, that you do not need theD
since sort,Ṣ
, is implemented with aniterable(z, make_digits=True)
call inside. So that wasAṢQṚµÞṚ
for 7.
– Jonathan Allan
yesterday
1
1
I just implemented this then found your post. I went with normal reverses,
Ṛ
, rather than the upends, U
. Note, however, that you do not need the D
since sort, Ṣ
, is implemented with an iterable(z, make_digits=True)
call inside. So that was AṢQṚµÞṚ
for 7.– Jonathan Allan
yesterday
I just implemented this then found your post. I went with normal reverses,
Ṛ
, rather than the upends, U
. Note, however, that you do not need the D
since sort, Ṣ
, is implemented with an iterable(z, make_digits=True)
call inside. So that was AṢQṚµÞṚ
for 7.– Jonathan Allan
yesterday
add a comment |
up vote
4
down vote
Brachylog, 9 bytes
{ȧdṫo₁}ᵒ¹
Note: due to how ordering works in brachylog, it does not work on number correctly. This is fixed by casting the number to a string (ṫ
) at the cost of 1 byte.
Try it online!
2
What do you mean by "Due to how ordering works in brachylog, it does not work as intended."? I've tried all four test cases, and its giving the correct results (unless I accidentally looked past something).
– Kevin Cruijssen
yesterday
@KevinCruijssen Theṫ
(to string) fixes the issue. Ordering digits in a number descending works as follows. Order from smallest to largest then reverse. The problem is that the number3120
ordered from smallest to largest is0123
which is equal to123
which reversed is321
and not3210
– Kroppeb
yesterday
2
Ah ok, so your current code is working due to the added toString (ṫ
). As mentioned by @Arnauld, I thought your comment meant your current code doesn't work. It might be better to mention it like: "This could have been 8 bytes by removing theṫ
(toString), but unfortunately it does not work as intended due to how ordering works in Brachylog."
– Kevin Cruijssen
yesterday
Looking at what I wrote it seems that my brain got distracted midsentence. Fixed it.
– Kroppeb
yesterday
add a comment |
up vote
4
down vote
Brachylog, 9 bytes
{ȧdṫo₁}ᵒ¹
Note: due to how ordering works in brachylog, it does not work on number correctly. This is fixed by casting the number to a string (ṫ
) at the cost of 1 byte.
Try it online!
2
What do you mean by "Due to how ordering works in brachylog, it does not work as intended."? I've tried all four test cases, and its giving the correct results (unless I accidentally looked past something).
– Kevin Cruijssen
yesterday
@KevinCruijssen Theṫ
(to string) fixes the issue. Ordering digits in a number descending works as follows. Order from smallest to largest then reverse. The problem is that the number3120
ordered from smallest to largest is0123
which is equal to123
which reversed is321
and not3210
– Kroppeb
yesterday
2
Ah ok, so your current code is working due to the added toString (ṫ
). As mentioned by @Arnauld, I thought your comment meant your current code doesn't work. It might be better to mention it like: "This could have been 8 bytes by removing theṫ
(toString), but unfortunately it does not work as intended due to how ordering works in Brachylog."
– Kevin Cruijssen
yesterday
Looking at what I wrote it seems that my brain got distracted midsentence. Fixed it.
– Kroppeb
yesterday
add a comment |
up vote
4
down vote
up vote
4
down vote
Brachylog, 9 bytes
{ȧdṫo₁}ᵒ¹
Note: due to how ordering works in brachylog, it does not work on number correctly. This is fixed by casting the number to a string (ṫ
) at the cost of 1 byte.
Try it online!
Brachylog, 9 bytes
{ȧdṫo₁}ᵒ¹
Note: due to how ordering works in brachylog, it does not work on number correctly. This is fixed by casting the number to a string (ṫ
) at the cost of 1 byte.
Try it online!
edited yesterday
answered yesterday
Kroppeb
99628
99628
2
What do you mean by "Due to how ordering works in brachylog, it does not work as intended."? I've tried all four test cases, and its giving the correct results (unless I accidentally looked past something).
– Kevin Cruijssen
yesterday
@KevinCruijssen Theṫ
(to string) fixes the issue. Ordering digits in a number descending works as follows. Order from smallest to largest then reverse. The problem is that the number3120
ordered from smallest to largest is0123
which is equal to123
which reversed is321
and not3210
– Kroppeb
yesterday
2
Ah ok, so your current code is working due to the added toString (ṫ
). As mentioned by @Arnauld, I thought your comment meant your current code doesn't work. It might be better to mention it like: "This could have been 8 bytes by removing theṫ
(toString), but unfortunately it does not work as intended due to how ordering works in Brachylog."
– Kevin Cruijssen
yesterday
Looking at what I wrote it seems that my brain got distracted midsentence. Fixed it.
– Kroppeb
yesterday
add a comment |
2
What do you mean by "Due to how ordering works in brachylog, it does not work as intended."? I've tried all four test cases, and its giving the correct results (unless I accidentally looked past something).
– Kevin Cruijssen
yesterday
@KevinCruijssen Theṫ
(to string) fixes the issue. Ordering digits in a number descending works as follows. Order from smallest to largest then reverse. The problem is that the number3120
ordered from smallest to largest is0123
which is equal to123
which reversed is321
and not3210
– Kroppeb
yesterday
2
Ah ok, so your current code is working due to the added toString (ṫ
). As mentioned by @Arnauld, I thought your comment meant your current code doesn't work. It might be better to mention it like: "This could have been 8 bytes by removing theṫ
(toString), but unfortunately it does not work as intended due to how ordering works in Brachylog."
– Kevin Cruijssen
yesterday
Looking at what I wrote it seems that my brain got distracted midsentence. Fixed it.
– Kroppeb
yesterday
2
2
What do you mean by "Due to how ordering works in brachylog, it does not work as intended."? I've tried all four test cases, and its giving the correct results (unless I accidentally looked past something).
– Kevin Cruijssen
yesterday
What do you mean by "Due to how ordering works in brachylog, it does not work as intended."? I've tried all four test cases, and its giving the correct results (unless I accidentally looked past something).
– Kevin Cruijssen
yesterday
@KevinCruijssen The
ṫ
(to string) fixes the issue. Ordering digits in a number descending works as follows. Order from smallest to largest then reverse. The problem is that the number 3120
ordered from smallest to largest is 0123
which is equal to 123
which reversed is 321
and not 3210
– Kroppeb
yesterday
@KevinCruijssen The
ṫ
(to string) fixes the issue. Ordering digits in a number descending works as follows. Order from smallest to largest then reverse. The problem is that the number 3120
ordered from smallest to largest is 0123
which is equal to 123
which reversed is 321
and not 3210
– Kroppeb
yesterday
2
2
Ah ok, so your current code is working due to the added toString (
ṫ
). As mentioned by @Arnauld, I thought your comment meant your current code doesn't work. It might be better to mention it like: "This could have been 8 bytes by removing the ṫ
(toString), but unfortunately it does not work as intended due to how ordering works in Brachylog."– Kevin Cruijssen
yesterday
Ah ok, so your current code is working due to the added toString (
ṫ
). As mentioned by @Arnauld, I thought your comment meant your current code doesn't work. It might be better to mention it like: "This could have been 8 bytes by removing the ṫ
(toString), but unfortunately it does not work as intended due to how ordering works in Brachylog."– Kevin Cruijssen
yesterday
Looking at what I wrote it seems that my brain got distracted midsentence. Fixed it.
– Kroppeb
yesterday
Looking at what I wrote it seems that my brain got distracted midsentence. Fixed it.
– Kroppeb
yesterday
add a comment |
up vote
2
down vote
MathGolf, 7 6 bytes
áÉ░▀zx
Try it online! or as a test suite.
Explanation
After looking at Emigna's 05AB1E solution, I found that I didn't need the absolute operator (and my previous answer was actually incorrect because of that operator). Now the main difference is that I convert to string and get unique characters instead of using the 1-byte operator in 05AB1E.
áÉ Sort by the value generated from mapping each element using the next 3 instructions
░ Convert to string
▀ Get unique characters
z Sort reversed (last instruction of block)
x Reverse list (needed because I don't have a sort-reversed by mapping)
add a comment |
up vote
2
down vote
MathGolf, 7 6 bytes
áÉ░▀zx
Try it online! or as a test suite.
Explanation
After looking at Emigna's 05AB1E solution, I found that I didn't need the absolute operator (and my previous answer was actually incorrect because of that operator). Now the main difference is that I convert to string and get unique characters instead of using the 1-byte operator in 05AB1E.
áÉ Sort by the value generated from mapping each element using the next 3 instructions
░ Convert to string
▀ Get unique characters
z Sort reversed (last instruction of block)
x Reverse list (needed because I don't have a sort-reversed by mapping)
add a comment |
up vote
2
down vote
up vote
2
down vote
MathGolf, 7 6 bytes
áÉ░▀zx
Try it online! or as a test suite.
Explanation
After looking at Emigna's 05AB1E solution, I found that I didn't need the absolute operator (and my previous answer was actually incorrect because of that operator). Now the main difference is that I convert to string and get unique characters instead of using the 1-byte operator in 05AB1E.
áÉ Sort by the value generated from mapping each element using the next 3 instructions
░ Convert to string
▀ Get unique characters
z Sort reversed (last instruction of block)
x Reverse list (needed because I don't have a sort-reversed by mapping)
MathGolf, 7 6 bytes
áÉ░▀zx
Try it online! or as a test suite.
Explanation
After looking at Emigna's 05AB1E solution, I found that I didn't need the absolute operator (and my previous answer was actually incorrect because of that operator). Now the main difference is that I convert to string and get unique characters instead of using the 1-byte operator in 05AB1E.
áÉ Sort by the value generated from mapping each element using the next 3 instructions
░ Convert to string
▀ Get unique characters
z Sort reversed (last instruction of block)
x Reverse list (needed because I don't have a sort-reversed by mapping)
edited yesterday
answered yesterday
maxb
2,0081923
2,0081923
add a comment |
add a comment |
up vote
2
down vote
J, 17 bytes
{~[::~.@:~@":@|
Try it online!
Explanation:
@| - find the absolute value and
@": - convert to string and
@:~ - sort down and
~. - keep only the unique symbols
: - grade down the entire list of strings
[: - function composition
{~ - use the graded-down list to index into the input
add a comment |
up vote
2
down vote
J, 17 bytes
{~[::~.@:~@":@|
Try it online!
Explanation:
@| - find the absolute value and
@": - convert to string and
@:~ - sort down and
~. - keep only the unique symbols
: - grade down the entire list of strings
[: - function composition
{~ - use the graded-down list to index into the input
add a comment |
up vote
2
down vote
up vote
2
down vote
J, 17 bytes
{~[::~.@:~@":@|
Try it online!
Explanation:
@| - find the absolute value and
@": - convert to string and
@:~ - sort down and
~. - keep only the unique symbols
: - grade down the entire list of strings
[: - function composition
{~ - use the graded-down list to index into the input
J, 17 bytes
{~[::~.@:~@":@|
Try it online!
Explanation:
@| - find the absolute value and
@": - convert to string and
@:~ - sort down and
~. - keep only the unique symbols
: - grade down the entire list of strings
[: - function composition
{~ - use the graded-down list to index into the input
edited yesterday
answered yesterday
Galen Ivanov
5,88711032
5,88711032
add a comment |
add a comment |
up vote
2
down vote
JavaScript (SpiderMonkey), 68 bytes
Thanks for @Arnauld for reminding me again that SpiderMonkey uses stable sort, so -4 bytes for removing ||-1
.
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y))
Try it online!
JavaScript (Node.js), 72 bytes
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y)||-1)
Try it online!
Or 68 bytes with SpiderMonkey.
– Arnauld
yesterday
1
@Arnauld oh stable sort again ;P
– Shieru Asakoto
yesterday
Actually, I think V8 is using at least 2 different sort algorithms. It seems like it's stable if the size of the array is less than or equal to $10$.
– Arnauld
yesterday
1
@Arnauld V8 use quick sort before Chrome 70. The quick sort algorithm perform an insertion sort when array size is small enough. And latest Chrome had changed to stable sort for matching other browsers' (IE/Firefox/Safari) behavior.
– tsh
16 hours ago
add a comment |
up vote
2
down vote
JavaScript (SpiderMonkey), 68 bytes
Thanks for @Arnauld for reminding me again that SpiderMonkey uses stable sort, so -4 bytes for removing ||-1
.
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y))
Try it online!
JavaScript (Node.js), 72 bytes
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y)||-1)
Try it online!
Or 68 bytes with SpiderMonkey.
– Arnauld
yesterday
1
@Arnauld oh stable sort again ;P
– Shieru Asakoto
yesterday
Actually, I think V8 is using at least 2 different sort algorithms. It seems like it's stable if the size of the array is less than or equal to $10$.
– Arnauld
yesterday
1
@Arnauld V8 use quick sort before Chrome 70. The quick sort algorithm perform an insertion sort when array size is small enough. And latest Chrome had changed to stable sort for matching other browsers' (IE/Firefox/Safari) behavior.
– tsh
16 hours ago
add a comment |
up vote
2
down vote
up vote
2
down vote
JavaScript (SpiderMonkey), 68 bytes
Thanks for @Arnauld for reminding me again that SpiderMonkey uses stable sort, so -4 bytes for removing ||-1
.
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y))
Try it online!
JavaScript (Node.js), 72 bytes
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y)||-1)
Try it online!
JavaScript (SpiderMonkey), 68 bytes
Thanks for @Arnauld for reminding me again that SpiderMonkey uses stable sort, so -4 bytes for removing ||-1
.
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y))
Try it online!
JavaScript (Node.js), 72 bytes
A=>A.sort((x,y,F=n=>[...new Set(""+n)].sort().reverse())=>F(x)<F(y)||-1)
Try it online!
edited yesterday
answered yesterday
Shieru Asakoto
2,220314
2,220314
Or 68 bytes with SpiderMonkey.
– Arnauld
yesterday
1
@Arnauld oh stable sort again ;P
– Shieru Asakoto
yesterday
Actually, I think V8 is using at least 2 different sort algorithms. It seems like it's stable if the size of the array is less than or equal to $10$.
– Arnauld
yesterday
1
@Arnauld V8 use quick sort before Chrome 70. The quick sort algorithm perform an insertion sort when array size is small enough. And latest Chrome had changed to stable sort for matching other browsers' (IE/Firefox/Safari) behavior.
– tsh
16 hours ago
add a comment |
Or 68 bytes with SpiderMonkey.
– Arnauld
yesterday
1
@Arnauld oh stable sort again ;P
– Shieru Asakoto
yesterday
Actually, I think V8 is using at least 2 different sort algorithms. It seems like it's stable if the size of the array is less than or equal to $10$.
– Arnauld
yesterday
1
@Arnauld V8 use quick sort before Chrome 70. The quick sort algorithm perform an insertion sort when array size is small enough. And latest Chrome had changed to stable sort for matching other browsers' (IE/Firefox/Safari) behavior.
– tsh
16 hours ago
Or 68 bytes with SpiderMonkey.
– Arnauld
yesterday
Or 68 bytes with SpiderMonkey.
– Arnauld
yesterday
1
1
@Arnauld oh stable sort again ;P
– Shieru Asakoto
yesterday
@Arnauld oh stable sort again ;P
– Shieru Asakoto
yesterday
Actually, I think V8 is using at least 2 different sort algorithms. It seems like it's stable if the size of the array is less than or equal to $10$.
– Arnauld
yesterday
Actually, I think V8 is using at least 2 different sort algorithms. It seems like it's stable if the size of the array is less than or equal to $10$.
– Arnauld
yesterday
1
1
@Arnauld V8 use quick sort before Chrome 70. The quick sort algorithm perform an insertion sort when array size is small enough. And latest Chrome had changed to stable sort for matching other browsers' (IE/Firefox/Safari) behavior.
– tsh
16 hours ago
@Arnauld V8 use quick sort before Chrome 70. The quick sort algorithm perform an insertion sort when array size is small enough. And latest Chrome had changed to stable sort for matching other browsers' (IE/Firefox/Safari) behavior.
– tsh
16 hours ago
add a comment |
up vote
2
down vote
Java (JDK), 98 bytes
l->l.sort((a,b)->{int r=0,i=58;for(;r==0&i-->48;)r=(b.indexOf(i)>>9)-(a.indexOf(i)>>9);return r;})
Try it online!
Explanation
l-> // Consumer<List<String>>
l.sort( // Use the incorporated sort method which uses a...
(a,b)->{ // Comparator of Strings
int r=0, // define r as the result, initiated to 0
i=58; // i as the codepoint to test for.
for(;r==0&i-->48;) // for each digit codepoint from '9' to '0',
// and while no difference was found.
r= // set r as the difference between
(b.indexOf(i)>>9)- // was the digit found in b? then 0 else -1 using the bit-shift operator
(a.indexOf(i)>>9); // and was the digit found in a? then 0 else -1.
return r; // return the comparison result.
}
)
Note:
I needed a way to map numbers to either 0/1
or 0/-1
.
indexOf
has the nice property that it's consistently returning -1
for characters not found. -1
right-shifted by any number is always -1
. Any positive number right-shifted by a big enough number will always produce 0
.
So here we are:
input input.indexOf('9') input.indexOf('9')>>9
"999" 0 0
"111119" 5 0
"123456" -1 -1
1
Ah, yeah, that's what I mean. ;p Nice golf of using>>9
instead of>>32
due to the limited range of the numbers.
– Kevin Cruijssen
yesterday
add a comment |
up vote
2
down vote
Java (JDK), 98 bytes
l->l.sort((a,b)->{int r=0,i=58;for(;r==0&i-->48;)r=(b.indexOf(i)>>9)-(a.indexOf(i)>>9);return r;})
Try it online!
Explanation
l-> // Consumer<List<String>>
l.sort( // Use the incorporated sort method which uses a...
(a,b)->{ // Comparator of Strings
int r=0, // define r as the result, initiated to 0
i=58; // i as the codepoint to test for.
for(;r==0&i-->48;) // for each digit codepoint from '9' to '0',
// and while no difference was found.
r= // set r as the difference between
(b.indexOf(i)>>9)- // was the digit found in b? then 0 else -1 using the bit-shift operator
(a.indexOf(i)>>9); // and was the digit found in a? then 0 else -1.
return r; // return the comparison result.
}
)
Note:
I needed a way to map numbers to either 0/1
or 0/-1
.
indexOf
has the nice property that it's consistently returning -1
for characters not found. -1
right-shifted by any number is always -1
. Any positive number right-shifted by a big enough number will always produce 0
.
So here we are:
input input.indexOf('9') input.indexOf('9')>>9
"999" 0 0
"111119" 5 0
"123456" -1 -1
1
Ah, yeah, that's what I mean. ;p Nice golf of using>>9
instead of>>32
due to the limited range of the numbers.
– Kevin Cruijssen
yesterday
add a comment |
up vote
2
down vote
up vote
2
down vote
Java (JDK), 98 bytes
l->l.sort((a,b)->{int r=0,i=58;for(;r==0&i-->48;)r=(b.indexOf(i)>>9)-(a.indexOf(i)>>9);return r;})
Try it online!
Explanation
l-> // Consumer<List<String>>
l.sort( // Use the incorporated sort method which uses a...
(a,b)->{ // Comparator of Strings
int r=0, // define r as the result, initiated to 0
i=58; // i as the codepoint to test for.
for(;r==0&i-->48;) // for each digit codepoint from '9' to '0',
// and while no difference was found.
r= // set r as the difference between
(b.indexOf(i)>>9)- // was the digit found in b? then 0 else -1 using the bit-shift operator
(a.indexOf(i)>>9); // and was the digit found in a? then 0 else -1.
return r; // return the comparison result.
}
)
Note:
I needed a way to map numbers to either 0/1
or 0/-1
.
indexOf
has the nice property that it's consistently returning -1
for characters not found. -1
right-shifted by any number is always -1
. Any positive number right-shifted by a big enough number will always produce 0
.
So here we are:
input input.indexOf('9') input.indexOf('9')>>9
"999" 0 0
"111119" 5 0
"123456" -1 -1
Java (JDK), 98 bytes
l->l.sort((a,b)->{int r=0,i=58;for(;r==0&i-->48;)r=(b.indexOf(i)>>9)-(a.indexOf(i)>>9);return r;})
Try it online!
Explanation
l-> // Consumer<List<String>>
l.sort( // Use the incorporated sort method which uses a...
(a,b)->{ // Comparator of Strings
int r=0, // define r as the result, initiated to 0
i=58; // i as the codepoint to test for.
for(;r==0&i-->48;) // for each digit codepoint from '9' to '0',
// and while no difference was found.
r= // set r as the difference between
(b.indexOf(i)>>9)- // was the digit found in b? then 0 else -1 using the bit-shift operator
(a.indexOf(i)>>9); // and was the digit found in a? then 0 else -1.
return r; // return the comparison result.
}
)
Note:
I needed a way to map numbers to either 0/1
or 0/-1
.
indexOf
has the nice property that it's consistently returning -1
for characters not found. -1
right-shifted by any number is always -1
. Any positive number right-shifted by a big enough number will always produce 0
.
So here we are:
input input.indexOf('9') input.indexOf('9')>>9
"999" 0 0
"111119" 5 0
"123456" -1 -1
edited yesterday
answered yesterday
Olivier Grégoire
8,25711842
8,25711842
1
Ah, yeah, that's what I mean. ;p Nice golf of using>>9
instead of>>32
due to the limited range of the numbers.
– Kevin Cruijssen
yesterday
add a comment |
1
Ah, yeah, that's what I mean. ;p Nice golf of using>>9
instead of>>32
due to the limited range of the numbers.
– Kevin Cruijssen
yesterday
1
1
Ah, yeah, that's what I mean. ;p Nice golf of using
>>9
instead of >>32
due to the limited range of the numbers.– Kevin Cruijssen
yesterday
Ah, yeah, that's what I mean. ;p Nice golf of using
>>9
instead of >>32
due to the limited range of the numbers.– Kevin Cruijssen
yesterday
add a comment |
up vote
2
down vote
Japt, 12 bytes
ñ_a ì â ñnÃw
All test cases
Explanation:
ñ_ Ãw :Sort Descending by:
a : Get the absolute value
ì : Get the digits
â : Remove duplicates
ñn : Sort the digits in descending order
add a comment |
up vote
2
down vote
Japt, 12 bytes
ñ_a ì â ñnÃw
All test cases
Explanation:
ñ_ Ãw :Sort Descending by:
a : Get the absolute value
ì : Get the digits
â : Remove duplicates
ñn : Sort the digits in descending order
add a comment |
up vote
2
down vote
up vote
2
down vote
Japt, 12 bytes
ñ_a ì â ñnÃw
All test cases
Explanation:
ñ_ Ãw :Sort Descending by:
a : Get the absolute value
ì : Get the digits
â : Remove duplicates
ñn : Sort the digits in descending order
Japt, 12 bytes
ñ_a ì â ñnÃw
All test cases
Explanation:
ñ_ Ãw :Sort Descending by:
a : Get the absolute value
ì : Get the digits
â : Remove duplicates
ñn : Sort the digits in descending order
edited yesterday
answered yesterday
Kamil Drakari
2,541416
2,541416
add a comment |
add a comment |
up vote
2
down vote
Haskell, 54 52 bytes
import Data.List
f=r.sortOn(r.sort.nub.show);r=reverse
Try it online!
Definingr=reverse
saves two bytes. We also allow anonymous functions, so thef=
does not need to ve counted.
– Laikoni
yesterday
I moved the import and f= to the TIO header. Is that OK?
– Martin Lütke
yesterday
Same byte count, but maybe of some interest:f=r$r id.nub.show;r=(reverse.).sortOn
.
– Laikoni
yesterday
1
The import actually needs to be counted.
– Laikoni
yesterday
2
You may want to have a look at our Guide to golfing rules in Haskell.
– Laikoni
yesterday
|
show 1 more comment
up vote
2
down vote
Haskell, 54 52 bytes
import Data.List
f=r.sortOn(r.sort.nub.show);r=reverse
Try it online!
Definingr=reverse
saves two bytes. We also allow anonymous functions, so thef=
does not need to ve counted.
– Laikoni
yesterday
I moved the import and f= to the TIO header. Is that OK?
– Martin Lütke
yesterday
Same byte count, but maybe of some interest:f=r$r id.nub.show;r=(reverse.).sortOn
.
– Laikoni
yesterday
1
The import actually needs to be counted.
– Laikoni
yesterday
2
You may want to have a look at our Guide to golfing rules in Haskell.
– Laikoni
yesterday
|
show 1 more comment
up vote
2
down vote
up vote
2
down vote
Haskell, 54 52 bytes
import Data.List
f=r.sortOn(r.sort.nub.show);r=reverse
Try it online!
Haskell, 54 52 bytes
import Data.List
f=r.sortOn(r.sort.nub.show);r=reverse
Try it online!
edited yesterday
answered yesterday
Martin Lütke
37125
37125
Definingr=reverse
saves two bytes. We also allow anonymous functions, so thef=
does not need to ve counted.
– Laikoni
yesterday
I moved the import and f= to the TIO header. Is that OK?
– Martin Lütke
yesterday
Same byte count, but maybe of some interest:f=r$r id.nub.show;r=(reverse.).sortOn
.
– Laikoni
yesterday
1
The import actually needs to be counted.
– Laikoni
yesterday
2
You may want to have a look at our Guide to golfing rules in Haskell.
– Laikoni
yesterday
|
show 1 more comment
Definingr=reverse
saves two bytes. We also allow anonymous functions, so thef=
does not need to ve counted.
– Laikoni
yesterday
I moved the import and f= to the TIO header. Is that OK?
– Martin Lütke
yesterday
Same byte count, but maybe of some interest:f=r$r id.nub.show;r=(reverse.).sortOn
.
– Laikoni
yesterday
1
The import actually needs to be counted.
– Laikoni
yesterday
2
You may want to have a look at our Guide to golfing rules in Haskell.
– Laikoni
yesterday
Defining
r=reverse
saves two bytes. We also allow anonymous functions, so the f=
does not need to ve counted.– Laikoni
yesterday
Defining
r=reverse
saves two bytes. We also allow anonymous functions, so the f=
does not need to ve counted.– Laikoni
yesterday
I moved the import and f= to the TIO header. Is that OK?
– Martin Lütke
yesterday
I moved the import and f= to the TIO header. Is that OK?
– Martin Lütke
yesterday
Same byte count, but maybe of some interest:
f=r$r id.nub.show;r=(reverse.).sortOn
.– Laikoni
yesterday
Same byte count, but maybe of some interest:
f=r$r id.nub.show;r=(reverse.).sortOn
.– Laikoni
yesterday
1
1
The import actually needs to be counted.
– Laikoni
yesterday
The import actually needs to be counted.
– Laikoni
yesterday
2
2
You may want to have a look at our Guide to golfing rules in Haskell.
– Laikoni
yesterday
You may want to have a look at our Guide to golfing rules in Haskell.
– Laikoni
yesterday
|
show 1 more comment
up vote
2
down vote
Stax, 6 7 bytes
èó≥ü≤♥¥
Run and debug it
This seems to give incorrect results. For example, in the test case of your TIO it outputs-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
instead of the intended8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
or8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. This test case is also used in the example, and to explain the rules, so I would take a look at that to understand it better. It seems you are only sorting by the single largest digit once, without any of the other rules?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen: Yes, my apologies. I mis-read the problem statement. I've adjusted the program to handle the stated requirements. This program is accepting the input integers as quoted strings. That's usually acceptable, but if not I might need to add another byte.
– recursive
7 hours ago
Looks good now, +1 from me. And yes, inputting as strings is completely fine.
– Kevin Cruijssen
7 hours ago
add a comment |
up vote
2
down vote
Stax, 6 7 bytes
èó≥ü≤♥¥
Run and debug it
This seems to give incorrect results. For example, in the test case of your TIO it outputs-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
instead of the intended8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
or8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. This test case is also used in the example, and to explain the rules, so I would take a look at that to understand it better. It seems you are only sorting by the single largest digit once, without any of the other rules?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen: Yes, my apologies. I mis-read the problem statement. I've adjusted the program to handle the stated requirements. This program is accepting the input integers as quoted strings. That's usually acceptable, but if not I might need to add another byte.
– recursive
7 hours ago
Looks good now, +1 from me. And yes, inputting as strings is completely fine.
– Kevin Cruijssen
7 hours ago
add a comment |
up vote
2
down vote
up vote
2
down vote
Stax, 6 7 bytes
èó≥ü≤♥¥
Run and debug it
Stax, 6 7 bytes
èó≥ü≤♥¥
Run and debug it
edited 7 hours ago
answered yesterday
recursive
4,9441221
4,9441221
This seems to give incorrect results. For example, in the test case of your TIO it outputs-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
instead of the intended8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
or8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. This test case is also used in the example, and to explain the rules, so I would take a look at that to understand it better. It seems you are only sorting by the single largest digit once, without any of the other rules?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen: Yes, my apologies. I mis-read the problem statement. I've adjusted the program to handle the stated requirements. This program is accepting the input integers as quoted strings. That's usually acceptable, but if not I might need to add another byte.
– recursive
7 hours ago
Looks good now, +1 from me. And yes, inputting as strings is completely fine.
– Kevin Cruijssen
7 hours ago
add a comment |
This seems to give incorrect results. For example, in the test case of your TIO it outputs-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
instead of the intended8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
or8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. This test case is also used in the example, and to explain the rules, so I would take a look at that to understand it better. It seems you are only sorting by the single largest digit once, without any of the other rules?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen: Yes, my apologies. I mis-read the problem statement. I've adjusted the program to handle the stated requirements. This program is accepting the input integers as quoted strings. That's usually acceptable, but if not I might need to add another byte.
– recursive
7 hours ago
Looks good now, +1 from me. And yes, inputting as strings is completely fine.
– Kevin Cruijssen
7 hours ago
This seems to give incorrect results. For example, in the test case of your TIO it outputs
-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
instead of the intended 8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
or 8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. This test case is also used in the example, and to explain the rules, so I would take a look at that to understand it better. It seems you are only sorting by the single largest digit once, without any of the other rules?– Kevin Cruijssen
17 hours ago
This seems to give incorrect results. For example, in the test case of your TIO it outputs
-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
instead of the intended 8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
or 8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. This test case is also used in the example, and to explain the rules, so I would take a look at that to understand it better. It seems you are only sorting by the single largest digit once, without any of the other rules?– Kevin Cruijssen
17 hours ago
@KevinCruijssen: Yes, my apologies. I mis-read the problem statement. I've adjusted the program to handle the stated requirements. This program is accepting the input integers as quoted strings. That's usually acceptable, but if not I might need to add another byte.
– recursive
7 hours ago
@KevinCruijssen: Yes, my apologies. I mis-read the problem statement. I've adjusted the program to handle the stated requirements. This program is accepting the input integers as quoted strings. That's usually acceptable, but if not I might need to add another byte.
– recursive
7 hours ago
Looks good now, +1 from me. And yes, inputting as strings is completely fine.
– Kevin Cruijssen
7 hours ago
Looks good now, +1 from me. And yes, inputting as strings is completely fine.
– Kevin Cruijssen
7 hours ago
add a comment |
up vote
1
down vote
C (gcc), 114 111 bytes
a;v(n){n=n<0?-n:n;for(a=0;n;n/=10)a|=1<<n%10;n=a;}c(int*a,int*b){a=v(*a)<v(*b);}f(a,n)int*a,n;{qsort(a,n,4,c);}
Try it online!
Explanation:
f() uses qsort() to sort provided array in place. Using comparison function c() to compare numbers which evaluates numbers using v().
v() calculates a higher number if bigger digits are present in parameter.
[Edit 1]
Improved by 3 bytes. 2 byte credits to Kevin. Thanks
You can golfn>0
ton
I think in your loop of your methodv
.
– Kevin Cruijssen
yesterday
Suggestfor(a=0;n=abs(n);
instead ofn=n<?-n:n;for(a=0;n;
– ceilingcat
4 hours ago
add a comment |
up vote
1
down vote
C (gcc), 114 111 bytes
a;v(n){n=n<0?-n:n;for(a=0;n;n/=10)a|=1<<n%10;n=a;}c(int*a,int*b){a=v(*a)<v(*b);}f(a,n)int*a,n;{qsort(a,n,4,c);}
Try it online!
Explanation:
f() uses qsort() to sort provided array in place. Using comparison function c() to compare numbers which evaluates numbers using v().
v() calculates a higher number if bigger digits are present in parameter.
[Edit 1]
Improved by 3 bytes. 2 byte credits to Kevin. Thanks
You can golfn>0
ton
I think in your loop of your methodv
.
– Kevin Cruijssen
yesterday
Suggestfor(a=0;n=abs(n);
instead ofn=n<?-n:n;for(a=0;n;
– ceilingcat
4 hours ago
add a comment |
up vote
1
down vote
up vote
1
down vote
C (gcc), 114 111 bytes
a;v(n){n=n<0?-n:n;for(a=0;n;n/=10)a|=1<<n%10;n=a;}c(int*a,int*b){a=v(*a)<v(*b);}f(a,n)int*a,n;{qsort(a,n,4,c);}
Try it online!
Explanation:
f() uses qsort() to sort provided array in place. Using comparison function c() to compare numbers which evaluates numbers using v().
v() calculates a higher number if bigger digits are present in parameter.
[Edit 1]
Improved by 3 bytes. 2 byte credits to Kevin. Thanks
C (gcc), 114 111 bytes
a;v(n){n=n<0?-n:n;for(a=0;n;n/=10)a|=1<<n%10;n=a;}c(int*a,int*b){a=v(*a)<v(*b);}f(a,n)int*a,n;{qsort(a,n,4,c);}
Try it online!
Explanation:
f() uses qsort() to sort provided array in place. Using comparison function c() to compare numbers which evaluates numbers using v().
v() calculates a higher number if bigger digits are present in parameter.
[Edit 1]
Improved by 3 bytes. 2 byte credits to Kevin. Thanks
edited yesterday
answered yesterday
GPS
31115
31115
You can golfn>0
ton
I think in your loop of your methodv
.
– Kevin Cruijssen
yesterday
Suggestfor(a=0;n=abs(n);
instead ofn=n<?-n:n;for(a=0;n;
– ceilingcat
4 hours ago
add a comment |
You can golfn>0
ton
I think in your loop of your methodv
.
– Kevin Cruijssen
yesterday
Suggestfor(a=0;n=abs(n);
instead ofn=n<?-n:n;for(a=0;n;
– ceilingcat
4 hours ago
You can golf
n>0
to n
I think in your loop of your method v
.– Kevin Cruijssen
yesterday
You can golf
n>0
to n
I think in your loop of your method v
.– Kevin Cruijssen
yesterday
Suggest
for(a=0;n=abs(n);
instead of n=n<?-n:n;for(a=0;n;
– ceilingcat
4 hours ago
Suggest
for(a=0;n=abs(n);
instead of n=n<?-n:n;for(a=0;n;
– ceilingcat
4 hours ago
add a comment |
up vote
1
down vote
Ruby, 55 bytes
->a{a.sort_by{|x|x.abs.digits.sort.reverse|}.reverse}
Try it online!
add a comment |
up vote
1
down vote
Ruby, 55 bytes
->a{a.sort_by{|x|x.abs.digits.sort.reverse|}.reverse}
Try it online!
add a comment |
up vote
1
down vote
up vote
1
down vote
Ruby, 55 bytes
->a{a.sort_by{|x|x.abs.digits.sort.reverse|}.reverse}
Try it online!
Ruby, 55 bytes
->a{a.sort_by{|x|x.abs.digits.sort.reverse|}.reverse}
Try it online!
answered yesterday
Kirill L.
3,2161118
3,2161118
add a comment |
add a comment |
up vote
1
down vote
Perl 5 -nl
, 68 bytes
$a{eval"9876543210=~y/$_//dcr"}=$_}{say$a{$_}for reverse sort keys%a
Try it online!
add a comment |
up vote
1
down vote
Perl 5 -nl
, 68 bytes
$a{eval"9876543210=~y/$_//dcr"}=$_}{say$a{$_}for reverse sort keys%a
Try it online!
add a comment |
up vote
1
down vote
up vote
1
down vote
Perl 5 -nl
, 68 bytes
$a{eval"9876543210=~y/$_//dcr"}=$_}{say$a{$_}for reverse sort keys%a
Try it online!
Perl 5 -nl
, 68 bytes
$a{eval"9876543210=~y/$_//dcr"}=$_}{say$a{$_}for reverse sort keys%a
Try it online!
answered yesterday
Xcali
4,980520
4,980520
add a comment |
add a comment |
up vote
1
down vote
C# (Visual C# Interactive Compiler), 84 bytes
x=>x.OrderByDescending(y=>String.Concat((y+"-").Distinct().OrderByDescending(z=>z)))
Try it online!
In C#, strings are considered "enumerables" of characters. I use this to my advantage by first converting each number to a string. LINQ is then leveraged to get the unique characters (digits) sorted in reverse order. I convert each sorted character array back into a string and use that as the sort key to order the whole list.
I was scratching my head with how to handle the hyphen for negative numbers. But as it turns out, adding the hyphen character to all of my numbers takes care of the tie breaker when one number has a superset of digits compared to the other.
add a comment |
up vote
1
down vote
C# (Visual C# Interactive Compiler), 84 bytes
x=>x.OrderByDescending(y=>String.Concat((y+"-").Distinct().OrderByDescending(z=>z)))
Try it online!
In C#, strings are considered "enumerables" of characters. I use this to my advantage by first converting each number to a string. LINQ is then leveraged to get the unique characters (digits) sorted in reverse order. I convert each sorted character array back into a string and use that as the sort key to order the whole list.
I was scratching my head with how to handle the hyphen for negative numbers. But as it turns out, adding the hyphen character to all of my numbers takes care of the tie breaker when one number has a superset of digits compared to the other.
add a comment |
up vote
1
down vote
up vote
1
down vote
C# (Visual C# Interactive Compiler), 84 bytes
x=>x.OrderByDescending(y=>String.Concat((y+"-").Distinct().OrderByDescending(z=>z)))
Try it online!
In C#, strings are considered "enumerables" of characters. I use this to my advantage by first converting each number to a string. LINQ is then leveraged to get the unique characters (digits) sorted in reverse order. I convert each sorted character array back into a string and use that as the sort key to order the whole list.
I was scratching my head with how to handle the hyphen for negative numbers. But as it turns out, adding the hyphen character to all of my numbers takes care of the tie breaker when one number has a superset of digits compared to the other.
C# (Visual C# Interactive Compiler), 84 bytes
x=>x.OrderByDescending(y=>String.Concat((y+"-").Distinct().OrderByDescending(z=>z)))
Try it online!
In C#, strings are considered "enumerables" of characters. I use this to my advantage by first converting each number to a string. LINQ is then leveraged to get the unique characters (digits) sorted in reverse order. I convert each sorted character array back into a string and use that as the sort key to order the whole list.
I was scratching my head with how to handle the hyphen for negative numbers. But as it turns out, adding the hyphen character to all of my numbers takes care of the tie breaker when one number has a superset of digits compared to the other.
edited 19 hours ago
answered 20 hours ago
dana
1614
1614
add a comment |
add a comment |
up vote
1
down vote
Julia 1.0, 50 bytes
x->sort(x,by=y->sort(unique([digits(-abs(y));1])))
Try it online!
add a comment |
up vote
1
down vote
Julia 1.0, 50 bytes
x->sort(x,by=y->sort(unique([digits(-abs(y));1])))
Try it online!
add a comment |
up vote
1
down vote
up vote
1
down vote
Julia 1.0, 50 bytes
x->sort(x,by=y->sort(unique([digits(-abs(y));1])))
Try it online!
Julia 1.0, 50 bytes
x->sort(x,by=y->sort(unique([digits(-abs(y));1])))
Try it online!
answered 10 hours ago
Kirill L.
3,2161118
3,2161118
add a comment |
add a comment |
up vote
1
down vote
APL (Dyalog Extended), 19 bytes
{⍵[⍒∪¨(∨'¯'~⍨⍕)¨⍵]}
Try it online!
Fixed at a cost of +2 bytes thanks to OP.
I think you are missing an 'uniquify' somewhere? If I try the example test case in your TIO for example,¯7738
is placed before478
, but it should be after it: digits[8,7,4]
come before digits[8,7,3]
.
– Kevin Cruijssen
7 hours ago
Thanks, @KevinCruijssen
– Zacharý
3 hours ago
add a comment |
up vote
1
down vote
APL (Dyalog Extended), 19 bytes
{⍵[⍒∪¨(∨'¯'~⍨⍕)¨⍵]}
Try it online!
Fixed at a cost of +2 bytes thanks to OP.
I think you are missing an 'uniquify' somewhere? If I try the example test case in your TIO for example,¯7738
is placed before478
, but it should be after it: digits[8,7,4]
come before digits[8,7,3]
.
– Kevin Cruijssen
7 hours ago
Thanks, @KevinCruijssen
– Zacharý
3 hours ago
add a comment |
up vote
1
down vote
up vote
1
down vote
APL (Dyalog Extended), 19 bytes
{⍵[⍒∪¨(∨'¯'~⍨⍕)¨⍵]}
Try it online!
Fixed at a cost of +2 bytes thanks to OP.
APL (Dyalog Extended), 19 bytes
{⍵[⍒∪¨(∨'¯'~⍨⍕)¨⍵]}
Try it online!
Fixed at a cost of +2 bytes thanks to OP.
edited 3 hours ago
answered 7 hours ago
Zacharý
5,09511035
5,09511035
I think you are missing an 'uniquify' somewhere? If I try the example test case in your TIO for example,¯7738
is placed before478
, but it should be after it: digits[8,7,4]
come before digits[8,7,3]
.
– Kevin Cruijssen
7 hours ago
Thanks, @KevinCruijssen
– Zacharý
3 hours ago
add a comment |
I think you are missing an 'uniquify' somewhere? If I try the example test case in your TIO for example,¯7738
is placed before478
, but it should be after it: digits[8,7,4]
come before digits[8,7,3]
.
– Kevin Cruijssen
7 hours ago
Thanks, @KevinCruijssen
– Zacharý
3 hours ago
I think you are missing an 'uniquify' somewhere? If I try the example test case in your TIO for example,
¯7738
is placed before 478
, but it should be after it: digits [8,7,4]
come before digits [8,7,3]
.– Kevin Cruijssen
7 hours ago
I think you are missing an 'uniquify' somewhere? If I try the example test case in your TIO for example,
¯7738
is placed before 478
, but it should be after it: digits [8,7,4]
come before digits [8,7,3]
.– Kevin Cruijssen
7 hours ago
Thanks, @KevinCruijssen
– Zacharý
3 hours ago
Thanks, @KevinCruijssen
– Zacharý
3 hours ago
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f175978%2fsort-by-largest-digits%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown