Este es el hilo conductor de la policía. Para el hilo de los ladrones, ve aquí .
Introducción
Para este desafío de policías / ladrones, los policías escribirán programas de producción y los entrelazarán. El trabajo del ladrón es separar los programas de la policía para producir los resultados deseados.
Reglas de policía
Los policías pueden usar hasta 256 bytes en total para escribir entre 2 y 8 programas (inclusive), todos los cuales deben producir alguna salida. Todos los programas escritos deben estar en el mismo idioma. Los policías "entrelazarán" sus programas para dificultar que los ladrones descubran cuáles son los programas.
Ahora para una descripción de entretejido. Considere las cadenas que representan los diferentes programas. El proceso de entrelazado es la extracción repetida del primer carácter de cualquiera de los programas y la concatenación al final de una nueva cadena hasta que no queden caracteres en ninguno de los programas. Por ejemplo, si hay dos programas lion
y TIGER
, una posible interrelación es TIliGoEnR
. Sin embargo, los programas no se pueden mezclar de ninguna manera, por RoITEnlGi
lo que no es aceptable.
Cabe señalar que cuando los caracteres de todos los programas menos uno se eliminan de los resultados de un entrelazado, el programa restante se mostrará intacto. Eliminando las letras TIGER
de los TIliGoEnR
resultados en lion
.
Todos los programas y salidas de la policía deben contener solo caracteres ASCII imprimibles (20-7E) y líneas nuevas. Los programas no deben contener errores y deben ejecutarse en 10 segundos en una máquina razonable. Para cualquier envío, debe haber un intérprete gratuito del idioma en alguna parte. No está permitido agregar comentarios a los envíos, como lo están los hash y otras formas de criptografía. Los programas en blanco no están permitidos (lo siento atascado ).
El policía publicará el código entretejido, el idioma, el número de diferentes programas utilizados y la salida de cada programa. Muchas gracias a Martin por escribir este script de CJam para entrelazar automáticamente sus programas.
Los programas se consideran seguros después de que haya transcurrido una semana desde el momento de la publicación. En ese punto, los policías deben publicar los programas individuales para recibir puntos.
Puntuación
Hay dos componentes que se agregan al calificar un envío seguro.
- 256 dividido por la cantidad 2 elevada a la potencia del número de programas utilizados.
- Ronda el número de bytes en el entretejiendo hasta que la potencia cercana a 2 y se divide en 256.
Por ejemplo, si la entrada TIliGoEnR
(9 bytes) fuera segura, recibiría 256/2 ^ 2 + 256/16 = 80 puntos.
Cuando se rompe la presentación de un policía, el policía pierde 16 puntos. El policía debe indicar que su envío ha sido descifrado.
El ganador del desafío de la policía será la persona con más puntos después de un período de tiempo suficiente para que las personas participen.
Tabla de clasificación
Este es un trabajo en progreso que fue adaptado por intrepidcoder a partir de esta pregunta .
Para asegurarse de que su respuesta se muestre, comience con un título, usando la plantilla exacta de Markdown:
# Language Name, N programs, M bytes; Score ###/### (if safe/cracked)
Cualquier cosa después de un punto y coma se ignorará, por lo que puede poner su puntaje allí.
Si su envío es seguro, coloque un encabezado como este:
# Language Name, safe, N programs, M bytes; Score ###
Si está roto, ponga un encabezado 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>
|||
ejemplo) y luego reemplazarloN
en el código con una cadena que contenga su delimitador, por ejemplo"|||"
. (@Eridan no dude en incluir esto en el desafío.)Respuestas:
Hexagony , 6 programas, 53 bytes; Puntuación 8/96 (si es seguro / agrietado)
Incluso si esto es seguro, serán muy pocos puntos para mí, pero pensé que sería un buen rompecabezas para los ladrones para acumular algunos puntos. :) No tengo idea de lo fácil o difícil que es en realidad.
Aquí están las salidas:
fuente
[
interruptores controlan el puntero de instrucciones que comienza en la@
esquina izquierda.JavaScript, craqueado , 2 programas, 110 bytes; Puntuación -16
😈 buena suerte con este.
Nota: recomiendo ejecutar en un navegador moderno (básicamente no IE)
Salida, primer programa:
Salida, segundo programa:
fuente
BitShift , agrietado , 2 programas, 110 bytes; Puntuación -16
Programas entrelazados
Salida, primer programa
Salida, segundo programa
lo siento mucho
fuente
Vitsy , craqueado , 2 programas, 15 bytes; Puntuación -16
Programas entrelazados
Vitsy es muy bonita, muy limpia. Mire en su fuente y se asombrará.
Salida, primer programa
Salida, segundo programa
Eso es 121 líneas nuevas.
fuente
Java, craqueado , 2 programas, 155 bytes; Puntuación -16
Programas intercalados
Salida, primer programa
Y siguiendo la nueva línea.
Salida, segundo programa
Y siguiendo la nueva línea.
Programas originales
primero
Segundo
fuente
interface
lugar declass
hasta que vi tu respuesta en Hello, World! desafío. Intentaré descifrar esto durante mi almuerzo.Pyth, seguro, 2 programas, 63 bytes; Puntuación 68
Programas entrelazados
Primer programa
Salida:
Programa:
Segundo programa
Salida
Programa:
fuente
# Pyth, safe, 2 programs, 63 bytes; Score 68
CJam, seguro, 2 programas, 250 bytes; Puntuación 65
Programas entrelazados
Salida, primer programa
Salida, segundo programa
Solución
Primer programa
Pruébalo en línea!
Segundo programa
Pruébalo en línea!
Cómo funciona
Ambos programas tienen este formato:
El desentrelazado de los programas debería requerir fuerza bruta o factorización de los semi-primos.
fuente
Befunge, Safe, 2 programas, 228 bytes; Puntuación 65
Programas entrelazados
Salida, primer programa
Salida, segundo programa
Dudo que sea fácil de descifrar. De hecho, deberías rendirte ahora. ¿Quién necesita 132 puntos de todos modos?
Responder
Programa 1:
Programa 2:
fuente
PHP, craqueado , 2 programas, 71 bytes; Puntuación -16
Intercalado
Salida
1er programa
2do programa
Nota :
Notices
debe suprimirse.fuente
JavaScript ES6, craqueado , 2 programas, 255 bytes; Puntuación -16
Buen trabajo @Bas! GG.
Salida 1:
Salida 2:
fuente
JavaScript (ES6), seguro, 2 programas, 255 bytes; Puntuación 65
Programas intercalados
Salida del primer programa
Producto del segundo programa
Traté de usar los personajes
(l)+=<>
tanto como sea posible. El resto es solo conversión de tipo.Primer programa
Segundo programa
fuente
Rubí, agrietado , 2 programas, 64 bytes; Puntuación -16
Intercalado
Salida
1er programa
2do programa
Ambas salidas tienen nuevas líneas finales.
fuente
Perl, seguro, 2 programas, 102 bytes; Puntuación 66
Primera salida
Segunda salida
Solución
Primer programa:
Segundo programa:
fuente
Pyth, 2 programas, 61 bytes; Puntuación 68/36 (si es seguro / agrietado)
Programas intercalados
Salida, primer programa
Salida, segundo programa
No debería ser demasiado difícil.
fuente
PHP agrietado , 3 programas, 31 bytes; Puntuación -16
Esto debería ser fácil usando 3 programas.
Intercalado
Salida
1er programa
2do programa
3er programa
Nota :
Notices
debe suprimirse.fuente
JavaScript ES6, 2 programas, 225 bytes; Puntuación 65/132 (si es seguro / agrietado)
Entretejido:
Primera salida:
Segunda salida:
fuente
Brainfuck, 4 programas, 251 bytes; 17/144 (si es seguro / agrietado)
Programas entrelazados
Salida, primer programa
Eridan
Salida, segundo programa
Ampora
Salida, tercer programa
PPCG
Producto cuarto programa
Code Golf
fuente
Microscript II , seguro, 2 programas, 44 bytes; puntuación 68
Fuentes intercaladas:
Salida, primer programa:
Salida, segundo programa:
Y aquí está la respuesta:
Programa 1:
Programa 2:
fuente
Malbolge, 2 programas, 194 bytes; Puntuación 65
Entretejido
Salida 1
Salida 2
Era sólo cuestión de tiempo.
Programas
O1
O2
fuente
Javascript, seguro, 2 programas, 106 bytes; Puntuación 66
Salida 1
Salida 2
Solución
Programa 1
Programa 2
fuente
Japt , seguro, 3 programas, 63 bytes; Puntuación 36
La versión del intérprete para la que fue construida se puede encontrar aquí . Desafortunadamente, he perdido los originales, así que tendré que ver si puedo descifrarlo yo mismo ...
Programas entrelazados
Salida 1
Eso es 222 dígitos, en caso de que te lo estés preguntando.
Salida 2
Salida 3
fuente
JavaScript, 2 programas, 255 bytes; Puntuación 65/132 (si es seguro / agrietado)
Primera salida del programa:
Salida del segundo programa:
La salida del segundo programa es texto y no JavaScript:
null
Esto debería ser fácil para los ladrones.
fuente
Vitsy , 4 programas, 228 bytes; Puntuación 17
(Utiliza una versión anterior, que está vinculada)
Heeeyyyy @VoteToClose. No espero que este dure mucho, pero nunca se sabe ... ¡Me encanta tu idioma, ahora que lo estoy usando mucho!
Programa entretejido
Salida 1
Salida 2
Salida 3
Salida 4
¡Buena suerte! Usé el intérprete en línea, pero debería funcionar en el contenedor seguro.
Programas
O1
O2
O3
O4
fuente
Candy, seguro, 2 programas, 85 bytes; Puntuación 66
Ver: caramelo
Salidas:
51450000
1609944
Actualización: estos son los dos programas seguidos de su entrelazado:
fuente
Foo , 6 programas, 197 bytes; Puntuación 5/192 (si es seguro / agrietado)
Código entretejido:
Salida del primer programa:
Tenga en cuenta la pestaña en la primera línea y el espacio final en la segunda línea
Salida del segundo programa:
Tenga en cuenta que la primera línea está en blanco
Salida del 3er programa:
Salida del 4to programa:
Salida del 5to programa:
Salida del 6to programa:
Solo hay un intérprete para Foo que conozco, puedes encontrarlo aquí
fuente
@wizzwizz4
en su comentario.Python 2, 8 programas, 92 bytes; Puntuación: -16
Otra fácil:
8 salidas:
fuente
print
en Python 2.JavaScript, 8 programas, 233 bytes; Puntuación 2/384 (si es seguro / agrietado)
OK, ahora estoy siendo malvado:
1ra salida:
2da salida:
3ra salida:
4ta salida:
5ta salida:
6ta salida:
Séptima salida:
8a salida:
fuente
Python 2, programas seguros 2, 148 bytes; Puntuación 65
Salida 1:
Salida 2:
Programa 1:
Programa 2:
fuente