Número de taquillas!


25

Dado un número entero positivo <100 (de 1 a 99, incluidos 1 y 99), genera muchos casilleros.

Un casillero se define de la siguiente manera:

+----+
|    |
|    |
|    |
| nn |
+----+

donde nnestá el número del casillero, en la base 10. Si hay un número de 1 dígito, se expresa con un 0 delante. Por ejemplo, el casillero número 2 muestra el número 02.

Los casilleros se pueden apilar, pero solo hasta 2 de altura:

+----+
|    |
|    |
|    |
| on |
+----+
|    |
|    |
|    |
| en |
+----+

ondenota un número impar, enun número par. Los casilleros también se pueden poner uno al lado del otro.

+----+----+
|    |    |
|    |    |
|    |    |
| 01 | 03 |
+----+----+----+
|    |    |    |
|    |    |    |
|    |    |    |
| 02 | 04 | 05 |
+----+----+----+

Observe que el casillero número 5 es un casillero con un número impar que se encuentra en la parte inferior. Esto se debe a que cuando tiene una entrada impar, el último casillero debe colocarse en el piso (porque un casillero flotante cuesta demasiado). El ejemplo anterior, por lo tanto, es la salida esperada para n = 5. n = 0 debería devolver un nada.

Reglas: Métodos estándar de entrada / salida. Entrada en cualquier formato conveniente, salida como una cadena. Se aplican lagunas estándar.

Casos de prueba:

Input
Output
---------------------
1






+----+
|    |
|    |
|    |
| 01 |
+----+
--------------------- (newlines optional in case 1)
4
+----+----+
|    |    |
|    |    |
|    |    |
| 01 | 03 |
+----+----+
|    |    |
|    |    |
|    |    |
| 02 | 04 |
+----+----+
---------------------
5
+----+----+
|    |    |
|    |    |
|    |    |
| 01 | 03 |
+----+----+----+
|    |    |    |
|    |    |    |
|    |    |    |
| 02 | 04 | 05 |
+----+----+----+
---------------------
16
+----+----+----+----+----+----+----+----+
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
| 01 | 03 | 05 | 07 | 09 | 11 | 13 | 15 |
+----+----+----+----+----+----+----+----+
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
| 02 | 04 | 06 | 08 | 10 | 12 | 14 | 16 |
+----+----+----+----+----+----+----+----+

Este es el , ¡el código más corto gana!



15
Es hora de decirles a los constructores que coloquen los casilleros extraños en la parte inferior.
mbomb007

3
¿Deben enviarse las nuevas líneas del caso anteriores 1?
dzaima

@ComradeSparklePony no me impactó en absoluto :). Perdón por el tono áspero utilizado, solo trato de ayudar.
Magic Octopus Urn

Respuestas:




4

PHP, 191 bytes

for(;a&$k="01112344453"[$i++];print"$l\n")for($l="",$b="+||"[$k%3],$n=0;$n++<$a=$argn;)$l.=$i<6&$n%2&$n!=$a|$i>5&($n%2<1|$n==$a)?($l?"":"$b").["----+","    |",sprintf(" %02d |",$n)][$k%3]:"";

Pruébalo en línea!

PHP, 235 bytes

for(;$i++<$a=$argn;)$r[$i==$a|1-$i&1][]=($p=str_pad)($i,2,0,0);for(;$j<6;)$l[]=($a<2&$j<3?"":[$p("+",$c=($j<3?floor:ceil)($a/2)*5+1,"----+"),$p("|",$c,"    |"),"| ".join(" | ",$r[$j/3])." |"])[$j++%3]."\n";echo strtr("01112344453",$l);

Caso 1 con líneas nuevas opcionales

Pruébalo en línea!

Expandido

for(;$i++<$a=$argn;)
  $r[$i==$a|1-$i&1][]=($p=str_pad)($i,2,0,0); # make an 2D array 0:odd values 1:even values and last value  
for(;$j<6;) # create 6 strings for each different line
  $l[]=($a<2&$j<3 # if last value =1 and line number under 3 
    ?"" # make an empty string empty [] as alternative
    :[$p("+",$c=($j<3 # else make the 0 or 3 line and store the count for next line
      ?floor # if line number =0 count=floor ($a/2)  multiply 5 and add 1
      :ceil)($a/2)*5+1,"----+") # else count= ceil($a/2) multiply 5 and add 1
    ,$p("|",$c,"    |") # make lines 1 and 4
    ,"| ".join(" | ",$r[$j/3])." |"])[$j++%3]."\n"; #make lines 2 odd values and 5 even values and last value
echo strtr("01112344453",$l); # Output after replace the digits with the 6 strings

PHP, 300 bytes

for(;$i++<$a=$argn;)$r[$i==$a||!($i%2)][]=($p=str_pad)($i,2,0,0);echo strtr("01112344453",($a>1?[$p("+",$c=($a/2^0)*5+1,"----+")."\n",$p("|",$c,"    |")."\n","| ".join(" | ",$r[0])." |\n"]:["","",""])+[3=>$p("+",$c=ceil($a/2)*5+1,"----+")."\n",$p("|",$c,"    |")."\n","| ".join(" | ",$r[1])." |\n"]);

reemplace ["","",""]con ["\n","\n","\n"]si desea nuevas líneas para el caso1

Pruébalo en línea!


2

Rubí, 256 239 201 191 183 bytes

n=gets.to_i;a=n/2;z=a+n%2;t=a*2;q="+----+";r=->x{q*x+?\n+("|    |"*x+?\n)*3+"| n |"*x+?\n};u=r[a]+r[z]+q*z;n.times{|i|j=2*i+1;u[?n]="%02d"%(i<a ?j:i>=t ?j-t:j-t+1)};puts u.squeeze'+|'

Esto es terriblemente largo. Trabajaré más en el golf.


2

C (gcc) , 426 335 300 294 282 252 249 246 244 237 bytes

Esto realmente necesita ser golfizado

#define L puts("")
#define P(s)printf(&s[i>1]
#define F(x)for(i=0;i++<x;)P(
#define O(x,y)F(x)"+----+"));for(j=0;L,j++<3;)F(x)"|    |"));j=y;F(x)"| %02d |")
e,i,j;f(n){e=n/2+n%2;O(n/2,-1),j+=2);L;O(e,0),j+=i^e?2:2-n%2);L;F(e)"+----+"));}

Pruébalo en línea!


Sugerir en -~n/2lugar den/2+n%2
ceilingcat

1

Lote, 305 bytes.

@echo off
set/a"n=%1&-2
if %1 gtr 1 call:l %n% 1
call:l %1 2
echo %s: =-%
exit/b
:l
set s=+
set "t=|
for /l %%i in (%2,2,%n%)do call:c %%i
if %1 gtr %n% call:c %1
for %%s in ("%s: =-%" "%s:+=|%" "%s:+=|%" "%s:+=|%" "%t%")do echo %%~s
exit/b
:c
set s=%s%    +
set i=0%1
set "t=%t% %i:~-2% |

+----+y | |ambos son similares a + +que pueden generarse a través de una sola sustitución, y resulta ser un poco más corto que generarlos por separado (la cita adicional necesaria para |s no ayuda).



1

JavaScript ES6, 224 bytes

n=>(r=(s,k)=>s.repeat(k),s="",[0,1].map(i=>(c=(n/2+n%2*i)|0,c&&(s+="+"+r(l="----+",c)+`
|`+r(r("    |",c)+`
|`,3),[...Array(c).keys()].map(j=>s+=` ${(h=2*j+(i+!(i&j>c-2&n%2)))>9?h:"0"+h} |`),s+=`
`+(i?`+${r(l,c)}
`:"")))),s)

Usé algunas ideas de la respuesta Python de Math Junkie

Fragmento de prueba

f=
n=>(r=(s,k)=>s.repeat(k),s="",[0,1].map(i=>(c=(n/2+n%2*i)|0,c&&(s+="+"+r(l="----+",c)+`
|`+r(r("    |",c)+`
|`,3),[...Array(c).keys()].map(j=>s+=` ${(h=2*j+(i+!(i&j>c-2&n%2)))>9?h:"0"+h} |`),s+=`
`+(i?`+${r(l,c)}
`:"")))),s)

O.innerHTML=f(I.value);
<input id="I" value="5" type="number" min="0" max="99" oninput="O.innerHTML=f(this.value)">
<pre id="O"></pre>

Limpiado

n => {
    r=(s,k)=>s.repeat(k);
    s="";
    [0,1].map(i => {
        c = (n/2 + n%2 * i)|0;
        if (c) {
            s += "+" + r(l="----+", c) + "\n|" + r(r("    |",c) + "\n|", 3);
            [...Array(c).keys()].map(j => {
                s += ` ${(h = 2*j + (i + !(i & j>c-2 & n%2))) > 9 ? h:"0"+h} |`;
            });
            s += "\n" + (i ? `+${r(l,c)}\n` : "");
        }
    });
    return s;
};

Bienvenido a PPCG!
caird coinheringaahing

0

Carbón , 37 bytes

NθF…·¹θ«F⁵¿﹪ι²¿⁼ιθ→↗↓B⁶±⁶↗→→0P←⮌Iι←←↙

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

Nθ

Ingrese el número de casilleros en q.

F…·¹θ«

Pase por los casilleros de 1hasta qinclusivo.

F⁵¿﹪ι²¿⁼ιθ→↗↓

Calcule la dirección al siguiente casillero y repita eso 5 veces (más golf que usar movimientos de salto).

B⁶±⁶

Dibuja el casillero, comenzando en la esquina inferior izquierda. (La esquina inferior derecha también toma 4 bytes, mientras que la esquina superior derecha toma 5. La esquina superior izquierda solo toma 3 bytes, pero el número del casillero tardaría más en dibujarse).

↗→→0

Dibuje el cero inicial del número de casillero, si es necesario.

P←⮌Iι

Dibuje el número del casillero invertido y de derecha a izquierda, efectivamente a la derecha justificándolo.

←←↙

Vuelva a la esquina inferior izquierda listo para calcular la dirección al siguiente casillero.

Editar: las versiones posteriores de Charcoal admiten esta solución de 32 bytes:

F⪪…·¹N²«F⮌ι«↗→→0P←⮌Iκ↖↖↖↑UR⁶»M⁵χ

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

F⪪…·¹N²«

Tome los números desde 1el número de entrada inclusive por pares. (Si el número de entrada es impar, la última matriz solo tendrá un elemento).

F⮌ι«

Pase cada par en orden inverso.

↗→→0

Dibuje el cero inicial del número de casillero, si es necesario.

P←⮌Iι

Dibuje el número del casillero invertido y de derecha a izquierda, efectivamente a la derecha justificándolo.

↖↖↖↑UR⁶

Muévete a la parte superior izquierda del casillero y dibuja. Esta también es la parte inferior izquierda del siguiente casillero, por lo que estamos listos para dibujar el segundo casillero del par si corresponde.

»M⁵χ

Pasa al siguiente par de armarios. (Esto debería estar antes del bucle interno para ahorrar 1 byte, pero el carbón genera una salida incorrecta para una entrada de 1 por alguna razón).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.