В некоторых странах существуют рекомендации или законы о том, как формировать аварийные коридоры на улицах с несколькими полосами движения в каждом направлении. (Далее мы рассматриваем только полосы, идущие в том направлении, в котором мы движемся.) В Германии действуют следующие правила:
- Если есть только одна полоса движения, все должны ехать направо, чтобы спасательные машины могли проехать слева.
- Если есть две или более полосы движения, машины на самой левой полосе должны двигаться влево, а все остальные должны двигаться вправо.
Вызов
Учитывая количество N>0
регулярных дорожек, выведите расположение полос при формировании аварийного коридора, используя строку N+1
символов ASCII. Вы можете использовать любые два символа от кода ASCII 33
до 126
, один для обозначения аварийного коридора и один для обозначения автомобилей. Трейлинг или пробелы, разрывы строк и т. Д. Допускаются.
Примеры
Здесь мы используем как E
для аварийного коридора, так и C
для автомобилей.
N Output
1 EC
2 CEC
3 CECC
4 CECCC
5 CECCCC
6 CECCCCC
etc
C
иE
, но есть много хороших подходов для этой задачи! Использование математических операций дляC=1
/E=2
илиC=2
/E=3
как топ ответ делает; использованиеC=0
/E=1
с10^(n-1)
; используяC=0
/E=.
путем десятичного форматирования0.0
; использованиеC=1
/E=-
использование-1
; и т. д. и т. д. Так много уникальных возможностей для вызова, который поначалу казался таким актуальным. Жаль, что я могу только +1 один раз. ;)Ответы:
Python 2,
2926 байтПример:
источник
10**n*97/30-1/n*9
сохраняет еще один байт, даетf(5) == 323333
и т. д.Python 3,
3533 байтаИзменить: сброс,
f=
чтобы сохранить 2 байта, благодаря напоминанию @dylnan .Попробуйте онлайн!
Чтобы визуализировать это:
Выход:
Попробуйте 🚔 онлайн!
Python 3, 40 байт
Простое решение:
Попробуйте онлайн!
источник
lambda N:
C (gcc) , 32 байта
Попробуйте онлайн!
Использование
0
и.
персонажи:источник
Japt,
54 байтаИспользуется
q
для автомобилей и+
для коридора.Попытайся
Благодарю Оливера, который играл в гольф на 4 байта одновременно, как и я.
объяснение
Краткое решение, но сложное объяснение!
Сначала простые вещи:
ç
метод, когда применяется к целому числу, повторяет свой строковый аргумент столько раз.i
Метод принимает 2 аргумента (s
&n
) и вставкиs
в индексеn
строки она применяется.Расширение двух используемых ярлыков Unicode дает нам
çq i+1
, что, когда передается в JS становитсяU.ç("q").i("+",1)
, гдеU
ввод. Итак, мы повторяемq
U
времена, а затем вставляем+
в индекс 1.Последний трюк заключается в том, что благодаря переносу индекса Japt, когда
U=1
,i
вставит+
индекс at , для какого0
бы значения вы его ни указывалиn
.источник
ç0 iQ1
для 6 байтов, но было бы лучше, если бы вы использовали его.ç¬iÅ
за 4 байта;) Я никогда не злоупотреблял Джаптом так сильно.Ä
вместоÅ
:)R, 50 байтов
-11 спасибо Джузеппе!
Выходы 1 для аварийного коридора и 2 для обычных полос движения
Моя попытка, 61 байт
Ничего причудливого, чтобы увидеть здесь, но давайте получим R на табло =)
Использование:
источник
Haskell ,
383432 байтаПопробуйте онлайн!
источник
Python 2,
302928 байтПечать
3
вместоC
и.
вместоE
.Объяснение:
Попробуйте онлайн.
Python 2,
3332312928 байтПечатает
1
вместоC
и-
вместоE
.-2 байта благодаря @ovs .
-1 байт благодаря @xnor .
Объяснение:
Попробуйте онлайн.
источник
10/3
неудачник в 17 летn=16
если 64-разрядное встроенное целое число достаточно, или в этом случае,n=16
когда десятичное значение может по умолчанию достаточно более 15 десятичных цифр. ( То же самое относится и к множеству других ответов , использующим язык с произвольными размерами чисел, как Java, C # .NET, и т.д.)Pyth,
1098 байтИспользуется
0
для обозначения аварийного коридора и"
.Попробуй здесь
объяснение
источник
брейкфук , 42 байта
Попробуйте онлайн!
Принимает ввод как код символа и выводит как
V
обычные полосы иW
как очищенные линии. (Чтобы проверить легко, я рекомендую заменить на,
число+
с)Как это работает:
источник
Октава (MATLAB *),
31 30 28 2722 байтаПопробуйте онлайн!
Программа работает следующим образом:
Прием, используемый здесь, заключается в том, чтобы XNOR обрабатывать начальный массив
0:n
с проверкой, если входное значение больше 1. Результатом является то, что дляn>1
начального числа преобразовывается в логический массив, в[0 1 (0 ...)]
то время как дляn==1
начального числа становится инвертированным[1 0]
, достигая необходимой инверсии.Остальное - просто преобразование семени в строку с достаточным количеством добавленных машин.
(*) Ссылка TIO включает в комментарии нижнего колонтитула альтернативное решение для того же числа байтов, которое работает в MATLAB, а также в Octave, но это приводит к последовательности «0» и «1», а не «E» и « C». Для полноты, альтернатива:
Сохранено 1 байт с помощью,
n==1~=0:1
а не0:1~=(n<2)
.~=
имеет приоритет над<
, следовательно , оригинальные скобки, но , кажется , что~=
и==
обрабатываются в порядке их появления путем сравнения с 1 мы можем сохранить байт.Сохранено 2 байта путем изменения места выполнения отрицания
2:n
. Это экономит пару скобок. Мы также должны изменить на,~=
чтобы==
учесть тот факт, что он будет отменен позже.Сохранено 1 байт с помощью
<
снова. Оказывается, это<
имеет тот же приоритет, что и в==
конце концов. Размещение<
расчета до==
обеспечивает правильный порядок исполнения.Сохранено 5 байт, не создавая два отдельных массива. Вместо этого полагайтесь на тот факт, что сравнение XNOR в любом случае преобразует один диапазон в логические.
источник
Желе ,
119 байтПопробуйте онлайн!
Полная программа.
Использует
0
вместоC
.источник
C (gcc), 39 байт
Попробуйте онлайн!
Заимствовал и адаптировал трюк printf из ответа ErikF .
источник
Python 3, 32 байта
Попробуйте онлайн!
Использует выражение ф-строку в формат либо
'E'
или'CE'
проложенный по правой'C'
поэтому она имеет ширинуn+1
.источник
Brain-Flak ,
10066 байтПопробуйте онлайн!
Используется
"
как аварийная полоса и!
как обычная полоса .источник
C #, 34 байта
Попробуйте онлайн!
источник
05AB1E , 7 байтов
Попробуйте онлайн!
0 - это С, а 1 - это Е.
объяснение
источник
$<×TìsiR
было, как я думал.1I
можно в гольф$
.APL (Dyalog Unicode) ,
21 1716 байтовПопробуйте онлайн!
Спасибо Эрику за сохранение 4 байта и Адаму за еще один байт.
Как?
источник
(⍵>1)
не должно быть в скобках. И вы можете сохранить 4 байта с молчаливой функцией:(⊢×1<⊢)⌽'E',⍴∘'C'
.(-≠∘1)⌽'E',⍴∘'C'
или=∘1⌽¯1⌽'E',⍴∘'C'
.'CE'[1(≠=∘⍳+)⎕]
Haskell ,
353332 байта2 байта сохранены благодаря Angs, 1 байт сохранен благодаря Линн
Попробуйте онлайн!
Haskell ,
323029 байтЭто нулевое индексирование, поэтому оно не соответствует задаче
Попробуйте онлайн!
Haskell , 30 байт
Это не работает, потому что вывод должен быть строкой
Попробуйте онлайн!
Здесь мы используем цифры вместо строк,
2
для аварийного коридора,1
для автомобилей. Мы можем добавить1
в конец, умножив на 10 и добавив1
. Это дешевле, потому что нам не нужно платить за все байты для конкатенации и строковых литералов.Было бы дешевле использовать
0
вместо,1
но нам нужны ведущие нули, которые в конечном итоге обрезаются.источник
((blah)!!)
может стать(!!)$blah
сохранить байт в ваших первых двух ответах.Python 3 ,
3029 байтПопробуйте онлайн!
Хорошо, уже есть много ответов на Python, но я думаю, что это первый младший байт из тех, кто все еще использует символы "E" и "C", а не числа.
источник
JavaScript (Node.js) , 28 байт
Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 16 байт
Попробуйте онлайн!
источник
Stax , 7 байт
Запустите и отладьте его
Для этого используются символы «0» и «1». Это работает, потому что когда вы вращаете массив размером 1, он не меняется.
Распакованный, размазанный и прокомментированный, это выглядит так.
Запустите этот
источник
JavaScript (Node.js) , 19 байт
Попробуйте онлайн!
источник
Perl 5
-p
,272019 байтовПопробуйте онлайн!
Сохраненный байт, используя
1
для автомобилей иE
для аварийного коридора.источник
Желе , 6 байт
Отображает автомобильные полосы как 0 , аварийные полосы как 1 .
Попробуйте онлайн!
Как это работает
источник
Пробелы ,
141104103 байтаБуквы
S
(пробел),T
(табуляция) иN
(новая строка) добавляются только как подсветка.[..._some_action]
добавлено только в качестве объяснения.Печатает
1
вместоC
и-
вместоE
.-1 байт благодаря @JoKing , предложив использовать
1
и-1
вместо0
и1
.Объяснение в псевдокоде:
Пример работает:
Входные данные:
1
Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Останавливается с ошибкой: выход не определен.
Входные данные:
4
Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Останавливается с ошибкой: выход не определен.
источник
-
злоупотребляя печатью-1
?push_0
;print_as_integer
;push_1
;print_as_integer
кpush_-1
;print_as_integer
, но взамен двухpush_0
;print_as_integer
заменены наpush_45
;print_as_character
, гдеpush_0
=SSSN
, иpush_45
=SSSTSTTSTN
. Иpush_45
еще нужно добавить еще, потому что для вводаn=1
я теперь печатаю дубликат, который у0
меня уже был в стеке, поэтому мне не пришлось нажимать0
снова, потому что0
он уже был в стеке.-
как замену, так1
и1
замену0
. Тогда вы избежите необходимости нажимать 45, и, насколько я могу судить, это сэкономит на печати числа в первой половине условного слова, но немного увеличит затраты на нажатие 1 вместо 0. Проверьте мой ответ Gol> <> для Пример вывода, который я имею в видуprint_-1
вместо печати0
и1
, но дополнительноеprint_-1
необходимо вне цикла. РЕДАКТИРОВАТЬ: был в состоянии уменьшить его до 103 байтов путем измененияsubtract_1
;if_0_jump_to_ONE
;push_-1
;print_integer
кsubtract_2
;if_negative_jump_to_ONE
;print_integer
потому что -1 уже находится в стеке. Так что спасибо за -1 байт. :)AutoHotkey 32 байта
Заменяет букву «C» на «EC», если количество C> 1, затем отправляет «CEC» и выходит из приложения.
C => EC
CC => CEC затем выходит из программы. Все дальнейшие C будут введены после выхода из программы.
источник
APL + WIN,
2016 байтов4 байта сохранены благодаря Адаму
Запрашивает целое число n:
1 для аварийного коридора o для автомобилей.
источник
(-2≠⍴n)⌽n←1⎕/⍕10
J 11 байт
Попробуйте онлайн!
Основано на комментарии ngn .
🚘 и 🚔:
1&<,~/@A.'🚔',~'🚘'$~,&4
источник
MathGolf ,
76 байтовПопробуйте онлайн.
Выход
1
заE
и0
заC
.Объяснение:
источник