С большим крахом универсальной экономики также упал спрос на изготовленные на заказ планеты. Магратцы должны были заботиться о более стабильных доходах также от более широкого класса клиентов. Поэтому они изобрели собственную горную цепь (или короткие хаосы) для людей с меньшим бюджетом, которые не могли позволить себе полную планету.
Горы строить по плану заказчика (он же строки цифр и точек) и поставляются с использованием ASCII-арт (состоящие из ,
/
, \
, ^
и v
).
задача
Напишите полную программу, которая принимает входные данные (одну строку) из STDIN или в качестве аргумента и выводит в STDOUT. Эта головоломка представляет собой код-гольф, поэтому, пожалуйста, покажите некоторые попытки игры в гольф.
вход
Строка из точек и цифр, лежащая в основе горной цепи. Каждая строка имеет ровную длину, необходимую для поддержки гор, и каждая вершина задается цифрой, а не точкой, указывающей высоту вершины.
Выход
Ascii версия горной цепи.
- Каждая цифра на входе представляет ровно одну вершину (
^
) точно на той высоте, которая указана цифрой (т. Е. 9 - самая высокая высота). - На выходе не должно быть дополнительных пиков (т. Е. В местах, где на входе есть точка).
- Горы имеют треугольную форму, т.е. склоны создаются с использованием
/
и\
символов. - Проходы, где две горы перекрываются, формируются с использованием персонажа
v
. - Никаких лишних ни новых, ни пустых строк.
- Поля с пробелами не обязательны.
Вы можете предположить, что предоставленный ввод действителен, то есть всегда существует решение в соответствии с правилами (например, ввод 13..
не приведет к правильной конфигурации и может быть проигнорирован). Более того, на каждой стороне ровно столько точек, что горы не должны быть подрезаны.
Примеры
Первая строка показывает ввод, все остальные строки составляют желаемый результат. (На самом деле горы выглядят намного лучше в моей консоли, чем здесь.)
1
^
11
^^
1.2.
^
^/ \
.2.3..
^
^/ \
/ \
.2..3..
^
^ / \
/ v \
...4...3...3..
^
/ \ ^ ^
/ \/ \ / \
/ v \
1
, это\n\n\n\n\n\n\n\n^
разрешено?Ответы:
Javascript:
272268233232201192189188178180 символовСпасибо @Sam за сокращение его с 268 до 233 символов и за @manatwork еще за 1 символ. @VadimR за указание на ошибку.
Правильно выделенная и несколько не одураченная версия с комментариями:
Как вы можете заметить из кода, это работает как клеточный автомат, где каждая ячейка проверяет число на входе, смотрит на себя и на двух своих соседей, чтобы решить, какой будет следующая итерация. В каждый момент клетка может быть
^
,/
,\
,v
или. Входные данные, представленные в тестовых примерах, дают ожидаемый результат.
Обратите внимание, что использование
alert
поля отстой, так как обычно он не имеет моноширинного шрифта. Вы можете скопировать и вставить текст изalert
коробки в другое место, чтобы лучше оценить результат, или вы можете заменить последнюю строкуalert
наconsole.log
, но, поскольку это код-гольф,alert
он короче.Кроме того, он ничего не проверяет во входных данных. Он просто считает нераспознанные символы пробелами так же, как и в действительности
.
(на самом деле.
это также нераспознанный символ).источник
prompt()
параметра .delete r; delete s; delete q; delete p; delete t; delete i; delete d;
добавить префикс к коду, чтобы убедиться, что он не был получен.q.trim()?q+'\n':''
может бытьq.trim()&&q+'\n'
, спасая два. Кроме того,i<p.length
может быть простоp[i]
.Рубин,
208201189Очень веселый вызов! Вот альтернативное решение Ruby.
В качестве бонуса, вот реализация Ruby очень умного алгоритма «клеточного автомата» Виктора, в 162 символах:
Пример вывода:
источник
$/
для новой строки.C # - 588 символов - не так хорошо, как у Рэя 321!
Пример вывода:
Или более длинный, более сложный ...
Блестящая головоломка ... не так просто, как кажется ... ей понравилось!
источник
3
с там. Если вы говорите о первом, это часть склона.APL, 65 байт
⍉⌽↑⌽¨h↑¨'^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h←¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a←11|⎕d⍳⍞]
⍞
этот символ возвращает необработанный (не оцененный) ввод в виде массива символов.Решение в интерактивном режиме в сеансе APL:
источник
Рубин, 390 символов
Вот так, это было сложно.
В итоге мне пришлось добавить новую строку для каждого символа, используя переменную,
s
которая означала «пропустить следующий символ», которая была необходима для обработки^
и\
.Это выводит точно заданный пример вывода для всех тестовых случаев.
Диаграмма того, что означают переменные:
Я уверен, что мог бы сыграть в гольф намного больше, но мне нужно идти. Поправлюсь позже!
источник
.2.2.
и не могу понять, почему он не работает.Ява,
377407Редактировать: @Victor указал, что это должна быть законченная программа, поэтому я добавил несколько десятков символов, чтобы сделать ее компилируемой и запускаемой. Просто передайте «заказ на покупку» в качестве первого параметра при выполнении программы, например так:
java M ..3.4..6..4.3..
Я думаю, что по духу это похоже на другие ответы, в основном просто многократно пересекает «горный порядок» для каждой возможной высоты и строит горы от вершин вниз. Таким образом, мне нужно иметь дело только с четырьмя условиями, если не строить пик - либо с наклоном вверх / вниз, с уклоном вниз \, в стыке 'v', либо пусто ''. Я могу обнаружить это просто, посмотрев на три пробела по центру «выше» моей текущей позиции в моей нисходящей сборке.
Обратите внимание, что, как и в других материалах, я трактую все, кроме числа, как эквивалент «.» на входе, для краткости.
Гольф версия:
Форма, читаемая человеком (и без некоторых эквивалентных трансмогрификаций для достижения формы гольфа):
Наслаждаться.
Пример вывода:
источник
class X{public static void main(String[]z){
.Perl 6,
264 224 216 206 200 194124 байтаСпасибо @JoKing за показ /// решения. Это исправлено после исправления ошибки tr /// в Perl 6.
Мое оригинальное решение с субстратом:
Ungolfed:
Выход:
источник
s///
иtr///
. Я думаю, что последний может использоватьtr
вместо,s
но я не могу понять, чтобы перевести обратную косую черту. Может быть, первый тожеPerl,
254 218212Редактировать: на самом деле это исправление ошибки при работе с
..3..4...6...5....1
примером ProgrammerDan , но в процессе некоторые байты были отключены. И онлайн тест: https://ideone.com/P4XpMUисточник
C # -
321319Развернулся и прокомментировал:
Пример:
Я думаю, что он выводит дополнительный пробел перед каждой строкой.
источник
CJam,
128117112106104 байтаCJam немного моложе, чем этот вызов, поэтому этот ответ не конкурирует. Это был очень хороший вызов, хотя! Из всего, что я знаю о J и APL, я думаю, что представление в них будет впечатляюще коротким.
Вот тестовый пример, который, я думаю, содержит все возможные комбинации наклонов, пиков и впадин:
который дает
Проверьте это здесь.
Я добавлю объяснение для кода позже.
источник
Python,
297234218-63 байта благодаря Джо Кингу
-16 байтов
r=s.replace
вместо лямбдыПринимает участие от STDIN. Не упрощенный, упрощенный:
источник
s.replace
метод сам, но он не работает. Вы просто выполняете замену исходной строки, поскольку строки неизменныPowershell,
148145 байтЭто хороший вызов!
Менее гольф тестовый скрипт:
Выход:
источник
Пип
-l
, 100 байт(Язык новее, чем вопрос, но, вероятно, все равно не превзойдет представление APL. Хотя я надеюсь, что он станет намного короче.)
Принимает ввод через аргумент командной строки. Попробуйте онлайн!
источник