var QUESTION_ID=84050,OVERRIDE_USER=31343;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Ответы:
Befunge , 165
227байтНе так много пробелов, как раньше, но все еще есть пробелы. Принцип тот же, что и в предыдущем решении, но макет другой. На этот раз, чтобы проверить, равны ли оба числа 1, я просто беру их продукт и проверяю, будет ли результат больше 1.
Старое решение (227 байт)
Это может быть возможным для игры в гольф больше. Просто посмотрите на все эти пробелы!
Вот моя неудачная попытка объяснения в виде картинки MSPaint: Код течет в направлении стрелки.
источник
V ,
43, 40, 3836 байтовОдин из самых длинных V ответов, которые я когда-либо писал ...
Попробуйте онлайн!
Так как он содержит Unicode и непечатаемые символы, вот обратимый hexdump:
Эта задача о манипулировании текстом, поэтому идеально подходит для V! С другой стороны, V ужасен в условных выражениях и математике, поэтому различный вывод для (1, 1) действительно облажался ... :(
Объяснение:
Теперь у нас есть строки «Высота» с пробелами между ними.
Неконкурентная версия (31 байт):
Попробуйте онлайн!
Эта версия использует несколько функций, которые новее, чем эта задача, чтобы быть на 5 байт короче!
Второе объяснение:
вместо «Удалить строку и вставить ее n раз» будет заменено на
ÀÄ
«Повторить эту строку n раз». (-2 байта)который был "Заменить первый матч этого регулярного выражения; Отменить" был заменен на
Это просто "Поиск совпадений с этим регулярным выражением" (-1 байт).
И, наконец,
Ò
это просто простой синоним дляVr
, который «Заменить каждый символ в этой строке на« х »». (-2 байта)источник
3216-разрядный машинный код с прямым порядком байтов x86,575451 байтНа 3 байта меньше благодаря @ninjalj.
Тяжело переписал код и сумел сбрить еще 3 байта
В шестнадцатеричном
Ввод: BX = ширина, SI = высота, DI указывает на буфер, который получает результат в виде строки с нулевым символом в конце со строками, разделенными "\ n"
Разборка:
источник
Python 2,
757372 байтаВозвращает строку с условной обработкой для блока 1,1.
Спасибо Линн и Чепнер за два байта
источник
lambda x,y:('_'*x*2+'___\n'+
и т. д. сохраняет байт.x*'__'
вместо2*x*'_'
.<function <lambda> at 0x......>
. Как я могу проверить это?f=lambda x:x+1; print(f(9))
CJam, 34
Попробуйте онлайн
Объяснение:
источник
Рубин,
5956 байтАнонимная функция, возвращает многострочную строку. Попробуйте онлайн!
-3 байта благодаря заимствованию трюка у @ El'endiaStarman
источник
Java,
318312297294260258 байтСохранено 15 байтов благодаря Cliffroot !
Работает с аргументами командной строки.
Ungolfedв удобочитаемой форме:Да, все еще трудно понять, что происходит, даже когда программа не разграблена. Итак, пошаговое объяснение:
Первые два аргумента командной строки, которые мы будем использовать для получения измерений, могут использоваться в программе как
A[0]
иA[1]
(соответственно).b
число столбцов,B
число строк иC
переменная, выделенная для использования вfor
циклах.c
это часть Lego. Мы добавим к нему строки, а затем напечатаем его в конце.Если часть для печати имеет размер 1x1, то оба
b
(количество столбцов) иB
(количество строк) должны быть меньше 2. Поэтому мы просто устанавливаемc
единичное значение,o
а затем переходим к утверждению, котороеSystem.out.print
является частью, если это так.Здесь мы добавляем
(integerValueOfA[0] * 2) + 3
подчеркивания кc
. Это самый верхний ряд над всеми отверстиями.Это цикл, в котором мы строим фигуру по одной строке за раз. То, что происходит внутри, невозможно объяснить без примеров. Допустим, что кусок 4х4:
,
Здесь мы добавляем
(integerValueOfA[0] * 2) + 3
дефис к куску. Это строка в самом низу, под всеми отверстиями.Часть 4x4, которую я использовал для объяснения
for
цикла, в котором эта часть фактически создается, теперь выглядит так:И, наконец, мы печатаем кусок!
источник
C
переменную изfor
цикловint b=Byte.valueOf(A[0]),B=Byte.valueOf(A[1]),C
. Во всех ваших циклах for также кажется, что вы можете использоватьC-->0;
чеки, делает его 298, pastebin.com/uj42JueLfor
циклов для сохранения нескольких байтов - pastebin.com/dhNCpi6nif(b==1&B==1)
что позволит вам сэкономить более 20 байтовSystem.out.print('o');return;
вы можете установитьc='o'
и разместить логику для разных блоков в блоке else. затем наличие единого оператора печати и отсутствие возврата позволяют сохранить некоторые дополнительные байтыМинколанг 0,15 ,
585756 байтДа это правильно. Я играл в гольф
одиндва вонючих маленьких байта ...Попробуй это здесь!
объяснение
Хорошо, это два существенных переписывания объяснения для двух сохраненных байтов. Я не думаю, что смогу или буду играть в гольф что-то еще из этого. :П
источник
брейкфук, 391 байт
Я знаю, что это может быть в гольфе больше, но на данный момент я просто рад, что это работает. Я буду продолжать работать, чтобы играть в гольф.
Ввод должен быть представлен только двумя цифрами. Как и в,
(8, 2)
вы бы просто войти82
.Попробуйте онлайн!
Сломать:
Сначала поместите необходимые символы в ленту:
(newline)| o_-
Затем соберите данные в две ячейки и вычтите 48 из каждой (чтобы получить числовое значение, а не цифровой символ)
Далее, проверьте для особого случая
(1, 1)
(Обратите внимание, что только эта проверка составляет 109 байт кода). Как будто этоif
не было достаточно сложно сделать в мозге, у нас есть вложенноеif
:Ниже приведена структура для проверки, является ли ячейка х нулевой или ненулевой:
Однако во вложенном
if
нам нужно иметь 4 временных ячейки.Теперь перейдем к фактической печати символов:
Напечатайте верхнюю строку и новую строку:
Выведите a
|
, рядo
s, еще один|
и новую строку , количество раз равное высоте:И выведите нижнюю строку (здесь не требуется перевод строки):
источник
Сетчатка , 52 байта
Число байтов предполагает кодировку ISO 8859-1. Обратите внимание, что шестая строка должна содержать один пробел.
Попробуйте онлайн!
Ввод выполняется в одинарном
1
формате с использованием в качестве унарной цифры пробела в качестве разделителя и высоты, за которой следует ширина.объяснение
Все этапы в этой программе являются голыми заменами, иногда с регулярным модификатором регулярных выражений (без повторений или циклов, без других типов этапов). Он даже не использует специфичные для Retina функции замещения, кроме обычного
¶
псевдонима для перевода строки.Цель этого состоит в том, чтобы «умножить» два входа. Наша цель - создать
h+2
строки сw
1
каждой из s (h+2
чтобы мы могли повернуть верх и низ в_
и-
позже).\G
Якорь требует матча , чтобы начать , где последний остановился. То есть, если нам не удастся сопоставить символ в строке, другие символы тоже не будут совпадать. Мы используем это для сопоставления только1
s inh
, но не in,w
потому что регулярное выражение не позволяет найти пространство, разделяющее их. Тем не менее, мы также делаем1
необязательные, так что мы получаем дополнительное пустое совпадение в концеh
. Этоh+1
совпадает. Каждый из них заменяется на весь input ($_
), за которым следует перевод строки.w
сам остается нетронутым, что дает намh+2
nd копию. Скажем, ввод был11 1111
, тогда мы получили:Это очень хорошо. У нас есть кое-что еще, но
h+2
копииw
есть.Обратите внимание, что в конце первой строки есть пробел. Это удаляет эти префиксы из строк, так что у нас есть только
w
s после.Ну, это не очень работает с форматированием SE ... первая строка пуста, а вторая строка должна содержать один пробел. Это вставляет пробелы в каждую возможную позицию, то есть в начале и конце каждой строки и между каждой парой
1
s:Мы превратим это в
o
с позжеЭто просто оборачивает каждую строку в паре
|
:Теперь мы берем верх и низ:
Время
\G
снова сиять. Это соответствует каждому символу в первой строке и превращает его в_
.То же самое, но благодаря
r
модификатору (режим справа налево) он сопоставляет символы в последней строке и превращает их в-
. Итак, теперь у нас есть:Теперь осталось сделать только две вещи: превратить их
1
вo
s, а если вводить,1 1
тоo
вместо этого превратить всю вещь в . Мы можем справиться с обоими с одной стадией:s
является обычным однострочным режимом (т. е..
соответствует строковым переводам). Если ввод был1 1
результатом, минимальный размер будет 17 символов, поэтому мы можем сопоставить его с^.{17}$
и заменить егоo
. В противном случае, если это не удастся, мы просто сопоставим все1
s и заменим их наo
.источник
Джольф, 36 байт
Джольф, 24 байта, неконкурентный
Ну, я сделал лучшую встроенную коробку.
Джольф,
3837 байтПростые вещи, правда. Сохраните байт, отметив, что
!Ζ
(математическая дзета, или отклонение от нормы) равно только 0, когда оба аргумента равны 1, и неверно в противном случае (для нашего случая).источник
05AB1E , 33 байта
Код:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
JavaScript (ES6),
8986 байтРедактировать: 3 байта сохранены благодаря @Shaggy.
источник
repeat
.Python 2, 71 байт
источник
Befunge, 144 байта
Я бы предпочел прокомментировать этот пост, но у меня пока нет репутации, поэтому я выкладываю собственный ответ, который работает аналогичным образом, но немного более компактен
Вы можете проверить код здесь
источник
Reng v.4, 82 байта, неконкурентный
Я выдвинул исправление ошибки, которое исправляет перезаписываемые функции (пожалуйста, не спрашивайте; мои вещи часто посещаются)
Принимает ввод как числа с пробелами, как
4 2
. Попробуй это здесь!источник
I pushed a bug fix that fixes functions being overwritten by themselves
... Ну, это интересная ошибкаPowerShell v2 +, 76 байт
Принимает ввод, затем проверяет
if
утверждение. Поскольку ненулевые значения truthy в PowerShell, что, по меньшей мере , один из ,$x
и$y
не равны1
, тоif
будет верно.Внутри
if
есть ряд умножений строк. Сначала мы строим нашу строку подчеркивания, сохраняя$z
для дальнейшего. Это размещается на конвейере. Затем мы строим нашу строку сторон и колышков (с умноженными колышками$x
), делаем$y
время и объединяем это с нашими штрихами$z
. Эта строка затем помещается на конвейер, и мыexit
. Трубопровод сбрасывается и печать неявна. Обратите внимание, что мы получаем новую строку между подчеркиванием и первой строкой колышков бесплатно, так как по умолчанию.ToString()
для вывода массива используется разделитель`n
(и мы выводим массив строк).Если значение
if
равно false, мы находимся в особом1 1
случае, поэтому мы просто помещаем"o"
его в конвейер и завершаем работу с повторной печатью.Примеры
источник
Баш,
186,163,156,148,131, 130 байтПримечание: если вам действительно нужно, чтобы в lego были дефисы для последней строки, измените последний printf на
и добавить два байта.
источник
(($x+$y==2))&&echo o||{ printf _%.0s $(seq -1 $x);echo;for((i=0;i<$y;i++));do printf \|;for((j=0;j<$x;j++));do printf o;done;echo \|;done;printf =%.0s $(seq -1 $x);echo;}
()
, вам не нужно ключевое словоfunction
для объявления функции. Существует альтернативныйfor
синтаксис с помощью фигурных скобок, например:for((j=$1;j--;));{ printf o;}
. Как показано в предыдущем примере, вы можете сохранить некоторые символы, уменьшив их и протестировав воfor
втором выражении. Вы можете использовать backticks вместо$(cmd)
.(($x+$y==2))&&echo o||{ printf _%.0s `seq -1 $x`;echo;for((i=$y;i--;)){ printf \|;for((j=$x;j--;)){ printf o;};echo \|;};printf =%.0s `seq -1 $x`;echo;}
(($something))
на «((something))
повсеместно». ($1
все еще нужен знак доллара, чтобы избавиться от него буквально1
.)Perl 5 -
8477 байт84 байта
77 байт. С некоторой помощью от Dom Hastings
источник
warn
в программе гольфа, но потом я понял, что вы используете ее, потому что она корочеprint
. Приятно!-E
вместо-e
включения всех расширений. Я новичок в этом месте, поэтому я не знаю точно, где указано, как считать баллы, хотя.warn
), вам не нужны кавычки вокруг"o"
(вы можете используйте голое слово для другого -2), если вы встраиваете вычисления,$w
вы должны сохранить еще один байт ('_'x($w=3+2*$x)
против$w=3+2*$x;
...'_'x$w
) и, наконец, вы можете изменить\n
буквальный перевод строки. Надеюсь, это поможет!C
202191 байтСпасибо @Lince Assassino за сохранение 11 байтов!
Ungolfed:
источник
p(char*A){printf(A);}
#define p printf
Корица, 32 байта
Неконкурирующий. Попробуйте онлайн. Ввод должен быть точно в форме
[width,height]
без пробелов между запятой и высотой.объяснение
Строка распаковывается к этому:
Первый
l
этап отображается[1,1]
наo
(особый случай), а все остальное в строкуОбратный удар затем сигнализирует о начале второго этапа; вместо вывода этой строки CG отсекает обратную черту и выполняет строку. Затем
p
режим повторяет все символы внутри первого параметра (ширины) тильды, а затем впоследствии повторяет символы внутри второго параметра (высоты) знаков процента. Так что[4,2]
это превращается в это:а затем в:
источник
Пакет,
172170 байтРедактировать: 2 байта сохранены благодаря
@ CᴏɴᴏʀO'Bʀɪᴇɴ@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.Я могу сохранить 7 байтов, если предположить, что отложенное расширение включено.
источник
%%o%%
вместо%o%
?%o%
будет заменяться исходным значениемo
каждого времени, так что оноo
будет всегда равным" o"
.%%o%%
проходит в качестве аргумента дляcall
of%o%
, который затем использует текущее значениеo
.do set o=%o% o
?%o%
раскрывается доfor
разбора цикла, поэтому цикл читает,for /l %i in (1,1,8) do call set o= o
что явно бессмысленно.do set o=%%o%% o
тогда (-5)?Vim, 56 нажатий клавиш
Это похоже на задачу редактирования текста, поэтому Vim - очевидный выбор! Я беру ввод как текстовый файл с двумя целыми числами, разделенными пробелом, и выводит ответ в тот же файл. Кроме того, я ненавижу тебя за особый случай 1x1 ... Во всяком случае:
и если бы не было для особого случая, 35 нажатий клавиш
Расстройство для здравомыслящих людей:
Удалить числа из буфера в @a и @b (пробел сохраняется)
Замените пробел на «o» и, если это особый случай, сохраните и выйдите
Очистите линию и напишите края блока lego
Вставьте @a много «o», чтобы получить законченную среднюю часть
Вырви линию и сделай @b лишних копий (слишком много)
Мы находимся на вершине буфера, замените лишнюю строку подчеркиванием
Перейти к нижней части буфера, вытянуть линию, которую мы выдернули ранее
Заменить строку тире, сохранить и выйти
источник
Pyth, 38 байт
Тестирование.
источник
Haskell, 76 байт
Пример использования:
3 # 2
выдает многострочную строку для кирпича 3 на 2.Ungolfed:
источник
unlines
, но это не так.Groovy,
107,98,70, 64Тестирование:
источник
Befunge,
114113108101 байтЯ знаю, что уже есть ряд решений Befunge, но я был вполне уверен, что их можно улучшить, применив другой подход к компоновке кода. Я подозреваю, что этот ответ может быть продолжен и дальше, но он уже немного меньше, чем любая из предыдущих записей.
Попробуйте онлайн!
источник
:<|
нужна эта строка ?APL, 46 байт
Охрана:
⍵≡1 1:'o'
для особого случая. В противном случае'o '⍴⍨1 2×⌽⍵
строит контент. А остальное только бокс.источник
C #, 198 байт
быстро и грязно
Мне пришлось написать функцию, которая умножает строки
безволосый (для предложений)
источник
string s(string m,int u){return string.Join("",new int[u].Select(n => m));}
- .ToArray () является избыточным, и строка [] может также быть int []. Но вместо string.Join вы можете использовать агрегат:string s(string m, int u){return new int[u].Aggregate("",(t,i)=>t+m);}
void f(int x,int y){Func<char,int,string>s=(c,i)=>new string(c,i);int l=x*2+3;Console.Write((y&x)==1?"o":s('_',l)+"\n"+s('y',y).Replace("y","| "+s('x', x)+"|\n").Replace("x","o ")+s('-',l));}
Октава,
979586 байтЯ использовал метод @atlasologist в Python для проверки
(1, 1)
:(...,'o')[x<2>y]
Благодаря @Luis Mendo для экономии 7 байт:
a=ones(1,w*2+3)*'_'
доa=~(1:w*2+3)+95
иa./a*'-'
в~a+45
Спасибо @pajonk за сохранение 2 байтов:
f=
источник
a./a*'-'
вы можете использовать~~a*'-'
? Или даже~a+45
?f=
)