Gładki jak teflon

10

Dosłownie! 6 kwietnia to Narodowy Dzień Teflonu , który jest obchodzony patelniami pokrytymi teflonem (co będziemy robić). Tak więc, biorąc pod uwagę dodatnią liczbę całkowitą n, utwórz patelnię teflonową. Sekcja „patelni” patelni jest ośmiokątem, a każdy z jej boków składa się z npostaci, które będą się różnić w zależności od strony, z wyjątkiem stron używających znaku {lub }. Te strony będą miały zawsze długość jednego. Jeśli nwynosi 1:

  _
 / \
{   }
 \_/

Jak widać, każda strona składa się z jednego znaku (albo {, }, /, \, lub _). Jeśli njest 2:

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

Uchwyt zostanie utworzony z n+3 ='s i zakończy się na zero ( 0).


Jeśli njest jeden:

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

n jest 2:

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

n wynosi 3:

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

Jeśli nwynosi 4:

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

Reguły i kryteria

  • Niedozwolone są luki

  • Uchwyt wychodzi z prawej strony (strona wykonana z }postaci)

  • Dane wejściowe to dodatnia liczba całkowita

  • Jeśli strona nie składa się albo {albo }(nie lewa lub prawa strona), będą składać się z nodpowiednich znaków:

                _
               / \
    Left side {   } Right side
               \_/
    
  • Ponieważ jest to , wygrywa najkrótszy kod!
Anthony Pham
źródło
Czy możesz dodać więcej przypadków testowych?
xnor
@xnor Dodano jeszcze dwa
Anthony Pham
Przypadki testowe dla n = 3 i n = 4 nie mają właściwej liczby znaków na górnej lub dolnej krawędzi
fəˈnɛtɪk
@ fəˈnɛtɪk Thanks! Zostało to naprawione
Anthony Pham
Czy mogę wziąć Ozamiast 0gałki?
Tytus

Odpowiedzi:

9

Węgiel drzewny ,  41 38 36 30 28 bajtów

Dzięki @Emigna za pomoc w zapisaniu dwóch bajtów, dzięki @ ASCII-tylko za zapisanie sześciu bajtów i dzięki @Neil za zapisanie kolejnych dwóch bajtów!

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

Wypróbuj online!

Wyjaśnienie:

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'
Steadybox
źródło
1
Możesz przesunąć się w lewo od punktu początkowego na węglu drzewnym, prawda? Jeśli tak, rozpoczęcie od końca uchwytu powinno zaoszczędzić kilka bajtów, bez konieczności cofania już wydrukowanego miejsca.
Emigna,
@Emigna Dzięki, nie wiedziałem o tym. Nigdy wcześniej nie używałem węgla drzewnego.
Steadybox,
1
@ Steadybox 30 bajtów:Nη↖ηG←η_↙↙η{↓↘ηM↑×η_↗η}×⁺³η=P0
Tylko ASCII
1
28 bajtów: Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1 bajt zapisany przez wydrukowanie dolnej połowy szalki jako pierwszy niepotrzebny i 1 bajt zapisany przez odwrócenie parametrów tak, aby stał ×się niepotrzebny.)
Neil
7

JavaScript (ES6), 171 bajtów

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>

Całe ciasto do pizzy jest bardzo powtarzalne, więc funkcja r (zaprojektowana jako literał szablonu z tagiem) powtarza pierwszy znak swojego wejścia n razy. To obsługuje górną i środkową i linie patelni. Resztę powtarza się, zastępując ciąg pustych miejsc; się $`i $'subsitutions automatycznie odpowiada zwiększania i zmniejszania ilości półfabrykatów w ten sposób odkładania /i \odpowiednio. Na koniec litery _s są wypełniane w ostatnim wierszu, ponieważ pod tym względem nieznacznie różni się od drugiego wiersza.

Neil
źródło
7

JavaScript + HTML, 575 bajtów (tylko 451 bajtów JS) 376 bajtów (tylko 482 bajtów 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>

Nie jest to skomplikowane podejście: kilka konkatenacji strun z wykorzystaniem warunków dla pięciu różnych części patelni: najwyższych, najniższych i środkowych linii oraz górnej i dolnej połowy.

Skróciłem tak bardzo, jak tylko mogłem, ale był to limit tej metody.

EDYCJA: nie było - dodatkowo grał w golfa przez @ programmer5000

Zoltán Schmidt
źródło
Świetna pierwsza odpowiedź! Witamy w Programowaniu zagadek i Code Golf!
Anthony Pham,
Czy to było świetne? To znaczy, zajęło dużo więcej czasu, niż powinno być i nie jest nawet bardzo krótkie - ale i tak dzięki!
Zoltán Schmidt,
Powinieneś odwiedzić pytanie dotyczące wskazówek golfowych dla Javascript
Anthony Pham,
Nie wiedziałem, że są też wskazówki - dzięki!
Zoltán Schmidt,
2
Witamy w PPCG. Dla mnie każda odpowiedź, która pokazuje pewien wysiłek i poważną próbę sprostania temu wyzwaniu, jest dobrą odpowiedzią i zasługuje na aprobatę. Powodzenia z podpowiedziami i wskazówkami. Moja pierwsza rada: przestań myśleć jak programista, z którym chciałbyś pracować nad projektem i zacznij robić wszystkie rzeczy, których nienawidzisz, gdy przejmiesz czyjś kod (zmienne o jednej literze, skróty jeśli instrukcje itp. .) :)
ElPedro,
4

PHP, 174 bajty

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;

Pobiera dane wejściowe z STDIN; uruchom go -nRlub przetestuj online .

awaria

// 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
;
Tytus
źródło
4

Python 3, 196 bajtów

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,*'\\/_')

Użyłem kilku zmiennych, aby skrócić kod, ale w większości jest to proste. Oto dłuższa, bardziej czytelna wersja:

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='_')

Edycja: zmieniono na odczyt n ze standardowego, 181 → 196 bajtów

ArkaneMoose
źródło
3

Python 2 , 180 178 bajtów

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]])

Wypróbuj online!

ElPedro
źródło
3

Python 2.7, 194 195 191 187 185 bajtów

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,'_')

Wypróbuj online!

Otwórz, aby edytować sugestie, aby zmniejszyć. :)

Edytuj bajt 1: +1 - Kredyty dla ElPedro za wskazanie błędu w kodzie, który spowodował, że był on o 1 bajt dłuższy.

Edycja 2: -4 bajtów - Kredyty dla piyush-ravi za usunięcie niepotrzebnych argumentów.

Edytuj 3: -4 bajty - Jak tego nie widziałem? : P

Edytuj 4: -2 bajty - Zamieniając „\ n” na „;”

Koishore Roy
źródło
Wygląda na to, że pierwsza linia poniżej środkowej linii nie powinna tam być, gdy spróbuję tego lokalnie. wypróbowałem go dla danych wejściowych 4 i 3 i wygląda źle. Nie wycofam opinii, dopóki nie będziesz miał czasu na sprawdzenie, wyjaśnienie lub naprawienie. Moja wina, że ​​nie patrzyłem wystarczająco mocno :)
ElPedro,
Dzięki za zwrócenie uwagi na ElPedro . Naprawiono :)
Koishore Roy,
2

PowerShell , 165 bajtów

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/"

Wypróbuj online!

Pobiera dane wejściowe $n, ustawia $ana kilka spacji, $bna kilka znaków podkreślenia i ciąg łączy to spacje. Zostało to w przygotowaniu.

Pętle od $ndo do 1. Jeśli $n=1nastąpi to tylko raz. Każdej iteracji wykonujemy ciąg łączący spacje, a /, więcej spacji z licznikiem$i i a \. Wszystkie pozostały w przygotowaniu.

Potem przychodzi środkowa część z uchwytem, ​​który przypadkowo ma $a*3spacje w środku i $n+3 =znaki, a następnie a0 . Zostało to w przygotowaniu.

Jeśli $njest większy niż 1, to $n-1jest prawdą, więc wchodzimy w tryb warunkowy, w którym zapętlamy drugi kierunek, aby utworzyć dno naczynia. Jeśli $n=1, to nie potrzebujemy tej części ze względu na działanie linii. Wszystkie pozostały w przygotowaniu. Kończymy spacjami i podkreślamy za pomocą$a\$b/ dnem patelni.

Wszystkie te ciągi z potoku są wysyłane przez domniemane, Write-Outputże drukuje je z nowymi liniami między elementami.

AdmBorkBork
źródło
2

JavaScript + HTML - 346 bajtów

JavaScript - 314 bajtów, HTML - 32 bajty

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)>

Nie grał w golfa

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)">

cnorthfield
źródło
0

C, 249 bajtów

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);}

Wypróbuj online

Johan du Toit
źródło