Руководство по алфавиту
Дан массив направлений, где направления определены следующим образом:
NW N NE
W . E
SW S SE
Или в качестве индексов (вы можете использовать эти индексы для направлений вместо строк выше):
0 1 2
3 . 4
5 6 7
Вы можете выбрать любой формат, поддержка обоих не требуется для участия в конкурсе. Сгенерируйте соответствующую строку алфавита, которая представляет нарисованный путь, начиная с A. Число направлений никогда не будет превышать 25, что означает, что оно никогда не может пройти мимо Z
, поэтому вам не нужно обрабатывать этот сценарий. Никакие другие входные форматы не будут приняты, если вы не сможете объяснить, почему эти форматы не работают из-за языкового ограничения. Это легче объяснить, используя подробный пример.
Итак, давайте посмотрим на быстрый пример:
[E,SE,N,S,S,S,NW,W,N] or [4,7,1,6,6,6,0,3,1]
Всегда начинай с А.
A
Иди на восток к Б.
A-B
Идите на юго-восток до C.
A-B
\
C
Идите на север к D.
A-B D
\|
C
Вернитесь на юг к E, переписав C.
A-B D
\|
E
Продолжить юг в течение 2 циклов до F и G.
A-B D
\|
E
|
F
|
G
Идите на северо-запад к H.
A-B D
\|
E
|
H F
\|
G
Идите на запад, чтобы я.
A-B D
\|
E
|
I-H F
\|
G
Конец на север в точке J.
A-B D
\|
J E
| |
I-H F
\|
G
Последнее значение, которое вы бы вернули, читая последний график слева направо, сверху вниз:
ABD
JE
IHF
G
В результате чего:
ABDJEIHFG
Это код-гольф , выигрывает наименьшее количество байт.
A
такого, чтоA
не будет напечатан первый результат?Ответы:
MATL ,
64585750464037363530 байтПопробуйте это на MATL Online
объяснение
источник
JavaScript (ES6),
1081079487 байтСпасло колоссальные 13 байтов, благодаря Титу!
Сохранено еще 7 байтов, благодаря edc65!
Как это устроено
Формула
(d += d > 3) * 9 - d % 3 * 8 - 28
переводит направления0..7
в следующие смещения:Мы используем эти смещения, чтобы переместить указатель
p
в одномерный массивr
и написать буквы в результирующих позициях.Мы итерируем,
[i = 9, ...a]
а не простоa
чтобы вставить начальную букву «а». Так как мы инициализации ,i
чтобы9
в то же самое время, мы вводим специальное смещение 54 (результат приведенной выше формулыd = 9
). После первой итерацииp
равно646 + 54 = 700
, что оставляет только достаточно места , чтобы поддержать до 25 ходов на Северо-Западе:25 * -28 = -700
. Вот почемуp
инициализируется до646
.Тогда нам просто нужно присоединиться к массиву, чтобы получить нашу последнюю строку. Неопределенные значения между буквами просто игнорируются
join()
.источник
d+=d>3,p+=d*9-d%3*8-28
экономит 11 байт.i
в определении массива, сохранив еще 2 байта)(++i).toString(36)
(все еще не пытаясь понять вашу математику, но, похоже, это работает)Октава,
145138131123105103908785 байтПопробуйте онлайн
Благодаря Suever 2 байта сохранены!
Предыдущий ответ 103 байта:
Попробуйте онлайн!
Сначала попробуйте 145 байт
Некоторые объяснения
источник
image
часть пакета, ваш byountount должен загружать пакет изображенийpkg load image
pkg load *
в самом начале. ideone.com может быть лучшим выборомpkg install -auto image-1.0.0.tar.gz
чтобы он мог загружаться автоматически. См. руководствоMATLAB,
8785 байтсэкономил 2 байта благодаря Луису Мендо
источник
'%&''?AYZ['-64
хороший трюк ... на самом деле 66 байтов, если переписать в октавеPHP, 93 байта
Работа с одним массивом, как в ответе Кодоса Джонсона .
Но у меня так много идей, которые я опубликовал самостоятельно.
принимает числа из аргументов командной строки. Беги с
-nr
.перемещая курсор
первоначальный расчет:
игра в гольф:
объединение заданий ничего не спасает, но улучшает читабельность:
сломать
источник
Python 2,
180 178176 байтисточник
PHP, 121 байт
Он запускается в командной строке с
-r
флагом и принимает в качестве аргумента массив символов (строку) индексов.источник
""<$n=$argv[1][$i]
вместо($n=$argv[1][$i])!=null
R 160 байт
источник