var QUESTION_ID=162408,OVERRIDE_USER=21034;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Jawaban:
Oktaf , 44 byte
Cobalah online!
Hasil fungsi, saat menggunakan masing-masing karakter dalam fungsi sebagai input:
Semua karakter input lainnya menghasilkan nol.
Fakta bahwa saya harus melarikan diri
'
membuat ini jauh lebih lama. Untuk menjelaskan 4 kurung, saya hanya memiliki duplikat dalam string. Namun, menggandakan tanda kutip membutuhkan tanda kutip, jadi ini hanya membawa kita lebih jauh dari hasil yang benar. Oleh karena itu, saya harus menghitung jumlah apostrof dengan nilai ASCII-nya39
,. Ini tentu saja berarti saya harus memeriksa karakter3
dan9
juga, membuatnya jauh lebih lama.sumber
Excel, 84 byte
Find()
akan mencari nilai dalam selA1
di dalam string"123456789,()=MINORFADEOMEN
("""
di awal adalah untuk keluar dari karakter dan akan dievaluasi menjadi adil"
).Berdasarkan hasil
Find()
,Mid()
fungsi akan mengembalikan karakter yang sesuai dari deretan angka. String ini dibuat melalui iterasi hingga berhenti berubah.Jika karakter dalam
A1
tidak ditemukan,Find()
mengembalikan kesalahan sehinggaIfError()
fungsi lolos itu untuk kembali0
sebagai gantinya.Pada
OMEN
akhir string yang dicari dalamFind()
fungsi adalah huruf duplikat sehingga posisi mereka tidak akan pernah dikembalikan tetapi mereka diperlukan untuk menyesuaikan jumlah karakter. Tanpa mereka, ada loop tak berujung jumlah berubah. Pengaturan surat adalah pilihan gaya.sumber
JavaScript (ES6), 70 byte
Tidak membaca sumber fungsi, tetapi ini cukup panjang. Mengambil input sebagai string 1-karakter.
Cobalah online!
sumber
i=>'36335633'[i='\\36=\'i|&()25.>[]Odefx~n'.indexOf(i)]||~i&&2
(8 byte disimpan)Retina , 1 byte
Ini tidak akan valid jika mengikuti aturan quine secara ketat, tetapi OP secara eksplisit mengizinkannya dalam komentar .
Cobalah online!
Dalam retina, program garis tunggal menghitung kemunculan regex dalam input. Tantangan ini diselesaikan dengan karakter ASCII tunggal kecuali
`
,.
,+
,*
,?
,[
,(
,)
,^
,$
,\
dan baris baru.sumber
C # (Visual C # Compiler) ,
8857 byteCobalah online!
Mengembalikan 3 jika string berisi char yang lewat, jika tidak menghasilkan 0. String berisi setiap karakter kode minimal sekali dan persis jumlah yang diperlukan untuk memiliki char 3 kali dalam kode.
-31 byte terima kasih kepada Kevin Cruijssen
sumber
(a)=>
dan mengambil input sebagai string daripada char sehingga.ToString()
tidak lagi diperlukan (dana+""
bisa digunakan juga, untuk tantangan kode-golf Anda tidak akan pernah perlu.ToString()
). Juga, karena.Contains
sudah mengandunga
, Anda dapat membuat variabel input menjadi karakter yang tidak digunakan yang berbeda (sepertix
atauq
) untuk memiliki 3 untuk setiap karakter, bukan 4. EDIT: Jangan pedulikan bagian terakhir, saya melihat"
digunakan 4 kali juga sekarang.Haskell , 66 byte
Dua versi pertama pada dasarnya quine yang memfilter karakter yang diperlukan dan kemudian mengambil panjangnya:
Cobalah online atau uji dengan semua karakter! *
Alternatif tanpa
(<>)
, 72 byteCobalah online atau uji dengan semua karakter!
Alternatif non-quine,
8786 byteMungkin masih bisa ditingkatkan, tetapi saya senang bahwa saya turun ke hanya tiga kelompok yang berbeda.
Saya suka yang terbaik ini, meskipun itu yang paling banyak byte. Itu menghitung jumlah karakter / byte sebagai jumlah dari 2,3 dan 7 (perhatikan bagaimana beberapa karakter dalam beberapa grup):
Cobalah online atau uji dengan semua karakter!
* diimpor
(<>)
karena versi GHC TIO adalah 8.0.2sumber
Python 2 ,
545232 byte-20 bytes terima kasih kepada ovs
Cobalah online!
sumber
"xxx".count
sama denganlambda c:"xxx".count(c)
.f="xxx".count
danf=lambda c:"xxx".count(c)
akan disebut sebagaif('a')
Sekam ,
11 108 byteTerima kasih Leo untuk -2 byte!
Cobalah online!
Penjelasan
Ini memastikan bahwa itu hanya menggunakan ASCII (karena
show
akan mengacaukannya) dan bahwa setiap karakter berisi dua kali:Ekstensi quine standar, 11 byte
Cobalah online!
Penjelasan
sumber
Java 10,
1648157 bytePort jawaban @Hyarus 'C # , jadi pastikan untuk menghapusnya!
Penjelasan:
Cobalah online.
Old Quine 164-byte jawaban:
Penjelasan:
Cobalah online.
quine -part :
s
berisi kode sumber yang tidak diformat.%s
digunakan untuk memasukkan String ini ke dalam dirinya sendiri dengans.format(...)
.%c
,%1$c
dan34
digunakan untuk memformat tanda kutip ganda.s.format(s,34,s)
menempatkan semuanya bersama-samaBagian tantangan:
.replaceAll("[^"+c+']',"")
menghapus semua karakter kecuali yang sama dengan input..length()
lalu butuh panjang dari String ini.CATATAN:
.split(c).length
(denganString
input sebagai gantichar
) mungkin tampak lebih pendek, tetapi memiliki dua masalah:c
(denganc->
sebagai bagian utama) adalah input, itu akan salah mengembalikan satu karakter terlalu sedikit. Ini dapat diperbaiki dengan menambahkan+(c==99?1:0)
kode sumber dan String kode sumber yang tidak diformat (dan berubah.split(c)
menjadi.split(c+"")
, tetapi kemudian kita masih memiliki masalah berikut:$
) adalah input,.split
akan menafsirkannya sebagai regex, memberikan hasil yang salah.sumber
Haskell , 58 byte
Cobalah online! atau verifikasi solusinya .
Alternatif jumlah byte yang sama:
Haskell , 90 byte
Cobalah online! atau verifikasi solusinya . Menggunakan fakta itu
sum Nothing = 0
dan misalnyasum (Just 4) = 4
.sumber
Smalltalk , 112
132byteSmalltalk tidak dikenal karena kecocokan golfnya :-)
Metode yang didefinisikan dalam karakter kelas (diuji dalam VA Smalltalk dan Squeak, harus bekerja dalam dialek lain seperti VisualWorks dan Pharo juga):
Karakter yang muncul di sumber dikelompokkan berdasarkan jumlah kejadian. Grup diuji untuk yang pertama yang berisi penerima, dan jumlah kejadian yang cocok dikembalikan.
Metode lama:
Setiap karakter yang muncul dalam metode muncul tepat 6 kali (dengan diulang dalam konstanta string), jadi metode hanya memeriksa apakah penerima terkandung dalam string dan mengembalikan 6 jika ya, 0 sebaliknya.
Setelah mendefinisikan metode seperti di atas, Anda dapat memvalidasinya menggunakan
Hasilnya harus kosong.
sumber
JavaScript, 31 byte
Cobalah online
sumber
Python 2 , 57 byte
Cobalah online!
sumber
05AB1E , 17 byte
Cobalah online!
sumber
Haskell , 96 byte
Cobalah online!
Haskell , 109 byte
Cobalah online!
Haskell , 122 byte
Cobalah online!
Penjelasan
Jawaban-jawaban ini tidak terlalu canggih. Ini adalah serangkaian deklarasi, satu untuk setiap karakter yang ada dalam program. Pada akhirnya kami memiliki tangkapan semua yang mengembalikan 0 untuk karakter yang tidak ada dalam program.
Saya menggunakan beberapa trik untuk meminimalkan jumlah karakter yang diperlukan dalam program dan dari sana saya mengutak-atik hal-hal sampai jumlahnya ternyata tepat. Anda dapat melihat bahwa saya telah mengisi nama variabel dalam deklarasi terakhir, di ketiganya. Perbedaan antara 3 program ini adalah apakah saya memilih untuk menggunakan baris baru atau
;
untuk jeda baris dan apakah saya memilih untuk mengambil karakter sebagai input atau string. The;
pendekatan tampaknya tidak inheren lebih unggul dari orang lain itu hanya akan beruntung dan berakhir up lebih pendek, namun hal itu tampaknya bahwa menggunakan String adalah ide yang lebih baik dari Chars karena Chars memerlukan spasi setelah nama fungsi sebuah String tidak.sumber
Spasi , 140 byte
Huruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.70 spasi, 37 tab, dan 33 baris baru yang digunakan.
Biasanya saya menggunakan Buat Label dalam urutan
NSSN
,NSSSN
,NSSTN
,NSSSSN
,NSSSTN
,NSSTSN
,NSSTTN
, dll Tapi karena mencetak nomor di mana binerS=0
/T=1
digunakan mempengaruhi jumlah saya perlu output, saya menggunakan labelNSSN
,NSSSN
,NSSTN
, danNSSSTN
sebagai gantinya, yang memberikan jumlah sempurna spasi / tab yang akan dicetak dengan angka binerSSSTSSSSTN
(33; jumlah baris baru),SSSTSSTSTN
(37; jumlah tab), danSSSTSSSTTSN
(70; jumlah spasi).Penjelasan dalam pseudo-code:
Contoh berjalan:
Input: spasi
Program berhenti dengan kesalahan: Tidak ada jalan keluar yang ditentukan.
Cobalah online (dengan spasi, tab, dan hanya baris baru).
Masukan: tab
STDIN akan menjadi
\t
(9
) sebagai gantinya, dalam hal ini akan menjadi0
padaIf 0
cek pertama , pergi keLABEL_TAB
/NSSSTN
, dan akan mendorong dan mencetak37
sebagai gantinya.Cobalah online (dengan spasi, tab, dan hanya baris baru).
Input: baris baru
STDIN akan menjadi
\n
(10
) sebagai gantinya, dalam hal ini akan0
diIf 0
cek kedua , pergi keLabel_NEWLINE
/NSSSN
, dan akan mendorong dan mencetak33
sebagai gantinya.Cobalah online (dengan spasi, tab, dan hanya baris baru).
Input: apa pun
Input-karakter lain akan dilakukan
NSTN
(Langsung ke Label_PRINT) setelahIf 0
pemeriksaan ketiga , mencetak0
yang masih di tumpukan (yang telah kami duplikasi di awal).Cobalah online (dengan spasi, tab, dan hanya baris baru).
sumber
Japt , 27 byte
Lebih panjang dari jawaban Japt yang ada, tetapi menggunakan pendekatan yang berbeda.
Memiliki batasan yang melekat bahwa semua karakter harus muncul beberapa kali.
Mengambil input sebagai string.
Cobalah online!
sumber
Perl, 130 byte
Tidak memiliki baris baru atau spasi putih lainnya. Membaca baris dari output standar, tetapi hanya peduli dengan byte pertamanya, lalu mencetak berapa kali byte itu terjadi dalam kode sumbernya sendiri dalam desimal, tanpa baris baru.
Program ini mudah. Sebagian besar kode sumber ditempati oleh tabel literal yang memberikan jawaban untuk setiap byte yang mungkin. Nol trailing dihilangkan, dan nol yang berdekatan dikompresi run-time, tetapi tidak ada trik khusus selain itu. Sisa program hanya membaca input dan mencari jawabannya di tabel.
Sebagai contoh, bagian
22, 12, 6, 3, 5, 2, 4, 0, 1, 0
dalam kode sumber memberikan frekuensi digit, sehingga ada 22 nol, 12 angka, 6 dua dll dalam kode sumber. Akibatnya, jika Anda memasukkan0
input standar program, program akan mencetak22
.sumber
C (gcc) , 1033 byte
Cobalah online!
Ini TIDAK berarti jawaban golf, tetapi menyenangkan untuk mencoba menyelesaikan tantangan ini dalam bahasa yang tidak saya kenal. Itu bukan tantangan yang sangat sulit sampai tiba saatnya untuk menemukan kemunculan digit, sekarang ITU adalah tantangan. Harus melakukan sedikit penyeimbangan kreatif :)
sumber
C (gcc) , 192 byte
Cobalah online!
Mungkin bisa bermain golf lebih jauh. Menggunakan komentar di bagian akhir sebagai 'ruang awal' untuk menambahkan angka tambahan Ketika saya harus mengubah digit dari X ke Y, saya mengubah salah satu Y di awal menjadi X untuk mengkompensasi. Selain itu, ini hanya fungsi yang mengambil integer, menggunakan trik penugasan untuk mengembalikan nilai berdasarkan kondisi ternary besar.
sumber
0*84332211
seperti pada jawaban C lainnya, tetapi saya juga dapat menyimpan byte dengan refactoring yang lebih kecil, jadi saya tidak akan repot dulu.J&1?
untuk mencocokkan semua karakter aneh). Saya dapat melanjutkan golf ini jika saya menemukan waktu untuk melakukannya.x86 .COM, 17 byte, kontroversial
36 byte
sumber
Japt , 14 byte
Cobalah
Penjelasan
sumber
V , 12 byte
Cobalah online!
Hexdump:
sumber
Jelly , 16 byte
Cobalah online!
Setiap karakter muncul tepat dua kali.
sumber
x86,
4240 byteDi sini saya menggunakan strategi yang sama dengan yang lain: Buat salinan string dari program dengan byte unik, lalu kembalikan 2 in
al
jika inputnyaal
ada di dalam string. Jika kita membiarkan diri kita membaca kode yang benar-benar dijalankan, kita mendapatkan solusi l4m2 .Saya harus menggunakan instruksi string yang keren
scasb
. Sepengetahuan saya, tidak ada duplikat byte, tapi ini adalah sesuatu yang saya mudah gagal. Memuat alamat string yang membutuhkan waktu 5 bytes tapi aku tidak mengetahui adanya solusi yang lebih pendek (64-bitlea
daririp
dengan offset mengambil 6 byte).-2 dengan melompat mundur untuk menghindari penggunaan
02
dua kali.Hexdump (dari format file biner elf32-i386, karena sayangnya file obj memiliki
00
byte untukstr
alamat):x86, 256 byte
Jawaban membosankan itu setara dengan komentar raksasa. Input in
cl
, segera mengembalikan 1 inal
. Saya akan membuat jawaban yang sebenarnya ketika saya memiliki waktu luang.sumber
APL (Dyalog Classic) , 30 byte
Cobalah online!
Penjelasan
Dalam APL, tanda kutip tunggal dalam string diloloskan dengan menggandakan, begitu
'''''''1''⊢-⍳⍳0'
juga string'''1'⊢-⍳⍳0
, yang berisi setiap karakter yang digunakan dalam program.Array APL secara default diindeks, dan fungsi indeks, yang menarik, kembali
1 + max index
jika elemen tidak ditemukan.Jadi, dengan menggunakan index-of pada string dan input kembali
Seperti yang dapat dilihat,
11 - index
berikan jumlah karakter dalam program. Jadi, algoritma dasarnya adalahSisanya membengkak jumlah karakter untuk memungkinkan mereka masuk dengan baik ke dalam slot.
sumber
R , 135 byte
Terinspirasi oleh jawaban Python ini .
Versi sebelumnya rusak. Terima kasih kepada @Giuseppe karena menunjukkan bahwa
paste
tidak diharuskan menyimpan sekitar 18 byte.lengths(regmatches(z,gregexpr(x,z)))
dari jawaban ini .Cobalah online!
sumber
Pari / GP , 36 byte
Cobalah online!
sumber
Ruby, 48 byte
%q[str]
adalah cara yang lebih nyaman untuk menulis string literal daripada"str"
karena dapat bersarang di dalam dirinya sendiri tanpa melarikan diri. Jadi saya hanya memasukkan seluruh kode kecuali untuk salinan di dalamnya, lalu gandakan jumlahnya.sumber
Jelly ,
1210 byteCobalah online!
Membaca karakter dari STDIN.
12 byte
Cobalah online!
Menggunakan input dari argumen baris perintah.
Juga 12 byte:
Cobalah online!
sumber