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>
Respostas:
Anterior , 165
227bytesNão há tanto espaço em branco como antes, mas ainda existem lacunas. O princípio é o mesmo da solução anterior, mas o layout é diferente. Desta vez, para verificar se os dois números são 1, estou apenas pegando o produto e vendo se o resultado é maior que 1.
Solução antiga (227 bytes)
Pode ser possível jogar mais. Basta olhar para todo esse espaço em branco!
Aqui está minha pobre tentativa de explicação no formulário de imagem do MSPaint: O código flui na direção da seta.
fonte
V ,
43, 40, 3836 bytesUma das respostas V mais longas que eu já escrevi ...
Experimente online!
Como ele contém caracteres unicode e não imprimíveis, eis um hexdump reversível:
Esse desafio é manipular o texto, perfeito para o V! Por outro lado, V é terrível em condicionais e matemática, então a saída diferente para (1, 1) realmente estragou tudo ... :(
Explicação:
Agora temos linhas 'O' de altura com espaços entre elas.
Versão não concorrente (31 bytes):
Experimente online!
Esta versão usa vários recursos que são mais novos, então esse desafio é 5 bytes mais curto!
Segunda explicação:
que é "Excluir linha e cole-a n vezes" é substituído por
ÀÄ
"Repita esta linha n vezes". (-2 bytes)que foi "Substitua a primeira correspondência deste regex; Desfazer" foi substituído por
Que é apenas "Procurar uma correspondência com esta expressão regular" (-1 byte)
E, por último,
Ò
é apenas um sinônimo simples paraVr
, que ambos "Substitua todos os caracteres nesta linha por 'x'". (-2 bytes)fonte
32código de máquina x86 little-endian de 16 bits,575451 bytes3 bytes a menos graças ao @ninjalj.
Reescreveu fortemente o código e conseguiu remover outros 3 bytes
Em hexadecimal
Entrada: BX = largura, SI = altura, DI aponta para o buffer que recebe o resultado como uma sequência terminada em NULL com linhas separadas por "\ n"
Desmontagem:
fonte
Python 2,
757372 bytesRetorna uma string, com uma condição para manipular o bloco 1,1.
Obrigado a Lynn e Chepner por dois bytes
fonte
lambda x,y:('_'*x*2+'___\n'+
etc. salva um byte.x*'__'
vez de2*x*'_'
.<function <lambda> at 0x......>
. Como posso testar isso?f=lambda x:x+1; print(f(9))
CJam, 34
Experimente online
Explicação:
fonte
Ruby,
5956 bytesFunção anônima, retorna uma sequência de linhas múltiplas. Experimente online!
-3 bytes graças a um truque emprestado de @ El'endiaStarman
fonte
Java,
318312297294260258 bytesEconomizou 15 bytes graças ao cliffroot !
Funciona com argumentos de linha de comando.
UngolfedDe uma forma legível por humanos:Sim, ainda é difícil entender o que está acontecendo, mesmo quando o programa está sendo destruído. Então, aqui vai uma explicação passo a passo:
Os dois primeiros argumentos da linha de comando - que usaremos para obter dimensões - podem ser usados no programa como
A[0]
eA[1]
(respectivamente).b
é o número de colunas,B
é o número de linhas eC
é uma variável dedicada para uso emfor
loops.c
é a peça de Lego. Vamos anexar linhas a ele e depois imprimi-lo no final.Se a peça a ser impressa for 1x1, ambas
b
(número de colunas) eB
(número de linhas) devem ser menores que 2. Portanto, definimosc
como uma únicao
e, em seguida, pularemos para a declaração queSystem.out.print
é a peça, se for o caso.Aqui, anexamos
(integerValueOfA[0] * 2) + 3
sublinhados ac
. Esta é a linha superior, acima de todos os orifícios.Este é o loop em que construímos a peça uma linha por vez. O que está acontecendo lá dentro é impossível de explicar sem exemplos. Digamos que a peça seja 4x4:
.
Aqui, anexamos
(integerValueOfA[0] * 2) + 3
hífens à peça. Esta é a linha na parte inferior, abaixo de todos os buracos.A peça 4x4 que eu usei para explicar o
for
loop em que a peça é realmente construída agora fica assim:E, finalmente, imprimimos a peça!
fonte
C
variável dosfor
loopsint b=Byte.valueOf(A[0]),B=Byte.valueOf(A[1]),C
. Em todos os seus loops também parece que você pode usarC-->0;
cheques, torna 298, pastebin.com/uj42JueLfor
laços para alguns bytes salvos - pastebin.com/dhNCpi6nif(b==1&B==1)
que lhe permite poupar mais de 20 bytesSystem.out.print('o');return;
, você pode definirc='o'
e colocar a lógica para diferentes tijolos no outro bloco. em seguida, ter declaração de impressão única e sem retorno permitem salvar alguns bytes adicionaisMinkolang 0.15 ,
585756 bytesSim está certo. I golfed off
umdois stinkin pequenos bytes ...Experimente aqui!
Explicação
Ok, são duas reescritas significativas da explicação para dois bytes salvos. Eu não acho que posso ou vou jogar algo mais fora deste. : P
fonte
brainfuck, 391 bytes
Eu sei que isso pode ser mais desvalorizado, mas neste momento estou feliz que funcione. Continuarei a trabalhar para melhorar.
A entrada precisa ser fornecida com apenas dois dígitos. Como fazer
(8, 2)
, basta entrar82
.Experimente online!
Demolir:
Primeiro, coloque os caracteres necessários na fita:
(newline)| o_-
Em seguida, colete a entrada em duas células e subtraia 48 de cada uma (para obter o valor numérico e não o caractere numérico)
Em seguida, verifique o caso especial de
(1, 1)
(Observe que apenas essa verificação representa 109 bytes do código). Como seif
s não fossem difíceis o suficiente para fazer no cérebro, temos um aninhadoif
:A seguir está a estrutura para verificar se uma célula x é zero ou diferente de zero:
No entanto, em um aninhado
if
, precisamos ter 4 células temporárias.Agora chegamos à impressão real de caracteres:
Imprima a barra superior e uma nova linha:
Imprima a
|
, uma linha deo
, outra|
e uma nova linha várias vezes igual à altura:E imprima a barra inferior (nenhuma nova linha é necessária aqui):
fonte
Retina , 52 bytes
A contagem de bytes assume a codificação ISO 8859-1. Observe que a sexta linha deve conter um único espaço.
Experimente online!
A entrada é unária, usando
1
como dígito unário, o espaço como separador e a altura seguidos pela largura.Explicação
Todos os estágios deste programa são substituições simples, ocasionalmente com um modificador regular de regex (sem repetição ou loops, sem outros tipos de estágios). Ele nem usa recursos de substituição específicos da Retina, além do
¶
alias usual para feeds de linha.O objetivo disso é "multiplicar" as duas entradas. Nosso objetivo é criar
h+2
linhas comw
1
s cada (h+2
para que possamos transformar a parte superior e inferior em_
e-
mais tarde). A\G
âncora requer que a partida comece de onde a última parou. Ou seja, se alguma vez falharmos em corresponder a um caractere na string, outros caracteres também não corresponderão. Usamos isso para corresponder apenas aos1
sh
, mas nãow
porque o regex não permite que o espaço que os separa seja correspondido. No entanto, também fazemos o1
opcional, para que possamos obter uma correspondência vazia adicional no final deh
. Isso éh+1
correspondências. Cada um desses é substituído por toda a entrada ($_
) seguida por um avanço de linha.w
permanece intocado, o que nos dá ah+2
nd cópia. Digamos que a entrada foi11 1111
, então agora temos:Isso é muito bom. Temos algumas coisas extras, mas as
h+2
cópiasw
estão lá.Observe que há um espaço no final da primeira linha. Isso remove esses prefixos das linhas para que só tenhamos os
w
s depois.Ah, bem, isso realmente não funciona com a formatação do SE ... a primeira linha está vazia e a segunda linha deve conter um único espaço. Isso insere espaços em todas as posições possíveis, ou seja, no início e no final de cada linha e entre cada par de
1
s:Vamos transformá-los em
o
s mais tardeIsso simplesmente envolve todas as linhas em um par de
|
:Agora cuidamos da parte superior e inferior:
Hora de
\G
brilhar novamente. Isso corresponde a cada caractere na primeira linha e o transforma em um_
.A mesma coisa, mas devido ao
r
modificador (modo da direita para a esquerda), isso corresponde aos caracteres na última linha e os transforma em-
. Então agora temos:Há apenas duas coisas a fazer agora: transformá-las
1
emo
s e, se a entrada foi,1 1
então, transformar a coisa toda emo
vez disso. Podemos lidar com ambos com um único estágio:s
é o modo de linha única regular (ou seja, faz.
corresponder os feeds de linha). Se a entrada foi1 1
o resultado, terá o tamanho mínimo de 17 caracteres para que possamos correspondê-la^.{17}$
e substituí-la poro
. Caso contrário, se isso falhar, apenas corresponderemos a todos os se1
substituiremos por eleso
.fonte
Jolf, 36 bytes
Jolf, 24 bytes, não-competitivo
Bem, eu fiz uma caixa melhor embutida.
Jolf,
3837 bytesCoisas simples, realmente. Salvou um byte ao observar que
!Ζ
(zeta matemática ou desvio de posição) é apenas 0 quando ambos os argumentos são 1 e, caso contrário, é falsey (no nosso caso).fonte
05AB1E , 33 bytes
Código:
Explicação:
Usa a codificação CP-1252 . Experimente online! .
fonte
JavaScript (ES6),
8986 bytesEditar: salvou 3 bytes graças a @Shaggy.
fonte
repeat
.Python 2, 71 bytes
fonte
Befunge, 144 bytes
Eu preferiria comentar este post, mas ainda não tenho reputação, por isso estou colocando uma resposta própria, que funciona de maneira semelhante, mas é um pouco mais compacta
você pode testar o código aqui
fonte
Reng v.4, 82 bytes, não-competitivo
Apertei uma correção de bug que corrige funções sendo substituídas por elas mesmas (por favor, não pergunte; minhas coisas estão assombradas)
Recebe entrada como números unidos por espaço, como
4 2
. Experimente aqui!fonte
I pushed a bug fix that fixes functions being overwritten by themselves
... Bem, isso é um bug interessante terPowerShell v2 +, 76 bytes
Recebe entrada e depois verifica uma
if
declaração. Como valores diferentes de zero são verdadeiros no PowerShell, desde que pelo menos um deles$x
e$y
não seja igual a1
,if
isso será verdadeiro.Dentro do
if
, há uma série de multiplicações de strings. Primeiro, construímos nossa série de sublinhados, economizando$z
para mais tarde. Isso é colocado no pipeline. Em seguida, construímos nossa série de lados e pinos (com os pinos multiplicados por$x
),$y
tempos concluídos e concatenamos isso com nossos$z
tempos de traços . Essa string é então colocada no pipeline e nósexit
. O pipeline está nivelado e a impressão está implícita. Observe que obtemos a nova linha entre os sublinhados e a primeira linha de pegs gratuitamente, uma vez que o.ToString()
separador padrão para a saída da matriz é`n
(e estamos produzindo uma matriz de strings).Se
if
for falso, estamos no1 1
caso especial , apenas colocamos"o"
no pipeline e saímos , com a impressão novamente implícita.Exemplos
fonte
Bash,
186,163,156,148,131, 130 bytesNota: Se você realmente precisa que o lego tenha hífens para a última linha, altere a última impressãof para
e adicione dois bytes.
fonte
(($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;}
()
, não precisará da palavrafunction
- chave para declarar uma função. Há uma alternativafor
sintaxe utilizando cintas, por exemplo:for((j=$1;j--;));{ printf o;}
. Como mostrado no exemplo anterior, você pode salvar alguns caracteres decrementando e testando nafor
segunda expressão. Você pode usar backticks em vez de$(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))
para((something))
todo. ($1
Ainda precisa do sinal de dólar para disambiguate-lo do literal1
.)Perl 5 -
8477 bytes84 bytes
77 bytes. Com alguma ajuda de Dom Hastings
fonte
warn
em um programa de golfe, mas depois percebi que você o está usando porque é mais curto queprint
. Agradável!-E
vez de-e
, habilitando todas as extensões. Eu sou novo neste lugar, então não sei exatamente onde é especificado como contar as pontuações.warn
), você não precisa de aspas"o"
(você pode use uma palavra de barra para outro -2); se você inline o cálculo,$w
deve salvar outro byte ('_'x($w=3+2*$x)
vs.$w=3+2*$x;
...'_'x$w
) e, por último, pode alterar\n
para uma nova linha literal. Espero que ajude!C,
202191 bytesObrigado a @Lince Assassino por salvar 11 bytes!
Ungolfed:
fonte
p(char*A){printf(A);}
#define p printf
Goma de canela, 32 bytes
Não concorrente. Experimente online. A entrada deve estar exatamente no formato,
[width,height]
sem espaço entre a vírgula e a altura.Explicação
A cadeia de caracteres descompacta para isso:
O primeiro
l
estágio é mapeado[1,1]
parao
(o caso especial) e todo o resto para a sequênciaO backtick então sinaliza o início de um segundo estágio; em vez de emitir essa string, o CG corta o backtick e executa a string. O
p
modo repete todos os caracteres dentro do primeiro parâmetro das tildes (largura) vezes e depois repete os caracteres dentro dos segundos sinais de porcentagem do segundo parâmetro (altura). Então,[4,2]
isso se transforma nisso:e depois para:
fonte
Lote,
172170 bytesEditar: salvou 2 bytes graças a
@ CᴏɴᴏʀO'Bʀɪᴇɴ@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.Eu posso salvar 7 bytes se eu puder assumir que a expansão atrasada está ativada.
fonte
%%o%%
em vez de%o%
?%o%
seria substituído pelo valor original deo
cada vez, de modo queo
somente seria igual" o"
.%%o%%
passa como um argumento paracall
de%o%
, que então usa o valor atual deo
.do set o=%o% o
?%o%
é expandido antes que ofor
loop seja analisado, então o loop lê ofor /l %i in (1,1,8) do call set o= o
que é obviamente inútil.do set o=%%o%% o
(-5)?Vim, 56 pressionamentos de tecla
Parece uma tarefa de edição de texto, então o Vim é a escolha óbvia! Pego a entrada como um arquivo de texto com dois números inteiros separados por espaço e produzo a resposta no mesmo arquivo. Além disso, eu te odeio por ter o caso especial 1x1 ... De qualquer forma:
e se não houvesse o caso especial, 35 pressionamentos de tecla
Um colapso para pessoas sãs:
Exclua os números do buffer em @a e @b (caractere de espaço mantido)
Substitua o espaço por "o" e, caso especial, salve e saia
Limpe a linha e escreva as bordas do bloco lego
Insira @ um monte de "o" para obter uma parte intermediária final
Arranque a linha e faça @b cópias extras (uma a mais)
Estamos no topo do buffer, substitua a linha extra por sublinhados
Ir para o fundo do buffer, puxar a linha que puxamos anteriormente
Substitua a linha por traços, salve e saia
fonte
Pitão, 38 bytes
Suíte de teste.
fonte
Haskell, 76 bytes
Exemplo de uso:
3 # 2
fornece uma sequência de linhas múltiplas para um bloco de 3 por 2.Ungolfed:
fonte
unlines
, mas não é.Groovy,
107,98,70, 64Testando:
fonte
Befunge,
114113108101 bytesEu sei que já existem várias soluções Befunge, mas eu tinha certeza de que elas poderiam ser aprimoradas adotando uma abordagem diferente para o layout do código. Suspeito que essa resposta também possa ser jogada mais, mas já é um pouco menor do que qualquer uma das entradas anteriores.
Experimente online!
fonte
:<|
é necessária?APL, 46 bytes
A guarda:
⍵≡1 1:'o'
para o caso especial. Caso contrário,'o '⍴⍨1 2×⌽⍵
cria o conteúdo. E o resto é apenas o boxe.fonte
C #, 198 bytes
rapido e sujo
Eu tive que escrever uma função que multiplica strings
ungolfed (para sugestões)
fonte
string s(string m,int u){return string.Join("",new int[u].Select(n => m));}
- o .ToArray () é redundante e a string [] também pode ser um int []. No entanto, em vez de string.Join você pode usar agregado: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));}
Oitava,
979586 bytesEu usei o método @atlasologist em Python para testar
(1, 1)
:(...,'o')[x<2>y]
Agradecemos a @Luis Mendo por salvar 7 bytes:
a=ones(1,w*2+3)*'_'
paraa=~(1:w*2+3)+95
ea./a*'-'
para~a+45
Obrigado a @pajonk por salvar 2 bytes:
f=
fonte
a./a*'-'
você pode usar~~a*'-'
? Ou até~a+45
?f=
)