Casciitum Scribe


23

Giriş

Kaktüsler farklı boyutlarda, şekillerde ve renklerde gelir. Ancak, her batıda en ikonik kaktüs ve sahip olması gereken saguaro olmalı . Önemli özellikler klişe ve klişe görünüşünü tanımlayan boyutu ve kollarıdır.

Göreviniz ASCII dünyasına saguaro'yu getirmek. Bununla birlikte, - gerçek dünyada olduğu gibi - hiçbir saguaro diğerine benzemez, bu nedenle programınız değişen kol konfigürasyonlarında sagualar üretebilmelidir.

Bir saguaro örneği

  • Giriş: [0b10, 0b11]( [2, 3]ondalık olarak, giriş uzunluğu 2)
     _     
    / \    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

Özellikler

Bir saguaro her zaman aralarında değişken miktarlarda kök bulunan bir taban ve bir üste sahiptir. Gövde parçalarının kolları yoktur, sağda, biri solda ya da iki kolda.

Saguaro büyüme düzenleri, iki bitlik değerler içeren bir girdi listesi olarak verilmiştir. 00hiçbir silah, 01sağda 10bir kol, solda bir kol ve 11iki kol (hepsi ikili) anlamına gelir. Giriş listesinin uzunluğu saguaro'nun yüksekliğini belirler.

Saguaro bölümleri aşağıdaki gibidir. Kaktüs parçaları, basılmaması #gereken netlik için, ahtapotlarla çevrilidir .
Bir saguaro'nun yüksekliği, 4+6*knegatif olmayan tamsayılar için her zaman karakterlere eşittir k.

#############
#     _     # Saguaro top
#    / \    #
#############
# _  | |  _ # Stem, both arms
#/ \ | | / \# Stem id: 11
#| | | | | |#
#\ \_| |_/ /#
# \__   __/ #
#    \ /    #
#############
# _  | |    # Stem, left arm
#/ \ | |    # Stem id: 10
#| | | |    #
#\ \_| |    #
# \__  |    #
#    \ |    #
#############
#    | |  _ # Stem, right arm
#    | | / \# Stem id: 01
#    | | | |#
#    | |_/ /#
#    |  __/ #
#    | /    #
#############
#    | |    # Stem, no arms
#    | |    # Stem id: 00
#    | |    #
#    | |    #
#    | |    #
#    | |    #
#############
#    | |    # Saguaro base
#    | |    #
#############

Giriş

Daha önce de belirtildiği gibi, giriş iki bitlik bir değer listesinden oluşur ( 0, 1, 2, 3ondalık olarak). Herhangi bir makul formatta verilebilir. Listenin ilk elemanı saguaro'nun en yüksek gövde kısmına, ikinci elemanı en yüksek ikinci gövde kısmına vs. karşılık gelir.
İsterseniz, giriş listesinin uzunluğunu ek bir giriş olarak isteyebilirsiniz. Lütfen bunu yaparsanız cevabınızı belirtiniz.

Çıktı

Çıkış ASCII saguaro'nuz yukarıda açıklandığı gibi tam gövde parçaları kullanılarak yapılmalıdır. Bir çizgi üzerinde izleyen boşluklar ve izleyen yeni çizgiler yoksayılır; yukarıda belirtildiği şekilde daha az, daha az veya daha fazla yazdırabilirsiniz.

kurallar

Test durumları

  • Bir aykırı. Giriş:[0b01, 0b00, 0b01, 0b11]
     _     
    / \    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

  • Dalgalı kollar. Giriş:[0b10, 0b01, 0b10]
     _     
    / \    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
    | |    
    | |    

  • Bir sürü silah. Giriş:[0b11, 0b11]
     _     
    / \    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

  • Silahsız, ayrıca mızrak olarak da bilinir. Giriş:[0b00]
     _     
    / \    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    

  • Beden yok, bazıları buna genç kaktüs diyor. Giriş:[]
     _     
    / \    
    | |    
    | |    


girişi parça sayısı olarak alabilir miyim ve ardından her bir parça numarası ayrı ayrı mı? (örneğin, 1. test durumu olur 4 1 0 1 3)
dzaima

sondaki boşlukları görmezden gelebilir miyiz?
Brian H.

@ dzaima Olabilir.
Jonathan Frech

@BrianH. Evet; her satırda sondaki boşluklar göz ardı edilir.
Jonathan Frech

Yanıtlar:


10

Kömür , 50 49 bayt

↘_\¶/F²«J¹¦²Fθ¿﹪÷Iκ⁺¹ι²”{➙∧⊟≕δaL7YF¬⊕ρ↥↖_K”↓⁶↓²‖T

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

↘_\¶/

Üstünü çiz.

F²«

Her iki tarafın üzerinde döngü.

J¹¦²

Üst kısmın hemen altına atlayın.

Fθ

Her gövde parçasının üzerinde ilmekleyin.

¿﹪÷Iκ⁺¹ι²

Bir kol olup olmadığını test edin.

”{➙∧⊟≕δaL7YF¬⊕ρ↥↖_K”

Eğer öyleyse bir kol yazdırın.

↓⁶

Aksi takdirde, sadece dikey bir çizgi yazdırın.

↓²

Kökü yazdırdıktan sonra, tabanı yazdırın.

‖T

Diğer tarafı çizmeye hazır düşünün. Her iki taraf da çekildikten sonra, taraflar son konumlarına geri yansıtılır.


7

JavaScript (ES6), 210 bayt

Daha iyi bir yol olduğunu fark etmeden önce başka bir çözüme çok fazla zaman harcadım, bu da beni bu konuda çalışmak istediğim kadar zaman bırakmadı.

a=>`     _
    / \\`+a.map(([x,y])=>`
 1  | |  2
3 5 | | 4 6
7 7 | | 8 8
5 51| |24 4
 511${`| `[x]} ${`| `[y]}224
    ${`|\\`[x]} `.replace(/\d/g,m=>` _/\\|`[m%2?x*-~m/2:y*m/2])+`|/`[y],s=`
    | |`).join``+s+s

Dene

o.innerText=(f=
a=>`     _
    / \\`+a.map(([x,y])=>`
 1  | |  2
3 5 | | 4 6
7 7 | | 8 8
5 51| |24 4
 511${"| "[x]} ${"| "[y]}224
    ${"|\\"[x]} `.replace(/\d/g,m=>` _/\\|`[m%2?x*-~m/2:y*m/2])+"|/"[y],s=`
    | |`).join``+s+s
)(i.value=["11","10","01","00"]);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>


bu 00,01,10,11, ikili giriş yerine girdi olarak değişmez ya da 0,1,2,3. OP test durumlarını kullanarak bu başarısız olur.
Brian H.

@BrianH .: Girişte zorluk belirtmeden alıntı: " Herhangi bir makul biçimde verilebilir "
Shaggy

1
ancak "giriş, iki bitlik değerler listesinden oluşur (ondalıkta 0, 1, 2, 3)." ondan hemen önce ... (btw, aşağı oylama veya başka bir şey yapmamakta, bu delice zekice, bu sadece girdilerin uyuşmadığı kuralların yorumlanmasına göre)
Brian H.


3

Python 2 , 256 253 ... 205 203 199 bayt

r=[('     _',''),('/','\ ')]
for a in input()+[0]:r+=zip(*[['|'*6,'_|    |_,,/|  \/  |\,,||  ||  ||,,\| _\/_ |/,,\ ____ /,,\/'[i::2].split(',')][2-i&a>0]for i in 0,1])
for l in r[:-4]:print'%5s %s'%l

Çevrimiçi deneyin!


Diğer yazı dizilerinde olduğu gibi, ilk satırda kaçış ters eğik çizgisini ihmal edebilirsiniz.
Jonathan Frech

Sondaki tüm boşlukları kaldırarak 18 bayttan tasarruf edebileceğiniz anlaşılıyor.
Shaggy

for ...:\n r...\n r...-> for ...:r...;r...üç bayt kaydeder.
Jonathan Frech

1

PowerShell , 235 bayt

param($a)'     _
    / \'
($a|%{((,'1|'*6),('1|  _
1| / \
1|2
1|_/ /
1 __/ 
1/'),(' _ 2
/ \2
| |2
\ \_| |
 \__  |
    \ |'),(' _ 2  _
/ \2 / \
| |22
\ \_| |_/ /
 \__   __/
    \ /'))[$_]})-replace1,'    | '-replace2,' | |'
,'    | |'*2

Çevrimiçi deneyin!

PowerShell bir yok mapya ziptekrarlanan bölümlerin basit değiştirmeler - Başka bir şey ile sol böylece, dizeleri ters ya da gerçek kolay yolu.

İlk iki satır bir tam sayı dizisi olarak girdi alır ve kaktüsün tepesini çıkarır. Sonra döngüden geçip $ageçerli değere dayanan dört dizgiden oluşan bir dizi seçiyoruz. Bu dizgiler boru hattında bırakılır ve sonra -replaceuygun noktaları doldurmak için bizi kullanırız . Daha sonra kaktüsün dibini boru hattına da yerleştirdik.

Her şey boru hattından toplanır ve Write-Outputprogramın tamamlanmasında her unsur arasına yeni bir satır ekleyerek örtük bir olay gerçekleşir.


1

05AB1E , 76 75 bayt

„ _…/ \‚4ú»,v6F'|4ú"_ |/\"•Aö¡Èèj{^ë•5вèJ5ôNè©‚y1›èð'|®∞2äθ‚yÉèJ,}}„| 4úû=,

Çevrimiçi deneyin!


1
Meh, seni yenmeye çalışacağım, şüpheliyim.
Magic Octopus Urn

@ MagicOctopusUrn: İyi şanslar! Umarım başarabilirsin (ve belki de bir çatışmaya dönüşebilirsin: P)
Emigna

Bunu yenmek için iyi bir fikrim, "vaha / 05AB1E" sohbetine gönderdiğim komutun 30 byte b / c'si gibi sıkıştı. Güzel golf, eğer şimdi deneseydim, çok yakın olurdu.
Magic Octopus Urn

1

Java (OpenJDK 8) , 626 566 499 466 398 312 310 308 bayt

Bir ton golf edilebilir

a->{String r=" |,",g="    |",n="     _,    / \\,";boolean j,k;for(int e:a)n+=((k=e>1)?" _  |":g)+((j=e%2>0)?" |  _,":r)+(k?"/ \\ |":g)+(j?" | / \\,":r)+(k?"| | |":g)+(j?" | | |,":r)+(k?"\\ \\_|":g)+(j?" |_/ /,":r)+(k?" \\__ ":g)+(j?"  __/,":r)+(k?"    \\":g)+(j?" /,":r);return(n+g+r+g+r).replace(",","\n");}

Çevrimiçi deneyin!


1
Sen değiştirerek 2 bayt kaydedebilirsiniz {j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+için n+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+ve kapanış çıkarma }kuyu olarak for-döngü.
Kevin Cruijssen

Sen "silah" için yanlış bir yol 'yuvarlak olması 1ve 2.
Shaggy

0

SOGL V0.12 , 56 54 53 bayt

5⁷yΙ‚‘∑≡`a#¾‘O.{@.2%i»¹{"⁸G‘6∙;?X"j1>ζ╔²i[n¹‘5n}┼±↔}O

Burada dene!

Açıklama:

..‘                   push the ending part - "    | |\n    | |"
   ..‘O               output the starting part - "     _ \n    / \"
       .{             input times do
         @              push a space
          .2%           push input%2
             i»         push floor(prevInput/2)
               ¹        wrap the two in an array

{                   }   for each of the two numbers
 "..‘                     push "|    " - base stem
     6∙                   multiply vertically 6 times
       ;?       }         if the current item iterating over is truthy (i.e. != 0)
         X                  remove ToS - the regular stem - from the stack 
          "..‘              push "|  _ | / \| | ||_/ / __/ /    " - stem with an arm
              5n            split it into line lengths of 5
                 ┼        add that horizontally to the space pushed earlier (or whatever it's become)
                  ±↔      reverse ToS - the stem currently - horizontally
                     O  output the array of the current part
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.