/* 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 y eso es0111110001111100
.Respuestas:
Gelatina , 18 bytes + 0 penalizaciones = 18
Devuelve
1
si no hay cadenas de bits iguales de longitud 4 o más en la representación de palabras de 8 bits de la entrada de cadena ASCII, y de lo0
contrario.Pruébalo en línea! (conjunto de pruebas con algunos casos adicionales agregados)
Usando la página de códigos de Jelly no hay subcadenas de 4 o más largos de bits iguales:
Con longitudes de ejecución de bits iguales de:
¿Cómo?
Los trucos para evitar deméritos son:
para evitar el "convertido del carácter a ordinal" mónada
O
mediante la conversión del número79
a un personaje usandoỌ
seguida de una "evaluación de código Jelly con entrada",v
.para evitar la conversión directa a binario usando
B
(0x42
,1000010
) mediante la alternativa simple de dos bytesb2
usando la conversión de base diádica genérica.para evitar algunas elecciones normales para contar las corridas de bits iguales, la primera opción sería "todas las partes superpuestas de longitud dada",
ṡ
(0xF5
o11110101
). Una segunda opción podría ser utilizar "todas las sublistas",Ẇ
(0xCF
o11001111
).Una solución alternativa que utilicé antes que la actual era tomar los incrementos (entre elementos consecutivos) con
I
(poner ceros y unos en pie de igualdad), y buscar cualquier ocurrencia de tres ceros seguidos. Para hacer eso, convertí todos los ceros a unos mediante el uso de la función binomial,2c
es decir, 2Cx , haciendo que la-1
s se convierta en0
s, la1
s se convierta en2
s, y la0
s se convierta en1
s; de esa manera el código puede buscar la primera aparición de la sublista[1,1,1]
conw111
.Sin embargo, se hizo evidente una forma más corta: para imitar la acción de "todas las rebanadas superpuestas de una longitud determinada"
ṡ
, se puede usar una reducción superpuesta de 4 direcciones con alguna diada<dyad>4\
. Si esto se realiza con suma,+4\
cuenta el1
s, entonces cualquiera0
o4
estar presente es el indicador para devolver un valor verdadero. El problema aquí es que el siguiente paso obvio sería la de tomar el módulo 4 del que poner los0
y las4
entradas en igualdad de condiciones, dejando los otros valores posibles (1
,2
y3
) sin cambios, pero+\%4
tiene\%
dentro, que tiene un valor de bit 010111 0000 100100. Para evitar esa penalización, todos los números se convierten a base 4 conb4
(asignación0
a[0]
,1
a[1]
,2
a[2]
,3
a[3]
y4
a[1,0]
) y se aplana toda la listaF
. Ahora, la última prueba es simplemente verificar si hay alguna0
s en la lista, que se pueda lograr directamente con la mónadaẠ
.Nota: La razón por la que un 2 se concatena con la lista ordinal es para tratar los casos de borde donde la única ejecución de 4 en la cadena de entrada está en los ceros iniciales del primer carácter: estos caracteres son: tabulación; linea de alimentación; y retorno de carro. Sin esto, la conversión de base 256 elimina efectivamente los ceros iniciales de la cadena binaria (totalmente concatenada); con los primeros 2 los ceros iniciales estarán allí y uno adicional y cero antes de ellos. Como ningún ASCII imprimible tiene exactamente tres ceros iniciales, no es necesario descartar estos bits adicionales antes del resto de la comprobación.
fuente
0
y1
si es necesario.Java 7,
812726673644634616599588145 bytes + 10 * 44 = 585Estoy usando líneas nuevas en lugar de espacios para tratar de minimizar la penalización ...
Pruébalo en línea!
Binario
Antigua solución de desplazamiento de bits 141 bytes + 10 * 101 = 1,151
Pruébalo en línea!
Binario
fuente
00000
/11111
como dos carreras,000000
/111111
como tres, etc. Cuento 101 carreras en total.APL (Dyalog Classic) , 26 + 1 × 10 = 36 bytes
Notas
Contiene un 4 corridas de 1s. Requiere
⎕IO←0
cuál es el predeterminado en muchos sistemas. Tenga en cuenta que esto debe ejecutarse en un intérprete clásico para que las cadenas sean de un byte por carácter.Sumisión
1≠⊃⌽⌈\∊(×4\¨⍳≢⍬⍬)⍷¨⊂11⎕DR⍞
Pruébalo en línea!
Fuente binaria
00110001101011001001110010110010100101110101110010111001001010001101011100110100010111001010100010 1111 00101110111010101110101011001010011011101010101000100110110011000100110001100011000100010001010010100010001010010100010001010010100010001010010100010001010010100010
Explicación
⍞
Solicitar entrada de cadena11 ⎕DR
convertir a 1 bit Boolean ( 1 ) D ata R epresentación⊂
adjuntar para que podamos aplicarle varias cosas(
...) ⍷¨
indicadores binarios donde comienza cada una de las siguientes secuencias ...×
signo (no operativo en datos binarios, pero incluido como espaciador para dividir ejecuciones)4 \¨
expandir (copiar) cada uno a la longitud cuatro⍳
los enteros hasta≢
la cuenta de⍬⍬
la lista que consta de dos listas numéricas vacías∊
alistarse (aplanar)⌈\
máximo acumulativo⌽
marcha atrás⊃
elige el primero1 ≠
es uno diferente de? (es decir, NO)Recorrido
Ingresaremos "48" a la versión no corregida sin golf
~ ∨/ ∊ (0 0 0 0)(1 1 1 1) ⍷¨ ⊂ 11 ⎕DR ⍞
:11 ⎕DR ⍞
convierte "48" en 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 (es decir, 52 de diciembre 56, Hex 34 38)(0 0 0 0)(1 1 1 1) ⍷¨ ⊂
encuentra comienzos de 0 carreras y 1 carreras; (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)∨/ ∊
mira si hay alguna Verdad (es decir, alguna ejecución); 1~
niega eso; 0 0fuente
Gelatina 28 + 140 deméritos = 168
Explicación
Convierte el argumento en una lista de sus codificaciones binarias, p. Ej.
La siguiente pieza
corrige el hecho de que en la lista anterior pueden faltar caracteres, ya
B
que no incluye ceros a la izquierda.Ç€
llama al enlace previamente definido sobre cada elemento que restaura eseEste enlace es equivalente a
Por ejemplo
Cambiamos la lista antes y después de esta operación (las dos
U
llamadas en esa lista) para que sea un antecedente en lugar de un anexo. La siguiente piezaAplana la lista (
F
), dando la cadena binaria total de la codificación ASCII, y la longitud de ejecución codifica la salida (Œr
). Así por ejemploy
Finalmente, verificamos si cada elemento es <4 (afortunadamente, esto siempre es cierto para 0,1) con
Por ejemplo
Finalmente
Devuelve 0 si alguno de ellos es falso (en este caso, 0).
Páginas de códigos
En la página de códigos de Jelly, este código tiene 20 bytes pero tiene 27 ejecuciones de violaciones de reglas. En UTF-8 es de 28 bytes pero con solo 14 ejecuciones de violaciones.
fuente
05AB1E , 22 + 3 * 10 = 52
Salvó 2 ejecuciones de penalización tomando prestado el truco delta de la respuesta de Jonathan Allan's Jelly
Pruébalo en línea!
Explicación
Representación binaria del código.
Las 3 ejecuciones de penalización provienen de las
vy¦}
cuales se utiliza para cortar el primer byte en cada cadena binaria, pero aún así es más barato que las 4 ejecuciones que obtendríamos de la más corta€¦
.fuente
€
CP-1252 es la10000000
que incurre en una penalización de 4 por sí misma.# coding: cp1252
en la parte superior> _ <Perl , 33 + 160 = 193
32 bytes de código + 1 byte para
-n
bandera.(la entrada debe proporcionarse sin una nueva línea final. El enlace Probar en línea tiene
-l
marcado para eliminar nuevas líneas, pero para una sola entrada, no es necesario).Pruébalo en línea!
volcado xxd:
Algunas notas
(.)\1\1\1
ahorra unos sanciones sobre(.)\1{3}
,1111|0{4}
o cualquier otra expresión regular que podía pensar (con0
o{}
tiene un costo pesado).print
ahorra ~ 8 puntos sobre el uso-p
y$_=
porquep
contiene una carrera de 40
mientrasn
que no lo hace.+
como un delimitador para la expresión regular guarda una corrida de1
eso está en/
.!~
guardar dos ejecuciones (~
está01111110
en binario).unpack"B*"
es bastante caro (4 carreras), pero no pude encontrarlo más barato (las soluciones basadasord
serán aún más caras).fuente
PHP, 98 + 270 = 368 bytes
Quería adoptar un enfoque diferente de lo que Titus propuso , y terminé con un programa un poco más largo, pero menos penalizado.
Salidas
1
para la verdad, nada para falsey.Pruébalo aquí!
Codificado en binario:
(22 ocurrencias
0000
y 5 ocurrencias de1111
, por lo tanto, 270 bytes de penalización)fuente
PHP, 86 bytes + 370 = 456
crea la cadena binaria y usa una expresión regular para detectar rayas. La salida es
1
para la verdad; vacío por falsedad.Corre con
echo '<string>' | php -nR '<code>'
.ajustes
ideas abandonadas
join(array_map(str_split()))
costaría 31 bytes y 90 de penalización<?=
/ en$argv[1]
lugar deecho
/$argn
cuesta otros 2 + 40.str_pad(decbin())
es más costoso quesprintf
: 7 bytes y 110 penalizaciones.strtr
ahorra 80 penalizaciones por 13 bytes adicionales, pero las referencias son mejores.#(.)\\1{3}
ahorra 3 bytes, pero agrega 10 penalizaciones.foreach
cuesta 3 + 50.fuente
§
atfor(§;
para-9
.MATL, 16 bytes + 60 = 76 bytes
Pruébalo en MATL Online
fuente
JavaScript (ES8), 91 bytes + 430 de penalización = 521 en total
Esto generará
1
paratrue
y0
parafalse
.Intentalo
fuente
padStart
no está en ES6.Array.includes()
), gracias, @Neil.CJam , 23 bytes
Utiliza la idea de Jonathan Allan para trabajar con deltas.
Pruébalo en línea!
Representación binaria:
Explicación:
fuente
Pyth, 19 + 12 * 10 = 139
Binario
Explicación
fuente
JavaScript, 173 + 89 * 10 = 1063
JavaScript no es bueno para convertir cadenas a binario, pero pensé que probaría este desafío solo por diversión.
Código:
Binario:
Explicación:
Crea una cadena para trabajar con:
Pase sobre cada carácter en la cadena:
Cree una matriz y convierta la cadena a binario usando el código de caracteres:
Agregue los ceros iniciales a la matriz:
Únete a la matriz de nuevo en una cadena:
Devuelva si se encontró o no una cadena de cuatro o más 1 o 0 en el resultado binario usando una expresión regular:
Violín:
https://jsfiddle.net/vrtLh97c/
Estadísticas:
Longitud: 173 bytes Penalización: 890 Total: 1063
Code Golf es difícil :)
fuente
1-1
lugar de hacerlo0
en algunos lugares podría ahorrarle algunos deméritos.Pyth, 21 + 2 * 10 = 41
Pruébalo en línea!
Representación binaria:
fuente
Retina, 101 + 1390 = 1491
El código contiene caracteres no imprimibles, pero aparecen en Chrome si edita la publicación.
-
es\x01-\x7f
.Pruébalo en línea
Este código usa esto
ord
, seguido de la conversión a binario y una simple comprobación de secuencias superpuestas de cuatro.En binario:
Las penalizaciones cuentan con este programa Python .
fuente
Python 2 , 74 (longitud) + 130 (penalización) = 204
La salida es a través del código de salida; 0 es verdadero, 1 es falso. Produce salida de basura a STDOUT y STDERR.
Pruébalo en línea!
Volcado binario
fuente
0
es bastante malo incluirlo. Es mejor usar1-1
0
en primer lugar.JavaScript (ES6),
8788 +390380=477468 bytesEn binario:
Más de la mitad de la pena se ha reducido a ceros en el solapamiento entre bytes, en lugar de las carreras en los siguientes caracteres:
=>//pa//=>aCoAo
.Dado que
/
s (00101111
) paga una penalización, intenté a) cambiar detest
amatch
b) cambiar dereplace
amap
pero la puntuación siempre terminó más alta. Sin embargo, descubrí que[\S\s]
era una mejora[^]
. Editar: guardado 9 bytes en general gracias a @Shaggy.fuente
|
no se supone que la clase en el personaje esté allí!
con1-
un total de 468. Y podrías ahorrar más 5 bytes reemplazando[\S\s]
con.
un total de 463.Pyth , 16 + 1 x 10 = 26 bytes
Pruébalo en línea!
Binario
Trucos
Se realizan las siguientes alternancias para evitar los deméritos:
qZ
(es igual a cero) en lugar de!
(negar):xy0
(buscar) en lugar de}xy
(es sublista)Z
(variable, predeterminado a cero) en lugar de0
(cero en sí)Mejoras
No encuentro ninguna forma de eludir la pena. Tenemos estos comandos relacionados con binarios:
.B
binario (00101110 01[0000]10
)C
charcode (01[0000]11
).O
octary (00101110 0100[1111]
).H
hexadecimal (00101110 01001[000
)Tenga en cuenta que
.H
también nos dará una penalización, porque cada carácter imprimible tiene su representación binaria que comienza con0
. Por lo tanto, utilicé el más directo, que es.B
convertirlo directamente a binario.Puedo terminar
.H
para evitar la penalización, pero me cuesta 27 bytes ...Generacion
Encontré todos los caracteres permitidos, que son aquellos que no contienen
0000
o1111
, y que no terminan con000
(porque el siguiente carácter debe comenzar con0
):"#$%&')*+,-.12345679:;DEFGIJKLMNQRSTUVWYZ[\]bcdefgijklmnqrstuvw
Aquí están los personajes que terminan con
1000
. Solo se pueden usar al final:(8HXhx
fuente