Liscio come il teflon


10

Letteralmente! Il 6 aprile è il National Teflon Day , che viene celebrato con padelle rivestite in teflon (cosa faremo). Quindi, dato un numero intero positivo n, crea una panoramica in teflon. La sezione "panoramica" della panoramica è un ottagono con ciascuno dei suoi lati costituito da ncaratteri, che varierà a seconda di quale lato è ad eccezione dei lati che usano il personaggio {o }. Quelle parti avranno sempre una lunghezza di carattere di uno. Se nè 1:

  _
 / \
{   }
 \_/

Come si può vedere, ogni lato è costituito da un carattere (o {, }, /, \, o _). Se nè 2:

   __
  /  \
 /    \
{      }
 \    /
  \__/

L'handle verrà creato con n+3 ='s e terminerà con uno zero ( 0).


Se nè uno:

  _
 / \
{   }====0
 \_/

n è 2:

   __
  /  \
 /    \
{      }=====0
 \    /
  \__/  

n è 3:

    ___
   /   \
  /     \
 /       \
{         }======0
 \       /
  \     /
   \___/  

Se nè 4:

     ____
    /    \
   /      \
  /        \
 /          \
{            }=======0
 \          /
  \        /
   \      /
    \____/  

Regole e criterio

  • Non sono ammesse scappatoie

  • La maniglia esce dal lato destro (il lato fatto del }personaggio)

  • L'input è un numero intero positivo

  • Se il lato non è costituito da uno dei due ( {o }non dal lato sinistro o destro), saranno costituiti dai nrispettivi caratteri:

                _
               / \
    Left side {   } Right side
               \_/
    
  • Dato che si tratta di , vince il codice più corto!

Potresti aggiungere altri casi di test?
xnor

@xnor Aggiunti altri due
Anthony Pham,

I casi di test per n = 3 e n = 4 non hanno il giusto numero di caratteri sui bordi superiore o inferiore
fəˈnɛtɪk,

@ fəˈnɛtɪk Grazie! Ciò è stato risolto
Anthony Pham,

Posso prendere Oinvece 0la manopola?
Tito

Risposte:


9

Carbone ,  41 38 36 30 28 byte

Grazie a @Emigna per l'aiuto nel salvataggio di due byte, grazie solo a @ ASCII per il salvataggio di sei byte e grazie a @Neil per il salvataggio di altri due byte!

Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0

Provalo online!

Spiegazione:

Nη                 // Take the size of the pan as input.
↙η                 // Draw a line of η '\'s going down to the left.
↑←×_η              // Move one step up and print η underscores to the left.
↖η↗{↗η             // Print a line of η '\'s going up to the left.
                   // Then move one step north-east and print '{'.
                   // Then print a line of η '/'s going up to the right.
×_η↓               // Print '_' η times and move one step down.
↘η}                // Draw a line of η '\'s going down to the right, then print '}'.
×=⁺³η              // Print '=' η+3 times.
0                  // Print '0'

1
Puoi spostarti a sinistra del punto di partenza in Carbone, no? In tal caso, a partire dalla punta del quadratino si dovrebbe risparmiare qualche byte evitando di tornare indietro nello spazio già stampato.
Emigna,

@Emigna Grazie, non lo sapevo. Non avevo mai usato carbone prima d'ora.
Steadybox

1
@Steadybox 30 byte:Nη↖ηG←η_↙↙η{↓↘ηM↑×η_↗η}×⁺³η=P0
ASCII il

1
28 byte: Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1 byte salvato stampando prima la metà inferiore del pan rendendo inutile e 1 byte salvato invertendo i parametri per ×renderlo non necessario.)
Neil

7

JavaScript (ES6), 171 byte

f=
n=>(r=s=>s[0][0].repeat(n-1)+s)`  `+r`_
`+r` `.replace(/ /g," $'/$' $`$`$`\\\n")+`{`+r` `+r` `+r` }`+r`====0`+r` `.replace(/ /g,"\n $`\\$` $'$'$'/").replace(/ +\/$/,r`_/`)
<input type=number min=1 oninput=o.textContent=f(this.value)><pre id=o>

L'intera padella per pizza è molto ripetitiva, quindi la funzione r (progettata come un modello con tag letterale) ripete il primo carattere del suo input n volte. Questo gestisce la parte superiore e centrale e le linee della padella. Il resto viene ripetuto sostituendo una serie di spazi vuoti; le sottosezioni $`e $'corrispondono automaticamente al numero crescente e decrescente di spazi vuoti posizionando così /e in modo \appropriato. Infine, le _s vengono compilate sull'ultima riga in quanto è leggermente diversa dalla seconda riga in questo senso.


7

JavaScript + HTML, 575 byte (451 byte solo JS) 376 byte (482 byte solo JS)

y=document,y.y=y.getElementById,a=(b,c)=>{w="";for(z=0;z<b;z++)w+=c;return w},d=_=>{n=Number(y.y("n").value);s="";u=" ";j="<br>",m="\\",o="/";for(i=-2;i<=2*n;i++)-2==i?s+=a(n+1,u)+a(n,"_")+j:i<n-1?s+=a(n-i-1,u)+o+a(2*(i+1)+n,u)+m+j:i==n-1?s+="{"+a(3*n,u)+"}"+a(n+3,"=")+"0"+j:i+1==2*n?s+=a(n,u)+m+a(n,"_")+o:i+1<2*n&&(s+=a(i-n+1,u)+m+a(5*n-2*i-2,u)+o+j);y.y("p").innerHTML=s};
<input type="number" id='n'><button onclick='d()'>Do</button><p id='p' style='font-family:monospace;'></p>

Approccio non complicato: diverse concatenazioni di stringhe che utilizzano le condizioni per le cinque diverse parti del pan: le linee superiore, inferiore e centrale e le metà superiore e inferiore.

Ho abbreviato il più possibile, ma era questo il limite con questo metodo.

EDIT: non è stato - inoltre giocato a golf da @ programmer5000


Ottima prima risposta! Benvenuto in Puzzle di programmazione e Code Golf!
Anthony Pham,

È stato fantastico? Voglio dire, ci è voluto molto più tempo per fare di quanto avrebbe dovuto essere e non è nemmeno molto breve - ma grazie comunque!
Zoltán Schmidt,

Dovresti visitare la domanda sui suggerimenti sul golf per Javascript
Anthony Pham,

Non sapevo che ci fossero anche dei suggerimenti - grazie!
Zoltán Schmidt,

2
Benvenuti in PPCG. Per me qualsiasi risposta che mostri qualche sforzo e un serio tentativo di affrontare la sfida è una buona risposta e merita un voto. Buona fortuna con i suggerimenti e i suggerimenti. Il mio primo consiglio sarebbe, smetti di pensare come il tipo di programmatore con cui vorresti lavorare su un progetto e iniziare a fare tutte le cose che odi quando acquisisci il codice di qualcun altro (variabili di una lettera, scorciatoia se istruzioni, ecc. .) :)
ElPedro

4

PHP, 174 byte

echo($p=str_pad)("",-$i=-1-$n=$argn),$p(_,$n,_);for(;$i++<$n;)echo$p("
",1+$a=abs($i)),$i?$p("\/"[$i<0],1+$n*3-$a*2,"_ "[$i<$n])."\/"[$i>0]:$p("{",$n*3).$p("} ",5+$n,"="). 0;

Riceve input da STDIN; eseguirlo -nRo testarlo online .

abbattersi

// first line
echo($p=str_pad)("",-$i=-1-$n=$argn),$p(_,$n,_);
// loop $i from -$n to $n
for(;$i++<$n;)echo
    $p("\n",1+$a=abs($i)),                  // 1. left padding
$i?                     // if not middle line:
    $p("\/"[$i<0],1+$n*3-$a*2,"_ "[$i<$n])  // 2. left edge and inner padding
    ."\/"[$i>0]                             // 3. right edge
:                       // else:
    $p("{",$n*3)                            // 2. left edge and inner padding
    .$p(" }",5+$n,"=")                      // 3. right edge
    . 0                                     // 4. knob
;

4

Python 3, 196 byte

n=int(input())
p=print
s=' '
def m(i,f,b,c=s):p(s*(n-i)+f+c*(n+2*i)+b)
p(s*n+s+'_'*n)
for i in range(n):m(i,*'/\\')
p('{'+s*n*3+'}'+'='*(n+3)+'0')
for i in range(n-1,0,-1):m(i,*'\\/')
m(0,*'\\/_')

Ho usato alcune variabili per abbreviare il codice, ma è per lo più semplice. Ecco una versione più lunga e più leggibile:

n = int(input())

def middle_part(i, first_slash, second_slash, middle_char=' '):
    print(' ' * (n-i) + first_slash + middle_char * (n + 2*i) + second_slash)

print(' ' * (n+1) + '_' * n)

for i in range(n):
    middle_part(i, '/', '\\')

print('{' + ' ' * n*3 + '}' + '=' * (n+3) + '0')

for i in range(n-1, 0, -1):
    middle_part(i, '\\', '/')

middle_part(0, '\\', '/', middle_char='_')

Modifica: modificato per leggere n da stdin, 181 → 196 byte


3

Python 2 , 180 178 byte

s,i=' ',input();R=range(i)
print'\n'.join([s+s*i+'_'*i]+[s*(i-a)+'/'+s*(i+a*2)+'\\'for a in R]+['{'+s*i*3+'}'+'='*(i+3)+'0']+[s*(i-c)+'\\'+'_ '[c>0]*(i+c*2)+'/'for c in R[::-1]])

Provalo online!


3

Python 2.7, 194 195 191 191 185 185 byte

n=input();s=' ';a='\\';z='/'
def m(f,b,i,c=s):print(n-i)*s+f+c*(n+2*i)+b
m(s,s,0,'_')
for i in range(n):m(z,a,i)
print'{'+s*n*3+'}'+'='*(n+3)+'0';exec"m(a,z,i);i-=1;"*(n-1);m(a,z,0,'_')

Provalo online!

Apri per modificare i suggerimenti per renderlo più piccolo. :)

Modifica 1: +1 byte - Crediti a ElPedro per aver segnalato un errore nel codice, che lo ha reso più lungo di 1 byte.

Modifica 2: -4 byte - Crediti a piyush-ravi per la rimozione di argomenti non obbligatori .

Modifica 3: -4 byte - Come non l'ho visto? : P

Modifica 4: -2 byte - Sostituendo '\ n' con ';'


Sembra che la prima riga sotto la linea di mezzo non dovrebbe essere lì quando la provo localmente. provato per input 4 e 3 e sembra sbagliato. Non ritirare il voto fino a quando non hai avuto il tempo di rivedere e spiegare o risolvere. Colpa mia per non aver guardato abbastanza forte :)
ElPedro

Grazie per averlo segnalato ElPedro . Risolto il problema :)
Koishore Roy,

2

PowerShell , 165 byte

param($n)($a=' '*$n)+" "+($b='_'*$n);$n..1|%{' '*$_+"/"+' '*($n+2*$i++)+"\"};"{$($a*3)}$('='*($n+3))0";if($n-1){1..($n-1)|%{' '*$_+"\"+' '*($n+2*--$i)+"/"}};"$a\$b/"

Provalo online!

Prende input $n, imposta $aun gruppo di spazi, $bun gruppo di caratteri di sottolineatura e la stringa lo concatena con uno spazio. È rimasto in cantiere.

Passa da $ngiù a 1. Se $n=1, questo verrà eseguito solo una volta. Ogni iterazione facciamo una concatenazione di stringhe di spazi, a /, più spazi con contatore $ie a \. Questi sono tutti lasciati in cantiere.

Poi arriva la parte centrale con la maniglia, che per coincidenza ha $a*3spazi nel mezzo e $n+3 =segni, quindi a 0. È rimasto in cantiere.

Se $nè più grande di 1, allora $n-1è vero, quindi entriamo nel condizionale, dove facciamo un giro nell'altra direzione per formare il fondo della padella. Se $n=1, allora non abbiamo bisogno di questa porzione a causa di come funzionano le linee. Questi sono tutti lasciati in cantiere. Concludiamo con gli spazi e sottolinea con il $a\$b/fondo della padella.

Tutte le stringhe della pipeline vengono inviate tramite implicito Write-Outputche le stampa con nuove righe tra gli elementi.


2

JavaScript + HTML - 346 byte

JavaScript - 314 byte, HTML - 32 byte

function o(a){a=parseInt(a),String.prototype.r=String.prototype.repeat;c=console.log,d=" ".r(a),e="_".r(a);c(" "+d+e);for(f=a-1,g=a;f>=0;f--,g+=2)c(" ".r(f+1)+"/"+" ".r(g)+"\\");c("{ }=0".replace(" "," ".r(3*a)).replace("=","=".r(a)));for(f=0,g=3*a;f<a-1;f++,g-=2)c(" ".r(f+1)+"\\"+" ".r(g-2)+"/");c(d+"\\"+e+"/")}
<input id=n onkeyup=o(n.value)>

Un-golfed

function o(sides) {

  String.prototype.r = String.prototype.repeat;
  var middle = '{ }=0',
  log = console.log,
  ss = ' '.r(sides),
  u = '_'.r(sides),
  sides = parseInt(sides);

  // top
  log(' ' + ss + u);

  // top mid
  for (var i = sides - 1, j = sides; i >= 0; i--, j += 2) {
    log(' '.r(i + 1) + '/' + ' '.r(j) + '\\');
  }

  // mid
  log('{ }=0'.replace(' ', ' '.r(sides * 3)).replace('=', '='.r(sides)));

  // bottom mid
  for (var i = 0, j = sides * 3; i < sides - 1; i++, j -= 2) {
    log(' '.r(i + 1) + '\\' + ' '.r(j - 2) + '/');
  }

  // bottom
  log(ss + '\\' + u + '/');

}
<input id="n" onkeyup="o(n.value)">


0

C, 249 byte

o(c,a){for(;a--;)putchar(c);}s;p(n){o(32,n+1);o(95,n);o(10,1);for(s=0;s<n;s++)o(32,n-s),o(47,1),o(32,n+s*2),o(92,1),o(10,1);o(123,1);o(32,n*3);o(125,1);o(61,3+n);o(48,1);o(10,1);for(s=n-1;s>-1;s--)o(32,n-s),o(92,1),o(s?32:95,n+s*2),o(47,1),o(10,1);}

Provalo online

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.