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>
Respuestas:
Befunge , 165
227bytesNo hay tanto espacio en blanco como antes, pero todavía hay lagunas. El principio es el mismo que en la solución anterior, pero el diseño es diferente. Esta vez, para verificar si ambos números son 1, solo estoy tomando su producto y viendo si el resultado es mayor que 1.
Solución anterior (227 bytes)
Podría ser posible jugar más al golf. ¡Solo mira todo ese espacio en blanco!
Aquí está mi pobre intento de explicación en forma de imagen de MSPaint: el código fluye en la dirección de la flecha.
fuente
V ,
43, 40, 3836 bytesUna de las respuestas V más largas que he escrito ...
Pruébalo en línea!
Como esto contiene caracteres unicode y no imprimibles, aquí hay un hexdump reversible:
Este desafío se trata de manipular texto, ¡perfecto para V! Por otro lado, V es terrible en condicionales y matemáticas, por lo que la salida diferente para (1, 1) realmente lo arruinó ... :(
Explicación:
Ahora tenemos líneas de 'Altura' de o con espacios entre ellas.
Versión no competitiva (31 bytes):
Pruébalo en línea!
¡Esta versión usa varias características que son más nuevas, entonces este desafío es 5 bytes más corto!
Segunda explicación:
que es "Eliminar línea y pegarla n veces" se reemplaza con
ÀÄ
"Repita esta línea n veces". (-2 bytes)que era "Reemplazar la primera coincidencia de esta expresión regular; Deshacer" se reemplazó con
Que es solo "Buscar una coincidencia de esta expresión regular" (-1 byte)
Y, por último,
Ò
es un simple sinónimo deVr
"Reemplazar todos los caracteres de esta línea con 'x'". (-2 bytes)fuente
32código de máquina little endian x86 de 16 bits,575451 bytes3 bytes menos gracias a @ninjalj.
Reescribió fuertemente el código y he logrado eliminar otros 3 bytes
En hex
Entrada: BX = ancho, SI = altura, DI apunta al búfer que recibe el resultado como una cadena terminada en NULL con líneas separadas por "\ n"
Desmontaje
fuente
Python 2,
757372 bytesDevuelve una cadena, con un condicional para manejar el bloque 1,1.
Gracias a Lynn y Chepner por dos bytes.
fuente
lambda x,y:('_'*x*2+'___\n'+
etc. guarda un byte.x*'__'
lugar de2*x*'_'
.<function <lambda> at 0x......>
. ¿Cómo puedo probar esto?f=lambda x:x+1; print(f(9))
CJam, 34
Pruébalo en línea
Explicación:
fuente
Ruby,
5956 bytesFunción anónima, devuelve una cadena multilínea. Pruébalo en línea!
-3 bytes gracias a pedir prestado un truco de @ El'endiaStarman
fuente
Java,
318312297294260258 bytes¡ Ahorró 15 bytes gracias a cliffroot !
Funciona con argumentos de línea de comando.
UngolfedEn una forma legible por humanos:Sí, aún es difícil entender lo que está sucediendo incluso cuando el programa no está protegido. Así que aquí va una explicación paso a paso:
Los primeros dos argumentos de la línea de comandos, que usaremos para obtener dimensiones, se pueden usar en el programa como
A[0]
yA[1]
(respectivamente).b
es el número de columnas,B
es el número de filas yC
es una variable dedicada para su uso enfor
bucles.c
Es la pieza de Lego. Le agregaremos filas y luego lo imprimiremos al final.Si la pieza que se va a imprimir es 1x1, entonces tanto
b
(número de columnas) comoB
(número de filas) deberían ser menores que 2. Por lo tanto, simplemente establecemosc
una solao
y luego saltamos a la declaración queSystem.out.print
es la pieza si ese es el caso.Aquí, agregamos
(integerValueOfA[0] * 2) + 3
guiones bajos ac
. Esta es la fila superior sobre todos los agujeros.Este es el bucle donde construimos la pieza una fila a la vez. Lo que sucede dentro es imposible de explicar sin ejemplos. Digamos que la pieza es 4x4:
.
Aquí, agregamos
(integerValueOfA[0] * 2) + 3
guiones a la pieza. Esta es la fila en la parte inferior, debajo de todos los agujeros.La pieza 4x4 que utilicé para explicar el
for
bucle donde se construye la pieza ahora se ve así:Y finalmente, imprimimos la pieza!
fuente
C
variables desdefor
buclesint b=Byte.valueOf(A[0]),B=Byte.valueOf(A[1]),C
. En todos sus bucles for también parece que puede usarC-->0;
cheques, lo hace 298, pastebin.com/uj42JueLfor
bucles para unos pocos bytes guardados - pastebin.com/dhNCpi6nif(b==1&B==1)
que le permitirá guardar más de 20 bytesSystem.out.print('o');return;
, podría establecerc='o'
y colocar la lógica para diferentes ladrillos en el bloque else. luego, tener una sola declaración de impresión y ninguna devolución le permite guardar algunos bytes adicionalesMinkolang 0.15 ,
585756 bytesSi, eso es correcto. Jugué
unpoco de dos bytes apestosos ...Pruébalo aquí!
Explicación
Bien, son dos reescrituras significativas de la explicación de dos bytes guardados. No creo que pueda o pueda jugar nada más con este. :PAGS
fuente
brainfuck, 391 bytes
Sé que esto se puede reducir aún más, pero en este punto me alegro de que funcione. Seguiré trabajando para jugar golf.
La entrada debe darse como solo dos dígitos. Como en, para hacer
(8, 2)
simplemente entrarías82
.Pruébalo en línea!
Descompostura:
Primero ponga los caracteres necesarios en la cinta:
(newline)| o_-
Luego, recopile la entrada en dos celdas y reste 48 de cada una (para obtener el valor numérico y no el carácter numérico)
Luego, verifique el caso especial de
(1, 1)
(Tenga en cuenta que solo esta verificación representa 109 bytes del código). Como siif
no fuera lo suficientemente difícil de hacer en brainfuck, tenemos un anidadoif
:La siguiente es la estructura para verificar si una celda x es cero o no es cero:
Sin embargo, en un anidado
if
, necesitamos tener 4 celdas temporales.Ahora llegamos a la impresión real de los personajes:
Imprima la barra superior y una nueva línea:
Imprima una
|
, una fila deo
's, otra|
y una nueva línea varias veces igual a la altura:E imprima la barra inferior (no se necesita nueva línea aquí):
fuente
Retina , 52 bytes
El recuento de bytes asume la codificación ISO 8859-1. Tenga en cuenta que se supone que la sexta línea contiene un solo espacio.
Pruébalo en línea!
La entrada está en unario, utilizando
1
como dígito unario, el espacio como separador y la altura seguida del ancho.Explicación
Todas las etapas en este programa son sustituciones simples, ocasionalmente con un modificador regular de expresiones regulares (sin repetición ni bucles, sin otro tipo de etapas). Ni siquiera utiliza características de sustitución específicas de Retina, aparte del
¶
alias habitual para avances de línea.El propósito de esto es "multiplicar" las dos entradas. Nuestro objetivo es crear
h+2
filas conw
1
s cada una (h+2
para que podamos convertir la parte superior e inferior en_
y-
más adelante). El\G
ancla requiere que el partido comience donde quedó el último. Es decir, si alguna vez no hacemos coincidir un carácter en la cadena, otros caracteres tampoco coincidirán. Usamos esto para hacer coincidir solo las1
s enh
, pero no enw
porque la expresión regular no permite que coincida el espacio que las separa. Sin embargo, también hacemos el1
opcional, para que obtengamos una coincidencia vacía adicional al final deh
. Eso esh+1
partidos. Cada uno de ellos se reemplaza con la entrada completa ($_
) seguida de un salto de línea.w
permanece intacto, lo que nos da lah+2
copia nd. Digamos que la entrada fue11 1111
, entonces ahora tenemos:Eso es bastante bueno. Tenemos algunas cosas extra, pero las
h+2
copiasw
están ahí.Tenga en cuenta que hay un espacio al final de la primera línea. Esto elimina esos prefijos de las líneas para que solo tengamos la
w
s después.Ah, bueno, eso realmente no funciona con el formato de SE ... la primera línea está vacía y se supone que la segunda línea contiene un solo espacio. Esto inserta espacios en todas las posiciones posibles, es decir, al principio y al final de cada línea y entre cada par de
1
s:Los convertiremos en
o
s más tardeEsto simplemente envuelve cada línea en un par de
|
:Ahora nos encargamos de la parte superior e inferior:
Hora de
\G
brillar de nuevo. Esto coincide con cada personaje en la primera línea y lo convierte en un_
.Lo mismo, pero debido al
r
modificador (modo de derecha a izquierda), esto coincide con los caracteres en la última línea y los convierte en-
. Entonces ahora tenemos:Ahora solo quedan dos cosas por hacer: convertirlas
1
eno
s, y si la entrada fue1 1
entonces, convertir todo en suo
lugar. Podemos manejar ambos con una sola etapa:s
es el modo regular de una sola línea (es decir, hace avances de.
línea coincidentes). Si la entrada fue1 1
el resultado tendrá el tamaño mínimo de 17 caracteres para que podamos combinarlo^.{17}$
y reemplazarlo poro
. De lo contrario, si eso falla, solo haremos coincidir todas las1
sy las reemplazaremos con ellaso
.fuente
Jolf, 36 bytes
Jolf, 24 bytes, sin competencia
Bueno, hice una mejor caja incorporada.
Jolf,
3837 bytesCosas simples, de verdad. Se guardó un byte al observar que
!Ζ
(matemática zeta, o la desviación de soporte) es solo 0 cuando ambos argumentos son 1, y es falso de lo contrario (para nuestro caso).fuente
05AB1E , 33 bytes
Código:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
JavaScript (ES6),
8986 bytesEditar: Guardado 3 bytes gracias a @Shaggy.
fuente
repeat
.Python 2, 71 bytes
fuente
Befunge, 144 bytes
Hubiera preferido comentar esta publicación, pero aún no tengo la reputación, así que estoy respondiendo por mi cuenta, que funciona de manera similar, pero es un poco más compacta
puedes probar el código aquí
fuente
Reng v.4, 82 bytes, sin competencia
Empujé una corrección de errores que corrige las funciones que se sobrescriben por sí mismas (por favor no pregunte; mis cosas están embrujadas)
Toma datos como números unidos por espacios, como
4 2
. Pruébalo aquí!fuente
I pushed a bug fix that fixes functions being overwritten by themselves
... Bueno, ese es un error interesantePowerShell v2 +, 76 bytes
Toma entrada, luego verifica una
if
declaración. Dado que los valores distintos de cero son verdaderos en PowerShell, siempre que al menos uno de$x
y$y
no sean iguales1
,if
será verdadero.Dentro del
if
, hay una serie de multiplicaciones de cuerdas. Primero, construimos nuestra cadena de guiones bajos, guardando$z
para más adelante. Eso se coloca en la tubería. A continuación, construimos nuestra cadena de lados y clavijas (con las clavijas multiplicadas por$x
), los$y
tiempos terminados y los concatenamos con nuestros$z
tiempos de guiones . Esa cadena se coloca en la tubería y nosotrosexit
. La tubería se vacía y la impresión es implícita. Tenga en cuenta que obtenemos la nueva línea entre los guiones bajos y la primera fila de clavijas de forma gratuita, ya que el.ToString()
separador predeterminado para la salida de la matriz es`n
(y estamos generando una matriz de cadenas).Si el valor
if
es falso, estamos en el1 1
caso especial , por lo que simplemente nos colocamos"o"
en la tubería y salimos , con la impresión nuevamente implícita.Ejemplos
fuente
Bash,
186,163,156,148,131, 130 BytesNota: Si realmente necesita que el lego tenga guiones para la última línea, cambie la última impresión a
y agrega dos bytes.
fuente
(($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;}
()
, no necesita la palabra clavefunction
para declarar una función. Hay una alternativafor
sintaxis el uso de llaves, por ejemplo:for((j=$1;j--;));{ printf o;}
. Como se muestra en el ejemplo anterior, puede guardar algunos caracteres disminuyendo y probando enfor
la segunda expresión de. Puedes usar backticks en lugar 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))
a((something))
todo. ($1
todavía necesita el signo de dólar para desambiguarlo del literal1
).Perl 5 -
8477 bytes84 bytes
77 bytes. Con algo de ayuda de Dom Hastings
fuente
warn
en un programa de golf, pero luego me di cuenta de que lo está usando porque es más corto queprint
. ¡Agradable!-E
lugar de-e
, habilitando todas las extensiones. Soy nuevo en este lugar, así que no sé exactamente dónde se especifica cómo contar las puntuaciones.warn
), no necesita comillas alrededor del"o"
(puede use una palabra desnuda para otro -2), si alinea el cálculo de$w
que debe guardar otro byte ('_'x($w=3+2*$x)
vs.$w=3+2*$x;
...'_'x$w
) y, por último, puede cambiar el\n
para una nueva línea literal. ¡Espero que ayude!C,
202191 bytes¡Gracias a @Lince Assassino por guardar 11 bytes!
Sin golf:
fuente
p(char*A){printf(A);}
#define p printf
Chicle de canela, 32 bytes
No competidor Pruébalo en línea. La entrada debe estar exactamente en la forma
[width,height]
sin espacio entre la coma y la altura.Explicación
La cadena se descomprime a esto:
La primera
l
etapa se asigna[1,1]
ao
(el caso especial) y todo lo demás a la cadenaEl backtick luego señala el inicio de una segunda etapa; en lugar de generar esa cadena, CG corta el backtick y ejecuta la cadena. El
p
modo luego repite todos los caracteres dentro del primer parámetro (ancho) de tildes veces y luego repite los caracteres dentro de los signos de porcentaje del segundo parámetro (altura) veces. Entonces, para que[4,2]
se convierta en esto:y luego en:
fuente
Lote,
172170 bytesEditar: Guardado 2 bytes gracias a
@ CᴏɴᴏʀO'Bʀɪᴇɴ@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.Puedo ahorrar 7 bytes si puedo asumir que la expansión retrasada está habilitada.
fuente
%%o%%
en lugar de%o%
?%o%
se reemplazaría con el valor original deo
cada vez, por lo queo
solo sería igual" o"
.%%o%%
pasa como un argumento decall
of%o%
, que luego usa el valor actual deo
.do set o=%o% o
?%o%
se expande antes defor
analizar el bucle, por lo que el bucle lee, lofor /l %i in (1,1,8) do call set o= o
que obviamente no tiene sentido.do set o=%%o%% o
entonces (-5)?Vim, 56 pulsaciones de teclas
Esto parece una tarea de edición de texto, ¡así que Vim es la opción obvia! Tomo la entrada como un archivo de texto con dos enteros separados por espacios y envío la respuesta al mismo archivo. Además, te odio por tener el caso especial 1x1 ... De todos modos:
y si no hubiera sido por el caso especial, 35 pulsaciones de teclas
Un desglose para personas cuerdas:
Eliminar números del búfer en @a y @b (espacio guardado)
Reemplace el espacio con "o" y si es un caso especial, guarde y salga
Despeja la línea y escribe los bordes del bloque lego
Inserte @a un montón de "o" para obtener una parte media terminada
Yankee la línea y haga @b copias adicionales (una demasiado)
Estamos en la parte superior del búfer, reemplaza la línea adicional con guiones bajos
Salta al fondo del búfer, tira de la línea que arrancamos antes
Reemplace la línea con guiones, guarde y salga
fuente
Pyth, 38 bytes
Banco de pruebas.
fuente
Haskell, 76 bytes
Ejemplo de uso:
3 # 2
le ofrece una cadena multilínea para un ladrillo de 3 por 2.Sin golf:
fuente
unlines
, pero no lo es.Groovy,
107,98,70, 64Pruebas:
fuente
Befunge,
114113108101 bytesSé que ya hay una serie de soluciones Befunge, pero estaba bastante seguro de que podrían mejorarse adoptando un enfoque diferente para el diseño del código. Sospecho que esta respuesta también se puede jugar más, pero ya es un poco más pequeña que cualquiera de las entradas anteriores.
Pruébalo en línea!
fuente
:<|
se necesita la cuerda ?APL, 46 bytes
El guardia:
⍵≡1 1:'o'
para el caso especial. De lo contrario,'o '⍴⍨1 2×⌽⍵
construye el contenido. Y el resto es solo el boxeo.fuente
C #, 198 bytes
rápido y sucio
Tuve que escribir una función que multiplique cadenas
sin golf (para sugerencias)
fuente
string s(string m,int u){return string.Join("",new int[u].Select(n => m));}
: .ToArray () es redundante y la cadena [] también puede ser un int []. Pero en lugar de string.Join puedes 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));}
Octava,
979586 bytesHe utilizado el @atlasologist método 's en Python para la prueba
(1, 1)
:(...,'o')[x<2>y]
Gracias a @Luis Mendo por guardar 7 bytes:
a=ones(1,w*2+3)*'_'
paraa=~(1:w*2+3)+95
ya./a*'-'
para~a+45
Gracias a @pajonk por guardar 2 bytes:
f=
fuente
a./a*'-'
¿puedes usar~~a*'-'
? O incluso~a+45
?f=
)