/* 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>
||
lista e é isso0111110001111100
.Respostas:
Geléia , 18 bytes + 0 de penalidade = 18
Retorna
1
se não houver cadeias de bits iguais de comprimento 4 ou mais na representação de palavras de 8 bits da entrada de cadeia ASCII, e0
caso contrário.Experimente online! (suíte de testes com alguns casos extras adicionados)
Usando a página de código de Jelly, não existem substrings de comprimento igual ou superior a 4 bits iguais:
Com comprimentos de execução com bits iguais de:
Quão?
Os truques para evitar deméritos são:
para evitar a mônada "converter de caractere em ordinal"
O
convertendo o número79
em um caractere usandoỌ
seguido de uma "avaliação do código Jelly com entrada"v
,.para evitar a conversão direta em binário usando
B
(0x42
,1000010
) pela alternativa simples de dois bytesb2
usando a conversão de base diádica genérica.para evitar algumas opções normais para contar as execuções de bits iguais - a primeira opção seria "todas as fatias sobrepostas de determinado comprimento",
ṡ
(0xF5
ou11110101
). Uma segunda opção pode ser utilizar "todos os sublistas",Ẇ
(0xCF
ou11001111
).Uma solução alternativa que usei antes da atual era fazer os incrementos (entre elementos consecutivos) com
I
(colocando zeros e uns em pé de igualdade) e procurar qualquer ocorrência de três zeros em uma linha. Para fazer isso eu converti todos os zeros para os de uso da função binomial com2c
isto 2CX - tornando o-1
s Torne-0
s as1
s tornar-se2
s, e os0
s tornar-se1
s; Dessa forma, o código pode procurar a primeira ocorrência da sublist[1,1,1]
comw111
.No entanto, um caminho mais curto se tornou aparente - para imitar a ação de "todas as fatias sobrepostas de um determinado comprimento",
ṡ
pode-se usar uma redução sobreposta em quatro direções com alguma díade<dyad>4\
,. Se isso é realizado com adição,+4\
conta os1
s; portanto, qualquer um0
ou4
estar presente é o indicador para retornar um valor verdadeiro. A questão aqui é que o próximo passo óbvio seria a de tomar o módulo 4 do que para colocar as0
e4
entradas em pé de igualdade, deixando os outros valores possíveis (1
,2
e3
) inalteradas, mas+\%4
tem\%
dentro, que tem pouco valor 010,111 mil 0000 100100. A fim de evitar que os números penalidade todos são convertidos para a base 4 comb4
(mapeamento0
para[0]
,1
a[1]
,2
a[2]
,3
a[3]
, e4
a[1,0]
) e toda a lista é achatado comF
. Agora, o último teste é simplesmente verificar se há algum0
s na lista, alcançável diretamente com a mônadaẠ
.Nota: O motivo pelo qual um 2 é concatenado com a lista ordinal é lidar com os casos de borda em que a única execução de 4 na sequência de entrada está nos zeros à esquerda do primeiro caractere - esses caracteres são: tab; alimentação de linha; e retorno de carro. Sem isso, a conversão da base 256 remove efetivamente os zeros à esquerda da sequência binária (totalmente concatenada); com os 2 iniciais, os zeros iniciais estarão lá e um extra e zero antes deles. Como nenhum ASCII imprimível possui exatamente três zeros à esquerda, não é necessário descartar esses bits extras antes do resto da verificação.
fonte
0
e1
se necessário.Java 7,
812726673644634616599588145 bytes + 10 * 44 = 585Estou usando novas linhas em vez de espaços para tentar minimizar a penalidade ...
Experimente online!
Binário
Solução antiga de deslocamento de bits 141 bytes + 10 * 101 = 1.151
Experimente online!
Binário
fonte
00000
/11111
como duas corridas,000000
/111111
como três, etc. Conto 101 corridas no total.APL (Dyalog Classic) , 26 + 1 × 10 = 36 bytes
Notas
Contém um 4-run de 1s. Requer
⎕IO←0
qual é o padrão em muitos sistemas. Observe que isso deve ser executado em um intérprete Classic para que as strings tenham um byte por caractere.Submissão
1≠⊃⌽⌈\∊(×4\¨⍳≢⍬⍬)⍷¨⊂11⎕DR⍞
Experimente online!
Fonte binária
00110001101011001001110010110010100101110101110010111001001010001101011100110100010111001010100010 1111 00101110111010101110101011001010011011101010101000100110111011101100110001001100011000110001000100010000
Explicação
⍞
Solicitar entrada de sequência11 ⎕DR
converter para 1- bit Boolean ( 1 ) D ata R ePresentation⊂
anexar para que possamos aplicar várias coisas a ele(
…) ⍷¨
Indicadores binários em que cada uma das seguintes seqüências começa…×
sinal (sem opção em dados binários, mas incluído como espaçador para separar execuções)4 \¨
expandir (copiar) cada um para o comprimento quatro⍳
os inteiros até≢
a contagem de⍬⍬
a lista que consiste em duas listas numéricas vazias∊
alistar-se (achatar)⌈\
máximo cumulativo⌽
marcha ré⊃
escolha o primeiro1 ≠
é diferente de? (ie NÃO)Walk-through
Introduziremos "48" na versão não-run-rungolf
~ ∨/ ∊ (0 0 0 0)(1 1 1 1) ⍷¨ ⊂ 11 ⎕DR ⍞
:11 ⎕DR ⍞
converte "48" em 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 (ie 52 de dezembro de 56, hex 34 38)(0 0 0 0)(1 1 1 1) ⍷¨ ⊂
localiza o início de 0 e 1 execuções; (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 0)∨/ ∊
verifica se existe alguma verdade (ou seja, qualquer execução); 1~
nega isso; 0 0fonte
Gelatina 28 + 140 deméritos = 168
Explicação
Converte o argumento em uma lista de suas codificações binárias, por exemplo
A próxima peça
corrige o fato de que a lista acima pode estar faltando caracteres, pois
B
não inclui zeros à esquerda.Ç€
chama o link definido anteriormente sobre cada elemento que restaura esseEste link é equivalente a
Por exemplo
Nós alteramos a lista antes e depois desta operação (as duas
U
chamadas nessa lista) para que isso seja um prefixo em vez de um acréscimo. A próxima peçaNivela a lista (
F
), fornecendo a cadeia binária total da codificação ASCII e o comprimento da execução codifica a saída (Œr
). Então por exemploe
Finalmente, verificamos se cada elemento é <4 (felizmente, isso sempre é verdade para 0,1) com
Por exemplo
Finalmente
Retorna 0 se algum deles for falso (neste caso, 0).
Páginas de código
Na página de código do Jelly, esse código tem 20 bytes, mas possui 27 execuções no valor de violações de regras. No UTF-8, são 28 bytes, mas com apenas 14 execuções no valor de violações.
fonte
05AB1E , 22 + 3 * 10 = 52
Salva 2 corridas de penalidade emprestando o truque delta da resposta de Jonathan Allan Jelly
Experimente online!
Explicação
Representação binária do código
As 3 corridas de penalidade
vy¦}
são usadas para cortar o primeiro byte em cada sequência de caracteres binária, mas ainda é mais barato que as 4 corridas que obteríamos das mais curtas€¦
.fonte
€
CP-1252 é a10000000
que incorre em uma penalidade de 4 por si só.# coding: cp1252
no topo> _ <Perl , 33 + 160 = 193
32 bytes de código + 1 byte para
-n
sinalizador.(a entrada precisa ser fornecida sem a nova linha final. O link Experimente online tem o
-l
sinalizador para remover as novas linhas, mas para uma única entrada, não é necessário).Experimente online!
Despejo xxd:
Algumas notas:
(.)\1\1\1
salva algumas penalidades mais(.)\1{3}
,1111|0{4}
ou qualquer outro regex que eu poderia pensar (usando0
ou{}
tem um custo pesado).print
economiza ~ 8 pontos ao usar-p
e$_=
porquep
contém uma corrida de 40
enquanton
não.+
como um delimitador para o regex, salva uma execução1
disso/
.!~
salva duas execuções (~
está01111110
em binário).unpack"B*"
é bastante caro (4 execuções), mas não consegui encontrar mais barato (a base de soluçõesord
será ainda mais cara).fonte
PHP, 98 + 270 = 368 bytes
Queria adotar uma abordagem diferente da proposta por Titus e terminar com um programa um pouco mais longo, porém menos penalizado.
Saídas
1
para verdade, nada para falsey.Experimente aqui!
Codificado em binário:
(22 ocorrências
0000
e 5 ocorrências1111
, daí 270 bytes de penalidade)fonte
PHP, 86 bytes + 370 = 456
cria a cadeia binária e usa uma expressão regular para detectar estrias. A saída é
1
para verdade; vazio por falsidade.Corra com
echo '<string>' | php -nR '<code>'
.ajustes
idéias abandonadas
join(array_map(str_split()))
custaria 31 bytes e 90 de penalidade<?=
/ em$argv[1]
vez deecho
/$argn
custam mais 2 + 40.str_pad(decbin())
é mais caro quesprintf
: 7 bytes e 110 de penalidade.strtr
economiza 80 de penalidade por 13 bytes extras, mas as referências anteriores são melhores.#(.)\\1{3}
economiza 3 bytes, mas adiciona 10 de penalidade.foreach
custa 3 + 50.fonte
§
emfor(§;
para-9
.MATL, 16 bytes + 60 = 76 bytes
Experimente no MATL Online
fonte
JavaScript (ES8), 91 bytes + 430 de penalidade = 521 total
Isso produzirá
1
paratrue
e0
parafalse
.Tente
fonte
padStart
não está no ES6.Array.includes()
) - obrigado, @Neil.CJam , 23 bytes
Usa a idéia de Jonathan Allan para trabalhar com deltas.
Experimente online!
Representação binária:
Explicação:
fonte
Pitão, 19 + 12 * 10 = 139
Binário
Explicação
fonte
JavaScript, 173 + 89 * 10 = 1063
O JavaScript não é bom em converter seqüências de caracteres para binárias, mas eu pensei em dar uma chance a este desafio apenas por diversão.
Código:
Binário:
Explicação:
Crie uma string para trabalhar:
Faça um loop sobre cada caractere na sequência:
Crie uma matriz e converta a string em binário usando o código de caractere:
Adicione os zeros à esquerda na matriz:
Associe a matriz novamente a uma sequência:
Retorne se uma sequência de quatro ou mais 1 ou 0 foi encontrada no resultado binário usando uma expressão regular:
Violino:
https://jsfiddle.net/vrtLh97c/
Estatísticas:
Comprimento: 173 bytes Pena: 890 Total: 1063
Código Golf é difícil :)
fonte
1-1
vez de0
em alguns lugares pode economizar alguns deméritos.Pitão, 21 + 2 * 10 = 41
Experimente online!
Representação binária:
fonte
Retina, 101 + 1390 = 1491
O código contém caracteres não imprimíveis, mas eles aparecem no Chrome se você editar a postagem.
-
é\x01-\x7f
.Experimente online
Esse código usa isso
ord
, seguido pela conversão para binário e uma verificação simples para seqüências sobrepostas de quatro.Em binário:
Sanções contadas com este programa Python .
fonte
Python 2 , 74 (comprimento) + 130 (penalidade) = 204
A saída é via código de saída; 0 é verdadeiro, 1 é falso. Produz saída de lixo para STDOUT e STDERR.
Experimente online!
Despejo binário
fonte
0
é muito ruim incluir. É melhor usar1-1
0
.JavaScript (ES6),
8788 +390380 =477468 bytesEm binário:
Mais de metade da pena para baixo é a zeros na sobreposição entre os bytes, em vez das pistas nas seguintes caracteres:
=>//pa//=>aCoAo
.Como os
/
s (00101111
) pagam uma penalidade, tentei a) alternar detest
paramatch
b) alternar dereplace
paramap
mas a pontuação sempre foi mais alta. No entanto, achei que[\S\s]
houve uma melhoria[^]
. Editar: salvou 9 bytes no geral graças ao @Shaggy.fonte
|
na classe de personagem não é suposto estar lá!
com1-
um total de 468. E você poderia fazer mais uma economia de 5 bytes, substituindo[\S\s]
com.
um total de 463.Pitão , 16 + 1 x 10 = 26 bytes
Experimente online!
Binário
Truques
As seguintes alternâncias são feitas para evitar os deméritos:
qZ
(é igual a zero) em vez de!
(negar):xy0
(procurar) em vez de}xy
(está sublistado)Z
(variável, padrão como zero) em vez de0
(o próprio zero)Melhorias
Não encontro nenhuma maneira de contornar a penalidade. Temos estes comandos relacionados ao binário:
.B
binário (00101110 01[0000]10
)C
charcode (01[0000]11
).O
octário (00101110 0100[1111]
).H
hexadecimal (00101110 01001[000
)Observe que
.H
também nos dará uma penalidade, porque todo caractere imprimível tem sua representação binária começando com0
. Portanto, usei o mais direto, ou seja.B
, convertendo-o diretamente em binário.Posso terminar com
.H
para evitar a penalidade, mas me custa 27 bytes ...Geração
Encontrei todos os caracteres permitidos, que não contêm
0000
ou1111
, e que não terminam com000
(porque o próximo caractere deve começar com0
):"#$%&')*+,-.12345679:;DEFGIJKLMNQRSTUVWYZ[\]bcdefgijklmnqrstuvw
Aqui estão os caracteres que terminam com
1000
. Eles só podem ser usados no final:(8HXhx
fonte