/* 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>
||
że jest na liście i to znaczy0111110001111100
.Odpowiedzi:
Galaretka , 18 bajtów + 0 kar = 18
Zwraca,
1
jeśli nie ma równych ciągów bitów o długości 4 lub więcej w 8-bitowej reprezentacji słów wejściowych ciągu ASCII, i w0
przeciwnym razie.Wypróbuj online! (pakiet testowy z dodanymi dodatkowymi przypadkami)
Za pomocą strony kodowej Jelly nie ma podciągów o długości 4 lub dłuższych równych bitów:
Przy równych bitach długości:
W jaki sposób?
Sztuczki pozwalające uniknąć wad są:
aby uniknąć „Convert z charakterem do porządkowej” monady
O
przekształcając liczbę79
na postać używającaỌ
następnie przez „oceny kodu Jelly z wejściem”v
.aby uniknąć bezpośredniej konwersji na binarną przy użyciu
B
(0x42
,1000010
) przez prostą dwubajtową alternatywęb2
przy użyciu ogólnej konwersji zasady diadadowej.aby uniknąć kilku normalnych wyborów do zliczania serii równych bitów - pierwszym wyborem byłyby „wszystkie nakładające się plasterki o danej długości”,
ṡ
(0xF5
lub11110101
). Drugim wyborem może być wykorzystanie „wszystkich podlist”,Ẇ
(0xCF
lub11001111
).Obejście, którego użyłem przed bieżącym, polegało na przyjmowaniu przyrostów (między kolejnymi elementami) za pomocą
I
(umieszczanie zer i jedynek na równych stopach) oraz poszukiwanie dowolnego wystąpienia trzech zer z rzędu. Aby to zrobić, przekonwertowałem wszystkie zera na jedynki za pomocą funkcji dwumianowej z2c
np. 2Cx - co powoduje, że-1
s staje0
się1
s staje się2
s, a0
s staje się1
s; w ten sposób kod może wyszukać pierwsze wystąpienie podlisty[1,1,1]
zw111
.Jednakże krótszy sposób okazało się, - do naśladowania działania „wszystkie zachodzące na siebie kawałkami danej długości”,
ṡ
można użyć 4 -wise nakładający zmniejszyć niektóre diadę,<dyad>4\
. Jeśli jest to wykonywane z dodaniem,+4\
to zlicza1
s, więc każdy0
lub4
obecność jest wskaźnikiem zwracającym prawdziwą wartość. Problem jest to, że obok oczywistym krokiem byłoby podjąć modulo 4 tego umieścić0
i4
wpisy na równi pozostawiając inne możliwe wartości (1
,2
, i3
) na niezmienionym poziomie, ale+\%4
ma\%
środka, który ma wartość bitową 010111 0000 100100. W celu uniknięcia tej kary numery są przekształcane do podstawy 4, zb4
(mapowanie0
do[0]
,1
z[1]
,2
w celu[2]
,3
z[3]
i4
do[1,0]
) i całość liście są spłaszczoneF
. Teraz ostatnim testem jest po prostu sprawdzenie, czy0
na liście są jakieś litery, które można osiągnąć bezpośrednio za pomocą monadyẠ
.Uwaga: Powodem, dla którego liczba 2 jest powiązana z listą porządkową, jest zajmowanie się przypadkami krawędzi, w których jedyny ciąg 4 w ciągu wejściowym znajduje się w zerach wiodących pierwszego znaku - te znaki to: tab; linijka; i zwrot karetki. Bez tego podstawowa konwersja 256 skutecznie usuwa wiodące zera z (w pełni skonkatenowanego) ciągu binarnego; z wiodącymi 2 wiodącymi zerami będą tam, a przed nimi jeszcze jeden i zero. Ponieważ żaden ASCII do wydrukowania nie ma dokładnie trzech zer wiodących, nie trzeba odrzucać tych dodatkowych bitów przed resztą kontroli.
źródło
0
i,1
jeśli to konieczne.Java 7,
812726673644634616599588145 bajtów + 10 * 44 = 585Używam znaku nowej linii zamiast spacji, aby zminimalizować kary ...
Wypróbuj online!
Dwójkowy
Stare rozwiązanie przesunięcia bitów 141 bajtów + 10 * 101 = 1,151
Wypróbuj online!
Dwójkowy
źródło
00000
/11111
jako dwa przebiegi,000000
/111111
jako trzy itd. Liczę 101 przebiegów łącznie.APL (Dyalog Classic) , 26 + 1 × 10 = 36 bajtów
Notatki
Zawiera jeden 4-biegowy 1s. Wymaga
⎕IO←0
ustawienia domyślnego w wielu systemach. Zauważ, że należy to uruchomić w klasycznym interpretatorze, aby łańcuchy były jednym bajtem na znak.Uległość
1≠⊃⌽⌈\∊(×4\¨⍳≢⍬⍬)⍷¨⊂11⎕DR⍞
Wypróbuj online!
Źródło binarne
00110001101011001001110010110010100101110101110010111001001010001101011100110100010111001010100010 1111 0010111011101010111010101100101001101110101010100010011011001100010011000110001100010001000101001010001101
Wyjaśnienie
⍞
Monituj o ciąg znaków11 ⎕DR
konwertuj na 1- bitową wartość logiczną ( 1 ) D ata R eprezentacja⊂
dołącz, abyśmy mogli zastosować do niego wiele rzeczy(
…) ⍷¨
Wskaźniki binarne, od których zaczyna się każda z następujących sekwencji…×
znak (brak operacji na danych binarnych, ale dołączony jako odstępnik do podzielonych przebiegów)4 \¨
rozwiń (skopiuj) każdy do długości czterech⍳
liczby całkowite do≢
suma z⍬⍬
lista składająca się z dwóch pustych list numerycznych∊
zaciągnąć się (spłaszczyć)⌈\
łączne maksimum⌽
rewers⊃
wybierz pierwszy1 ≠
jest inny od? (tj. NIE)Walk-through
Wprowadzimy „48” do nieoznakowanej, nie uruchomionej wersji
~ ∨/ ∊ (0 0 0 0)(1 1 1 1) ⍷¨ ⊂ 11 ⎕DR ⍞
:11 ⎕DR ⍞
konwertuje „48” na 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 (tj. 52 grudnia 56, heks. 34 38)(0 0 0 0)(1 1 1 1) ⍷¨ ⊂
znajduje początki 0 przebiegów i 1 przebiegów; (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)∨/ ∊
sprawdza, czy istnieje jakakolwiek Prawda (tzn. jakikolwiek bieg); 1~
neguje to; 0źródło
Galaretka 28 + 140 demeritów = 168
Wyjaśnienie
Konwertuje argument na listę ich kodowań binarnych, np
Następny kawałek
naprawia fakt, że na powyższej liście mogą brakować znaków, ponieważ
B
nie zawiera zer wiodących.Ç€
wywołuje uprzednio zdefiniowany link nad każdym elementem, który to przywracaTen link jest równoważny z
Na przykład
Podnosimy listę przed i po tej operacji (dwa
U
wywołania na tej liście), aby była to przedrostek, a nie dodatek. Następny kawałekSpłaszcza listę (
F
), podając całkowity ciąg binarny kodowania ASCII, a długość przebiegu koduje wyjście (Œr
). Na przykładi
Na koniec sprawdzamy, czy każdy element ma wartość <4 (na szczęście jest to zawsze prawda dla 0,1) za pomocą
Na przykład
Wreszcie
Zwraca 0, jeśli którykolwiek z nich jest fałszem (w tym przypadku 0).
Strony kodowe
Na stronie kodowej Jelly ten kod ma 20 bajtów, ale ma 27 przypadków naruszenia reguł. W UTF-8 jest to 28 bajtów, ale naruszenia dotyczą tylko 14 serii.
źródło
05AB1E , 22 + 3 * 10 = 52
Zaoszczędzono 2 rzuty karne pożyczając trik delta od odpowiedzi galaretki Jonathana Allana
Wypróbuj online!
Wyjaśnienie
Binarna reprezentacja kodu
Pochodzą 3 biegi karne, z
vy¦}
których odciąga się pierwszy bajt w każdym ciągu binarnym, ale wciąż jest tańszy niż 4 biegi, które otrzymamy od krótszego€¦
.źródło
€
w CP-125210000000
sama w sobie powoduje karę 4.# coding: cp1252
na górze> _ <Perl , 33 + 160 = 193
32 bajty kodu + 1 bajt na
-n
flagę.(dane wejściowe należy podać bez końcowej nowej linii. Link Wypróbuj online ma
-l
zaznaczoną flagę, aby usunąć nowe linie, ale w przypadku pojedynczego wejścia nie jest to konieczne).Wypróbuj online!
zrzut xxd:
Kilka uwag:
(.)\1\1\1
oszczędza kilka kar nad(.)\1{3}
,1111|0{4}
lub dowolny inny regex mogę myśleć (z użyciem0
lub{}
przychodzi kosztem ciężkich).print
pozwala zaoszczędzić ~ 8 punktów podczas używania,-p
a$_=
ponieważp
zawiera ciąg 4,0
podczas gdyn
nie.+
jako ogranicznik wyrażenia regularnego zapisuje ciąg,1
który jest w/
.!~
zapisaniem dwóch przebiegów (~
jest01111110
w formacie binarnym).unpack"B*"
jest dość drogi (4 przebiegi), ale nie mogłem znaleźć tańszego (rozwiązania oparte na rozwiązaniachord
będą jeszcze droższe).źródło
PHP, 98 + 270 = 368 bajtów
Chciałem przyjąć inne podejście niż to, co zaproponował Tytus , i zakończyłem nieco dłuższym, ale mniej karanym programem.
Wyjścia
1
dla prawdy, nic dla falsey.Wypróbuj tutaj!
Kodowane binarnie:
(22 wystąpień
0000
i 5 wystąpień1111
, stąd 270 bajtów kary)źródło
PHP, 86 bajtów + 370 = 456
tworzy ciąg binarny i używa wyrażenia regularnego do wykrywania smug. Dane wyjściowe są
1
zgodne z prawdą; pusty na fałsz.Uruchom z
echo '<string>' | php -nR '<code>'
.poprawia
porzucone pomysły
join(array_map(str_split()))
kosztuje 31 bajtów i 90 kar<?=
/$argv[1]
zamiastecho
/$argn
kosztuje kolejne 2 + 40.str_pad(decbin())
jest droższy niżsprintf
: 7 bajtów i 110 kar.strtr
oszczędza 80 punktów karnych za 13 dodatkowych bajtów, ale odniesienia wsteczne są lepsze.#(.)\\1{3}
oszczędza 3 bajty, ale dodaje 10 kar.foreach
kosztuje 3 + 50.źródło
§
atfor(§;
dla-9
.MATL, 16 bajtów + 60 = 76 bajtów
Wypróbuj w MATL Online
źródło
JavaScript (ES8), 91 bajtów + 430 kar = 521 razem
Spowoduje to wygenerowanie
1
dlatrue
i0
dlafalse
.Spróbuj
źródło
padStart
nie ma w ES6.Array.includes()
) - dzięki, @Neil.CJam , 23 bajty
Wykorzystuje pomysł Jonathana Allana do pracy z deltami.
Wypróbuj online!
Reprezentacja binarna:
Wyjaśnienie:
źródło
Pyth, 19 + 12 * 10 = 139
Dwójkowy
Wyjaśnienie
źródło
JavaScript, 173 + 89 * 10 = 1063
JavaScript nie jest dobry w konwersji ciągów znaków na binarne, ale pomyślałem, że dam temu wyzwaniu szansę tylko dla zabawy.
Kod:
Dwójkowy:
Wyjaśnienie:
Utwórz ciąg do pracy z:
Pętla nad każdym znakiem w ciągu:
Utwórz tablicę i przekonwertuj ciąg na binarny za pomocą kodu znakowego:
Dodaj wiodące zera do tablicy:
Połącz tablicę z powrotem w ciąg:
Zwraca, czy w wyniku binarnym znaleziono ciąg czterech lub więcej 1 lub 0 za pomocą wyrażenia regularnego:
Skrzypce:
https://jsfiddle.net/vrtLh97c/
Statystyki:
Długość: 173 bajtów Kara: 890 Razem: 1063
Code Golf jest trudny :)
źródło
1-1
zamiast0
w kilku miejscach może zaoszczędzić ci trochę wad.Pyth, 21 + 2 * 10 = 41
Wypróbuj online!
Reprezentacja binarna:
źródło
Siatkówka, 101 + 1390 = 1491
Kod zawiera znaki niedrukowalne, ale pojawiają się w Chrome, jeśli edytujesz post.
-
jest\x01-\x7f
.Wypróbuj online
Ten kod używa tego
ord
, po czym następuje konwersja do binarnej i prosta kontrola nakładających się sekwencji czterech.Binarnie:
Kary liczone w tym programie Python .
źródło
Python 2 , 74 (długość) + 130 (kara) = 204
Wyjście odbywa się za pomocą kodu wyjścia; 0 to prawda, 1 to fałsz. Generuje wyjście śmieci do STDOUT i STDERR.
Wypróbuj online!
Zrzut binarny
źródło
0
jest to bardzo złe do włączenia. Lepiej jest użyć1-1
0
.JavaScript (ES6),
8788 +390380 =477468 bajtówBinarnie:
Ponad połowa kary jest w dół do zera w zachodzenia między bajtów, a nie działa w następujących znaków:
=>//pa//=>aCoAo
.Ponieważ
/
s (00101111
) płacą karę, próbowałem a) zamiany ztest
namatch
b) zamiany zreplace
na,map
ale wynik zawsze był wyższy. Jednak zauważyłem, że[\S\s]
była to poprawa w stosunku do[^]
. Edycja: Zaoszczędź 9 bajtów dzięki @Shaggy.źródło
|
klasa postaci nie powinna tam być!
ze1-
w sumie 468. I można dokonać dalszych oszczędności 5 bajtów zastępując[\S\s]
ze.
w sumie 463.Pyth , 16 + 1 x 10 = 26 bajtów
Wypróbuj online!
Dwójkowy
Wydziwianie
Aby uniknąć wad, należy wykonać następujące zmiany:
qZ
(jest równe zero) zamiast!
(negowanie):xy0
(wyszukiwanie) zamiast}xy
(jest listą podrzędną)Z
(zmienna, domyślnie zero) zamiast0
(samo zero)Ulepszenia
Nie znajduję żadnego sposobu na obejście kary. Mamy następujące polecenia związane z plikiem binarnym:
.B
binarny (00101110 01[0000]10
)C
charcode (01[0000]11
).O
octary (00101110 0100[1111]
).H
szesnastkowy (00101110 01001[000
)Należy zauważyć, że
.H
również daje nam karę, bo każdy ma swój charakter druku binarną reprezentację począwszy0
. Dlatego użyłem najbardziej bezpośredniego, czyli.B
bezpośrednio przekonwertowałem go na binarny.Mogę zakończyć,
.H
aby uniknąć kary, ale kosztuje mnie to 27 bajtów ...Generacja
Znalazłem wszystkie dozwolone znaki, które nie zawierają
0000
lub1111
i nie kończą się na000
(ponieważ następny znak musi zaczynać się od0
):"#$%&')*+,-.12345679:;DEFGIJKLMNQRSTUVWYZ[\]bcdefgijklmnqrstuvw
Oto postacie, które kończą się
1000
. Można ich używać tylko na końcu:(8HXhx
źródło