Đếm màu, được sắp xếp theo các lần xuất hiện


14

Điều này là đơn giản để mô tả và tôi khó có thể tin rằng điều này đã không được chơi golf trước đây:

Đối với một hình ảnh nhất định (bất kỳ định dạng nào được ngôn ngữ của bạn hỗ trợ), hãy tìm các màu duy nhất và đưa ra danh sách các màu.

  • In mã màu theo hex RGB, đó là dấu băm #theo sau là 2 chữ số cho R, 2 chữ số cho G và 2 chữ số cho B. ( #xxxxxxtrong đó x có thể là 0-9, AF và / hoặc af).
  • Mã hex sẽ được theo sau bởi khoảng trắng và số pixel thập phân, sau đó là dòng mới ( \nhoặc \r\n).
  • Danh sách sẽ được sắp xếp theo số lượng giảm dần (màu thường xuyên nhất ở trên cùng).
  • Nếu có một cà vạt (hai màu với cùng một số tiền), thứ tự không quan trọng.
  • Hình ảnh sẽ không chứa độ trong suốt, do đó, bất kỳ giá trị alpha nào cũng không quan trọng. Giá trị alpha có thể không phải là một phần của đầu ra.
  • Kích thước hình ảnh 4000x3000 phải được hỗ trợ (có thể quan trọng đối với định nghĩa loại)

Hình ảnh mẫu "10red 20blue 30black 40white": Ảnh mẫu 1

Sản lượng dự kiến:

#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10

Hình ảnh mẫu "gradient màu xanh": Ảnh mẫu 2

Một trong những đầu ra dự kiến ​​(vì thứ tự của các màu giống nhau có thể thay đổi):

#718DFF 19
#5571FF 15
#3855FF 11
#8DAAFF 11
#1C38FF 7
#AAAAFF 7
#8D8DFF 6
#AAC6FF 6
#C6C6FF 5
#C6E2FF 4
#001CFF 3
#E2E2FF 3
#FFFFFF 3

Hình ảnh mẫu "testImage", được cung cấp bởi @Luis Mendo :

Ảnh mẫu 3

Sản lượng dự kiến:

#FFFFFF 18042
#000000 1754
#FF3300 204

Tương tự như câu hỏi này , nhưng đầu ra là văn bản, không phải là một hình ảnh.


count descendinglà một chút không rõ ràng. Làm thế nào để chúng ta sắp xếp nó?
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ: giảm dần: màu thường xuyên nhất ở trên cùng
Thomas Weller

Được rồi, tôi sẽ nói rằng cần phải rõ ràng hơn một chút. Có thể nói một cái gì đó như thế the most frequent colors at the topnào?
Rɪᴋᴇʀ

@ EᴀsᴛᴇʀʟʏIʀᴋ: Tôi đồng ý, vừa cập nhật câu hỏi cho cả hai
Thomas Weller

1
Một vài trường hợp thử nghiệm sẽ tốt.
Martin Ender

Câu trả lời:


4

Toán học, 91 byte

StringRiffle@SortBy[Tally["#"<>IntegerString[#,16,2]&/@Join@@#~ImageData~"Byte"],-Last@#&]&

Sử dụng một phương pháp hoàn toàn khác với câu trả lời của @ DavidC . Không giống như cái đó, cái này có thể hỗ trợ hình ảnh với bất kỳ kích thước và màu sắc nào. Giải trình:

#~ImageData~"Byte"                   Take the RGB values of the image...
Join@@(...)                          Flatten to a list of colors...
"#"<>IntegerString[#,16,2]&/@(...)   Convert each color to #012def format...
Tally[(...)]                         Convert to a list of {color, multiplicity}
                                      pairs (this does most of the work)...
SortBy[(...),-Last@#&]               Order by the multiplicity descending...
StringRiffle@(...)                   And create a string with the desired format.

Đẹp. Tôi thích cách "Byte" trả về dữ liệu hình ảnh.
DavidC

4

Bash + coreutils, 54

  • 7 byte được lưu nhờ @manatwork
grep -oE '#\w+'|sort|uniq -c|sort -nr|awk '$0=$2" "$1'

Điều này giả sử đầu vào STDIN của định dạng .txt của Imagemagick .

Ideone.


Nếu định dạng đầu vào ở trên quá nhiều, chúng ta có thể thêm chuyển đổi Imagemagick từ bất kỳ định dạng nào:

Bash + coreutils + Imagemagick, 71

convert $1 txt:-|grep -oE '#\w+'|sort|uniq -c|sort -nr|awk '$0=$2" "$1'

Ở đây, tên tệp hình ảnh đầu vào được truyền vào dưới dạng tham số dòng lệnh.


2
OFS mặc định của awk là một khoảng ,
trắng

1
Hoặc thậm chí awkphần ngắn hơn : awk '$0=$2" "$1'.
manatwork

3

JavaScript (ES6), 359 355 byte

Đã lưu 4 byte nhờ @Neil

u=>{i=new Image;i.src=u;e=document.createElement`canvas`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}

Bản giới thiệu

f=u=>{i=new Image;i.crossOrigin='';i.src=u;e=document.createElement`canvas`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
f('http://i.imgur.com/acPudA9.gif')
<input value="https://i.imgur.com/acPudA9.gif" onchange="console.log('-------');f(this.value)">

Các trường hợp thử nghiệm khác tôi đã tải lên imgur để hỗ trợ CORS:

Dữ liệu màu cụ thể của hai cái này dường như đã thay đổi một chút khi tải lên vì một số lý do nhưng nó vẫn in cùng một số lần xuất hiện cho hai trường hợp thử nghiệm đó.


Tôi nghĩ rằng |có quyền ưu tiên thấp hơn so với <<nếu bạn sử dụng nó thay vì +sau đó bạn sẽ không cần nhiều ()s.
Neil

@ user2428118 vào lần tới tôi sẽ đánh giá cao nếu bạn để lại những lo ngại trong một bình luận và yêu cầu tôi chỉnh sửa câu trả lời của riêng tôi thay vì tự chỉnh sửa nó. Bạn thực sự đã phá vỡ bản demo của tôi bằng cách xóa <!-- language: lang-js -->khỏi đoạn mã, vô hiệu hóa JavaScript một cách hiệu quả.
Patrick Roberts

@Patrick Xin lỗi, lần sau tôi sẽ cẩn thận hơn. Ngoài ra, tôi vừa tìm được cách lưu một số byte:u=>{document.write`<img src=${u} id=i><canvas id=e>`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
user2428118

2

Bình thường , 29 byte

jmj;_d_SrSm+\#.[\06.Hid256'Q8

Hãy thử trực tuyến!

(Trình thông dịch trực tuyến không thể đọc hình ảnh, vì vậy tôi đã loại bỏ phần đó và nhập kết quả của việc đọc hình ảnh đó, đó là danh sách các bộ ba màu. Phần chịu trách nhiệm đọc hình ảnh là ', một dấu hai chấm.)

Bằng chứng về chức năng của 'một dấu hai chấm


Bạn cần có strước 'Q, vì một hình ảnh được thể hiện dưới dạng danh sách các danh sách của bộ ba.
Jakube

Đây là một giải pháp chính xác (và ngắn hơn)V_SrS%L+\#*3"%02X"s'z8jd_N
Jakube

2

Toán học 103 92 byte

{"#"<>IntegerString[255Round[List@@#],16,2],#2}&@@@DominantColors[#,9999,{"Color","Count"}]&

Thí dụ

pic


Giải trình

DominantColorsthường trả về một danh sách các màu và số đại diện cho các cụm chính trong ảnh. Khi số lượng màu được yêu cầu vượt quá số lượng màu trong ảnh, màu pixel chính xác sẽ được trả về. (Tôi giả sử rằng sẽ có ít hơn 10 000 màu trong hình ảnh đầu vào.)

hình ảnh


{"#"<>IntegerString[255Round[List@@#],16,2],#2} chuyển đổi các giá trị màu cơ bản 10 với giá trị thập lục phân.


Lưu ý: chỉ có 5 màu trong hình ảnh ủy nhiệm. (Tôi đã sử dụng ColorQuantize[<image>,5]để giảm số lượng màu sắc trong hình ảnh ủy nhiệm tiêu chuẩn.)


Chỉ cần bạn chơi golf;)
LegionMammal978

Một chút thôi. Nhưng cách tiếp cận của bạn mất một số lượng màu sắc không giới hạn.
DavidC

1

PowerShell v2 +, 187 byte

$a=New-Object System.Drawing.Bitmap $args[0]
$b=@{}
0..($a.Height-1)|%{$h=$_;0..($a.Width-1)|%{$b["#"+-join($a.GetPixel($_,$h).Name[2..7])]++}}
$b.GetEnumerator()|Sort value -des|FT -h -a

Sử dụng lại gần như tất cả các mã từ câu trả lời của tôi về Lấy màu chủ đạo nhất . Vì vậy, xin vui lòng tham khảo rằng để giải thích đầy đủ.

Những thay đổi ở đây là trong chỉ mục $btrong dòng thứ ba để phù hợp với yêu cầu định dạng đầu ra rõ ràng, và trong dòng cuối cùng chúng tôi sortbởi valuetrong -descending trật tự, sau đó ống để Format-Tablevới -HideTableHeaders và -AutoSize như thông số. Rất hiếm khi thực sự sử dụng FTở đây trên PPCG, vì đầu ra ẩn ở cuối thực thi, nhưng ở đây rất hữu ích để đảm bảo chúng tôi chỉ nhận được đầu ra đúng phần.

Ví dụ

Đầu tiên là hình ảnh thử nghiệm "đỏ" từ thử thách Màu sắc thống trị, thứ hai là "thử nghiệm" từ thử thách này.

PS C:\Tools\Scripts\golfing> .\color-count.ps1 C:\Tools\Scripts\golfing\img\red.png

#ff0000 139876
#dcd9cf 3056  
#f2f1ed 1512  
#ffffff 1508  
#ffe6e6 1488  
#ffe3e3 8     
#eae8e2 4     
#fffbfb 4     


PS C:\Tools\Scripts\golfing> .\color-count.ps1 C:\Tools\Scripts\golfing\img\z07VA.gif

#ffffff 18042
#000000 1754 
#ff3300 204  

1

Tcl / Tk , 134 byte

console s
lmap s [concat {*}[[image c photo -fi $argv] d]] {dict inc D $s}
dict fo k\ v [lsort -int -s 2 -inde 1 -de $D] {puts $k\ $v}

dlà cho data.

Tcl / Tk , 232 byte

console s
set I [image c photo -fi $argv]
set i 0
time {set j 0
time {dict inc D #[join [lmap s [$I g $i $j] {format %02X $s}] ""]
incr j} [image h $I]
incr i} [image w $I]
dict fo k\ v [lsort -int -s 2 -inde 1 -de $D] {puts $k\ $v}

wish sort_pix.tcl QTE4O.png

nhập mô tả hình ảnh ở đây


wish sort_pix.tcl 5s1Ob.png

nhập mô tả hình ảnh ở đây


wish sort_pix.tcl z07VA.gif

nhập mô tả hình ảnh ở đây


1

Brain-Flak , 1110 byte

{{}({}[(()()()()()){}])}{}(<>)<>([]){{}({}()<({}()<({}()<>)>)>)<>([])}{}<>{({}<({}<({}<(()()<>)>)>)>)<>{(<>)<>(()()()){({}[()]<<>({}<([([(({})<>[({})]<>)])]<>)<>{({}()<([{}])<>({}<>)<>>)<>}{}<>{}<>>{})({}<({}<({}<>)<>({}<>)<>({}<>)<>>)<>({}<>)<>({}<>)<>({}<>)>)<>({}<({}<>)<>({}<>)<>>)<>({}<>)<>({}<>)>)}{}<>((){[()](<{}>)}{})((){[()](<{}({}())<>{}{}{}>)}{}){{}(<<>(()()()){({}[()]<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}{}>)}{}<>({}<({}<>)<>({}<>)<>({}<>)<>>)<>({}<>)<>({}<>)<>({}<>)<>}({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}(()()()()){((({}[()])<{({}[()]<({}<({}<>)<>>)>)}{}>)<{({}[()]<<>({}<>)>)}{}>)}{}<>}{}<>(()()()())([][()])({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>){({}[()]<(<(()()()())([][()])({}(<>))><>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>)<{({}[()]<([([({}<({}<({}<({}<(({})<>)<>>)>)>)>)<><({}<>)>]{}<(())>)](<>)){({}())<>}{}({}<><{}{}>){{}<>(<({}<({}<({}<({}<({}<({}<({}<({}<>)>)>)>)<>>)>)>)>)<>({}<({}<({}<({}<<>>)>)>)>)>)}{}({}<({}<({}<({}<>)>)>)>)<>>)}{}<>{}{}{}{}>[()]){({}[()]<({}<({}<({}<({}<>)>)>)>)<>>)}{}<>>)}{}{({}[()]<>)<>}<>

Hãy thử trực tuyến!

Vâng, đó là một cuộc phiêu lưu. Hóa ra, Brain-Flak không giỏi xử lý hình ảnh. Ai biết?

Tôi sẽ bắt đầu bằng cách lưu ý rằng về mặt kỹ thuật này không đáp ứng định dạng đầu ra nghiêm ngặt được yêu cầu. Nếu bạn muốn nó được thi hành, hãy cho tôi biết và tôi sẽ thử thêm mã dịch. Hiện tại, nó xuất ra các số thập phân: mỗi 4 số đại diện cho một màu theo thứ tự ĐỎ MÀU XANH ĐỎ.

Tiếp theo, đầu vào. Các định dạng đầu vào được phép linh hoạt hơn nên tôi đã sử dụng định dạng dễ nhất cho Brain-Flak để phân tích cú pháp (mà tôi có thể tìm thấy): Netpbm P6. Thật không may, Brain-Flak không thể phân tích các số thập phân từ định dạng P3 vì tất cả các hình ảnh Netpbm đều bắt đầu bằng ký tự Pvà Brain-Flak không thể xử lý đầu vào thập phân từ các tệp có chứa các ký tự không phải là số. Vì vậy, P6 đã được sử dụng thay thế, vì P6 lưu trữ thông tin màu dưới dạng byte, được coi là số trong chế độ nhập ASCII. Vẫn còn một thách thức vì thông tin tiêu đề không được mã hóa hữu ích, nhưng may mắn là tôi không cần bất kỳ thông tin nào trong số đó vì vậy nó chỉ bị loại bỏ. Chương trình này không hoàn toàn tuân thủ tiêu chuẩn Netpbm vì nó không cho phép các dòng mới trong tiêu đề, nhưng các dòng mới thì khôngđược yêu cầu bởi tiêu chuẩn để các đầu vào là các tệp Netpbm hợp lệ.

Thông báo trước, phiên bản trên TIO thực sự không được định cấu hình chính xác cho hoạt động "chính thức" vì (theo hiểu biết của tôi) Tôi không thể cung cấp tệp dưới dạng đầu vào trên TIO, tôi cũng không thể cung cấp byte tương ứng với ASCII không thể in được trong đầu vào trực tiếp. Đối với hoạt động chính thức, -acờ là cần thiết để lấy đầu vào dưới dạng byte thô và -fđể lấy đầu vào từ một tệp. Thay vào đó, đầu vào mẫu trên liên kết TIO được dịch thủ công từ ví dụ trên trang wiki Netpbm .

Ngoài ra, tôi muốn cảm ơn wiki Brain-Flak vì đã cung cấp các đoạn mã hữu ích để làm việc. Cụ thể, việc triển khai Bubble-Sort ở đây là công cụ cho bước cuối cùng một khi tôi đã nhận được số lượng cho mỗi màu, vì tôi thực sự không có ý tưởng nào để bắt đầu từ đâu. Phải mất nhiều sửa đổi, nhưng tôi vui vì tôi đã không phải bắt đầu lại từ đầu.

Đây là phiên bản chưa được chỉnh sửa và nhận xét của mã. Brain-Flak hơi quá dài dòng để bao gồm một lời giải thích được định dạng hữu ích ngay trong bài đăng này, nhưng phiên bản không được chỉnh sửa trên TIO chứa mọi thứ tôi sẽ đưa vào một với định dạng tốt hơn tôi có thể quản lý ở đây, vì vậy nếu bạn quan tâm, vui lòng nhìn.

Có thể có golf chưa làm, tôi câu trả lời Brain-Flak trước đây đã trải qua rất nhiều lần sửa đổi, nhưng hy vọng những bài học kinh nghiệm ở đó đã cho điểm khởi đầu tốt hơn này.


0

Python 2, 186 byte

import Image
I=Image.open(input()).convert('RGB')
w,h=I.size
r=['#'+('%0.2X'*3)%I.getpixel((i%w,i/h))for i in range(w*h)]
for a,b in sorted(set((r.count(v),v)for v in r))[::-1]:print b,a

Hãy thử trực tuyến!

Tuyên bố từ chối trách nhiệm: Các đầu ra được trình bày là một lớp lót để dễ đọc. Kết quả đầu ra mã với phân tách không gian và dòng theo yêu cầu của thách thức.

Đầu ra cho 10red 20blue 30black 40white:

[('#FFFFFF', 40), ('#000000', 30), ('#0000FF', 20), ('#FF0000', 10)]

Ouput cho gradient màu xanh:

[('#718DFF', 19), ('#5571FF', 15), ('#8DAAFF', 11), ('#3855FF', 11), ('#AAAAFF', 7), ('#1C38FF', 7), ('#AAC6FF', 6), ('#8D8DFF', 6), ('#C6C6FF', 5), ('#C6E2FF', 4), ('#FFFFFF', 3), ('#E2E2FF', 3), ('#001CFF', 3)]

Đầu ra cho hình ảnh thử nghiệm

[('#FFFFFF', 18042), ('#000000', 1754), ('#FF3300', 204)]

Giải trình:

w,h=I.size # field size stores tuple of values of width and height of image

I.getpixel((i%w,i/h)) # returns tuple of base10 RGB values

('%0.2X'*3) # format string to convert int into hex

set((r.count(v),v)for v in r) # generate set of unique pairs count-color 

sorted(set(...))[::-1] # apply sorted(), as it sorts set of tuples by firts elements and reverse sort

print b,a  # swap values in tuples and print

0

Java (1.4+) , 483 428 byte

import java.util.*;class I {public static void main(String[] a) throws Exception {java.awt.image.BufferedImage i = javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString(((c=i.getRGB(x++,y))&0xff0000)>>16)+x.toHexString((c & 0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1));System.out.print(m);}}

Hãy thử trực tuyến! (Không hoạt động trực tuyến)


Ung dung:

import java.util.*;

class I {
    public static void main(String[] a) throws Exception {
        java.awt.image.BufferedImage i = javax.imageio.ImageIO
                .read(new java.io.File(a[0]));
        Map m = new HashMap();
        String s;
        for (Integer x = 0, y = 0, c; y < i.getHeight(); y++)
            for (x = 0; x < i.getWidth(); m
                    .put(s = x.toHexString(((c = i.getRGB(x++, y)) & 0xff0000) >> 16)
                            + x.toHexString((c & 0xff00) >> 8)
                            + x.toHexString(c & 0xff), m.get(s) == null ? 1
                            : (int) m.get(s) + 1))
                ;
        System.out.print(m);
    }
}

Các toString()kết quả đầu ra của bản đồ như thế này:

{7c7c7c=6, 1d57a5=20468, 121212=7, d3d3d3=3, bdbdbd=9, 949494=2, 333=14, 626262=3, cacaca=2, 141414=5, fff=11, c9c9c9=1, e8e8e8=1, 919191=4, 161616=5, c2c2c2=1, 646464=7, 979797=12, fafafa=2, 808080=1, 7b7b7b=1, 484848=4, b9b9b9=2, f1f1f1=2, 6b6b6b=6, 363636=15, 262626=4, d8d8d8=2, 868686=4, 757575=1, 575757=3, a7a7a7=2, cecece=2, dcdcdc=2, c3c3c3=2, 1d1d1d=5, 727272=9, 656565=2, 3a3a3a=3, 7d7d7d=10, 393939=5, 797979=3, 222=31, 8f8f8f=2, 454545=4, 181818=9, 2e2e2e=2, 222222=1, 1c1c1c=19, b8b8b8=2, e1e1e1=5, 232323=5, 8a8a8a=3, 959595=7, 6a6a6a=9, 434343=7, 5c5c5c=3, 111=20, 909090=3, 424242=4, 212121=1, 1a1a1a=6, 202020=7, efefef=1, 565656=5, 6e6e6e=7, 767676=3, 323232=2, eee=5, 444=18, 2c62ab=1, 717171=2, b1b1b1=3, 6c6c6c=3, 545454=7, 515151=17, 2f2f2f=2, 4a4a4a=3, 888888=6, 6d6d6d=3, 898989=3, a3a3a3=5, 7e7e7e=9, ddd=9, b6b6b6=3, 2b2b2b=5, 313131=5, 8d8d8d=1, a2a2a2=2, 696969=3, a5a5a5=3, 4f4f4f=5, 828282=7, 191919=5, 606060=4, 6f6f6f=4, 8b8b8b=3, ebebeb=2, 555=19, 929292=3, 131313=11, 999999=5, d2d2d2=2, 444444=9, 474747=4, dddddd=1, 585858=8, 5a5a5a=3, 000=9887, afafaf=2, dfdfdf=3, 747474=3, 666666=4, a1a1a1=4, 2a2a2a=11, 4d4d4d=6, 818181=2, 878787=5, 215aa6=1, d9d9d9=4, b5b5b5=3, b4b4b4=3, 737373=4, aeaeae=3, bbb=15, 242424=4, 2d2d2d=8, 888=19, c1c1c1=1, 494949=9, dbdbdb=5, ccc=19, 5d5d5d=3, 5f5f5f=1, 414141=6, c8c8c8=3, aaa=16, 1e1e1e=3, 707070=2, 9e9e9e=2, 373737=7, 9d9d9d=2, 1b1b1b=4, 303030=7, 535353=10, 595959=2, 8e8e8e=3, 383838=5, 939393=18, 616161=2, 686868=6, dadada=1, e3e3e3=2, 5b5b5b=3, a4a4a4=5, 8c8c8c=5, a6a6a6=11, 292929=6, 4c4c4c=3, 151515=6, fefefe=2, 787878=2, 505050=2, e2e2e2=1, 1f1f1f=9, adadad=2, ababab=1, 5e5e5e=6, 252525=4, 4e4e4e=3, 282828=7, a8a8a8=4, 9c9c9c=3, aaaaaa=1, 101010=5, b7b7b7=2, 969696=6, 7f7f7f=4, 555555=2, a9a9a9=5, 343434=8, 999=17, 777777=3, ffffff=76669, f0f0f0=4, bbbbbb=1, 1e58a5=1, b3b3b3=4, 777=20, 636363=2, d4d4d4=1, 2c2c2c=5, 848484=1, 3c3c3c=3, bfbfbf=2, 3e3e3e=9, 333333=4, 7a7a7a=3, 858585=4, 4b4b4b=3, 272727=7, 111111=6, 666=13, 9b9b9b=1, bcbcbc=4, cfcfcf=2, 9a9a9a=1, 404040=21, 525252=3, 989898=4, 171717=5, 3b3b3b=2, c4c4c4=1, 3f3f3f=7, 464646=1, cdcdcd=2, b2b2b2=33, c5c5c5=2, bababa=2}

Vui lòng không đăng 1,8 đề xuất golf cụ ​​thể, trừ khi nó hoạt động trong Java cũ hơn, tôi không muốn.

Ví dụ: Lambdas không hoạt động trong nhiều phiên bản Java hơn chúng hoạt động.


" Xin vui lòng không đăng 1,8 đề xuất golf cụ ​​thể, trừ khi nó hoạt động trong Java cũ hơn, tôi không muốn. " Vì tò mò: tại sao Java 4 trong khi Java 10 đã có sẵn?
Kevin Cruijssen 22/03/18

Một số golf nên hoạt động trong Java 4 (tôi nghĩ): import java.util.*;class M{public static void main(String[]a)throws Exception{java.awt.image.BufferedImage i=javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString((c&0xff0000)>>16)+x.toHexString((c&0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1))c=i.getRGB(x++,y);System.out.print(m);}}( 419 byte )
Kevin Cruijssen 22/03/18

@KevinCruijssen Bởi vì 1.8, được cho là bản phát hành lớn nhất về mặt mã sẽ không chạy với các phiên bản trước. Hầu hết các bản phát hành khác là bản sửa lỗi và bổ sung các lớp cho JRE. 1.8 là ít tương thích nhất với các JRE trước đây.
Bạch tuộc ma thuật Urn

@KevinCruijssen x.toHexIntegerthông minh hơn nhập khẩu tĩnh.
Bạch tuộc ma thuật Urn

Cũng không phải Java 3, vì Java 3 ... thực sự ... có quá ít phím tắt ...
Magic Octopus Urn

0

SmileBASIC, 165 byte

DEF C A
L=LEN(A)DIM C[L],N[L]FOR J=0TO L-1FOR I=0TO U-1ON A[J]-C[I]GOTO@L
NEXT
U=U+1@L
C[I]=A[J]INC N[I]NEXT
RSORT.,U,N,C
FOR I=0TO U-1?"#";HEX$(C[I],6),N[I]NEXT
END

Hình ảnh được cung cấp dưới dạng một mảng gồm các giá trị màu ARGB 32 bit (giá trị alpha được cắt bớt khi số được chuyển đổi thành chuỗi hex 6 chữ số)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.