Английский язык и большинство языков программирования пишутся и читаются слева направо, сверху вниз, но это не обязательно так .
На самом деле для блока текста
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 сейчас. новая скрипкаОтветы:
J 3 * 3 = 9
Выполнение всех направлений:
Объяснение:
[
(left
) Берет на левую сторону его два операнда , так что по существу отменяет вся правая сторона нашего выражения , например ,1+2[2+2+2
становится1+2[6
затем1+2
.n
выражения каждого из операндов: одно с номером,1
а другое только2
с s. Дополнения с1
генерируют нечетные числа, а остальные генерируют четные.источник
[
на,;
и это должно работать в среде REPL большинства языков.Befunge-98 ,
5х5 = 255х3 = 15Я написал небольшой сценарий, который нашел правильные номера для меня. Это заняло некоторое время, но эй, я просто победил GolfScript! : D
Сценарии, которые я использовал, здесь и здесь , но я не предлагаю их рассматривать, так как стиль кода чрезвычайно канцерогенный.
Подпрограммы
Старая версия
Подпрограммы
Выведите числа 1-8 соответственно.
источник
Brainfuck $ , 4x3 = 12
Brainfuck $ очень похож на Brainfuck , но содержит еще несколько команд, включая команду для вывода текущего значения ячейки в виде числового вывода, что было очень полезно для этой задачи.
Однострочные команды:
источник
TECO, 3 * 5 = 15
=
печатает значение последнего числового выражения.\
используется для чтения или записи чисел из строк, но я использую его только как сброс здесь.+4 5+2=4 +1 \
7+ +2+4=1 4 5 \
6+ +2+1=4 4 \ 5
3+1 \+2=4 +4 5
2\ 1+ 4=2+5 4+
5\ 5 4 1=4+2+ +
15 \ 4 4=1+2+ +
45 4+ 4=2+\ 1+
8источник
Пит - 12x12 = 144
Так как однострочная программа не может завершиться, предположим, что она завершается после первого вывода.
8 подпрограмм в одном изображении:
источник
GolfScript, 4x4 = 16
Использует старый добрый «супер комментарий»: непревзойденный
}
игнорирует остальную часть кода (фактически, в этом случае нормальный комментарий#
сработал бы так же хорошо, так как весь код запускается одной строкой). Таким образом, из каждого угла есть либо только одно число, либо (в другом направлении) это число увеличивается на 1, потому что выполнение прекращается и содержимое стека печатается. 8 программисточник
Haskell, 26x26 = 676
Использует комментарии (
--
), чтобы скрыть биты назад и в сторону. Это делает это ужасно долгоисточник
Прелюдия , 5х3 = 15
Это предполагает интерпретатор Python , который печатает значения в виде чисел, а не кодов символов.
Это не побеждает Befunge $, но оно побивает мои представления о GolfScript, и мне нравится его простота. Также обратите внимание, что в нем используются только 9 непробельных символов,
что меньше, чем в любой другой отправке(J снова наносит удар :)). В Prelude каждая цифра помещается в стек по отдельности, и, в зависимости от пути, перед цифрой находится другая цифра!
, которая просто печатает верхний элемент стека. 8 программ:Кроме того, есть также
Который толкает нечетные числа на вертикальных путях и увеличивает их
1
на горизонтальных путях:источник
CJam - 7 × 7
Не впечатляет, но ответа CJam не было, и мне нравится, как это выглядит :)
В основном используется тот факт, что
];
очищает стек.Попробуйте онлайн
источник
Рубин - 7х7
Также не впечатляет, та же тактика, что и у ответа на Haskell.
источник
R, 9x9
Нет пробелов, нет комментариев.
Я думаю, это можно расширить до любого размера, который вы хотите. Я думал, что оператор по модулю является наиболее гибким из доступных операторов, поскольку он предотвращает слишком большие значения независимо от размера данных, и нет никакого эффекта от наличия действительно больших чисел между ними.
источник
Это язык программирования, 5 * 9 = 45
Что переводится в это:
Поскольку
;
завершает программу, вышесказанное переводится в это:Пояснение: любое число от
0
до9
помещает соответствующую цифру в стек.+
выскакивает два верхних значенияx
иy
из стека и помещаетx + y
в стек.i
выводит стек как целое число.источник