Никто не совсем уверен, что смайлик >:U
должен представлять, но многие ученые считают, что это похоже на злую утку . Давайте предположим, что это так.
задача
Учитывая целое число n от 0 до 3 включительно, выведите или верните
quack
если n = 0,
>:U
если n = 1,
U U
> : U U
> U U
> : U U
UUU
если n = 2, или
>:U >:U
>:U >:U >:U
>:U >:U >:U >:U
>:U >:U >:U
>:U >:U >:U
>:U >:U >:U
>:U >:U >:U >:U
>:U >:U >:U
>:U>:U>:U
если n = 3.
Вы можете предположить, что ввод всегда будет действительным. В выводе не должно быть начальных пробелов, но любое количество конечных пробелов вполне подойдет. Утки (за возможным исключением @cobaltduck) не допускают лазеек. Самый короткий код в байтах побеждает.
Ответы:
CJam,
1089085 байтОбратите внимание, что некоторые символы непечатаемы. Попробуйте онлайн!
Фон
Первые два выхода несжимаемы в CJam.
Сжать последний вывод просто. Удалив все переводы строк, мы можем разделить результирующую строку при появлении
>:U
и вычислить длину каждой результирующей строки пробелов.Это приводит к массиву
который мы можем эффективно хранить, преобразовав его из базы 22 в базу 269, получив цифры
Поскольку каждая цифра меньше 256 , мы можем сохранить ее как один байт.
Наконец, сжатие третьего вывода становится проще, если мы транспонируем строки и столбцы:
Считая еще раз пробелы между непробельными символами, мы получаем массив
который становится
при транскодировании с базы 22 на базу 269.
Как это устроено
источник
:D
между двумя строками.Java,
303286 байтСохранено 17 байтов благодаря @VoteToClose!
На самом деле это не самое короткое время, я просто подумал, что было бы интересно попробовать на Java.
Создает список строковых переменных, представляющих общие строки, затем создает массив всех выходных данных, а затем печатает правую.
Ungolfed:
Это мой первый ответ на этом сайте, поэтому, пожалуйста, скажите мне, если я сделал что-то не так.
источник
D+A
иC+B
появляются достаточно часто , чтобы быть golfed дальше в 2 -х новых переменных. У меня также есть малейшее ощущение, что использование массива с циклом for может помочь, но я еще не понял, как это сделать ...05AB1E ,
162159157 байтКод
Черт возьми, слишком долго, но это по крайней мере что-то
Попробуйте онлайн!
объяснение
Существует первая часть кода
">:U"V
, которая устанавливаетY
эту строку. После этого мы просто проверяем, равен ли вход 3. Это делается наI3Qi
части. Если равно, мы печатаем гигантскую сороку:N = 3
Сначала начинается с
ð16×
16 символов пробела. После этого появляется номер7166b
. Это покрывает">:U "
часть, с небольшой помощью от Retina :). Я использовал этот скрипт для преобразования строки в двоичное число. После этого мы перейдем к1ð:0Y:
части, которая заменяет каждый1
с пробелом и каждый0
сY
, который был установлен в>:U
. После этого мыD
дублируем эту строку, сохраняем ее вX
использованииU
иJ
добавляем в стек. Мы используем это,
, печатая полную строку с новой строкой. Все остальные после этого основаны на одном и том же принципе. Оператор if заканчивается на втором}
.Полное преобразование можно найти здесь .
N = 2
Теперь мы проверим, равен ли вход 2. Это делается на
¹2Qi
части. После этого, если он равен, мы нажимаем пробел 4 раза, используяð4×
. После этого мы нажимаем на" U U"
строку и храним ее, используя©
(идея явно украдена у Jelly: p). Мы сноваJ
распаковываем стопку и печатаем ее с новой строки. После этого мы нажимаем"> :"
строку, извлекаем" U U"
использование®
,J
кладем в стек иD
дублируем эту строку и печатаем оба в одной строке.Короткий тест, что это будет делать
" > "?®,
:?После печати указанной выше строки мы получаем дубликат второй строки лица и печатаем его (так как он совпадает со второй строкой).
Последняя часть, охватываемая этим делом:
N = 1
Это легче объяснить:
N = 0
источник
Витси ,
172171159 байтовО Боже. Если я хотел что-то, чтобы показать силу методов, я получил это.
Попробуйте онлайн!
Как это работает, вызывая различные методы внутри себя. Объяснение ниже:
Этот код смешной. Это многословная форма:
источник
JavaScript (ES6), 163 байта
объяснение
Использует мое сжатие с JavaScript: кодирование длины строки. Цифры
1
для9
сопоставления с таким количеством пробелов,0
карты с лицом сердитой утки и любой другой персонаж остаются прежними.источник
Japt
1161051029996 байтСодержит непечатный. Проверьте это онлайн!
Как это устроено
Первые две строки вообще не сжимаются. Третий сжимается просто путем замены каждой серии пробелов его длиной, а затем
" U3U"
на"z"
. Последний является более сложным:>:U
на1
.191\n
на4
. (4
не используется где-либо еще в строке.)10
-255
или0A
-FF
) с символом с этим символом.Длина получаемой строки составляет всего
2119 байт, но распаковка занимает еще3129.После распаковки строк мы просто берем элемент в позиции
U
, вход. (Массив упорядочен,[0,3,2,1]
потому что есть ошибка, из-за которой он считается от конца массива, а не от начала.)источник
MATL ,
283182 байта101 байт сохранен благодаря @Adnan!
При этом используются десятичные числа для кодирования индексов
0
...3
до четырех символов для случаев 2 и 3. Десятичные числа могут быть сжаты с использованием кодировки base-64, но кряк!Для случая 3 используется очень хороший трюк, предложенный @Adnan: определить двоичные последовательности для кодирования каждой строки, где
0
и1
соответствуют пробелу и>:U
соответственно.Попробуйте онлайн!
источник
1
пробелы и0
с>:U
строки. Я не знаю, поможет ли это.Корица, 76 байт
Не конкурирует, поскольку Cinnamon Gum была создана после этого испытания.
Попробуйте онлайн.
объяснение
Первый байт
l
определяет режим: в этом случае он говорит Cinnamon Gum перейти в режим таблицы поиска. Cinnamon Gum затем распаковывает оставшуюся часть строки (которая была сжатаzopfli --deflate
) в это:Затем он делится на
;
, помещает каждую пару ключ-значение (с&
разделителем) в словарь и выводитdictionary[input]
.источник
JavaScript ES6,
232223203188 байтСохранено
2944 байта благодаря ETHproductions!Проверьте это!
Показать фрагмент кода
источник
1
и0
с триальным числом?r+g+g+g+r
кg+g+g+r
и корректировке строки соответственно.GML, 265 байт
Порт @ kittycat3141 - отличный ответ, с предложением поиграть в него еще с двумя новыми переменными (которые я назвал G и H) от @VoteToClose. Мне также удалось сократить его с помощью относительно свободного синтаксиса GML.
источник