Соревнование
Даны две строки, каждая длиной до 30, состоящая из печатных символов ASCII (коды ), поместите их на весы с наименьшим количеством байтов кода! Это состоит из следующих шагов:
- Рассчитайте и сравните вес струн
- Выберите соответственно наклоненную шкалу ASCII-art
- Поместите две строки на весы
Строки могут быть переданы как массив, два аргумента или любой другой разумный метод.
Вес строки определяется как сумма весов символов этой строки, где:
- Пробелы имеют вес 0 (
)
- Строчные буквы имеют вес 2 (
abcdefghijklmnopqrstuvwxyz
) - Прописные буквы имеют вес 4 (
ABCDEFGHIJKLMNOPQRSTUVWXYZ
) - Все остальные символы имеют вес 3 (
!"#$%&'()*+,-./0123456789:;<=>?@[\]^_`{|}~
)
Весы выглядят так:
, _ | _- * / \ | - * / \ _- * | / \ _- * | / \ / \ | * ------ * / \ | / \ | / \ | * ------ * | ______ | ______
_. / \ * -_ | / \ * - | / \ | * -_ / \ | * -_ * ------ * | / \ | / \ | / \ | / \ | * ------ * ______ | ______
, | ______ | ______ / \ | / \ / \ | / \ / \ | / \ / \ | / \ * ------ * | * ------ * | | ______ | ______
Если первая строка тяжелее, используйте первый рисунок в качестве основы для вывода; если вторая строка тяжелее, используйте второй рисунок; если строки имеют одинаковый вес, используйте третий. Конечный пробел разрешен.
Я буду использовать сегмент третьего рисунка в качестве основы для всех следующих примеров.
Первая строка должна быть размещена на левой панели, а вторая строка на правой панели.
Поместите строку на сковороде, помещая его некосмические символы в области 6х5 непосредственно над черточками, как отмечено на #
с здесь (Вы можете закончить перезапись части шкалы баланса - это хорошо):
###### _ ###### ###### ###### / ###### \ * ------ *
Все эти символы должны быть "урегулированы", т.е. либо над -
символом, либо другим символом из строки:
НЕПРАВИЛЬНО НЕПРАВИЛЬНО ПРАВИЛЬНО ____ ____ ____ f / \ / \ / \ л \ / \ / \ / \ / hov \ / s \ / oating \ / eri ng \ / ettled \ * ------ * * ------ * * ------ *
Кроме того, весь стек должен быть как можно более плоским, а это означает, что из шести столбцов шириной в 1 высота самого высокого и высота самого короткого не должны отличаться более чем на 1:
НЕПРАВИЛЬНО НЕПРАВИЛЬНО ПРАВИЛЬНО [самое высокое: 5] [самое высокое: 4] [самое высокое: 5] [самое высокое: 2] [самое короткое: 0] [самое короткое: 2] [самое короткое: 4] [самое короткое: 2] 5__5_ ____ 5_5__ ____ 45445 & / \ 445454 / \ 45445 $% & $ @ 445454 / \ / 45445 &% @% $ & 445454% & $ @% & / 45445 \ / & $ @ $ &% \ / 445454 \ / $ @ $% $$ \ * ------ * * ------ * * ------ * * ------ *
Точный порядок / расположение символов не имеет значения. Ниже приведены все допустимые меры для строки «Взвесьте свои слова!»:
____ ____ ____ ____ / \ / \ / \ / \ DS! \ / owd oe \ u! Wd \ ourwor Wihuos yoiwgr eghioo / Weighy \ / egyrr! \ / Wrhd! S \ / rrsuwy \ * ------ * * ------ * * ------ * * ------ *
Контрольные примеры
INPUT: «CODE GOLF», «проблемы кодирования» Вес: 32, 32 ПРИМЕР ВЫХОДА: , | ______ | ______ / \ | / \ / \ | Нге \ s / OO \ | Шаль / CFGLED \ | / Кодирования \ * ------ * | * ------ * | | ______ | ______
ВВОД: "", "$" ВЕСА: 0, 3 ПРИМЕР ВЫХОДА: _. / \ * -_ | / \ * - | / \ | * -_ / \ | * -_ * ------ * | / \ | / \ | / \ | / $ \ | * ------ * ______ | ______
ВХОД: «ВЫ ЗНАЕТЕ, ЧТО ОНИ СКАЗЫВАЮТ!», «Существует_always_a_relevant_xkcd» Вес: 75, 65 ПРИМЕР ВЫХОДА: , tr_a_s | _hekx_y | - * elcdta _- * | revanw _- * | / E's_al \ T / \ | * ------ * AUYOHY | A! HWYK | / OTSMEW \ | * ------ * | ______ | ______
+1
. Во-первых: если пробелы ничего не «весят» и не включаются в произведение искусства, тогда зачем вообще их включать? Это просто ненужные накладные расходы, чтобы сначала отфильтровать их. Во-вторых: это похоже на вызов «2-в-1» / хамелеон для меня - Задача 1: Определить, какая нить «тяжелее», Задача 2: Сгенерировать ASCII-искусство.Ответы:
Древесный уголь , 110 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод как массив из двух строк. Объяснение:
Удалить пробелы из обеих строк.
Предположим баланс весов.
Зациклите обе строки.
Вычтите разницу бега из веса струны.
Распечатайте основание весов.
Предположим, что обе кастрюли находятся на расстоянии 3 от земли.
Если вес не сбалансирован ...
... рассчитать высоту левой кастрюли ...
... нарисовать баланс, наклонившись вправо ...
... и подумайте, была ли левая кастрюля тяжелее.
В противном случае нарисуйте баланс уровня.
Перейти к первой шкале масштаба.
Цикл по входам.
Нарисуйте масштабную кастрюлю.
Разрежьте входные данные на подстроки длиной 6 и напечатайте их вверх дном, чтобы они заполняли чашу вверх.
Прыгайте на вторую шкалу весов.
источник
Python 2 ,
11011071855837 байт-216 байт со сжатием строки
-18 байт за счет уменьшения количества повторений
Попробуйте онлайн!
Запустить как
A(string_one, string_two
.w
вычисляет вес строки рекурсивно.t
это сжатый и чересстрочный текст всех шести возможных масштабов, который сжимается очень хорошо.p
берет строку (с удаленными пробелами), вес строки и сторону баланса, на которой находится строка, и создает блок символов 5x6.A
берет строки, и строит их блоки сp
. Гигантская строка внизу представляет собой три строки формата, чересстрочные и сжатые.источник
JavaScript (ES6),
340337 байтПринимает ввод как массив из 2 массивов символов. Рисует вывод символа за символом.
Попробуйте онлайн!
Как?
Мы определяем первую вспомогательную функцию, которая удаляет пробелы из входной строкиS[ я ] и возвращает свой вес:
NB: потому что мы повторно используемя чтобы вычислить вес, он выключен одним для S[ 1 ] ,
Мы вычисляемs , который равен 0 если S[ 0 ] тяжелее, 2 если S[ 1 ] тяжелее, или 1 если обе строки имеют одинаковый вес:
Теперь мы вызываем вторую вспомогательную функцию для вывода вывода:
Где
INDEX
рассчитывается следующим образом:источник
Java 10,
1043993988983 байта-5 байт благодаря @ceilingcat .
Входными данными являются две строки, результатом которых будет символьная матрица.
Попробуйте онлайн.
Объяснение:
источник