/* 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>
||
liste et c'est le cas0111110001111100
.Réponses:
Gelée , 18 octets + 0 pénalité = 18
Renvoie
1
s'il n'y a pas de chaînes de bits égales de longueur 4 ou plus dans la représentation de mot à 8 bits de l'entrée de chaîne ASCII, et0
sinon.Essayez-le en ligne! (suite de tests avec des cas supplémentaires ajoutés)
En utilisant la page de codes de Jelly, il n'y a pas de sous-chaînes de longueur 4 ou plus de bits égaux:
Avec des longueurs de bits égales:
Comment?
Les astuces pour éviter les démérites sont:
pour éviter la « conversion de caractère à ordinal » monade
O
en convertissant le nombre79
de caractères à l' aide d' unỌ
suivi d'une « évaluation d' un code Jelly avec entrée »,v
.pour éviter la conversion directe en binaire en utilisant
B
(0x42
,1000010
) par l'alternative simple à deux octets enb2
utilisant la conversion de base dyadique générique.pour éviter quelques choix normaux pour compter les séries de bits égaux - le premier choix serait "toutes les tranches qui se chevauchent de longueur donnée",
ṡ
(0xF5
ou11110101
). Un deuxième choix pourrait être d'utiliser "toutes les sous-listes",Ẇ
(0xCF
ou11001111
).Une solution de contournement que j'ai utilisée avant celle actuelle était de prendre les incréments (entre les éléments consécutifs) avec
I
(mettre les zéros et les uns sur un pied d'égalité), et de rechercher toute occurrence de trois zéros d'affilée. Pour ce faire, j'ai converti tous les zéros en uns en utilisant la fonction binomiale avec2c
ie 2Cx - en faisant le-1
s devenir0
s le1
s devenir2
s, et le0
s devenir1
s; de cette façon, le code peut rechercher la première occurrence de la sous-liste[1,1,1]
avecw111
.Toutefois , un chemin plus court est devenu évident - pour imiter l'action de « toutes les tranches qui se chevauchent d' une longueur donnée »,
ṡ
on peut utiliser un 4 -wise se chevauchent à réduire certains dyade,<dyad>4\
. Si cela est effectué avec addition,+4\
il compte les1
s, donc tout0
ou4
être présent est l'indicateur pour retourner une valeur véridique. La question ici est que la prochaine étape évidente serait de prendre le modulo 4 de cela pour mettre les0
et4
entrées sur un pied d' égalité , tout en laissant les autres valeurs possibles (1
,2
et3
) sans changement, mais+\%4
a\%
à l'intérieur, qui a la valeur de bit 010111 0000 100100. Afin d'éviter cette pénalité, les nombres sont tous convertis en base 4 avecb4
(mappage0
vers[0]
,1
vers[1]
,2
vers[2]
,3
vers[3]
et4
vers[1,0]
) et toute la liste est aplatie avecF
. Maintenant, le dernier test consiste simplement à vérifier s'il y a des0
s dans la liste, réalisables directement avec la monadeẠ
.Remarque: La raison pour laquelle un 2 est concaténé avec la liste ordinale est de traiter les cas de bord où la seule série de 4 dans la chaîne d'entrée se trouve dans les zéros de tête du tout premier caractère - ces caractères sont: tab; saut de ligne; et retour de transport. Sans cela, la conversion de base 256 supprime efficacement les zéros de tête de la chaîne binaire (entièrement concaténée); avec les 2 premiers, les zéros de tête seront là et un supplémentaire et zéro devant eux. Puisqu'aucun ASCII imprimable n'a exactement trois zéros en tête, il n'est pas nécessaire de supprimer ces bits supplémentaires avant le reste de la vérification.
la source
0
et1
si besoin est.Java 7,
812726673644634616599588145 octets + 10 * 44 = 585J'utilise des sauts de ligne au lieu d'espaces pour essayer de minimiser la pénalité ...
Essayez-le en ligne!
Binaire
Ancienne solution de décalage de bits 141 octets + 10 * 101 = 1151
Essayez-le en ligne!
Binaire
la source
00000
/11111
comme deux pistes,000000
/111111
comme trois, etc. Je compte 101 pistes au total.APL (Dyalog Classic) , 26 + 1 × 10 = 36 octets
Remarques
Contient un cycle de 4 de 1. Requiert
⎕IO←0
ce qui est par défaut sur de nombreux systèmes. Notez que cela doit être exécuté sur un interpréteur classique afin que les chaînes soient d'un octet par caractère.Soumission
1≠⊃⌽⌈\∊(×4\¨⍳≢⍬⍬)⍷¨⊂11⎕DR⍞
Essayez-le en ligne!
Source binaire
00110001101011001001110010110010100101110101110010111001001010001101011100110100010111001010100010 1111 001011101110101011101010110010100110111010101010001001101100110001001100011000110001000100010100101000110111
Explication
⍞
Demander une entrée de chaîne11 ⎕DR
convertir à une -bit booléenne ( 1 ) D ata R ePresentation⊂
joindre afin que nous puissions lui appliquer plusieurs choses(
… Des) ⍷¨
indicateurs binaires où commence chacune des séquences suivantes…×
signe (pas d'opération sur les données binaires, mais inclus en tant qu'espaceur pour diviser les exécutions)4 \¨
développer (copier) chacun à la longueur quatre⍳
les nombres entiers jusqu'à≢
le décompte de⍬⍬
la liste composée de deux listes numériques vides∊
enrôler (aplatir)⌈\
maximum cumulatif⌽
sens inverse⊃
choisissez le premier1 ≠
est-ce différent? (c.-à-d. NON)Procédure pas à pas
Nous allons entrer "48" dans la version non gérée non exécutée
~ ∨/ ∊ (0 0 0 0)(1 1 1 1) ⍷¨ ⊂ 11 ⎕DR ⍞
:11 ⎕DR ⍞
convertit "48" en 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 (c.-à-d. Dec 52 56, Hex 34 38)(0 0 0 0)(1 1 1 1) ⍷¨ ⊂
trouve les débuts des courses 0 et 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)∨/ ∊
regarde s'il y a une vérité (c'est-à-dire des courses); 1~
nie cela; 0la source
Gelée 28 + 140 démérites = 168
Explication
Convertit l'argument en une liste de leurs encodages binaires, par exemple
La pièce suivante
corrige le fait que la liste ci-dessus peut
B
ne pas contenir de caractères car elle n'inclut pas les zéros de têteÇ€
appelle le lien précédemment défini sur chaque élément qui restaure ceCe lien équivaut à
Par exemple
Nous remontons la liste avant et après cette opération (les deux
U
appels dans cette liste) pour que ce soit un préfixe plutôt qu'un ajout. La pièce suivanteAplatit la liste (
F
), donnant la chaîne binaire totale du codage ASCII, et la longueur d'exécution code la sortie (Œr
). Donc par exempleet
Enfin, nous vérifions si chaque élément est <4 (heureusement, cela est toujours vrai pour 0,1) avec
Par exemple
finalement
Renvoie 0 si l'une d'entre elles est fausse (dans ce cas, 0).
Pages de code
Dans la page de codes de Jelly, ce code fait 20 octets mais compte 27 séries de violations de règles. En UTF-8, il est de 28 octets mais avec seulement 14 séries de violations.
la source
05AB1E , 22 + 3 * 10 = 52
Sauvegarde de 2 pénalités en empruntant le delta de la réponse de Jonathan Allan à Jelly
Essayez-le en ligne!
Explication
Représentation binaire du code
Les 3 exécutions de pénalités sont
vy¦}
utilisées pour couper le premier octet de chaque chaîne binaire, mais c'est toujours moins cher que les 4 exécutions que nous obtiendrions des plus courtes€¦
.la source
€
CP-1252 est celle10000000
qui encourt une pénalité de 4 par elle-même.# coding: cp1252
en haut> _ <Perl , 33 + 160 = 193
32 octets de code + 1 octet pour l'
-n
indicateur.(l'entrée doit être fournie sans nouvelle ligne finale. Le lien Essayer en ligne a un
-l
drapeau pour supprimer les nouvelles lignes, mais pour une seule entrée, ce n'est pas nécessaire).Essayez-le en ligne!
vidage xxd:
Quelques notes:
(.)\1\1\1
économise quelques pénalités(.)\1{3}
,1111|0{4}
ou tout autre regex auquel je pourrais penser (à utiliser0
ou{}
à un coût élevé).print
économise ~ 8 points par rapport à l'utilisation-p
et$_=
parce qu'ilp
contient une séquence de 40
alorsn
que non+
en tant que délimiteur pour l'expression régulière enregistre une exécution de ce1
qui est dans/
.!~
enregistre deux exécutions (~
est01111110
en binaire).unpack"B*"
est assez cher (4 runs), mais je n'ai pas pu trouver moins cher (les solutions sur baseord
seront encore plus chères).la source
PHP, 98 + 270 = 368 octets
Je voulais adopter une approche différente de celle proposée par Titus , et j'ai terminé avec un programme légèrement plus long, mais moins pénalisé.
Sorties
1
pour véridique, rien pour falsey.Essayez-le ici!
Codé en binaire:
(22 occurrences de
0000
et 5 occurrences de1111
, d'où 270 octets de pénalité)la source
PHP, 86 octets + 370 = 456
crée la chaîne binaire et utilise une expression régulière pour détecter les stries. La sortie est
1
pour la vérité; vide pour falsification.Courez avec
echo '<string>' | php -nR '<code>'
.réglages
idées abandonnées
join(array_map(str_split()))
coûterait 31 octets et 90 pénalités<?=
/$argv[1]
au lieu deecho
/$argn
coûte encore 2 + 40.str_pad(decbin())
est plus coûteux quesprintf
: 7 octets et 110 pénalités.strtr
enregistre 80 pénalités pour 13 octets supplémentaires, mais les références arrières sont meilleures.#(.)\\1{3}
économise 3 octets, mais ajoute 10 pénalités.foreach
coûte 3 + 50.la source
§
atfor(§;
pour-9
.MATL, 16 octets + 60 = 76 octets
Essayez-le sur MATL Online
la source
JavaScript (ES8), 91 octets + 430 pénalités = 521 au total
Cela sortira
1
pourtrue
et0
pourfalse
.Essayez-le
la source
padStart
n'est pas dans ES6.Array.includes()
) - merci @Neil.CJam , 23 octets
Utilise l'idée de Jonathan Allan pour travailler avec des deltas.
Essayez-le en ligne!
Représentation binaire:
Explication:
la source
Pyth, 19 + 12 * 10 = 139
Binaire
Explication
la source
JavaScript, 173 + 89 * 10 = 1063
JavaScript n'est pas bon pour convertir des chaînes en binaire, mais je me suis dit que je tenterais ce défi juste pour le plaisir.
Code:
Binaire:
Explication:
Créez une chaîne avec laquelle travailler:
Faites une boucle sur chaque caractère de la chaîne:
Créez un tableau et convertissez la chaîne en binaire à l'aide du code de caractère:
Ajoutez les zéros non significatifs au tableau:
Rejoins le tableau dans une chaîne:
Renvoie si une chaîne de quatre ou plusieurs 1 ou 0 a été trouvée dans le résultat binaire en utilisant une expression régulière:
Violon:
https://jsfiddle.net/vrtLh97c/
Statistiques:
Longueur: 173 octets Pénalité: 890 Total: 1063
Le golf de code est dur :)
la source
1-1
au lieu de0
dans quelques endroits pourrait vous faire économiser des démérites.Pyth, 21 + 2 * 10 = 41
Essayez-le en ligne!
Représentation binaire:
la source
Rétine, 101 + 1390 = 1491
Le code contient des caractères non imprimables, mais ils apparaissent dans Chrome si vous modifiez le message.
-
est\x01-\x7f
.Essayez-le en ligne
Ce code utilise ceci
ord
, suivi d'une conversion en binaire et d'une simple vérification des séquences de quatre qui se chevauchent.En binaire:
Pénalités comptées avec ce programme Python .
la source
Python 2 , 74 (longueur) + 130 (pénalité) = 204
La sortie se fait via un code de sortie; 0 est vrai, 1 est faux. Produit une sortie poubelle vers STDOUT et STDERR.
Essayez-le en ligne!
Vidage binaire
la source
0
c'était assez mauvais à inclure. Il vaut mieux utiliser1-1
0
en premier lieu.JavaScript (ES6),
8788 +390380 =477468 octetsEn binaire:
Plus de la moitié de la pénalité est due à des zéros dans le chevauchement entre octets, plutôt qu'aux exécutions dans les caractères suivants:
=>//pa//=>aCoAo
.Comme les
/
s (00101111
) paient une pénalité, j'ai essayé a) de passer detest
àmatch
b) de passer dereplace
àmap
mais le score finissait toujours plus haut. Cependant, j'ai trouvé que[\S\s]
c'était une amélioration par rapport à[^]
. Edit: Sauvegardé 9 octets au total grâce à @Shaggy.la source
|
dans la classe de personnage n'est pas censé être là!
par1-
pour un total de 468. Et vous pourriez faire une autre économie de 5 octets en remplaçant[\S\s]
par.
pour un total de 463.Pyth , 16 + 1 x 10 = 26 octets
Essayez-le en ligne!
Binaire
Des trucs
Les alternances suivantes sont effectuées pour éviter les démérites:
qZ
(est égal à zéro) au lieu de!
(nier):xy0
(rechercher) au lieu de}xy
(est sous-liste)Z
(variable, par défaut à zéro) au lieu de0
(zéro lui-même)Améliorations
Je ne trouve aucun moyen de contourner la sanction. Nous avons ces commandes liées au binaire:
.B
binaire (00101110 01[0000]10
)C
charcode (01[0000]11
).O
octary (00101110 0100[1111]
).H
hexadécimal (00101110 01001[000
)Notez que
.H
cela nous donnera également une pénalité, car chaque caractère imprimable a sa représentation binaire commençant par0
. Par conséquent, j'ai utilisé le plus direct, qui est de le.B
convertir directement en binaire.Je peux finir avec
.H
pour éviter la pénalité, mais cela me coûte 27 octets ...Génération
J'ai trouvé tous les caractères autorisés, qui sont ceux qui ne contiennent pas
0000
ou1111
, et qui ne se terminent pas par000
(car le caractère suivant doit commencer par0
):"#$%&')*+,-.12345679:;DEFGIJKLMNQRSTUVWYZ[\]bcdefgijklmnqrstuvw
Voici les personnages qui se terminent par
1000
. Ils ne peuvent être utilisés qu'à la fin:(8HXhx
la source