Este é o tópico dos policiais. Para o tópico dos ladrões, clique aqui .
Introdução
Para esse desafio de Policiais / Ladrões, os policiais escreverão programas de produção de saída e os entrelaçarão juntos. O trabalho do ladrão é separar os programas da polícia para produzir os resultados desejados.
Regras de policial
Os policiais podem usar até 256 bytes no total para gravar entre 2 e 8 programas (inclusive), todos os quais devem produzir alguma saída. Todos os programas escritos devem estar no mesmo idioma. Os policiais "entrelaçam" seus programas juntos para tornar mais difícil para os ladrões descobrir quais são os programas.
Agora, para uma descrição do entrelaçamento. Considere as seqüências que representam os diferentes programas. O processo de entrelaçamento é a repetição do primeiro caractere de qualquer um dos programas e a concatenação até o final de uma nova sequência até que nenhum caractere seja deixado em nenhum dos programas. Por exemplo, se dois programas são lion
e TIGER
, um possível entrelaçamento é TIliGoEnR
. No entanto, os programas não podem ser embaralhados de forma alguma, portanto, RoITEnlGi
não é aceitável.
Deve-se observar que, quando os caracteres de todos os programas, com exceção de um, são removidos dos resultados de uma entrelaçamento, o programa restante será mostrado intacto. Removendo as letras TIGER
dos TIliGoEnR
resultados em lion
.
Todos os programas e saídas da polícia devem conter apenas caracteres ASCII imprimíveis (20-7E) e novas linhas. Os programas não devem conter erros e devem ser executados em 10 segundos em uma máquina razoável. Para qualquer envio, deve haver um intérprete gratuito do idioma em algum lugar. Não é permitido adicionar comentários aos envios, como hash e outras formas de criptografia. Programas em branco não são permitidos (Sorry Stuck ).
O policial publicará o código entrelaçado, o idioma, o número de programas diferentes usados e a saída de cada programa. Um grande obrigado a Martin por escrever esse script CJam para entrelaçar automaticamente seus programas.
Os programas são considerados seguros depois de decorrida uma semana a partir do momento da postagem. Nesse ponto, a polícia deve postar os programas individuais para receber pontos.
Pontuação
Existem dois componentes que são adicionados ao marcar um envio seguro.
- 256 dividido pela quantidade 2 elevada à potência do número de programas utilizados.
- Arredonde o número de bytes na entrelaçamento até a potência mais próxima de 2 e divida-o em 256.
Por exemplo, se a entrada TIliGoEnR
(9 bytes) fosse segura, ela receberia 256/2 ^ 2 + 256/16 = 80 pontos.
Quando o envio de um policial é quebrado, o policial perde 16 pontos. O policial deve indicar que o envio foi quebrado.
O vencedor do desafio da polícia será a pessoa com mais pontos após um período de tempo suficiente para as pessoas participarem.
Entre os melhores
Este é um trabalho em andamento que foi adaptado pelo intrepidcoder a partir desta questão .
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o modelo exato do Markdown:
# Language Name, N programs, M bytes; Score ###/### (if safe/cracked)
Qualquer coisa após um ponto e vírgula será ignorada, para que você possa colocar sua pontuação lá.
Se o seu envio for seguro, coloque um cabeçalho como este:
# Language Name, safe, N programs, M bytes; Score ###
Se estiver rachado, coloque um cabeçalho como este:
# Language Name, [cracked](link-to-crack), N programs, M bytes; Score -16
/* Configuration */
var QUESTION_ID = 64520; // Obtain this from the url
// It will be like http://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page
var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";
var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk";
var OVERRIDE_USER = 43444; // This should be the user ID of the challenge author.
var SECONDSINDAY = 86400;
var SAFECUTOFFDAYS = 7;
var SORTBYTIME = true;
var SUBTRACTCRACKEDPOINTS = true;
var EXPIREDTIME = 1448232502000;
/* App */
var SAFE_REG = /<h\d>.*?[sS][aA][fF][eE].*<\/\h\d>/;
var POINTS_REG = /<h\d>.*(\d+)\s*program.*<\/h\d>/i; // /(?:<=|≤|<=)\s?(?:<\/?strong>)?\s?(\d+)/
// var POINTS_REG_ALT = /<h\d>.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;
var LENGTH_REG = /<h\d>.*?((\d+)\s*byte).*<\/h\d>/i;
var CRACKED_HEADER_REG = /<h\d>.*[Cc][Rr][Aa][Cc][Kk][Ee][Dd].*<\/h\d>/;
var CRACKED_COMMENT_REG = /(.*[Cc][Rr][Aa][Cc][Kk][Ee][Dd].*<a href=.*)|(.*<a href=.*[Cc][Rr][Aa][Cc][Kk][Ee][Dd].*)/
var OVERRIDE_REG = /^Override\s*header:\s*/i;
var LANGUAGE_REG = /<h\d>\s*(.+?),.*<\/h\d>/;
var LANGUAGE_REG_ALT = /<h\d>\s*(<a href=.+<\/a>).*<\/h\d>/
var LANGUAGE_REG_ALT_2 = /<h\d>\s*(.+?)\s.*<\/h\d>/;
var LANGUAGE_REG_ALT_3 = /<h\d>(.+?)<\/h\d>/;
var answers = [],
answers_hash, answer_ids, answer_page = 1,
more_answers = true,
comment_page;
function answersUrl(index) {
return "//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 "//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) {
answers_hash[c.post_id].comments.push(c);
});
if (data.has_more) getComments();
else if (more_answers) getAnswers();
else process();
}
});
}
getAnswers();
function getAuthorName(a) {
return a.owner.display_name;
}
function process() {
var valid = [];
var open = [];
answers.forEach(function(a) {
var body = a.body.replace(/(<h\d>.*);.*(<\/h\d>)/,"$1$2"); // Ignore all text after a semicolon.
var cracked = false;
a.comments.forEach(function(c) {
var was_safe = (c.creation_date + (SECONDSINDAY * SAFECUTOFFDAYS) > a.creation_date);
if (CRACKED_COMMENT_REG.test(c.body) && !was_safe)
cracked = true;
});
if (CRACKED_HEADER_REG.test(body)) cracked = true;
// if (SUBTRACTCRACKEDPOINTS||!cracked) {
var createDate = a.creation_date;
var currentDate = Date.now() / 1000;
var timeToSafe = (createDate + (SECONDSINDAY * SAFECUTOFFDAYS) - currentDate) / SECONDSINDAY;
var SafeTimeStr = (timeToSafe > 2) ? (Math.floor(timeToSafe) + " Days") :
(timeToSafe > 1) ? ("1 Day") :
(timeToSafe > (2 / 24)) ? (Math.floor(timeToSafe * 24) + " Hours") :
(timeToSafe > (1 / 24)) ? ("1 Hour") :
"<1 Hour";
var expired = createDate > (EXPIREDTIME);
var safe = timeToSafe < 0;
var programs = body.match(POINTS_REG);
var length = body.match(LENGTH_REG);
safe = safe && !cracked
isOpen = !(cracked || safe);
if (programs && length) {
var safepoints = (256/Math.pow(2,parseInt(programs[1],10)) +
256/Math.pow(2,Math.ceil(Math.log2(parseInt(length[1],10)))));
var crackedpoints = Math.pow(2, parseInt(programs[1],10),2) +
Math.pow(2,Math.floor(Math.log2(parseInt(length[1],10))));
valid.push({
user: getAuthorName(a),
numberOfSubmissions: (safe && !expired) ? 1 : 0,
points: (safe && !expired) ? safepoints : 0,
open: (isOpen && !expired) ? 1 : 0,
cracked: (cracked && !expired) ? 1 : 0,
expired: (expired) ? 1 : 0
});
}
if ((isOpen || expired) && programs) {
var language = body.match(LANGUAGE_REG);
if (!language) language = body.match(LANGUAGE_REG_ALT);
if (!language) language = body.match(LANGUAGE_REG_ALT_2);
if (!language) language = body.match(LANGUAGE_REG_ALT_3);
open.push({
user: getAuthorName(a),
safePts: programs ? safepoints : "???",
crackedPts: programs ? crackedpoints : "???",
language: language ? language[1] : "???",
link: a.share_link,
timeToSafe: timeToSafe,
timeStr: (expired) ? "Challenge closed" : SafeTimeStr
});
}
// }
});
if (SORTBYTIME) {
open.sort(function(a, b) {
return a.timeToSafe - b.timeToSafe;
});
} else {
open.sort(function(a, b) {
var r1 = parseInt(a.length);
var r2 = parseInt(b.length);
if (r1 && r2) return r1 - r2;
else if (r1) return r2;
else if (r2) return r1;
else return 0;
});
}
var pointTotals = [];
valid.forEach(function(a) {
var index = -1;
var author = a.user;
pointTotals.forEach(function(p) {
if (p.user == author) index = pointTotals.indexOf(p);
});
if (index == -1) {
if (SUBTRACTCRACKEDPOINTS && a.cracked) a.points -= 16;
pointTotals.push(a);
}
else {
pointTotals[index].points += a.points;
pointTotals[index].numberOfSubmissions += a.numberOfSubmissions;
pointTotals[index].cracked += a.cracked;
pointTotals[index].expired += a.expired;
pointTotals[index].open += a.open;
if (SUBTRACTCRACKEDPOINTS && a.cracked) pointTotals[index].points -= 16;
}
});
pointTotals.sort(function(a, b) {
if (a.points != b.points)
return b.points - a.points;
else if (a.numberOfSubmissions != b.numberOfSubmissions)
return b.numberOfSubmissions - a.numberOfSubmissions;
else if (a.open != b.open)
return b.open - a.open;
else if (a.cracked != b.cracked)
return a.cracked - b.cracked;
else return 0;
});
pointTotals.forEach(function(a) {
var answer = jQuery("#answer-template").html();
answer = answer
.replace("{{NAME}}", a.user)
.replace("{{SAFE}}", a.numberOfSubmissions)
.replace("{{OPEN}}", a.open)
.replace("{{CLOSED}}", a.expired)
.replace("{{CRACKED}}", a.cracked)
.replace("{{POINTS}}", a.points);
answer = jQuery(answer);
jQuery("#answers").append(answer);
});
open.forEach(function(a) {
var answer = jQuery("#open-template").html();
answer = answer
.replace("{{NAME}}", a.user)
.replace("{{SAFE}}", a.safePts)
.replace("{{CRACKED}}", a.crackedPts)
.replace("{{LANGUAGE}}", a.language)
.replace("{{TIME}}", a.timeStr)
.replace("{{LINK}}", a.link);
answer = jQuery(answer);
jQuery("#opensubs").append(answer);
});
}
body {
text-align: left !important
}
#answer-list {
padding: 10px;
width: 350px;
float: left;
}
#open-list {
padding: 10px;
width: 470px;
float: left;
}
table thead {
font-weight: bold;
vertical-align: top;
}
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>Author</td>
<td>Safe</td>
<td>Open</td>
<td>Cracked</td>
<td>Late Entry</td>
<td>Score</td>
</tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<div id="open-list">
<h2>Open submissions</h2>
<table class="open-list">
<thead>
<tr>
<td>Author</td>
<td>Points if Safe</td>
<td>Points if Cracked</td>
<td>Language</td>
<td>Time Remaining</td>
<td>Link</td>
</tr>
</thead>
<tbody id="opensubs">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<tr>
<td>{{NAME}}</td>
<td>{{SAFE}}</td>
<td>{{OPEN}}</td>
<td>{{CRACKED}}</td>
<td>{{CLOSED}}</td>
<td>{{POINTS}}</td>
</tr>
</tbody>
</table>
<table style="display: none">
<tbody id="open-template">
<tr>
<td>{{NAME}}</td>
<td>{{SAFE}}</td>
<td>{{CRACKED}}</td>
<td>{{LANGUAGE}}</td>
<td>{{TIME}}</td>
<td><a target="_parent" href="{{LINK}}">Link</a>
</td>
</tr>
</tbody>
</table>
|||
exemplo) e depois substituirN
o código por uma string que contenha seu delimitador, por exemplo"|||"
. (@Eridan à vontade para incluir esta no desafio.)Respostas:
Hexagonia , 6 programas, 53 bytes; Pontuação 8/96 (se seguro / rachado)
Mesmo se isso for seguro, serão muito poucos pontos para mim, mas pensei em fornecer um bom quebra-cabeça para os ladrões depositarem alguns pontos. :) Eu não tenho ideia de como isso é fácil ou difícil.
Aqui estão as saídas:
fonte
[
comutadores controlam o ponteiro de instruções que começa no@
canto esquerdo.JavaScript, rachado , 2 programas, 110 bytes; Pontuação -16
Boa sorte com este.
Nota: eu recomendo rodar em um navegador moderno (basicamente não no IE)
Saída, primeiro programa:
Saída, segundo programa:
fonte
BitShift , cracked , 2 programas, 110 bytes; Pontuação -16
Programas entrelaçados
Saída, primeiro programa
Saída, segundo programa
Eu sinto muito
fonte
Vitsy , cracked , 2 programas, 15 bytes; Pontuação -16
Programas entrelaçados
Vitsy é tão bonita, tão limpa. Olhe para sua fonte e fique impressionado.
Saída, primeiro programa
Saída, segundo programa
São 121 novas linhas.
fonte
Java, cracked , 2 programas, 155 bytes; Pontuação -16
Programas intercalados
Saída, primeiro programa
E nova linha à direita.
Saída, segundo programa
E nova linha à direita.
Programas originais
Primeiro
Segundo
fonte
interface
vez declass
até que eu vi sua resposta no Olá, mundo! desafio. Vou tentar quebrar isso durante o meu almoço.Pyth, seguro, 2 programas, 63 bytes; Pontuação 68
Programas entrelaçados
Primeiro programa
Resultado:
Programa:
Segundo programa
Resultado
Programa:
fonte
# Pyth, safe, 2 programs, 63 bytes; Score 68
CJam, seguro, 2 programas, 250 bytes; Pontuação 65
Programas entrelaçados
Saída, primeiro programa
Saída, segundo programa
Solução
Primeiro programa
Experimente online!
Segundo programa
Experimente online!
Como funciona
Ambos os programas têm este formato:
A desentrelaçamento dos programas deve exigir força bruta ou fatorar os semi-primos.
fonte
Befunge, Safe, 2 programas, 228 bytes; Pontuação 65
Programas entrelaçados
Saída, primeiro programa
Saída, segundo programa
Duvido que seja fácil de quebrar. Na verdade, você deveria desistir agora. Quem precisa de 132 pontos, afinal?
Responda
Programa 1:
Programa 2:
fonte
PHP, cracked , 2 programas, 71 bytes; Pontuação -16
Intercalado
Resultado
1º programa
2º programa
Nota :
Notices
deve ser suprimido.fonte
JavaScript ES6, rachado , 2 programas, 255 bytes; Pontuação -16
Bom trabalho @Bas! GG.
Saída 1:
Saída 2:
fonte
JavaScript (ES6), seguro, 2 programas, 255 bytes; Pontuação 65
Programas intercalados
Saída do Primeiro Programa
Saída do Segundo Programa
Eu tentei usar os personagens
(l)+=<>
o máximo possível. O resto é apenas conversão de tipo.Primeiro programa
Segundo programa
fonte
Ruby, cracked , 2 programas, 64 bytes; Pontuação -16
Intercalado
Resultado
1º programa
2º programa
Ambas as saídas têm novas linhas à direita.
fonte
Perl, seguro, 2 programas, 102 bytes; Pontuação 66
Primeira saída
Segunda saída
Solução
Primeiro Programa:
Segundo programa:
fonte
Pyth, 2 programas, 61 bytes; Pontuação 68/36 (se seguro / rachado)
Programas intercalados
Saída, primeiro programa
Saída, segundo programa
Não deve ser muito difícil.
fonte
PHP, rachado , 3 programas, 31 bytes; Pontuação -16
Deve ser fácil usando 3 programas.
Intercalado
Resultado
1º programa
2º programa
3º programa
Nota :
Notices
deve ser suprimido.fonte
JavaScript ES6, 2 programas, 225 bytes; Pontuação 65/132 (se seguro / rachado)
Entrelaçados:
Primeira saída:
Segunda saída:
fonte
Brainfuck, 4 programas, 251 bytes; 17/144 (se seguro / rachado)
Programas entrelaçados
Saída, primeiro programa
Eridan
Saída, segundo programa
Ampora
Saída, terceiro programa
PPCG
Saída, quarto programa
Code Golf
fonte
Microscript II , seguro, 2 programas, 44 bytes; pontuação 68
Fontes intercaladas:
Saída, primeiro programa:
Saída, segundo programa:
E aqui está a resposta:
Programa 1:
Programa 2:
fonte
Malbolge, 2 programas, 194 bytes; Pontuação 65
Entrelaçados
Saída 1
Saída 2
Era apenas uma questão de tempo.
Programas
O1
O2
fonte
Javascript, seguro, 2 programas, 106 bytes; Pontuação 66
Saída 1
Saída 2
Solução
Programa 1
Programa 2
fonte
Japt , seguro, 3 programas, 63 bytes; Pontuação 36
A versão do intérprete para a qual foi criada pode ser encontrada aqui . Infelizmente, perdi os originais, então vou ter que ver se consigo decifrá-lo ...
Programas entrelaçados
Saída 1
São 222 dígitos, caso você esteja se perguntando.
Saída 2
Saída 3
fonte
JavaScript, 2 programas, 255 bytes; Pontuação 65/132 (se seguro / rachado)
Primeira saída do programa:
Saída do segundo programa:
A segunda saída dos programas é de texto e não de JavaScript:
null
Isso deve ser fácil para os ladrões.
fonte
Vitsy , 4 programas, 228 bytes; Pontuação 17
(Usa uma versão mais antiga, que está vinculada)
Heeeyyyy @VoteToClose. Não espero que demore muito, mas você nunca sabe ... Adoro o seu idioma, agora que estou usando muito!
Programa entrelaçado
Saída 1
Saída 2
Saída 3
Saída 4
Boa sorte! Usei o intérprete on-line, mas ele deve funcionar no frasco seguro.
Programas
O1
O2
O3
O4
fonte
Candy, seguro, 2 programas, 85 bytes; Pontuação 66
Veja: Doces
Saídas:
51450000
1609944
Atualização: Estes são os dois programas seguidos por sua intercalação:
fonte
Foo , 6 programas, 197 bytes; Pontuação 5/192 (se seguro / rachado)
Código entrelaçado:
Saída do 1º programa:
Observe a guia na primeira linha e o espaço à direita na segunda linha
Saída do 2º programa:
Observe que a primeira linha está em branco
Saída do 3º programa:
Saída do 4º programa:
Saída do 5º programa:
Saída do 6º programa:
Existe apenas um intérprete para Foo que eu conheço, você pode encontrá-lo aqui
fonte
@wizzwizz4
no seu comentário.Python 2, 8 programas, 92 bytes; Pontuação: -16
Outra pergunta fácil:
8 saídas:
fonte
print
em Python 2.JavaScript, 8 programas, 233 bytes; Pontuação 2/384 (se seguro / rachado)
OK, agora estou sendo mau:
1ª saída:
2ª Saída:
3ª Saída:
4ª saída:
5ª saída:
6ª saída:
7ª Saída:
8ª Saída:
fonte
Python 2, programas seguros 2, 148 bytes; Pontuação 65
Saída 1:
Saída 2:
Programa 1:
Programa 2:
fonte