S-Zinciri Çiz


27

Arka fon

Daha küçükken, tuhaf bir "S" şekli çizme yöntemini öğrenmiştim; Bugün, onu yeniden keşfettim ve çizmeye olan formül yaklaşımı nedeniyle ilginç bir mücadeleye yol açabileceğini düşündüm: P

"S" Çizimi

S aşağıdaki basit adımları izleyerek çizilebilir:

İlk önce, bunun gibi üç dikey çizgiden 2 satır çekin

| | |

| | |

Sonra, sol üst çizgiyi alt orta çizgiye ve üst orta çizgiyi sağ alt çizgiye bağlayın

| | |
 \ \
| | |

Son olarak, halihazırda çekilmiş olan resmin üzerine, yukarıdan aşağıya doğru çizin, böylece

  ^
 / \
| | |
 \ \
| | |
 \ /
  v

Gördüğünüz gibi, bu "S" şeklinde sonuçlanır. Ancak uzatıldığında (2 satırdan fazla çizerek), çok ilginç bir desen oluşturur. Göreviniz bu ilginç modeli yeniden üretmektir.

Görev

Burada bir tamsayı verildiğinde n >= 2, S çıktısını nyapılacak satırlarla birlikte verir. Çıktı bir işlevden döndürülebilir ve standart yöntemlerle girdi alınabilir. Hem genel görüntünün hem de her satırın sonundaki boşluk / boşluk beyaz. Ancak, satır satır boşluklarının tutarlı olması için "kırılmaması gerekir. Satır listesi olarak çıktı alabilirsiniz.

Test durumları

input
output
---

2

  ^
 / \
| | |
 \ \
| | |
 \ /
  v

---

8
  ^
 / \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ /
  v

---

10

  ^
 / \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ \
| | |
 \ /
  v

Bu bir yani en kısa kod kazanır! İyi şanslar,


13
Vikipedi çağıran Serin S , ve an'nin sonsuz sürümünü çağırırSS Chain
Stephen

Satır listesi olarak çıktı alabilir miyiz?
Bay Xcoder

@ Mr.Xcoder olabilir
caird coinheringaahing

@Stephen 10 dakika googling ve bu gelmedi.
Sorunun

@cairdcoinheringaahing Bu olabilirdi, görüntüleri aradım: P
Stephen

Yanıtlar:



10

C # (.NET Core) , 73 69 66 64 62 bayt

Barodus sayesinde iki bayt ve perl benzeri görünüm. İnt kullanmayı düşünmedin mi? boşlar için.

n=>$@"  ^
 / {string.Join(@"\
| | |
 \ ",new int?[++n])}/
  v"

Çevrimiçi deneyin!


1
Bu mevcut C # cevabının bir golfü olsaydı, asla söyleyemezdim. Aferin :-)
ETHproductions

Ne yaptığını açıklayabilir misin new string[n+1]? Onu daha önce hiç görmedim.
Ian H.

Bir dizi boş dizge AFAIK oluşturur. String.Join, aka {"", "", "", ""} ayırıcılı "\ \ n | | | | \ n \"
"zamiri monicareinstate

@someone Woah, daha önce bu numarayı hiç onaylamadım. Gerçekten havalı! (Ayrıca benim kötü, ben new string[n+1]bir tür zorlu dize yapıcı ve bir dizi bildirimi olmasına rağmen -.-)
Ian H.


6

05AB1E , 27 26 bayt

…^
/ð"\
| | |
\ "I×…/
vJ.c

Çevrimiçi deneyin!

Alternatif 27 byte versiyonu

'^…/ \©IF…| |û…\ \}\®R'v».c

Çevrimiçi deneyin!

açıklama

'^                             # push "^"
  …/ \©                        # push "/ \" and store a copy in register
       IF                      # input times do:
         …| |û                 # push "| | |"
              …\ \             # push "\ \"
                  }            # end loop
                   \           # discard top of stack (the extra "\ \")
                    ®R         # push "/ \" reversed = "\ /"
                      'v       # push "v"
                        »      # join stack on newlines
                         .c    # center each row

5
Kodunuz bana biraz fil gibi gözüküyor :)
Wojowu

Kelimenin tam anlamıyla SCARY, cevabım senin için ne kadar yakındı: '^…/ \©IF„| ûû„\ û}\®R'v).Cbakmadan.
Magic Octopus Urn

6

Japt , 34 25 23 bayt

" ^ /{ç'\²i|³1}/ v"¬¸ò5

Çevrimiçi test edin! Bir çizgi dizisi olarak çıktılar; -Rnewlines'a katılmak için flag eklendi. (Teşekkürler @Shaggy)

İlk İkinci deneme, geliştirilebilir olabilir ...

Nasıl çalışır

" ^ /{ ç'\²  i |³  1}/ v"¬ ¸  ò5
" ^ /{Uç'\p2 i'|p3 1}/ v"q qS ò5   Ungolfed
                                   Implicit: U = input number
        '\p2                       Repeat a backslash twice, giving "\\".
             i     1               Insert at index 1
              '|p3                   3 vertical bars. This gives "\|||\".
      Uç                           Make U copies of this string. U = 2: "\|||\\|||\"
" ^ /{              }/ v"          Insert this into this string.    " ^ /\|||\\|||\/ v"
                         q qS      Split into chars; join on spaces."  ^   / \ | | | \ \ | | | \ /   v"
                              ò5   Split into rows of length 5.    ["  ^  "," / \ ","| | |"," \ \ ","| | |"," \ / ","  v"]
                                   Joining on newlines gives "  ^  
                                                               / \ 
                                                              | | |
                                                               \ \
                                                              | | |
                                                               \ /
                                                                v"

Kömür Dayak ve SOGL bağlama? Harika iş!
Shaggy

Bu arada, bir satır dizisi oluşturabilirsiniz, böylece son 2 karakteri hizalayabilirsiniz.
Shaggy

@Shaggy Bu harika, şimdi kazanıyoruz!
ETHProductions

Son zamanlarda iyiydik :)
Shaggy

6

SOGL V0.12 , 26 25 18 bayt

°I-‘*"∑ūCƨΩ)¹‘@∑5n

Burada dene!

ETHproductions'un Japt cevabıyla aynı stratejiyi kullanır

Açıklama:

..‘           push "\|||\"
   *          repeat input times
    "..‘      push " ^ /ŗ/ v ", with ŗ replaced with POP. The reason why there's a trailing
              space is because otherwise it didn't have enough repeating characters to compress
        @∑    join with spaces
          5n  split to line lengths of 5

2
push "|" and " "Bu halt nedir halt nedir
Steven H.

1
@StevenHewitt bunlar aslında iki yerleşiktir, ancak onlara birlikte katıldım (diğer şeylerle yaptığım gibi) çünkü yakında birlikte kullanılan şeyleri ayırmanın gerekli olmadığını düşünüyorum
dzaima 20:17

5

JavaScript (ES6), 60 bayt

n=>`  ^
 / \\
${`| | |
 \\ \\
`.repeat(n-1)}| | |
 \\ /
  v`

Test Parçacığı


1
57: n=>' ^\n /${' \\ \\\n| | |\n'.repeat(n).slice(2)} \\ /\n v'(backticks ve literal
newlines

5

Kömür , 27 26 25 bayt

Carlos Alejo sayesinde -1 bayt. Sadece ASCII sayesinde -1 bayt.

  ^⸿ / ×\⸿| | |⸿ \ N/⸿  v

Çevrimiçi deneyin! Bağlantı ayrıntılı versiyonudur. # kömür-ayrıntılı-obfucation


1
Yazdır'ı arayarak (dizeleri eklemek yerine) sadece 1 bayt'ı kaydedebilir ve \r: `^ ⸿ / × \ ⸿ | | | ⸿ \ Iθ / ⸿ v`. Ayrıntılı sürüm .
Charlie

Ah ... Yeni \rhatlara akıl sağlamanın yolunu hatırlamam gerek. Teşekkürler!
tamamen insan


@ Yalnızca ASCII: P -
tamamen insan


3

Aslında , 49 bayt

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"

Çevrimiçi deneyin!

Açıklama:

"| | |"@α;lD" \ \"@α@Z♂ii"  v"" \ /"))" / \""  ^"
"| | |"@α                                          push a list containing n copies of the vertical lines
         ;lD" \ \"@α                               push a list containing n-1 copies of the diagonal connections
                    @Z♂i                           interleave
                        i                          flatten
                         "  v"" \ /"))             make the bottom
                                      " / \""  ^"  make the top

3

05AB1E , 38 bayt

…| |ûU"  ^
 / \"XI<F„ \2×X}" \ /
  v"»

Çevrimiçi deneyin!

…| |                         # Push "| |"
    û                        # Palindromize
     U                       # Store in X
      "..."X                 # Push the top three rows
            I<F      }       # One less than input times do:
               „ \           #   Push " \"
                  2×         #   Concatenate that with itself
                    X        #   Push "| | |"
                      "..."  # Push the last two rows
                           » # Join stack with newlines


3

C # (.NET Core) , 101 77 73 bayt

Her zaman cri sayesinde 24 bayt kurtardı ! Kevin Cruijssen
sayesinde 4 byte kurtarıldı !

n=>{var s="  ^\n / ";for(;n-->0;s+="\\\n| | |\n \\ ");return s+"/\n  v";}

Çevrimiçi deneyin!

Her zamanki gibi, C # da yinelenen dize bir acıdır.



@icrieverytim Ahhh, elbette, bu daha iyi.
Ian H.

Bazı baytları kaydetmek --n>=0için n-->0ve s+="/\n v";return s;olarak değiştirebilirsiniz return s+"/\n v";.
Kevin Cruijssen 21:17

1
@KevinCruijssen Teşekkürler, düzeltildi!
Ian H.

3

Retina , 38 bayt

.+
$*
1
¶|||¶x\\
^
 ^¶x/\
.$
/¶ v
x?
 

Çevrimiçi deneyin!

Her satırdaki baştaki boşluklara ve izleyen boşluklara bir sütun yazdırır.

açıklama

Ana bayt tasarrufları, tüm edebi parçalardaki boşlukları dışlamaktan ve bunları sonuna kadar yerleştirmekten kaynaklanıyor. Şekil, asla yan yana iki boşluk kalmayacak şekilde yapılandırılmıştır, bu yüzden hepsini kaldırırsak, sonunda her pozisyonda bir boşluk ekleyerek şekli neredeyse sabitleyebiliriz:

^
/\
|||
\\
|||
\/
v

dönüşür:

 ^ 
 / \ 
 | | | 
 \ \ 
 | | | 
 \ / 
 v 

Girinti hariç, bu neredeyse doğru. ^Ve viki boşluk eksik. Bunu düzeltmek aslında daha kolay, çünkü her birinin önüne açık bir alan eklersek, sonunda iki boşluk daha olacak. Eğik çizgileri olan çizgiler daha zordur çünkü ek bir alana ihtiyaç duyarlar. Bunu düzeltmek için, oraya bir yer tutucu karakteri ekleriz ( x). Boşlukları sonuna eklediğimizde, onları sadece her boş maç için eklemiyoruz, aynı zamanda isteğe bağlı olarak eşleştiriyoruz x. Yerine önünde bir boşluk ekleme Bunun anlamı x, xkendisinin yerini alır. Ve sonra, başka hiçbir şeyi değiştirmeden tam olarak bir boşluk ekledikten hemen sonra boş bir maç olacak . Yani kurmak istediğimiz şudur:x . Yani her şeyx

 ^
x/\
|||
x\\
|||
x\/
 v

bize istenen sonucu verecektir. İşte kod:

.+
$*

Girişi unary'ye dönüştürün.

1
¶|||¶x\\

Her 1birini |||ve x\\(ve öncü bir satır besleme) ile iki satıra dönüştürün .

^
 ^¶x/\

İlk iki satırı ^ve ile ekleyin x/\.

.$
/¶ v

Nihai Fix x\\son çevirerek \INTO /ve bir çizgi ekleme v.

x?
 

Her xveya boş eşleşmeyi bir boşlukla değiştirin.


Temiz bir yaklaşım. Pip çözümüm için birleştirme alanlarını kullanmanın bir yolunu bulmaya çalışıyordum, ancak farklı satırlardaki farklı sayıda öncü alan nedeniyle pek işe yaramadı.
DLosc


2

Pyth, 40 bayt

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v

Steven Hewitt'inkiyle oldukça benzer, ancak bağımsız olarak geliştirildi.

Çevrimiçi Deneyin

açıklama

K" / \ ""  ^"Kj+b+*2+d\\b*Q]*3"| "_K"  v
K" / \ ""                                 Set K = " / \ "
        "  ^"                       "  v  Draw the end points.
             K                    _K      Draw the slants.
                         *Q]*3"| "        Draw the vertical bars...
              j+b+*2+d\\b                 ... interspersed with slants.


2

Retina , 45 bayt

Bu oldukça basit bir çözüm.

.+
$*
^1
  ^¶ /x
$
 \ /¶  v
1
 \x
x
 \¶| | |¶

Çevrimiçi deneyin

Sanat bunun yerine 1 indeksli olsaydı, biraz daha kısa olurdu (44 bayt):

.+
  ^¶ /x$0$*1
$
 \ /¶  v
1
 \x
x
 \¶| | |¶

2

Pip , 45 42 33 bayt

"  ^
 / "."\
| | |
 \ "Xa."/
  v"

Çevrimiçi deneyin!

açıklama

Kod gerçekten basittir, ancak yeni satırlar okumayı zorlaştırır. İşte yapıyı görmenin daha iyi bir yolu:

"prefix" . "repeated" X a . "suffix"

S zincirinde tekrarlanan eleman

   \
| | |
 \

Bunu değişmez bir dize olarak alın ve tekrarlayın a( ailk komut satırı argümanı). Sonra öneki hazırlayın:

  ^
 /

ve son eki ekleyin:

   /
  v

ve yazdırın.

(Bunun bir tür <>> programı gibi görünmesini nasıl sağladığını seviyorum.)


Bu , Adventure Time'dan Lumpy Space Princess'e benziyor :)
YSC 21:17



1

Excel, 60 bayt

="  ^
 / \
"&REPT("| | |
 \ \
",A1-1)&"| | |
 \ /
  v"

Bunun Google Sheets ile çokgen olup olmadığını kontrol etmeyi düşünmelisiniz
Taylor Scott

1

PowerShell , 83 , 57 bayt

"  ^
 / \"
1..--$args[0]|%{"| | |
 \ \"}
"| | |
 \ /
  v"

Çevrimiçi deneyin!

@ AdmBorkBork'un önerileriyle,

  • forBir sayı aralığı kullanarak basitleştirildi .
  • Değiştirilen ;diziler ve birleştirilmiş dizeler.
  • Gereksiz bir değişken tanımı kaldırıldı.

forDöngüsünü kullanarak çok golf oynayabilirsin 1..--$args[0]|%{ }.
AdmBorkBork 21:17

Ayrıca, tasarruf etmek için bitişik dizgiler arasındaki değişmez satırları kullanabilirsiniz ";"ve $stamamen kurtulmak daha ucuzdur . 57 bayt
AdmBorkBork 21:17

Kaygan. Newline tasarrufunu seviyorum. Bu 1..$argsfırsatı kaçırdığım için çok komik . Bu sitede doğru görgü kurallarının ne olduğundan emin değilim. Cevabımda değişiklikler yapıyorum ve sizi borçlandırıyor muyum yoksa çözümünüzü ayrı bir cevap olarak mı gönderiyorsunuz?
root

Değişikliklerin düzenlenmesi ve kredi verilmesi uygun görgü kurallarıdır. PPCG'ye Hoşgeldiniz.
AdmBorkBork 21:17


1

Jöle , 32 bayt

Lynn's Python çözümünün sıkıcı limanı .

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”

Çevrimiçi deneyin!

Açıklama:

“\¶| | |¶ \ ”ẋṭ“  ^¶ / ”;“/¶  v”    Example input: 5
“\¶| | |¶ \ ”                       Literal string "\¶| | |¶ \ " (¶ = newline). Result: "\¶| | |¶ \ "
             ẋ                      Repeat as many times as the (implicit) input. Result: "\¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
              ṭ                     Tack that on the end of...
               “  ^¶ / ”            ...the string "  ^¶ / ". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ "
                        ;           Append...
                         “/¶  v”    The string "/¶  v". Result: "  ^¶ / \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ \¶| | |¶ \ /¶  v"
                                    Implicit print

1

Aslında , 30 bayt

Bu, ETHproductions'un Japt cevabıyla aynı prensiple çalışır, daha sonra fazladan boşluk eklenir ve tüm dizi örtük baskı için 5 sıraya bölünür. Çevrimiçi deneyin!

"\|||\"*" ^ /"+"/ v"@+#' j5@╪i

Ungolfing

            Implicit input.
"\|||\"*    Add the middle portion and multiply that by the input.
" ^ /"+     Append the top.
"/ v"@+     Append the bottom.
#           Convert into a list of strings
' j         Join with spaces.
5@╪         Split into a list of length-5 strings.
i           Flatten list onto the stack for implicit printing with newlines.

Nice job outgolfing Mego in his own language!
caird coinheringaahing

1

Jelly, 25 23 bytes

This works on the same principle as ETHproductions's Japt answer, where extra spaces are added later, and the whole string is split into strings of length 5 before printing. Try it online!

Edit: I knew there was a way to join the top and bottom of the S-chain in a golfier way. Thanks to Erik the Outgolfer for -2 bytes.

“\|||\”ẋ“ ^ /“/ v”jKs5Y

Ungolfing

                Left argument: n
“\|||\”ẋ        Repeat the middle portion n times.
“ ^ /“/ v”j     Append the top and bottom.
K               Join with spaces.
s5              Split into a list of length-5 strings.
Y               Print the strings with linefeeds.

“\|||\”ẋ“ ^ /“/ v”jKs5Y
Erik the Outgolfer

1

Charcoal, 25 bytes

↘^\¶/¶G→⁵↓⊕⊗N←⁵|¶ \↗¶\¶v/

Try it online! Link is to verbose version of code.


Funny how the other Charcoal answer is the same byte-count by using an completely different approach. I like yours more, though. The other is close to hard-coded, but yours is actually using Charcoal's strength.
Kevin Cruijssen

@KevinCruijssen You say strength, but that should really be printing diagonally; sadly the best I could do there was 29 bytes: ↘^\|¶/|\|¶|F⊖N↘\|\|¶|↘\|/¶|\v
Neil


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.