#любой_язык #соревнование
Как использовать это в качестве кода?
** ***** **
** ** ** **
** ** ****
** ** ** **
*** ** **
**
********************
*********************
Приветствуются оригинальные решения. Вариант с наибольшим числом голосов побеждает.
function getAnswers(questionId, answer_filter, page) {
return jQuery.ajax({
url: '//api.stackexchange.com/2.2/questions/' + questionId + '/answers?page='
+ page + '&pagesize=100&order=desc&sort=activity&site=ru.stackoverflow&filter=' + answer_filter,
method: "get",
dataType: "jsonp",
crossDomain: true
}).then(function(data) {
if (data.has_more) {
return getAnswers(questionId, answer_filter, page + 1).then(function(d) {
return data.items.concat(d.items);
})
}
return data.items;
});
}
function getAuthorName(e) {
return e.owner.display_name
}
function process(items) {
return items.map(function(item) {
var matched = item.body.match(/\s*(.+?)\s*<\/h/);
if (matched) {
return {
lang: matched[1],
count: item.score,
link: item.share_link,
author: getAuthorName(item)
};
} else {
return {
lang: "N/A",
count: "N/A",
link: item.share_link,
author: getAuthorName(item)
}
}
});
}
function sort(items) {
return items.sort(function(a, b) {
return b.count - a.count;
})
}
function fillTemplate(sortedItems) {
$('#leadership').append(sortedItems.map(function(item, index) {
return $('').append($('').html(index + 1))
.append($(' ').html(item.author))
.append($(' ').html(item.lang))
.append($(' ').html(item.count))
.append($(' ').append($('').attr('href', item.link).text('Link')));
}));
return sortedItems;
}
var QUESTION_ID = 520257,
ANSWER_FILTER = "!4*SyY(4Kifo3Mz*lT",
startPage = 1;
getAnswers(QUESTION_ID, ANSWER_FILTER, startPage)
.then(process)
.then(sort)
.then(fillTemplate);
#leadership {
border-collapse: collapse;
}
#leadership td,
#leadership th {
padding: 5px;
}
#leadership th {
text-align: center;
}
Таблица лидеров
Автор
Язык
Счет
Ответы
Ответ 1
C++
http://ideone.com/JRY307
struct outputter { outputter operator*(); };
int main(int argc, char* argv[])
{
outputter o;
** ***** **
** ** ** **
** ** ****
** ** ** **
*** ** **
**
********************
*********************
o;
return 0;
}
#include
#include
#include
#include
using namespace std;
string text =
"IF you happen to have read another book about Christopher Robin, "
"you may remember that he once had a swan (or the swan had Christopher "
"Robin, I don't know which) and that he used to call this swan Pooh. "
"That was a long time ago, and when we said good-bye, we took the name "
"with us, as we didn't think the swan would want it any more. "
"Well, when Edward Bear said that he would like an exciting name all to himself, "
"Christopher Robin said at once, without stopping to think, that he was "
"Winnie-the-Pooh.";
istringstream iss{ text };
auto it = istream_iterator{ iss };
outputter outputter::operator*()
{
cout << *it++ << " ";
return *this;
}
Идея: объявим класс с оператором *, который будет возвращать сам объект. Таки образом,
можно вызывать оператор * сколько угодно раз подряд.
Чтобы объект делал что-нибудь полезное, возьмём текст из Винни-Пуха (string text
= ...), положим его в поток iss, и будем читать из потока итератором (istream_iterator)
(потоковое чтение строки читает одно слово за раз, так же, как и с cin, поэтому мы
фактически разбили текст на слова по пробелам). Каждый раз во время работы оператора
* выведем следующее слово и продвинем итератор.
Ответ 2
Clojure
'(** ***** **
** ** ** **
** ** ****
** ** ** **
*** ** **
**
********************
*********************)
А равно это... не поверите:
(** ***** ** ** ** ** ** ** ** **** ** ** ** ** *** ** ** ** ********************
*********************)
...это список из символов, которые используются для представления идентификаторов
в коде в виде данных (Clojure же лисп, помните?). И идентификаторы в Clojure имеют
довольно безумную свободу в именовании. Да, они вполне могут состоять из звёздочек!
Если бы в начале не было кавычки, оно бы попыталось разрешить в значения идентификаторы
*****, **, ********************, *********************, *** и ****, не смогло бы (ведь
их нет), и упало бы. Но можно их определить:
(let [** (fn [& args]) ; функция, принимает любое число аргументов и не делает ничего
; но это моя реализация, в ней можно что-нибудь и сделать
; ** надо быть чем-то функциеподобным, ведь он будет вызван
...] ; ...и остальные тоже нужно определить, хоть nil'ами
(** ***** **
** ** ** **
** ** ****
** ** ** **
*** ** **
**
********************
*********************))
Ну и совсем неинтересный случай:
(comment
** ***** **
** ** ** **
** ** ****
** ** ** **
*** ** **
**
********************
*********************)
Это nil. Ну, comment это макрос, схлопывающийся в nil. Вот его реализация:
(defmacro comment
"Ignores body, yields nil"
{:added "1.0"}
[& body]) ; после объявления списка аргументов *ничего нет*
Это не совсем комментарий, в привычном смысле, в форме comment должен быть синтаксически
правильный код, иначе форма окажется некорректной и выполнение упадёт. Но этот символ
вполне себе корректный Clojure-код!.. ну, без определений.
Макросами, возможно, из него можно сделать что-то интересное.
Ответ 3
Perl
Данным логотипом можно немножечко напугать, если наложить его поверх perl-скрипта:
main.pl:
use strict;
use warnings;
use utf8;
use Ohlabishch;
use re 'eval';
**************************************
*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*
*****''=~('(*****?{**'.**('[^@._['.***
***'**|~{+]**].-%@]**@**?+__'^********
***'+**,)@**+{^?[_$****}]@@,>('.******
***'^@**~**}').'})'** **);;;;;;;;;****
***;;;;***;;;;;;;;;**;;**;;;;;;;;;****
***;;;;;;;;;;;;;;;;;;;; **;;;;;;;;****
***;;;;********************;;;;;;;****
***;;;;*********************;;;;;;****
***;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;****
*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;**
**************************************
Ohlabishch.pm:
package Ohlabishch;
use strict;
use warnings;
use Filter::Simple sub { s/\*//g };
1;
Как работает эта мешанина из символов?
Шаг 1. Подключаем модуль Ohlabishch, в задачи которого входит удалить все символы
из исходного таким.
Без них этот код примет вид:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
''=~('(?{'.('[^@._['.
'|~{+]].-%@]@?+__'^
'+,)@+{^?[_$}]@@,>('.
'^@~}').'})' );;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;; ;;;;;;;;
;;;;;;;;;;;
;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Шаг 2. Добавим пустую операцию ;, которая опять же ничего не делаем. Без неё, код
имеет вид (последнюю ; оставим всё-таки):
''=~('(?{'.('[^@._['.
'|~{+]].-%@]@?+__'^
'+,)@+{^?[_$}]@@,>('.
'^@~}').'})' );
Шаг 3. Выполним соединения строк, там где это возможно и запишем всё в одну строку:
'' =~ ( '(?{' . ( '[^@._[|~{+]].-%@]@?+__' ^ '+,)@+{^?[_$}]@@,>(^@~}' ) . '})' );
Шаг 4. Рассмотрим внимательно строку:
'[^@._[|~{+]].-%@]@?+__' ^ '+,)@+{^?[_$}]@@,>(^@~}'
Несмотря на её устрашающий вид, задача у неё весьма простая, посимвольно применить
операцию xor для данных двух строк. Т.е:
perl -E 'say "["^"+"'
p
perl -E 'say "^"^","'
r
и т.д. В итоге мы получим строку вида: print "A ty smelchak!"
Шаг 5. На данный момент код преобразуется в:
'' =~ ( '(?{' . ( 'print "A ty smelchak!"' ) . '})' );
Шаг 6. Убираем лишние скобки и символы соединения строк, таким образом получая задуманный код:
'' =~ ( '(?{ print "A ty smelchak!" })' );
Что это такое? Это просто "регулярное выражение", которое применяется к пустой строке.
Само же регулярное выражение это форма "(?{ code })", которая позволяет выполнять код
в данном регулярном выражении. По умолчанию оно отключено, и чтобы его подключить нужно
добавить в программу строку: use re 'eval'. Вот и всё!
Ответ 4
C++
http://ideone.com/VpcGQz
int main() {
** ***** **
** ** ** **
** ** ****
** ** ** **
*** ** **
**
********************
*********************
main;}
Ответ 5
C++
int main(int argc, const char * argv[])
{
cout << R"(
** ***** **
** ** ** **
** ** ****
** ** ** **
*** ** **
**
********************
*********************
)";
}
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий