Asumsikan kita memiliki string, dan kami ingin menemukan urutan maksimum setiap huruf yang diulang.
Misalnya, diberikan input sampel:
"acbaabbbaaaaacc"
Output untuk input sampel dapat:
a=5
c=2
b=3
Aturan:
- Kode Anda dapat berupa fungsi atau program - untuk Anda pilih
- Input dapat dengan parameter stdin, file atau fungsi
- Keluaran harus hanya berisi karakter yang muncul dalam input
- Input panjang maks adalah 1024
- Urutan output tidak masalah, tetapi harus dicetak dalam bentuk [char] = [urutan berulang maksimum] [pembatas]
- String dapat berisi karakter apa saja
Kompetisi berakhir pada Kamis 3 jam 23:59 UTC.
l:S_&{'=L{2$+_S\#)}g,(N}/
dalam sistem produksi! Dan aku akan mengutuk namamu.Jawaban:
8086 kode mesin,
8280Isi
x.com
file:Ini hanya mendukung pengulangan hingga 99 karakter.
Kode sumber (berfungsi sebagai input untuk
debug.com
assembler), dengan komentar!Berikut ini beberapa teknik bermain golf yang menurut saya menyenangkan:
3d00
, di mana3d
ascii-code untuk=
. Dengan cara ini, alamat untuk entri array untuk karakterx
adalah3d78
. Ketika ditafsirkan sebagai string 2 karakter, itux=
.104
; itu menimpa kode inisialisasi yang tidak lagi diperlukan. Urutan akhir baris0D 0A 24
dijalankan sebagai kode tidak berbahaya.aam
instruksi sini tidak menyediakan golf apapun, meskipun itu bisa ...11b
, yang berisi kode mesin yang dibutuhkanC3
karena keberuntungan.sumber
CJam,
272625 byteCobalah online.
Contoh
Bagaimana itu bekerja
sumber
J - 52 byte
Ya, pendekatan sederhana lagi.
Penjelasan:
Contoh:
Jika output bentuk bebas diizinkan (seperti pada banyak jawaban lain), saya juga memiliki versi 45 byte . Kotak-kotak ini mewakili daftar kotak (ya, mereka dicetak seperti itu, meskipun tinggi garis SE merusaknya).
sumber
Ruby, 72
Ini mengambil input dari argumen baris perintah dan output ke stdout.
sumber
chars
sedikit lebih pendek darisplit("")
.chars
memberikan enumerator daripada array. Saya di 1.9.3, jadi apakah ini 2.0?chars
mengembalikan array.p
bukanputs
?GolfScript, 26 byte
Cobalah online.
Penjelasan:
:s
menyimpan string input dalam variabels
untuk digunakan nanti..&
mengekstrak karakter unik dalam input, yang selanjutnya dimasukkan ke dalam{ }%
loop berulang.61
mendorong angka 61 (kode ASCII untuk tanda sama dengan) di atas karakter saat ini di tumpukan, untuk bertindak sebagai pembatas output.{2$=}s%
mengambil strings
dan mengganti karakternya dengan 1 jika mereka sama dengan karakter saat ini yang diiterasi, atau 0 jika tidak. (Ini juga meninggalkan karakter saat ini pada tumpukan untuk keluaran.)1,/
mengambil string satu dan nol ini, dan membaginya menjadi nol.$
macam substring yang dihasilkan,-1=
ekstrak substring terakhir (yang, karena semuanya terdiri dari pengulangan dari karakter yang sama, adalah yang terpanjang), dan,
mengembalikan panjang substring ini.n+
merangkai panjang dan menambahkan baris baru untuk itu.Ps. Jika tanda sama dengan output adalah opsional,
61
dapat dihilangkan (dan2$
diganti dengan1$
), untuk panjang total 24 byte :sumber
61
pertama::s.&{61{2$=}s%1,/$-1=,n+}%
.CoffeeScript, 109 byte
Saya suka regex.
Berikut ini adalah kompilasi JavaScript yang dapat Anda coba di konsol browser Anda
Maka Anda bisa menelepon
mendapatkan
sumber
aaaabaa
.Pyth , 24
2526(atau 29)Tes dapat dilakukan di sini: tautan
Output dalam format:
Penjelasan:
Python:
Untuk output yang tepat (a = 5), gunakan:
29 karakter
sumber
k=''
ditentukan di tempat lain.C,
126125119 byteBerlari:
sumber
getchar()>0
dengan~getchar()
seperti pada jawaban iniless than zero
tidak apa-apa, tetapi== EOF
lebih jelas.EOF
dijamin negatif, dan -1 digunakan meskipunchar
ditandatangani; lihat di siniMathematica ,
747269 69Tidak terlalu bagus tetapi string tidak wilayah terbaik Mathematica . Menjadi lebih baik. :-)
sumber
First@*MaximalBy[Length] /@ GroupBy[First]@Split@Characters[#] &
Setidaknya cukup mudah dan mudah dibaca.GroupBy
danGatherBy
?GroupBy
mengembalikan sebuahAssociation
. Saya belum mempelajari perbedaan lain secara detail. reference.wolfram.com/language/ref/GroupBy.html Anda dapat mencobanya di cloud dengan akun gratis (begitulah cara saya memainkan ini).C # (LinQPad)
146
Ini adalah jawaban tsavino tetapi lebih pendek. Di sini, saya menggunakan
Distinct()
bukanGroupBy(c=>c)
. Juga kurung kurawal dariforeach-loop
ditinggalkan:136
Saya mencoba menggunakan
lambda expression
alih - alih sintaks kueri normal, tetapi karena saya memerlukan sintaksCast<Match>
pertama, kodenya menjadi 1 karakter lebih panjang ... Bagaimanapun, karena dapat dijalankan di LinQPad, Anda dapat menggunakanDump()
alih-alihConsole.WriteLine()
:Studi lebih lanjut tentang kode membuat saya berpikir tentang
Max()
. Fungsi ini juga menerima aFunc
. Dengan cara ini saya bisa melewatkanSelect
bagian ketika menggunakan epxresi lambda:Jadi, hasil akhir:
128
Memperbarui:
Berkat tip dari Dan Puzey, saya dapat menyimpan 6 karakter lainnya:
Panjangnya:
122
sumber
Dump()
metodenya baru-baru ini, menghemat 10+ karakter setiap kali :) Kurung kurawal mudah dan sisanya sedikit braincracking: DIEnumerable
gaya tampilan LinqPad, Anda dapat menyimpan 8 karakter lagi, dengan ini sebagai tubuh Anda:i.Distinct().Select(c=>c+"="+Regex.Matches(i,"["+c+"]+").Cast<Match>().Max(m=>m.Value.Length)).Dump();
Python 3 (70)
Bahkan Python golf bisa sangat mudah dibaca. Saya pikir kode ini sepenuhnya idiomatis kecuali untuk variabel huruf tunggal dan satu baris sementara loop.
Contoh berjalan:
sumber
Ruby, 58
Mengambil input dari STDIN, mengeluarkannya ke STDOUT dalam formulir
{"a"=>5, "c"=>2, "b"=>3}
sumber
C # dalam LINQPad - 159 Bytes
Yah, setidaknya saya mengalahkan T-SQL; P Tidak akan mengalahkan orang lain, tapi saya pikir saya akan tetap membagikannya.
Pemakaian:
Saran selalu diterima!
sumber
Powershell
807772Anda harus menjalankannya di konsol ...
sumber
$x
berlebihan. Anda tiga byte lebih pendek tidak menggunakannya. Jugasort -u
cukup. Jarang perlu mengeja nama parameter lengkap. Namun, ini akan gagal untuk karakter tertentu karena penggunaan yang tidak terhapus di regex. Bergantung pada bagaimana »String dapat berisi karakter apa saja yang harus dipahami, ini bisa menjadi masalah.[char[]]"$args"|sort -u|%{"$_="+($args-split"[^$_]"|sort)[-1].length}
, sepertinya $ args kedua kosong ... - darkajax 17 mnt lalu$args
tidak ada lagi skrip).Perl - 65
7176karakterGolf kode pertama saya!
Untuk setiap jawaban, salin ke golf.pl dan jalankan sebagai:
Solusi terpendek saya mencetak setiap karakter sebanyak yang muncul, karena itu tidak dilarang oleh aturan.
Solusi terpendek saya berikutnya (85
90karakter) hanya mencetak setiap karakter sekali:sumber
F # - 106
Di FSI, menelepon
memberi
Namun, untuk mencetaknya tanpa informasi tambahan, sebut seperti ini:
pemberian yang mana
sumber
Javascript, 116 byte
Output sampel:
sumber
T-SQL (2012)
189171Sunting: dihapus
ORDER BY
karena aturan mengizinkan urutan keluaran apa pun.Mengambil input dari variabel CHAR
@a
,, dan menggunakan a CTE rekursif untuk membuat baris untuk setiap karakter dalam string dan mencari tahu kejadian berurutan.Setelah itu, itu sederhana
SELECT
danGROUP BY
dengan pertimbangan untuk urutan output.Cobalah di SQL Fiddle.
Menetapkan variabel:
Output sampel:
sumber
str
fungsi, alih-alihltrim
. Anda juga dapat memberi nama variabel Anda@
untuk menyimpan char. Ini memungkinkan Anda kehilangani
variabel di rcte. Saya pikir Anda dapat mencukur beberapa karakter dengan cara itu. Anda mungkin juga dapat menulis ulang kueri dengan menggunakan fungsi windowing seperti jumlah lebih dari baris sebelumnya atau lag. Saya belum terbentuk bagaimana pikiran Anda.str
selalu menghasilkan 10 karakter, tetapi ini golf: PHaskell - 113
120byteDiuji dengan
sumber
.
(compose) untuk menghindari pembuatan lambda di mana parameter hanya muncul setelah akhir rangkaian$
fungsi yang terhubung. Untuk melakukan ini, cukup ubah semua$
s menjadi.
(contoh:(\i->reverse$sort$group i)
berubah menjadireverse.sort.group
.JavaScript [83 byte]
Jalankan kode ini di konsol browser.
Untuk input "
acbaabbbaaaaacc
" konsol harus menampilkan "Object {a: 5, b: 3, c: 2}
".sumber
JavaScript - 91
EDIT: Solusi pertama saya mematuhi aturan, tetapi mencetak beberapa kali kejadian char tunggal seperti
abab
=>a=1,b=1,a=1,b=1
jadi saya keluar dengan ini ( 101 karakter), bagi mereka yang tidak puas dengan yang pertama:sumber
Julia, 85
sumber
Python3 -
111,126,115114111 byteKode yang dapat dieksekusi yang akan membaca 1 baris (hanya menggunakan huruf kecil az)
Sunting: Keluaran yang tidak perlu dikecualikan berdasarkan permintaan dari @Therare
Outputnya terlihat bagus
sumber
for
atauif
.l=2
dano=1
untuk "helloworld"JavaScript -
141137125Saya tidak suka regex :)
Menjalankan
output
sumber
Javascript,
10910410098 byteContoh penggunaan:
output:
sumber
PHP,
10410296pemakaian
dicetak
sumber
Jawa 247
sumber
import java.util.*;
berfungsi di Jawa?acbaabbbaaaaacc
outputa=8; b=4; c=3
bukana=5; b=3; c=2
.C 169
Iterasi setiap karakter yang dapat dicetak dalam tabel ASCII dan hitung maks dari string input.
sumber
JavaScript 116
sumber
Groovy - 80 karakter
Berdasarkan jawaban cerdas ini oleh xnor :
Keluaran:
Tidak Terkumpul:
sumber