Английский язык и большинство языков программирования пишутся и читаются слева направо, сверху вниз, но это не обязательно так .
На самом деле для блока текста
ABC
DEF
Я могу думать о восьми связанных способах, которыми это могло бы быть прочитано:
- Слева направо, сверху вниз (LTR-TTB):
ABCDEF
- Сверху вниз, слева направо (TTB-LTR):
ADBECF
- Слева направо, снизу вверх (LTR-BTT):
DEFABC
- Снизу вверх, слева направо (BTT-LTR):
DAEBFC
- Справа налево, сверху вниз (RTL-TTB):
CBAFED
- Сверху вниз, справа налево (TTB-RTL):
CFBEAD
- Справа налево, снизу вверх (RTL-BTT):
FEDCBA
- Снизу вверх, справа налево (BTT-RTL):
FCEBDA
Вызов
Напишите прямоугольный блок текста, который можно прочитать каждым из восьми указанных выше способов, в виде восьми однострочных программ на выбранном вами языке. Каждая из этих программ должна вывести различное целое число от одного до восьми.
Неважно, какое направление чтения выводит какое число, они не должны совпадать с числами выше. Например, если ваш текстовый блок все еще
ABC
DEF
то программа ABCDEF
вывода может 5
и FEDCBA
вывод может 2
, и остальные шесть программ будет выводить 1
, 3
, 4
, 6
, 7
, и 8
в некотором порядке.
Текстовый блок может содержать любые символы, кроме разделителей строк .
Вывод должен идти в стандартный вывод или аналогичную альтернативу, если ваш язык не имеет правильного стандартного вывода. Там нет ввода. Вы можете предположить, что программы работают в среде REPL.
Pietu1998 милостиво написал JSFiddle, который дает 8 различных однострочных программ, когда передается блок текста. Я сделал это во фрагменте стека:
<script>function f(n){n=n.split("\n");var e=n.map(function(n){return n.length}).sort()[n.length-1];n=n.map(function(n){return(n+Array(e+1).join(" ")).substring(0,e)});var t=n[0].split("").map(function(e,t){return n.map(function(n){return n[t]}).join("")});n=[n.join(""),n.reverse().join(""),t.join(""),t.reverse().join("")],n=n.concat(n.map(function(n){return n.split("").reverse().join("")})),document.getElementById("a").innerHTML=n.map(function(n,e){return document.getElementById("b").checked?n+" "+"LLTTRRBB"[e]+"T"+"RRBBLLTT"[e]+"-"+"TBLRBTRL"[e]+"T"+"BTRLTBLR"[e]:n}).join("\n")}</script><textarea onkeyup="f(this.value)" id="c" placeholder="Code"></textarea><br/><input type="checkbox" id="b" onchange="f(document.getElementById('c').value)" checked/> <label for="b">Show directions</label><br/><pre id="a"></pre>
Вы все еще можете найти версию CJam Мартина здесь .
счет
Ваша оценка - это область вашего блока текста (ширина, умноженная на высоту). Представление с самым низким счетом выигрывает. (По сути, выигрывает наименьший код, следовательно, тег code-golf .) Tiebreaker переходит к ранее опубликованному представлению.
Пример - 2 на 3, поэтому его оценка равна 6. Оценка менее 4 (2 на 2) невозможна, потому что тогда некоторые из 8 программ будут идентичными и не смогут вывести два разных значения.
String.prototype.repeat()
это все еще что-то новое. Также подтвердили работу в IE сейчас. новая скрипка