/* Configuration */
var QUESTION_ID = 111758; // Obtain this from the url
// It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 60042; // This should be the user ID of the challenge author.
/* App */
var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page;
function answersUrl(index) {
return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER;
}
function commentUrl(index, answers) {
return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER;
}
function getAnswers() {
jQuery.ajax({
url: answersUrl(answer_page++),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
answers.push.apply(answers, data.items);
answers_hash = [];
answer_ids = [];
data.items.forEach(function(a) {
a.comments = [];
var id = +a.share_link.match(/\d+/);
answer_ids.push(id);
answers_hash[id] = a;
});
if (!data.has_more) more_answers = false;
comment_page = 1;
getComments();
}
});
}
function getComments() {
jQuery.ajax({
url: commentUrl(comment_page++, answer_ids),
method: "get",
dataType: "jsonp",
crossDomain: true,
success: function (data) {
data.items.forEach(function(c) {
if (c.owner.user_id === OVERRIDE_USER)
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
var SCORE_REG = /<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var OVERRIDE_REG = /^Override\s*header:\s*/i;
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
answers.forEach(function(a) {
var body = a.body;
a.comments.forEach(function(c) {
if(OVERRIDE_REG.test(c.body))
body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>';
});
var match = body.match(SCORE_REG);
if (match)
valid.push({
user: getAuthorName(a),
size: +match[2],
language: match[1],
link: a.share_link,
});
});
valid.sort(function (a, b) {
var aB = a.size,
bB = b.size;
return aB - bB
});
var languages = {};
var place = 1;
var lastSize = null;
var lastPlace = 1;
valid.forEach(function (a) {
if (a.size != lastSize)
lastPlace = place;
lastSize = a.size;
++place;
var answer = jQuery("#answer-template").html();
answer = answer.replace("{{PLACE}}", lastPlace + ".")
.replace("{{NAME}}", a.user)
.replace("{{LANGUAGE}}", a.language)
.replace("{{SIZE}}", a.size)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#answers").append(answer);
var lang = a.language;
if (/<a/.test(lang)) lang = jQuery(lang).text();
languages[lang] = languages[lang] || {lang: a.language, user: a.user, size: a.size, link: a.link};
});
var langs = [];
for (var lang in languages)
if (languages.hasOwnProperty(lang))
langs.push(languages[lang]);
langs.sort(function (a, b) {
if (a.lang > b.lang) return 1;
if (a.lang < b.lang) return -1;
return 0;
});
for (var i = 0; i < langs.length; ++i)
{
var language = jQuery("#language-template").html();
var lang = langs[i];
language = language.replace("{{LANGUAGE}}", lang.lang)
.replace("{{NAME}}", lang.user)
.replace("{{SIZE}}", lang.size)
.replace("{{LINK}}", lang.link);
language = jQuery(language);
jQuery("#languages").append(language);
}
}
body { text-align: left !important}
#answer-list {
padding: 10px;
width: 290px;
float: left;
}
#language-list {
padding: 10px;
width: 290px;
float: left;
}
table thead {
font-weight: bold;
}
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>
||
daftarnya dan itu0111110001111100
.Jawaban:
Jelly , 18 byte + 0 penalti = 18
Mengembalikan
1
jika tidak ada string bit yang sama dengan panjang 4 atau lebih dalam representasi kata 8-bit dari input string ASCII, dan0
sebaliknya.Cobalah online! (test suite dengan beberapa case tambahan ditambahkan)
Menggunakan codepage Jelly tidak ada substring dengan panjang yang sama dengan 4 atau lebih panjang:
Dengan panjang menjalankan bit yang sama:
Bagaimana?
Trik untuk menghindari kekurangan adalah:
untuk menghindari monad "konversi dari karakter ke ordinal"
O
dengan mengonversi angka79
menjadi karakter menggunakanỌ
diikuti oleh "evaluasi kode Jelly dengan input"v
,.untuk menghindari konversi langsung ke biner menggunakan
B
(0x42
,1000010
) dengan alternatif dua byte sederhanab2
menggunakan konversi basis dyadic generik.untuk menghindari beberapa pilihan normal untuk menghitung run bit yang sama - pilihan pertama adalah "semua irisan yang tumpang tindih dengan panjang yang diberikan",
ṡ
(0xF5
atau11110101
). Pilihan kedua mungkin menggunakan "semua sublists",Ẇ
(0xCF
atau11001111
).Solusi yang saya gunakan sebelum yang saat ini adalah untuk mengambil kenaikan (antara elemen berturut-turut) dengan
I
(menempatkan nol dan yang pada pijakan yang sama), dan untuk mencari kemunculan tiga nol berturut-turut. Untuk melakukan itu, saya mengubah semua nol menjadi nol dengan menggunakan fungsi binomial dengan2c
yaitu 2Cx - membuat-1
s menjadi0
s1
s menjadi2
s, dan0
s menjadi1
s; bahwa cara kode dapat mencari kejadian pertama dari sublist[1,1,1]
denganw111
.Namun cara yang lebih singkat menjadi jelas - untuk meniru aksi "semua irisan yang tumpang tindih dengan panjang yang diberikan"
ṡ
, seseorang dapat menggunakan pengurangan 4 arah yang tumpang tindih dengan beberapa angka dua<dyad>4\
,. Jika ini dilakukan dengan tambahan,,+4\
ia menghitung1
s, maka setiap0
atau4
yang hadir adalah indikator untuk mengembalikan nilai yang sebenarnya. Masalah di sini adalah bahwa langkah jelas berikutnya akan mengambil Modulo 4 itu untuk menempatkan0
dan4
entri pada pijakan yang sama sementara meninggalkan nilai-nilai lain yang mungkin (1
,2
, dan3
) tidak berubah, tetapi+\%4
memiliki\%
di dalam, yang memiliki nilai bit 010111 0000 100100. Untuk menghindari penalti itu semua angka dikonversi ke basis 4 denganb4
(pemetaan0
ke[0]
,1
ke[1]
,2
ke[2]
,3
ke[3]
, dan4
ke[1,0]
) dan seluruh daftar diratakan denganF
. Sekarang tes terakhir adalah hanya untuk memeriksa apakah ada0
dalam daftar, dapat dicapai langsung dengan monadẠ
.Catatan: Alasan a 2 digabungkan dengan daftar ordinal adalah untuk berurusan dengan kasus tepi di mana satu-satunya run dari 4 dalam string input berada di nol di depan karakter pertama - karakter ini adalah: tab; umpan baris; dan carriage-return. Tanpa ini, basis 256 konversi secara efektif menghapus nol terkemuka dari string biner (sepenuhnya digabung); dengan angka 2 di depan, angka nol di depannya akan ada di sana dan satu angka nol di depannya. Karena tidak ada ASCII yang dapat dicetak yang memiliki tepat tiga angka nol di depan, maka tidak perlu membuang bit tambahan ini sebelum sisa pemeriksaan.
sumber
0
dan1
jika perlu.Java 7,
812726673644634616599588145 byte + 10 * 44 = 585Saya menggunakan baris baru, bukan spasi untuk mencoba meminimalkan penalti ...
Cobalah online!
Biner
Solusi bitshifting lama, 141 byte + 10 * 101 = 1.151
Cobalah online!
Biner
sumber
00000
/11111
dua berjalan,000000
/111111
tiga, dll. Saya menghitung total 101 berjalan.APL (Dyalog Classic) , 26 + 1 × 10 = 36 byte
Catatan
Berisi satu 4-run 1s. Membutuhkan
⎕IO←0
yang default pada banyak sistem. Perhatikan bahwa ini harus dijalankan pada juru bahasa Klasik sehingga string adalah satu byte per karakter.pengajuan
1≠⊃⌽⌈\∊(×4\¨⍳≢⍬⍬)⍷¨⊂11⎕DR⍞
Cobalah online!
Sumber biner
00110001101011001001110010110010100101110101110010111001001010001101011100110100010111001010100010 1111 001011101110101011101011011101010101010101000100010001
Penjelasan
⍞
Prompt untuk input string11 ⎕DR
dikonversi ke 1- bit Boolean ( 1 ) D ata R epresentation⊂
lampirkan sehingga kami dapat menerapkan beberapa hal padanya(
...) ⍷¨
indikator biner di mana masing-masing urutan berikut dimulai ...×
tanda (no-op pada data biner, tetapi dimasukkan sebagai spacer untuk membagi proses)4 \¨
perluas (salin) masing-masing hingga empat⍳
bilangan bulat hingga≢
penghitungan⍬⍬
daftar terdiri dari dua daftar numerik kosong∊
minta (ratakan)⌈\
maksimum kumulatif⌽
membalikkan⊃
pilih yang pertama1 ≠
berbeda satu? (Yaitu TIDAK)Walk-through
Kami akan memasukkan "48" ke versi un-de-runned yang tidak dikurung
~ ∨/ ∊ (0 0 0 0)(1 1 1 1) ⍷¨ ⊂ 11 ⎕DR ⍞
:11 ⎕DR ⍞
convert "48" menjadi 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 (yaitu Des 52 56, Hex 34 38)(0 0 0 0)(1 1 1 1) ⍷¨ ⊂
menemukan permulaan 0-run dan 1-run; (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)∨/ ∊
terlihat jika ada Kebenaran (yaitu setiap berjalan); 1~
meniadakan itu; 0sumber
Jeli 28 + 140 kekurangan = 168
Penjelasan
Konversi argumen ke daftar pengkodean biner mereka, misalnya
Bagian selanjutnya
memperbaiki fakta bahwa daftar di atas dapat berupa karakter yang hilang karena
B
tidak termasuk nol di depan.Ç€
memanggil tautan yang ditentukan sebelumnya atas setiap elemen yang mengembalikannyaTautan ini setara dengan
Sebagai contoh
Kami membalikkan daftar sebelum dan sesudah operasi ini (dua
U
panggilan dalam daftar itu) untuk menjadikannya sebagai prepend daripada append. Bagian selanjutnyaRatakan daftar (
F
), berikan string biner total dari pengkodean ASCII, dan run-length mengkodekan output (Œr
). Jadi misalnyadan
Akhirnya kami memeriksa apakah setiap elemen <4 (untungnya ini selalu benar untuk 0,1) dengan
Sebagai contoh
Akhirnya
Mengembalikan 0 jika ada yang palsu (dalam hal ini, 0).
Halaman Kode
Di halaman kode Jelly kode ini adalah 20 byte tetapi memiliki 27 run senilai pelanggaran aturan. Dalam UTF-8 itu adalah 28 byte tetapi dengan hanya 14 run senilai pelanggaran.
sumber
05AB1E , 22 + 3 * 10 = 52
Disimpan 2 penalti berjalan meminjam trik delta dari jawaban Jonathan Allan's Jelly
Cobalah online!
Penjelasan
Representasi kode biner
3 penalti berjalan berasal dari
vy¦}
yang digunakan untuk memotong byte pertama di setiap string biner, tetapi masih lebih murah daripada 4 berjalan kita dapatkan dari yang lebih pendek€¦
.sumber
€
dalam CP-1252 adalah10000000
yang menimbulkan penalti 4 dengan sendirinya.# coding: cp1252
di atas> _ <Perl , 33 + 160 = 193
32 byte kode + 1 byte untuk
-n
flag.(input harus dipasok tanpa baris baru final. Tautan Coba online telah
-l
ditandai untuk menghapus baris baru, tetapi untuk satu input, itu tidak diperlukan).Cobalah online!
xxd dump:
Beberapa catatan:
(.)\1\1\1
menghemat beberapa penalti(.)\1{3}
,1111|0{4}
atau regex lain yang dapat saya pikirkan (menggunakan0
atau{}
dikenakan biaya besar).print
menghemat ~ 8 poin lebih dari menggunakan-p
dan$_=
karenap
mengandung jangka 40
sementaran
tidak.+
sebagai pembatas untuk regex menyimpan menjalankan1
yang ada di/
.!~
menghemat dua berjalan (~
yang01111110
dalam biner).unpack"B*"
cukup mahal (4 berjalan), tetapi saya tidak dapat menemukan lebih murah (solusi berdasarkanord
akan lebih mahal).sumber
PHP, 98 + 270 = 368 byte
Saya ingin mengambil pendekatan yang berbeda dari apa yang diusulkan Titus , dan diakhiri dengan program yang sedikit lebih lama, namun kurang dihukum.
Keluaran
1
untuk kebenaran, tidak ada untuk falsey.Coba di sini!
Disandi biner:
(22 kejadian
0000
dan 5 kejadian1111
, karenanya 270 byte penalti)sumber
PHP, 86 byte + 370 = 456
menciptakan string biner dan menggunakan regex untuk mendeteksi goresan. Output
1
untuk kebenaran; kosong untuk kepalsuan.Jalankan dengan
echo '<string>' | php -nR '<code>'
.tweak
ide-ide terlantar
join(array_map(str_split()))
akan dikenakan biaya 31 byte dan 90 penalti<?=
/$argv[1]
bukannyaecho
/$argn
biaya 2 + 40 lainnya.str_pad(decbin())
lebih mahal darisprintf
: 7 byte dan 110 penalti.strtr
menghemat 80 penalti untuk 13 byte tambahan, tetapi backreferences lebih baik.#(.)\\1{3}
menghemat 3 byte, tetapi menambahkan 10 penalti.foreach
biaya 3 + 50.sumber
§
padafor(§;
untuk-9
.MATL, 16 byte + 60 = 76 byte
Cobalah di MATL Online
sumber
JavaScript (ES8), 91 byte + 430 penalti = 521 total
Ini akan menampilkan
1
untuktrue
dan0
untukfalse
.Cobalah
sumber
padStart
tidak ada dalam ES6.Array.includes()
) - terima kasih, @Neil.CJam , 23 byte
Gunakan ide Jonathan Allan untuk bekerja dengan delta.
Cobalah online!
Representasi biner:
Penjelasan:
sumber
Pyth, 19 + 12 * 10 = 139
Biner
Penjelasan
sumber
JavaScript, 173 + 89 * 10 = 1063
JavaScript tidak bagus dalam mengubah string menjadi biner, tapi saya pikir saya akan memberikan tantangan ini hanya untuk bersenang-senang.
Kode:
Biner:
Penjelasan:
Buat string untuk bekerja dengan:
Ulangi setiap karakter dalam string:
Buat array dan ubah string menjadi biner menggunakan kode karakter:
Tambahkan nol di depan ke array:
Bergabung kembali dengan array menjadi string:
Kembali apakah string empat atau lebih 1 atau 0 ditemukan dalam hasil biner menggunakan ekspresi reguler:
Biola:
https://jsfiddle.net/vrtLh97c/
Statistik:
Durasi: 173 bytes Hukuman: 890 Total: 1063
Golf Code sulit :)
sumber
1-1
alih-alih0
di beberapa tempat dapat menghemat beberapa kekurangan Anda.Pyth, 21 + 2 * 10 = 41
Cobalah online!
Representasi biner:
sumber
Retina, 101 + 1390 = 1491
Kode berisi karakter yang tidak patut, tetapi muncul di Chrome jika Anda mengedit pos.
-
adalah\x01-\x7f
.Cobalah online
Kode ini
ord
menggunakan ini , diikuti oleh konversi ke biner dan pemeriksaan sederhana untuk urutan yang tumpang tindih dari empat.Dalam biner:
Hukuman dihitung dengan program Python ini .
sumber
Python 2 , 74 (panjang) + 130 (penalti) = 204
Output melalui kode keluar; 0 benar, 1 palsu. Menghasilkan keluaran sampah ke STDOUT dan STDERR.
Cobalah online!
Tempat sampah
sumber
0
sangat buruk untuk dimasukkan. Lebih baik menggunakan1-1
0
di tempat pertama.JavaScript (ES6),
8788 +390380 =477468 byteDalam biner:
Lebih dari setengah penalti turun ke nol di tumpang tindih antara byte, daripada berjalan dalam karakter berikut:
=>//pa//=>aCoAo
.Karena
/
s (00101111
) membayar penalti, saya mencoba a) beralih daritest
kematch
b) beralih darireplace
kemap
tetapi skor selalu berakhir lebih tinggi. Namun saya menemukan bahwa[\S\s]
itu adalah perbaikan[^]
. Sunting: Disimpan 9 byte secara keseluruhan berkat @Shaggy.sumber
|
di kelas karakter tidak seharusnya ada di sana!
dengan1-
total 468. Dan Anda bisa membuat penghematan lebih lanjut dari 5 byte dengan mengganti[\S\s]
dengan.
total 463.Pyth , 16 + 1 x 10 = 26 byte
Cobalah online!
Biner
Trik
Pergantian berikut dilakukan untuk menghindari kekurangan:
qZ
(sama dengan nol) alih-alih!
(meniadakan):xy0
(mencari) alih-alih}xy
(adalah sublist)Z
(variabel, standar ke nol) alih-alih0
(nol sendiri)Perbaikan
Saya tidak menemukan cara untuk menghindari hukuman. Kami memiliki perintah ini terkait dengan biner:
.B
biner (00101110 01[0000]10
)C
kode sandi (01[0000]11
).O
octary (00101110 0100[1111]
).H
heksadesimal (00101110 01001[000
)Catatan yang
.H
juga akan memberi kita penalti, karena setiap karakter yang dapat dicetak memiliki representasi biner dimulai dengan0
. Karena itu, saya menggunakan yang paling langsung, yaitu.B
, langsung mengubahnya menjadi biner.Saya bisa mengakhiri dengan
.H
untuk menghindari penalti, tetapi harganya 27 byte ...Generasi
Saya menemukan semua karakter yang dibolehkan, yaitu yang tidak mengandung
0000
atau1111
, dan yang tidak diakhiri dengan000
(karena karakter selanjutnya harus dimulai dengan0
):"#$%&')*+,-.12345679:;DEFGIJKLMNQRSTUVWYZ[\]bcdefgijklmnqrstuvw
Berikut adalah karakter yang diakhiri dengan
1000
. Mereka hanya dapat digunakan di akhir:(8HXhx
sumber