Tulis program yang menampilkan daftar jumlah kemunculan setiap karakter unik dalam kode sumbernya.
Misalnya, program hipotetis ini {Source_Print_1};
harus menghasilkan keluaran ini:
; 1
P 1
S 1
_ 2
c 1
e 1
i 1
n 1
o 1
p 1
r 2
t 1
u 1
{ 1
} 1
Format harus sesuai dengan contoh ini. Tidak ada spasi kosong yang diizinkan, kecuali baris akhir final opsional.
Program Anda mungkin tidak membaca kode sumbernya sendiri dari file sumber.
Karakter yang tercantum harus dalam salah satu dari dua pesanan. Entah urutan nilai karakter dalam pengkodean karakter yang digunakan oleh bahasa Anda (mungkin ASCII), atau urutan karakter muncul di sumber Anda.
Pertanyaan ini terinspirasi oleh komentar ini oleh Jan Dvorak .
Jawaban:
CJam, 14 byte
Coba di sini .
Output dalam urutan pertama kali muncul:
Ini hanya ditambahkan
<SP>2<NL>
ke setiap karakter dalam{S2N`/}
.sumber
/// , 12 byte
Terima kasih banyak kepada @ user23013, yang menyarankan perbaikan ini atas kode CJam saya, mengungguli jawabannya sendiri, skor tertinggi dalam proses.
Karakter diurutkan berdasarkan penampilan. Kode ini berfungsi dalam bahasa apa pun yang hanya mencetak kode sumbernya sendiri dalam keadaan tertentu (PHP, ASP, dll.).
CJam, 20 byte
Pendekatan ini tidak menggunakan penghitungan karakter bawaan.
Cobalah online di penerjemah CJam .
Bagaimana itu bekerja
sumber
CJam, 20 byte
Bagaimana itu bekerja
Kami pertama kali memulai dengan salah satu quine standar di CJam
yang mendorong blok pertama pada tumpukan, menyalinnya, dan menjalankan salinan, yang membuatnya mencetak kode sumber itu sendiri akhirnya.
Kemudian kami menambahkan logika untuk menghitung jumlah karakter dari kode sumber:
Cobalah online di sini
sumber
Python 3.5.0b1 ,
10773 byteAlih-alih quine pengganti string biasa, yang membutuhkan penulisan semuanya dua kali, inilah
exec
quine.sumber
Mathematica, 101 byte
Sayangnya, saya tidak dapat menggunakan salah satu trik golf normal seperti menghapus spasi,
<>
untukStringJoin
,#
alih-alih#1
,@
untuk panggilan fungsi awalan atau@@@
alih-alihApply[...,{1}]
, karenaToString[...,InputForm]
berpikir itu harus cukup mencetak semuanya ...Ini mencetak karakter dalam urutan pertama kali muncul dalam kode. Jika saya dapat berasumsi bahwa ini tidak berjalan di lingkungan REPL (yang agak tidak biasa untuk Mathematica) saya dapat menyimpan dua byte dengan menghilangkan keduanya
;
.sumber
InputForm
menjengkelkan ...OutputForm
lebih baik tetapi tidak mengutip string.Haskell, 178 byte
Tidak ada yang mewah. Semua karakter program ada dalam daftar literal (String). Begitu juga frekuensinya. Zip kedua daftar dan cetak. Keluaran:
sumber
Dart -
214127Versi langsung:
"4" hanyalah faktor biola untuk membuat angka bertambah. Lihat / jalankan di DartPad .
Asli: Taktik quine standar, dan nama fungsi Dart agak terlalu panjang untuk bermain golf yang baik.
Lihat / jalankan di DartPad .
sumber
Haskell , 146 byte
Cobalah online!
Keluaran:
(Ditambah baris baru tambahan)
Penjelasan:
Kodenya adalah
di mana
"<code>"
string dari kode program tanpa"
.a
melewati karakter ascii dimulai dengan spasi.sum[2|b<-show"<code>",a==b]
menghitung seberapa sering karakter muncul dalam string, dengan setiap kemunculan dihitung dua kali.a:" "++show s
membangun string karakter saat ini, spasi dan jumlah karakter. AkhirnyamapM putStrLn
mencetak setiap string dalam daftar dengan baris baru.Bagian tersulit adalah menghitung dengan
"
benar. Hanya menggunakanb<-"<code>"
akan menghitung tanda kutip nol karena tidak ada dalam string. Menggunakanshow"<code>"
menambahkan a"
ke depan dan mengakhiri ke string, menghasilkan hitungan empat. Jadi saya harus meletakkan dua tanda kutip tambahan dalam kode, jadi alih-alih (lebih pendek)a:' ':show s
saya gunakana:" "++show s
.sumber