Это первое в серии, второе - это две дороги, разошедшиеся в желтом лесу (часть 2)
Этот вызов вдохновлен знаменитым стихотворением Роберта Фроста «Дорога не пройдена»:
Две дороги расходились в желтом лесу,
И мне жаль, что я не мог путешествовать обоими
И быть одним путешественником, долго я стоял
И смотрел вниз на одну так далеко, как мог,
На то, где оно согнулось в подлеске;Тогда взял другой, столь же справедливый,
И имеющий, возможно, лучшую претензию,
Потому что он был травяной и хотел носить;
Хотя что касается того, что проходивший там
носил их действительно примерно одинаково,И оба в то утро одинаково лежали
В листьях ни шагу не ступали черными.
О, я оставил первый на следующий день!
Все же зная, как путь ведет на путь,
я сомневался, должен ли я когда-нибудь вернуться.Я расскажу это со вздохом
Где-то через века и века:
две дороги расходились в лесу, и я…
я выбрал ту, по которой меньше путешествовал,
И это имело все значение.
Обратите внимание на вторую и последнюю строку I took the one less traveled by,
.
Ваш актуальный вызов
Вы примете участие в форме как:
# ##
# ##
# ##
#
#
#
и вы должны найти более тонкую дорогу.
Дорога начинается внизу с #
. Две другие дороги, которые всегда заканчиваются в верхнем ряду, - это дороги, которые вы должны исследовать. Дорога, которая является самой толстой, является наиболее пройденной, и, следовательно, это не то, что вы хотите. Другой меньше всего путешествует, и это тот, который вы хотите.
Выход
Ваша программа / функция должна вывести одно из 2 различных значений (например, 0 или 1, истина или ложь), по одному для каждого возможного положения дороги, которое не занято. Например, вы можете вывести 0, если не пройденная дорога находится слева от выбранной дороги, и 1 в противном случае, или вы можете вывести строку «left» или «right», true, false и т. Д.
Тестовые случаи:
## #
## #
###
#
#
#
Мог бы вывести «правильно».
## #
## #
###
##
#
#
#
Мог бы вывести «правильно».
## #
## #
###
##
#
#
#
Мог бы вывести «правильно».
## #
## #
###
#
#
#
#
Мог бы вывести «правильно».
# ##
# ##
###
#
#
#
#
Мог бы вывести «влево»
# ##
# ##
###
#
#
#
#
Мог бы вывести «влево»
Примечания
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах
- Стандартные лазейки запрещены
- Вы должны указать свои выходы для «левого» и «правого», и они должны быть разными
- Ввод будет одной большой строкой и может иметь любое количество строк
- Вам не нужно беспокоиться о правильном вводе.
- Дорога всегда Y-образной формы, поэтому вам нужно только смотреть сверху.
- Есть вопросы? Комментарий ниже:
Побеждает меньшее количество байтов!
источник
Ответы:
CJam , 1 байт
r
Переводит первый струнный соседние символы непробельных из STDIN в стеке, так что отпечатки##
для оставил и#
для права .Попробуйте онлайн!
источник
JavaScript (ES6),
1912 байтРедактировать:
Более гольф версия
Возвращает
#
справа и пробел слева.Оригинал:
объяснение
Ungolfed :
Первое, что делает эта функция, это убирает пробелы в начале и конце ввода. Это означает, что первый символ всегда
#
. Затем я проверяю второй символ (JavaScript начинается с 0) и проверяю, является ли он#
символом. Это возвращает логическое значение. Если путьright
будетtrue
, он останется, он вернетсяfalse
.Как я играл в гольф
В ES6 есть сокращение от анонимной функции, называемое функцией стрелки . Это означает, что я могу взять свою функцию-обертку и превратить ее в:
Из-за правил функций стрелок он вернет остальную часть кода. Оттуда я перешел
charAt(1)
на[1]
более короткий путь, хотя и не рекомендуется . Тогда я взял===
и превратил это в==
. Хотя в этом случае они разные, это не имеет значения. Наконец, я переименовалinput
вa
и удалить все пробелы.Выведите направо и налево
Хотя головоломке на самом деле не нужна программа для вывода вправо и влево, вот пример других выводов:
Единственная добавленная часть
?'right':'left'
. Это создает троичный оператор , сжатый оператор if, это означает, что (не зачищенный) код равен *:пример
источник
Pyth, 2 байта
Выходы
#
слева и##
справа.Попробуйте онлайн
объяснение
источник
Точность !!30 байтов
Из-за способа Acc! принимает ввод, он выдаст вывод только после ввода одной строки ввода. Но если вы передадите ввод или перенаправите его из файла, вы не должны заметить разницы.
Принимает ввод от стандартного ввода. Выводится,
если левая дорога менее пройдена, или
#
если правая дорога менее пройдена. Попробуйте онлайн!объяснение
N
читает значение ASCII символа из stdin каждый раз, когда на него ссылаются. Пока35-N
мы правдивы; то есть пока35-N != 0
илиN != 35
. Поэтому, когда цикл завершается, мы только что прочитали первый#
символ в строке. Следующий символ затем читаетсяN
и записывается обратно в стандартный выводWrite
.источник
Сетчатка, 5 байт
Выходы,
1
если справа,0
если слева.Попробуйте онлайн
Если значения для положительного результата не должны быть различимы (5 байтов):
Выводит положительное целое число, если справа, ноль, если слева.
Попробуйте онлайн
источник
Язык
формулIBM / Lotus Notes,373526 байтРедактировать Я всегда забываю, что
@Like
с подстановочными знаками на 2 байта дешевле, чем@Contains
.Редактировать 2 На самом деле не нужно,
@if
поскольку он просто печатает1
или0
зависит от того, приводит ли формула к@True
или@False
.Вычисляемая формула поля. Просто возьмите все слева от первого, который
##
он находит в поле,a
и, если есть#
в нем, выводит1
для левого, иначе выводит0
для правого.Благодаря @DavidArchibald, вот решение для 22 байтов. Из уважения к решению Davids я не буду публиковать его в качестве основного ответа.
Этот вывод
1
для правого и0
левого.источник
Пип ,
86 байтПринимает ввод в качестве аргумента командной строки (который будет нуждаться в цитировании и экранировании новых строк при запуске из фактической командной строки). Выводится,
#
если левая дорога менее пройдена, и##
если правая дорога менее пройдена. Попробуйте онлайн!объяснение
При этом используется недавно добавленный оператор регулярного выражения Пипа.
Простое решение регулярных выражений (порт ответа Retina от mbomb007 ) составляет 9 байтов:
источник
a
aq
и получить вместо него ввод из stdin.чип , 7 байтов
Попробуйте онлайн!
Выходы
0x0
слева и0x1
справа. (TIO включает флаг,-v
чтобы вы могли видеть двоичные значения в stderr. Чтобы увидеть вывод в ASCII,e*f
можно добавить в конец первой строки.)Чип работает с отдельными битами в потоке байтов, что на самом деле делает его достаточно хорошим для решения этой конкретной проблемы.
A
является наименее значимым битом входного байта, а «#» - единственный символ ввода, для которого установлен этот бит. Когда этот бит встречается впервые, мы достигли первого «#» первой строки.Z
задерживает этот сигнал на один цикл, так что теперь мы смотрим на следующий символ.t
теперь активирован, что означает прекращение выполнения после завершения этого цикла. Нам не нужно смотреть дальше ширины первой дороги.~S
подавляет вывод для всех циклов, кроме последнего. Если бы этого не было здесь, мы получили бы вывод на каждом цикле.a
ставит текущую стоимость своих соседей (толькоA
в этом случае) в младший значащий бит выходного байта.Все это означает, что мы получаем a,
0x1
если за первым «#» сразу же следует другой «#», и в0x0
противном случае.источник
C 35 байт
Та же идея, что и в ответе PragmaticProgrammer : найти первое
#
и вывести то, что следует за ним -#
для «правого» и<space>
для «левого».C (лазейка), 16 байт
Согласно тестовым примерам, похоже, что левая дорога всегда находится ровно в одном месте от левого поля. Так...
источник
Пакет, 46 байтов
Читает одну строку из STDIN, разбивает ее на пробелы и печатает первое слово, поэтому выводит
#
для левого и##
для правого. Если массив цитируемых параметров командной строки является приемлемым, то для 36 байтов:Снимите первый аргумент с кавычек, чтобы он был разбит на пробелы, и выведите его первое слово.
источник
Python 2, 21 байт
Попробуйте онлайн
Выход
#
для левого и##
правогоисточник
Сетчатка , 5 байт
Попробуйте онлайн!
Альтернативное 5-байтовое решение. Отпечатки
#
слева и##
справа. Идея состоит в том, чтобы сопоставить все прогоны#
s (#+
) и print (!
) только с первым из них (1
).источник
Haskell, 21 байт
или в бессмысленном стиле:
«#» означает право, а «» означает слева
Функция просто берет строку, удаляет начальные пробелы, а затем принимает второй символ (пробел, если левый тощий, и #, если левый толстый)
РЕДАКТИРОВАТЬ: Сохранено три байта благодаря Лайкони и Ними!
источник
(!!2).dropWhile(' '==)
достаточно ответа.!!1
для 2-го элемента. Вы можете сократить тест до<'!'
. В версии pointfree вы можете заменитьdropWhile
наsnd.span
.Brainfuck, 32 байта
Ungolfed:
Отпечатки
#
на право ислева.
Попробуйте онлайн!
источник
Perl 5 , 8 + 1 = 9 байт
Попробуйте онлайн!
Бежать с
-a
(штраф 1 байт).Вывод (где filename является именем скрипта), если левая дорога менее пройдена, или
# at filename line 1, <> line 1
## at filename line 1, <> line 1
если правая дорога меньше пройдена.объяснение
-a
Опция автоматически считывает информацию и разбивает ее на столбцы вокруг пробельных, игнорируя ведущие пробелы. Таким образом, первый источник данных - это то, что нам нужно; что - х$F[0]
. Это также помещает программу в неявный цикл, который мы не хотим. Однако использованиеdie
позволяет вывести строку и выйти из неявного цикла одновременно (и не более чем в символах, чемsay
при более обычном способе печати строки).источник
C 54 байта
C ++ 58 байт
Поскольку OP указывает, что это может быть «программа / функция», я решил написать функцию для сохранения символов. Тем не менее, я по-прежнему включал в число символов оператор "#include" и сопровождающий разрыв строки, поскольку они необходимы для компиляции функции.
Выход
Возвращает пробел
" "
для обозначения слева или хеш-"#"
символ для обозначения справа.объяснение
Функция strchr () обходит заданную строку и возвращает указатель на первое вхождение указанного символа. Он имеет перегрузку, которая принимает целое число в качестве второго аргумента, в отличие от символа, который сохраняет мне 1 символ. Например, «#» можно заменить на 35. Затем я добавляю единицу к указателю, возвращенному из функции, чтобы получить сразу следующий символ, и разыменовываю его, а затем возвращаю полученный символ.
Заметка
Я также хотел бы воспользоваться этой возможностью, чтобы формально выразить свое раздражение в Visual Studio, автоматически форматируя мой код, когда я пытаюсь играть в гольф (╯ ° □ °) ╯︵ ┻━┻.
Изменить: Спасибо Рэй за указание на некоторые различия в C и C ++ и где я мог сохранить символы <3.
источник
#include <string.h>\n
сchar*strchr();
и сохранить 6 байт в то же время совершенно законно. (А если вы предпочитаете C ++ по какой - либо причине, вы можете заменить#include <string.h>
с#include <cstring>
и сохранить 1 байт.)JavaScript (ES6), 37 байт
Объяснение:
p
это функция, которая возвращаетtrue
если дорога, по которой меньше следуют, находится слева и false в противном случае. Это мой первый ответ на этом сайте, так что, вероятно, это может быть больше в гольфе (может быть, регулярное выражение).Он работает, беря верхнюю строку ввода и проверяя, соответствует ли она регулярному выражению
/^ *#( |$)/
(начало строки, любое количество пробелов, # и пробел или конец строки.)Это просто, чтобы дать людям разъяснения о формате и генерировать идеи. Я уверен, что это может быть разбито и играть в гольф дальше. Удачного игры в гольф!
источник
[^#]
Japt , 3 байта
(2 байта для
-g1
флага) Выходы#
справа и пробел слева. Основано на ответе JavaScript Дэвида Арчибальда.Попробуйте онлайн!
источник
Excel, 17 байт
Предполагает ввод в ячейку
A1
.Возвращает
##
справа и#
(#
и пробел) слева.источник
Дивиль , 12 байт
Объяснение:
Использование:
Возвращает
(пробел) слева и
#
справа.источник
Java 7,
16666635243 байтаВыходы
35
справа и32
слева.Основано на ответе @Clashsoft 's Dyvil .
Объяснение:
Тестовый код:
Попробуй это здесь.
Выход:
источник
Befunge 98, 11 байт
Попробуйте онлайн!
Печать
32
для левой и35
правой стороны, с одним пробелом в конце.объяснение
Один трюк, который я использовал, ставил
-!jv
первый, хотя он ничего не делал. Это позволило мне избавиться от пробела после'
и сохранить некоторые отступы. С этим последним код будетдля 15 байтов.
источник
Рубин, 20 байтов
Возвращает true для левого, false для правого.
источник