ASCII Günün Sanatı # 1 - Çift Düğüm


47

Tam bir program ya da NSTDIN / komut satırı / ARGV üzerinden giriş olarak pozitif bir tamsayı alan bir fonksiyon veya fonksiyon argümanları yazıp, STDOUT'a karşılık gelen bir ASCII çift düğüm yazdırır N.

ASCII çift düğüm şöyle görünür:

  __  __  __  __  __  __
 /  \/  \/  \/  \/  \/  \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
 \ \/\ \/\ \/\ \/\ \/\ \/
 /\ \/\ \/\ \/\ \/\ \/\ \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
 \__/\__/\__/\__/\__/\__/

Yukarıdaki içindir N = 6

İşte diğer değerler için birkaç çift düğüm daha N:

Eğer N = 1çıktı çift düğüm şöyle görünür:

  __
 /  \
| /\ |
| \/ |
 \ \/
 /\ \
| /\ |
| \/ |
 \__/

İçin N = 2, onun

  __  __ 
 /  \/  \
| /\/ /\ |
| \/ /\/ |
 \ \/\ \/
 /\ \/\ \
| /\/ /\ |
| \/ /\/ |
 \__/\__/

İçin N = 3, onun

  __  __  __ 
 /  \/  \/  \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \ \/\ \/\ \/
 /\ \/\ \/\ \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \__/\__/\__/

ve benzer şekilde, desen devam eder ve daha büyük bir değer N.

Ayrıntılar :

  • Giriş her zaman değerinden daha büyük bir pozitif tam sayıdır 0.
  • Sondaki yeni satır isteğe bağlıdır
  • Her satırda hiçbir boşluk bırakılmamalı veya her satırın uzunluğunu sağlayacak kadar yeterli boşluk olmamalıdır 4*N + 2.
  • Belirtilen desenin bir parçası olmayan hiçbir ön boşluk olmamalıdır.

Bu , bayt cinsinden en kısa kod kazanır.


Seri Lider Tablosu

Bunu bir dizi ASCII sanat mücadelesine dönüştürüyorum ve bu yüzden dizi için bir lider kurulu ekliyorum (Martin tarafından snippet). Yanıtlarınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak her bir başlığa başlıkla başlayın:

# Language Name, N bytes

N, gönderiminizin büyüklüğüdür. Puanınızı yükseltirseniz, başlıkları üstüne vurarak eski skorları başlıkta tutabilirsiniz. Örneğin:

# Ruby, <s>104</s> <s>101</s> 96 bytes


Şimdiye kadar seri

1. çift düğüm

2. Akış Yılanları

3. Çince Tapınaklar

4. Zodyak İşaretleri

5. Rastgele Elmas Tilings


1
N = 3 için sağ kenar neden farklı?
aditsu

@aditsu Haha. 4 gün, 3K görüş, 11 cevap ve bunu ilk fark eden sizsiniz: D. Sabit!
Doktor,

Yanıtlar:


12

CJam, 55 bayt

İnek, bunun yüzünden oldukça feci şekilde çarptı ... neyse, sonunda ISO 8859-1 55 bayt ile geldim :

"²îå<63Åhbغ¢dräOä[æTZ"246b5b"|_ \/"f=9/4/~2/\ri*2>*zN*

veya bu alternatif :

"ô/Ht]õDz1M;í,D¯Tmä$:r"246b5b"_/\ |"f=9/2/~+ri*2>\++zN*

Başlangıçta düz ASCII içinde yapmaya çalıştım, ancak yalnızca 58 bayta indi :

"C]VA~`+-WIt*n_I?FanSEo*b"128b5b"_/|\ "f=9/4/~2/\ri*2>*zN*

ve yine, bir alternatif :

"1,*Ap7c?UvI$yQHqHqs~=}n"153b5b"_ /|\\"f=9/2/~+ri*2>\++zN*

Açıklama:

Fikir, benzersiz parçaları (sol kenar, sağ kenar ve orta desen) uygun bir şekilde kodlamak, orta kısmı gerektiği gibi tekrarlamak ve bir araya getirmek. Kod Dennis'in cevabına birçok yönden benzer oldu; Onu kopyalamaya çalışmadım, ancak birçok farklı yaklaşım denedim (daha fazla simetri ve tekrardan yararlanma dahil) ve bu en iyi şekilde çalıştı.

Sol ve sağ kenarları bu şekilde birleştirdim:

    
 /\ 
|  |
|  |
 \/ 
 /\ 
|  |
|  |
 \/ 

Orta desen 4 sütuna sahiptir, ancak bunlar N-0.5 kez tekrarlanır, yani bir tekrar ikiye kesilir. Kolaylık sağlamak için bu deseni kullandım:

  __
\/  
/ /\
 /\/
/\ \
\/\ 
/ /\
 /\/
/\__

ve ilk tekrarın ilk yarısını kaldırdı.

Böylece parçalara katıldım ve onları bu şekilde çalışmak daha kolay olduğu için devredilen biçimde kodladım. Birinci ve üçüncü program bu dizgiyi kodlar:

 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
  ||  || 
 /  \/  \
 \  /\  /
  ||  || 

(yeni satırlar olmadan), orta + kenarların aktarılması. İkinci ve dördüncü program ("alternatifler") bu dizgiyi kodlar:

  ||  || 
 /  \/  \
 \  /\  /
  ||  || 
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_

yine, yeni satırlar olmadan ve bu kenarların ortası + ortalarının aktarılmasıdır.

İşte kodun bu ortak kısmı şu şekilde çalışıyor:

"…"        encoded string (constructed via the reverse process,
           using a suitable base that gives valid characters)
246b       convert the string to an integer, treating each character as a digit
           in base 246 (or other bases in the ASCII versions)
5b         convert the number to base 5, obtaining 72 digits from 0 to 4,
           representing the 5 different characters we have
"|_ \/"f=  convert the digits to their corresponding characters
           (each program uses a different assignment order)
9/         split the resulting strings into 8 strings of 9 characters
           if viewed as lines, they look exactly like the 2 patterns shown above

Bundan sonra, uygulama biraz farklıdır. Birinci ve üçüncü programda biz var:

4/     split the lines into groups of 4 - the middle part and the edges
~      dump the two 4-line parts onto the stack
2/     split the second part (the edges) into 2 groups of 2 lines
       (left edge and right edge)
\      swap the edges with the middle part
ri*    read the input, convert to integer (N) and repeat the middle part N times
2>     remove the first 2 lines (first half of first repetition)
*      join the 2 edges using the repeated middle part as a separator
z      transpose the result back to the desired form
N*     join with newlines

İkinci ve dördüncü (alternatif) programlarda biz:

2/     split the lines into groups of 2
       (left edge, right edge, middle first half, middle 2nd half)
~      dump all the groups onto the stack
+      join the two middle halves into a single middle group of 4 lines
ri*    read the input, convert to integer (N) and repeat the middle part N times
2>     remove the first 2 lines (first half of first repetition)
\      swap the repeated middle with the right edge
+      concatenate the middle with the right edge
+      concatenate the left edge with the rest
z      transpose the result back to the desired form
N*     join with newlines

Ne kadar süre 1>W<kısaltmaya çalıştığımdan emin değilim . Kodlamadan önce sadece diziyi döndürmek zorunda kaldım ve kullandım 2>...
Dennis

23

CJam, 103 92 83 69 66 57 bayt

"O5àäªÞáKZò,_÷%SJ«Ò"248b5b"/ \_|"f=9/4/~ri*1>W<+2m<zN*

CJam tercümanında çevrimiçi olarak deneyin .

Fikir

Desen sütunlarla satırları (boşluklarla sağa doldurulmuş) dönüştürdüğümüzde çok daha belirgin hale gelir.

Girdi 3 için, örneğin:

  ||  || 
 /  \/  \
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \  /\  /
  ||  || 

İlk iki ve son iki satır özeldir, ancak diğerleri aynı deseni tekrar tekrar tekrar eder.

Böylece N girişi için tek yapmamız gereken tekrar etmek.

 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /

N kez ilk satırı ile değiştirin.

  ||  || 
 /  \/  \

ile son satır

 \  /\  /
  ||  || 

ve, nihayet, sütunları olan satırları transpoze edin.

kod

"O5àäªÞáKZò,_÷%SJ«Ò"

248b  e# Convert the string (array of code points in base 248) to an integer.
5b    e# Convert the integer to the array of its digits in base 5.

      e# This pushes the following array:

      e# [ 1 2 1 1 0 2 1 1 0 1 1 4 4 1 1 4 4 1 1 1 4 4 1 1
      e#   4 4 1 1 0 1 1 2 0 1 1 2 1 0 1 0 2 0 1 0 2 3 1 0
      e#   2 1 2 0 2 3 3 1 2 0 2 1 2 0 3 1 2 0 1 0 2 0 1 0 ]

"/ \_"

f=    e# Retrieve the chars that correspond to the indexes in the array.

      e# This pushes the following string:

      e# " \  /\  /  ||  ||   ||  ||  /  \/  \ / /\/ /\_ /\ \/\__ \/\ \/_ \/ /\/ /"

9/4/~ e# Divide into groups of 4 strings of length 9.

      e# This pushes the following arrays:

      e# [ " \  /\  /"   "  ||  || "   "  ||  || "   " /  \/  \" ]
      e# [ " / /\/ /\"   "_ /\ \/\_"   "_ \/\ \/_"   " \/ /\/ /" ]

ri    e# Read an integer from STDIN.
*     e# Repeat the last array that many times.
1>W<  e# Remove the first and last string from the array.
+     e# Concatenate both arrays.
2m<   e# Rotate the concatenated arrays two elements to the left.
z     e# Zip the array of strings (transpose rows with columns).
N*    e# Join the strings of the array, separating by linefeeds.

12

Javascript ( ES7 Taslağı ), 169 163 160 158 bayt

Düzenleme: -6 desen dizesinden bazı tekrarları elemek için bir şablon dizesi kullanarak.

Düzenleme: -3 geçiş yaparak slice(0,-2)için slice(2)desen dizesini yeniden düzenleyerek.

Düzenleme: byerine yerine loop ve -2 bir modulo ile dize 4 aazaltarak a.

F=N=>[(a='  ||'[i%4])+b[i]+`  __0\\/ ${c=' 0/ /\\0 /\\/0/\\'} \\0\\/\\${c}__`.split(0)[i].repeat(N).slice(2)+(b+b)[9-i]+a for(i in b=' /  \\/  \\')].join(`
`)
<input id="stdin" value="4" />
<button onclick="stdout.innerHTML=F(stdin.value)">Run</button><br />
<pre id="stdout"></pre>

Yorumlananlar:

F=N=>[ // define function F, start array comprehension to generate each line
    (a = '  ||'[i % 4]) + // first character of the line, store copy in a
    b[i] + // second character of each line
        `  __0\\/ ${c=' 0/ /\\0 /\\/0/\\'} \\0\\/\\${c}__`. 
        // list of patterns for each line delimited by 0's
        // results in string: '  __0\/  0/ /\0 /\/0/\ \0\/\ 0/ /\0 /\/0/\__'
        split(0)[i]. // split by 0, get index at i
        repeat(N). // repeat N times
        slice(2) + // chop off the first 2 characters
    (b + b)[9 - i] + // get opposite of second character, b+b to get a space at index 9
    a // repeat first character (a)
    for(i in b = ' /  \\/  \\') // runs for each index in character map b
].join(` // join resulting array with newlines
`)

Sanırım ipi daha önce .split(0)ile değiştirebilirsin ('__ 0 '+(r='\\/0/\\/ 0\\/ /0 ')+r+'0\\/ /0__/\\').
kusur,

@flawr Benzer bir yöntem kullanarak daha da yoğunlaştırabiliyordum :)
nderscore

Eğer başarılı olursa 0, üzerinde, bir göreceksiniz 8.
Ismael Miguel,

Bunlar ne `` ve ${...}tam olarak ne?
kusur,

@flawr backtick `sözdizimi bir şablon dizgisini bildirir . İçerideki herhangi bir şey ${}bir javascript ifadesi olarak değerlendirilir.
nderscore

9

Perl, 134 129

print s/...\K.{4}/$&x~-"@ARGV"/er=~y!iolp!| /\\!r,$/for
map/i/?$_.oi:"o$_$_".o,o__o,loop,@x=(iolplolp,ioplolpl),popl,lpop,@x,p__l

Bir komut satırı parametresi alır:

$ perl ~/knot.pl 3
  __  __  __  
 /  \/  \/  \ 
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \ \/\ \/\ \/ 
 /\ \/\ \/\ \ 
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \__/\__/\__/ 

8

JavaScript ( ES6 ), 165 166

Düğüm elemanları:

  • '__' ve '/ \' temelli 2 üst satır
  • '/ \ /' Temelli 2 dış satır, tekrarlanan ve 'içine alınmış | ... | '
  • '... /' ve '/ ... \' içine tekrarlanan ve ekli '\ / \' temelli 2 iç satır
  • yukarıdaki aynı 2 dış satır
  • '\ __ /' tekrarına dayalı 1 alt satır

Ungolfed

K=r=>
{
  R = x => x.repeat(r);
  S = d => R(elem).slice(d,d-2); // use global 'elem' that must be assigned before the call
  elem = '/\\/ '
  outer = '\n| ' + S(0) + ' |\n| ' + S(1) + ' |\n '
  elem = '\\ \\/'
  inner = '\\' + S(1) + '/\n /' + S(0) + '\\'
  return R('  __') + '\n ' + R('/  \\') + outer
  + inner + outer + R('\\__/')
}

golfed

K=r=>(S=d=>(R=e=>e.repeat(r))(e).slice(d,d-2),o=`
| ${S(0,e='/\\/ ')} |
| ${S(1)} |
 `,R('  __')+`
 ${R('/  \\')+o}\\${S(1,e='\\ \\/')}/
 /${S(0)}\\${o}`+R('\\__/'))

// TEST

function go() {
  O.innerHTML=K(I.value)
}

go()
<input id=I value=5><button onclick='go()'>-></button><br>
<pre id=O></pre>


2
Geçmeyi dene 0ve 4 bacaklı bir örümcek kazanacaksın.
Ismael Miguel,

8

C ++, 1530 639 479

Bu kısadan saptığım eğlenceli bir meydan okumaya benziyordu.

#include "stdafx.h"
#include <iostream>
#include <sstream>
using namespace std;
string a=" __ ",b="/  \\",c=" /\\",d="/\\/ ",f="\\ \\/",g="/\\\ \\",r="\\__/",o="",e=o,j="|";
string q(int n,string r,string x="",string m=" ",string t=" "){string z=o;for(int i=0;i<n;i++){z+=r;if(i!=n-1)z+=x;}return m+z+t+"\n";}
int main(){int x,y;cin>>x;cin>>y;e+=q(x,a)+q(x,b);for(int i=0;i<y;i++){e+=q(x,c,"/",j," |")+q(x-1,d,o,"| \\/ ",j);if(i!=y-1){e+=q(x,f)+q(x,g);}}e+=q(x,r);cout<<e;}

Başvurumun büyüklüğünün bayt sayısını nasıl ölçeceğimden emin değilim, ancak çözümlemeyi seçip cevabımı güncelleyeceğim.

Uygulamam daha küçük olabilir, ancak hem x hem de y'de döngüler var, ve bunun gibi: D


1
PPCG'ye Hoşgeldiniz! Puanınız, 1530 bayt olan kaynak kodunuzun boyutudur. Yorumları ve boşlukları kaldırarak baytları kaydetmeye başlayabilir ve değişken ve işlev adlarını kısaltabilirsiniz.
Dennis,

Wowzor daha sonra o kadar büyük dinlenme onu aşağı indirmeye çalışacağım: D
Spaceman

6

Python 2, 156 151 147 141 139

düzenleme 1: işlev yerine input () işlevini kullanmak üzere düzenlenir.

düzenleme 2: kullanılmış str.join ve bazı gereksiz karakterleri silmek için var c öğesine eklendi.

düzenleme 3: gereksiz bazı dize kaçış dizileri kaldırıldı.

düzenleme 4: a = n-1 yerine kullanılan ~ -n

Bu benim ilk kod golf programlamak için iyi eğlenceliydi!

n=input()
a='/\/ '*~-n
b='\ '+'\/\ '*~-n+'\\'
c='\n| '+a+'/\ |\n| \/ '+a+'|'
print'\n '.join(('  __'*n,'/  \\'*n+c,b+'/','/'+b+c,'\__/'*n))

Dosya boyutunu 1 bayt küçültmek için son satırsonu karakterini kaldırmak için harici metin editöründe n.py olarak kaydedin, modülü çalıştırın ve numaranızı girin.


Programlar yürütme ifadesinden hemen sonra numarayı girmenize izin verirseniz, daha sonra 151 bayta kadar
soyabilirim

input ()STDIN'den okurken genellikle tamam kabul edilir.
15'de 16

Görüyorum ki iki kez a=n-1yazarak tasarruf etmek için para biriktirmişsindir *(n-1), ama yapıyorsun*~-n .
xnor

Yine de her iki şekilde de aynı miktarda karakter var, çünkü değeri iki kere kullanıyorum, fakat iyi bir ipucu.
micsthepick

Python'un dizelerde ters eğik çizgileri işleme biçiminde bazı baytları kaydedebilirsiniz, bunları her zaman kodlamanız gerekmez. Bkz stackoverflow.com/a/16973452/3351622
Matty

5

Python 2, 139 133 129 bayt

n=input()
for i in range(9):w=' ?|'[i&2];s=' / /\/ /\_ /\ \/\__ \/\ \/_ \/ /\/ /'[i::9]*n;s=(s,' %s '%s[1:-1])[i%4>1];print w+s+w

Bu sadece satır çizer ve yazdırır.

Ungolfed formunda kod İşte:

n=int(input())
# The list with all the knot pieces
l= [' __ ',
    '/  \\',
    ' /\/',
    '/\/ ',
    '\ \/',
    '/\ \\',
    ' /\/',
    '/\/ ',
    '\__/']
# The first and last columns
w = '  ||  || '
# Loop for each row
for i in range(9):
    # Exception for the first and last character in the knot (in some rows)
    s = l[i]*n
    if i % 4 > 1:
        s = ' ' + s[1:-1] + ' '
    # Print the knot for this row
    print(w[i] + s + w[i])

Düzenleme: # 3 cevabımla uyumlu olması için dili python 2 olarak değiştirdim (ve ayrıca 6 bayt daha tasarruf ettim)


İnanıyorum w=(3*' ||')[i] -> w=' |'[i&2]ve ' '+s[1:-1]+' ' -> ' %s '%s[1:-1]çalışıyorum (birincisi iki
boşluktan

@ Sp3000 Teşekkürler! Bu ilki oldukça akıllı. Düşünmeliydim ' ||'[i%4], ama bu daha kısa ( iki boşluklu).
Matty

3

C, 159 bayt

j,k;f(n){char*t="7>771I;M6CMI93;IIB;;MI1M;M6CMI93;IIB;>MI";for(n*=4;t[j/2];++k,k%=n+3,j+=k-n?k%n<3||k%4-2?1:-3:3)putchar("\n _|/\\"[(t[j/2]-48)/(j%2?1:6)%6]);}

Beyaz boşluk ve diğer bazı okunabilirlik iyileştirmeleri ile:

#include <stdio.h>

int j, k;

void f(int n) {
    char *t = "7>771I;M6CMI93;IIB;;MI1M;M6CMI93;IIB;>MI", *m = "\n _|/\\";
    for (n *= 4; t[j / 2];
         ++k,
         k %= n + 3,
         j += k - n ? k % n < 3 || k % 4 - 2 ? 1 : -3 : 3)
        putchar(m[(t[j / 2] - 48) / (j % 2 ? 1 : 6 ) % 6]);
}

Bu öncelikle şablon tabanlıdır. Şablon t, çıkışın 9 olası sütununun tümünü içerir; bu, izleyen satırsonu olmadan 9 * 9 = 81 karakter veya 80'i kodladığı anlamına gelir.

Desende yalnızca 6 farklı karakter olduğundan (yeni satır karakterleri dahil), çiftlerini tek bir şablon karakterinde paketledim, bu da şablonun 40 karakterde saklanabileceği anlamına gelir. Daha sonra 6 * 6 = 36, ASCII karakterleri 48 ila 73 olarak kodlanan muhtemel karakter çiftleri vardır. Orijinal karaktere dönüş, küçük arama tablosu tarafından verilir m.

Mantığın geri kalan kısmı temel olarak kalıp nzamanlarını tekrarlamaktır , bu da şablonda 4 karakter atlayarak, her bir sıranın başlangıç ​​ve bitiş kısımlarını doğru şekilde yayar.


2

PHP 5.5.3, 488 , 466

<?php 
function k($n){$r=array_fill(0,9,'');for($i=0;$i<$n;$i++){$r[0].=($i==0)?"  __ ":" __ ";$r[1].=($i==0)?" /  \\":"/  \\";$r[2].=($i==0)?"| /\\/":(($i==$n-1)?" /\\ |":" /\\/");$r[3].=($i==0)?"| \/ ":(($i==$n-1)?"/\/ |":"/\/ ");$r[4].=($i==0)?" \\ ":(($i==$n-1)?"\\/\\ \\/":"\\/\\ ");$r[5].=($i==0)?" /\\ ":(($i==$n-1)?"\\/\\ \\":"\\/\\ ");$r[6]=$r[2];$r[7]=$r[3];$r[8].=($i==0)? " \__/":"\__/";}foreach($r as $o){if(strlen($o)-2 !== 4*$n)$o.=" ";echo $o."\n";}}

Operatörler etrafındaki, örneğin =ve etrafındakilerin gereksiz boşluklarını kaldırarak bazı karakterleri kaydedebilirsiniz .=.
ProgramFOX,

Thx Cevabı düzenledi
Med

2

Prolog (SWI), 285 bayt

a(N):-b(N,"  ||  || "," /  \\/  \\","_ /\\ \\/\\_","_ \\/\\ \\/_"," \\/ /\\/ /"," / /\\/ /\\"," \\  /\\  /"). b(N,[A|G],[B|H],[C|I],[D|J],[E|K],[F|L],[Y|Z]):-c(N,[Y,A],[E,F,C,D],T),writef([A,B,C,D|T]),nl,b(N,G,H,I,J,K,L,Z). c(1,L,_,L):-!. c(N,L,X,O):-M is N-1,c(M,L,X,T),append(X,T,O).

(Boşluk ile):

a(N):-
    b(N,
    "  ||  || ", 
    " /  \\/  \\", 
    "_ /\\ \\/\\_", 
    "_ \\/\\ \\/_", 
    " \\/ /\\/ /", 
    " / /\\/ /\\", 
    " \\  /\\  /").

b(N,[A|G],[B|H],[C|I],[D|J],[E|K],[F|L],[Y|Z]):-
    c(N,[Y,A],[E,F,C,D],T),
    writef([A,B,C,D|T]),
    nl,
    b(N,G,H,I,J,K,L,Z).

c(1,L,_,L):-!.
c(N,L,X,O):-
    M is N - 1,
    c(M,L,X,T),
    append(X,T,O).

İpleri kesmenin birkaç yolunu denedim, ancak hiçbiri bu saf sütun yöntemini geçemedi.


2

JavaScript (ES6), 158 154 148 137 bayt

n=>`    __
 /\\/ - \\/
 /\\/\\-__/`.replace(/-/g,` \\
| / /\\ |
|  /\\/ |
 \\/\\`).replace(/(..)(....)/g,(_,l,m)=>l+m.repeat(n).slice(2))

Düzenleme: @ Bálint sayesinde 11 bayt kaydedildi.


@ Bálint Ama /(..)(.{4})/g13 byte, aynı /(..)(....)/g...
Neil

@ Bálint Aslında önceki 4-byte tasarrufumun bunu yapmama izin verdiğini fark ettim, fakat o zaman bilgisayardan uzaktaydım.
Neil

@ Bálint Güzel! Tekrarlanan \\ / \\ segmentten kaçınmaya çalıştım ama daha uzun bir tekrarlanan alt dize bakmayı düşünmedim.
Neil

1

Java, 339 330 bayt

class D{int n,i;public static void main(String[]a){new D(new Integer(a[0]));}D(int k){n=k;r("  __");p("\n ");r("/  \\");c();r("\\ \\/");p("\n ");r("/\\ \\");c();r("\\__/");}void c(){p("\n|");--n;r(" /\\/");p(" /\\ |\n| \\/");r(" /\\/");++n;p(" |\n ");}void p(String s){System.out.print(s);}void r(String s){for(i=n;i>0;--i)p(s);}}

İlk çözümümde o kadar çok "statik" anahtar kelime vardı ki yöntemleri ve nitelikleri statik olmayan hale getirmek ve kodu yapıcıda çalıştırmak daha kısaydı.


1

PowerShell, 228 207 181 133 bayt

%{"  "+"__  "*$_;" "+"/  \"*$_;$b="|"+" /\/"*$_+"`b |";$b;$c="| "+"\/ /"*$_+"`b|";$c;" "+"\ \/"*$_;" "+"/\ \"*$_;$b;$c;" "+"\__/"*$_}

Hatırlatma - PowerShell, otomatik olarak stdin'de beklemiyor. Örneğin bir şeyi boruya sokmalısınız3|%{...}


0

SmileBASIC, 149 bayt

INPUT N?"  __"*N
A$="| / /\ |
B$="|  /\/ |
K" /\/  \
K A$K B$K" \/\ \/
K" /\/\ \
K A$K B$K" \/\__/
DEF K A?SUBST$(A,2,4,MID$(MID$(A,2,4)*N,2,N*9))END

Her bir dize deseni içeren AACCBBDDoluşturmak üzere genişletilir parça daha sonra, ilk 2 karakter kaldırılır N kez tekrar edilir. (Karakterleri baştan çıkarmak, başından sonuna kadar kısaydı)AABB(CCBB)*DDCCBB

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.