Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Код из звёздочек

#любой_язык #соревнование


Как использовать это в качестве кода?

**       *****  **
 **     **  ** **
  **   **   ****
   ** **    ** **
    ***     **  **
                 **
********************
*********************


Приветствуются оригинальные решения. Вариант с наибольшим числом голосов побеждает.



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"( ** ***** ** ** ** ** ** ** ** **** ** ** ** ** *** ** ** ** ******************** ********************* )"; }

Комментариев нет:

Отправить комментарий