/* 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>
||
списке, и это так0111110001111100
.Ответы:
Желе , 18 байт + 0 штрафов = 18
Возвращает,
1
если в представлении 8-битных слов в строке ввода ASCII нет равных битовых строк длиной 4 или более, и в0
противном случае.Попробуйте онлайн! (тестовый набор с некоторыми дополнительными случаями добавлен)
Используя кодовую страницу Jelly, нет подстрок длиной 4 или более длинных одинаковых битов:
С равными длинами битов:
Как?
Уловки, чтобы избежать недостатков:
чтобы избежать «Преобразовать от символа к порядковой» монаде
O
путем преобразования числа79
в символ с использованием сỌ
последующей оценкой «Желе коды с входом»,v
.чтобы избежать прямого преобразования в двоичное с использованием
B
(0x42
,1000010
) с помощью простой двухбайтовой альтернативы,b2
использующей обобщенное двоичное базовое преобразование.чтобы избежать нескольких нормальных вариантов подсчета серий равных битов, первым выбором будет «все перекрывающиеся фрагменты заданной длины»,
ṡ
(0xF5
или11110101
). Вторым вариантом может быть использование «всех подсписков»Ẇ
(0xCF
или11001111
).Обходной путь, который я использовал перед текущим, состоял в том, чтобы взять приращения (между последовательными элементами) с
I
(приравнивая нули и единицы к равным), и искать любое вхождение трех нулей подряд. Для этого я преобразовал все нули в единицы с помощью биномиальной функции с2c
т. Е. 2Cx - чтобы-1
s стало0
s,1
s стало2
s, а0
s стало1
S; таким образом код может искать первое вхождение подсписка[1,1,1]
с помощьюw111
.Однако более короткий путь стал очевидным - чтобы имитировать действие «всех перекрывающиеся ломтики заданной длины»,
ṡ
можно использовать 4 -wise перекрывающих уменьшают с некоторой диадой,<dyad>4\
. Если это выполняется с добавлением,+4\
он подсчитывает1
s, поэтому любой0
или4
присутствующий является индикатором для возврата истинного значения. Проблема здесь в том , что следующий очевидный шаг должен был бы взять по модулю 4 того , что поставить0
и4
записи на равных, оставляя другие возможные значения (1
,2
и3
) без изменений, но+\%4
имеет\%
внутри, который имеет битовое значение 010111 0000 100100. Для того чтобы избежать этого штрафа числа, преобразуется в базу 4 сb4
(отображение0
на[0]
,1
чтобы[1]
,2
чтобы[2]
,3
чтобы[3]
и4
в[1,0]
) и весь список уплощен сF
. Теперь последний тест - просто проверить, есть ли какие-либо0
s в списке, достижимые непосредственно с помощью монадыẠ
.Примечание. Причина, по которой символ 2 объединяется с порядковым списком, заключается в том, чтобы иметь дело с крайними случаями, когда единственная последовательность 4 во входной строке находится в начальных нулях самого первого символа - эти символы: табуляция; линии корма; и возврат каретки. Без этого преобразование base 256 эффективно удаляет начальные нули из (полностью сцепленной) двоичной строки; с ведущими 2 там будут ведущие нули и еще один с нулем перед ними. Поскольку ни один из печатаемых ASCII не имеет ровно трех ведущих нулей, нет необходимости отбрасывать эти дополнительные биты до остальной части проверки.
источник
0
и,1
если необходимо.Java 7,
812726673644634616599588145 байтов + 10 * 44 = 585Я использую новые строки вместо пробелов, чтобы попытаться минимизировать штраф ...
Попробуйте онлайн!
двоичный
Старое битовое смещение 141 байт + 10 * 101 = 1,151
Попробуйте онлайн!
двоичный
источник
00000
/11111
как два пробега,000000
/111111
как три и т. Д. Я считаю всего 101 пробежек.APL (Dyalog Classic) , 26 + 1 × 10 = 36 байт
Заметки
Содержит одну 4-х серийную 1с. Требуется
⎕IO←0
по умолчанию во многих системах. Обратите внимание, что это должно быть выполнено в интерпретаторе Classic, чтобы строки составляли один байт на символ.представление
1≠⊃⌽⌈\∊(×4\¨⍳≢⍬⍬)⍷¨⊂11⎕DR⍞
Попробуйте онлайн!
Двоичный источник
001100011010110010011100101100101001011101011100101110010010100011010111001101000101110010101010111001010100010 1111 0010111011101010111010110010100110111010101010001001101100010001001100100000001001100010001100010001000101
объяснение
⍞
Запрос на ввод строки11 ⎕DR
преобразовать в 1 битовое Boolean ( 1 ) D ата R epresentation⊂
приложить, чтобы мы могли применить несколько вещей к нему(
…) ⍷¨
Двоичные индикаторы, где начинается каждая из следующих последовательностей…×
знак (не используется для двоичных данных, но включен в качестве разделителя для разбивки)4 \¨
развернуть (скопировать) каждый на длину четыре⍳
целые числа до≢
подсчет⍬⍬
список, состоящий из двух пустых числовых списков∊
подключить⌈\
совокупный максимум⌽
обратный⊃
выбрать первый1 ≠
один отличается от? (т.е. НЕ)Прохождение
Мы введем «48» для необработанной необработанной версии
~ ∨/ ∊ (0 0 0 0)(1 1 1 1) ⍷¨ ⊂ 11 ⎕DR ⍞
:11 ⎕DR ⍞
преобразует "48" в 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 (т.е. 52 декабря 56, шестнадцатеричное 34 38)(0 0 0 0)(1 1 1 1) ⍷¨ ⊂
находит начало 0-серий и 1-серий; (0 0 0 0 0 0 1 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)∨/ ∊
смотрит, есть ли Истина (то есть, работает); 1~
отрицает это; 0источник
Желе 28 + 140 недостатков = 168
объяснение
Преобразует аргумент в список их двоичных кодировок, например
Следующий кусок
исправляет тот факт, что в приведенном выше списке могут отсутствовать символы, так как
B
не содержит начальных нулей.Ç€
вызывает ранее определенную ссылку на каждый элемент, который восстанавливаетЭта ссылка эквивалентна
Например
Мы переворачиваем список до и после этой операции (два
U
вызова в этом списке), чтобы получить ее как предварительное, а не как добавление. Следующий кусокСглаживает list (
F
), давая общую двоичную строку кодировки ASCII, а длина цикла кодирует выходные данные (Œr
). Так напримера также
Наконец, мы проверяем, является ли каждый элемент <4 (к счастью, это всегда верно для 0,1) с
Например
в заключение
Возвращает 0, если какие-либо из них являются ложными (в данном случае 0).
Кодовые страницы
На кодовой странице Jelly этот код составляет 20 байтов, но имеет 27 нарушений правил. В UTF-8 это 28 байтов, но с нарушениями только 14 прогонов.
источник
05AB1E , 22 + 3 * 10 = 52
Сохранено 2 серии пенальти, заимствуя дельта- трюк из Jelly ответа Джонатана Аллана
Попробуйте онлайн!
объяснение
Двоичное представление кода
3 серии штрафа идут от того,
vy¦}
который используется, чтобы отрубить первый байт в каждой двоичной строке, но это все еще дешевле, чем 4 серии, которые мы получили бы от более коротко鈦
.источник
€
в CP-125210000000
влечет за собой штраф в 4.# coding: cp1252
вверху> _ <Perl , 33 + 160 = 193
32 байта кода + 1 байт для
-n
флага.(ввод должен быть введен без окончательного перевода строки. Ссылка « Попробовать онлайн» имеет
-l
флажок для удаления переводов строки, но для одного ввода это не требуется).Попробуйте онлайн!
xxd dump:
Несколько заметок:
(.)\1\1\1
сохраняет несколько штрафов более(.)\1{3}
,1111|0{4}
или любое другое регулярное выражение я мог думать ( с использованием0
или{}
поставляется по цене тяжелой).print
экономит ~ 8 баллов за использование-p
и$_=
потому чтоp
содержит пробег 4,0
аn
не.+
в качестве разделителя для регулярного выражения сохраняет ряд того,1
что в/
.!~
экономит два прохода (~
находится01111110
в двоичной системе ).unpack"B*"
это довольно дорого (4 прогона), но я не смог найти дешевле (решения на базеord
будут еще дороже).источник
PHP, 98 + 270 = 368 байт
Я хотел использовать подход, отличный от того, что предлагал Титус , и закончил с немного более длинной, но менее наказанной программой.
Выходы
1
для правды, ничего для фальси.Попробуй это здесь!
Двоично-кодированный:
(22 вхождения
0000
и 5 вхождений1111
, следовательно, 270 байтов штрафа)источник
PHP, 86 байт + 370 = 456
создает двоичную строку и использует регулярное выражение для обнаружения полос. Выход
1
для правдивых; пусто для фальши.Беги с
echo '<string>' | php -nR '<code>'
.твики
заброшенные идеи
join(array_map(str_split()))
будет стоить 31 байт и 90 штрафов<?=
/$argv[1]
вместоecho
/$argn
стоит еще 2 + 40.str_pad(decbin())
стоит дорожеsprintf
: 7 байтов и 110 штрафов.strtr
сохраняет 80 штрафов за 13 дополнительных байтов, но обратные ссылки лучше.#(.)\\1{3}
экономит 3 байта, но добавляет 10 штрафов.foreach
стоит 3 + 50.источник
§
вfor(§;
для-9
.MATL, 16 байт + 60 = 76 байт
Попробуйте это на MATL Online
источник
JavaScript (ES8), 91 байт + 430 штрафов = 521 всего
Это будет выводить
1
дляtrue
и0
дляfalse
.Попытайся
источник
padStart
не в ES6.Array.includes()
) - спасибо, @Neil.CJam , 23 байта
Использует идею Джонатана Аллана работать с дельтами.
Попробуйте онлайн!
Двоичное представление:
Объяснение:
источник
Пиф, 19 + 12 * 10 = 139
двоичный
объяснение
источник
JavaScript, 173 + 89 * 10 = 1063
JavaScript не очень хорош для преобразования строк в двоичные, но я подумал, что бы попробовать эту проблему просто для удовольствия.
Код:
Binary:
Объяснение:
Создайте строку для работы с:
Цикл над каждым символом в строке:
Создайте массив и преобразуйте строку в двоичный файл, используя код символа:
Добавьте ведущие нули в массив:
Присоедините массив обратно в строку:
Вернуть, была ли найдена строка из четырех или более единиц или 0 в двоичном результате, используя регулярное выражение:
Скрипки:
https://jsfiddle.net/vrtLh97c/
Статистика:
Длина: 173 байта Наказание: 890 Всего: 1063
Код Гольф это сложно :)
источник
1-1
вместо0
нескольких мест может сэкономить некоторые недостатки.Пиф, 21 + 2 * 10 = 41
Попробуйте онлайн!
Двоичное представление:
источник
Сетчатка, 101 + 1390 = 1491
Код содержит непечатаемые символы, но они отображаются в Chrome, если вы редактируете сообщение.
-
есть\x01-\x7f
.Попробуйте онлайн
Этот код использует это
ord
, затем следует преобразование в двоичный файл и простая проверка на перекрывающиеся последовательности из четырех.В двоичном виде:
Штрафы учитываются с помощью этой программы Python .
источник
Python 2 , 74 (длина) + 130 (штраф) = 204
Выход через код выхода; 0 - правда, 1 - ложь. Производит вывод мусора в STDOUT и STDERR.
Попробуйте онлайн!
Двоичная свалка
источник
0
это довольно плохо, чтобы включить. Лучше использовать1-1
0
в первую очередь.JavaScript (ES6),
8788 +390380 =477468 байтВ двоичном виде:
Более половины штрафа снижается до нулей в перекрытии между байтами, а не работает в следующих символов:
=>//pa//=>aCoAo
.Поскольку
/
s (00101111
) платит штраф, я попытался а) переключиться сtest
наmatch
б) переключиться сreplace
на,map
но счет всегда заканчивался выше. Однако я обнаружил, что[\S\s]
это улучшение по сравнению с[^]
. Изменить: Сохранено 9 байтов в целом благодаря @Shaggy.источник
|
в классе персонажей не должно быть там!
с1-
в общей сложности 468. И вы могли бы сделать дополнительную экономию в 5 байт, заменяя[\S\s]
с.
в общей сложности 463.Pyth , 16 + 1 x 10 = 26 байт
Попробуйте онлайн!
двоичный
Трюки
Следующие изменения сделаны, чтобы избежать недостатков:
qZ
(равно нулю) вместо!
(отрицание):xy0
(поиск) вместо}xy
(является подсписком)Z
(переменная, по умолчанию ноль) вместо0
(сам ноль)улучшения
Я не нахожу способа обойти штраф. У нас есть эти команды, связанные с бинарным:
.B
бинарный (00101110 01[0000]10
)C
код (01[0000]11
).O
восьмеричный (00101110 0100[1111]
).H
шестнадцатеричный (00101110 01001[000
)Обратите внимание, что
.H
это также даст нам штраф, потому что каждый печатный символ имеет свое двоичное представление, начинающееся с0
. Поэтому я использовал самый прямой, то есть.B
, непосредственно преобразовав его в двоичный файл.Я могу закончить,
.H
чтобы избежать штрафа, но это стоит мне 27 байтов ...поколение
Я нашел все разрешенные символы, которые не содержат
0000
или1111
и не заканчиваются000
(потому что следующий символ должен начинаться с0
):"#$%&')*+,-.12345679:;DEFGIJKLMNQRSTUVWYZ[\]bcdefgijklmnqrstuvw
Вот символы, которые заканчиваются на
1000
. Их можно использовать только в конце:(8HXhx
источник