Kıvrımlı lambam


13

Hareket ederken lambamı kırdım. Şimdi yeni bir taneye ihtiyacım var. Beni lamba yapmak senin işin! Hangi boyutta istediğimi bilmiyorum, ama kıvrımlı bir boyut istediğimi biliyorum.

Programınız / işleviniz bir sayı girişi almalı ve bu kadar çok dalgalı / çarpma ile bir lamba yazdırmalıdır.

Örnekler:

Giriş:2

Çıktı:

/ - \
 ()
 ()
/ __ \

Giriş:3

Çıktı:

/ - \
 ()
 ()
 ()
/ __ \

Giriş:5

Çıktı:

/ - \
 ()
 ()
 ()
 ()
 ()
/ __ \

Kurallar:

  • 0 ve negatif sayılar önemli değil
  • Lambalara (bu zorluk) daha fazla çeşitlilik vermek için lamba gölgesini değiştirmeniz gerekir .
    • Onlar olmalı 4 geniş karakterler ve 1 karakter yüksek.
    • Lamba gölgeli olmayan şekiller de dahil olmak üzere herhangi bir şekilde olabilirler.
    • Boşluk içermemelidir.
    • Baz aynı kalmalıdır.
  • Abajurunuzla örnek bir giriş ve çıkış göstermelisiniz.
  • En kısa kod kazanır!

Ama hiç dalgalı değil !. Girişler> 5 dalgalı yapsa çok isterdim.
Doktor,

22
İndirdim. Bence bu sıkıcı bir ASCII sanatı. Ortada tekrarlanan bir bölüm var ve parçalar arasında üst üste binme yok, bunlar da sıkıştırılamayacak kadar kısa. Sadece formu var ABBB..BBBC. Bir bölümü değiştirme gereksinimi, insanların kısa bir yerleşik dize kullanacağı anlamına gelir.
xnor

7
Hepiniz aşağı oylamayı durdurabilirsiniz! Bence OP mesajı aldı.
xnor

1
@xnor Fakir adam için üzülüyorum. Bu muhtemelen şimdiye kadar en çok indirilen sorulardan biri: / i.stack.imgur.com/T4A7X.jpg
Beta

1
Hiçbir şekilde oy kullanmadım, ancak ASCII Şimşek Çizimi ile benzerlik göz önüne alındığında , downvoters anlayabiliyorum. Daha yüksek lamba için daha büyük bir tabana sahip olmak veya sadece her bir n.
manatwork

Yanıtlar:


4

Pyth - 16 bayt

N buna önceden başlatıldığından gölge için tırnak işaretleri kullanır.

*N4VQ+d`();"/__\

Burada çevrimiçi deneyin .

* 4            String repetition 4x, implicit print
 N             Preinitialized to Quote
VQ             For N in range(Q)
 +             String concat
  d            Space
   `()         Repr of empty tuple
;              Close for loop
"/__\          Implicitly print string, implicit close quote

5 için örnek:

""""
 ()
 ()
 ()
 ()
 ()
/__\

7

Kardan Adam 0.2.0 , 42 karakter

)vg10sB]"[--]
"sP:" ()
"sP;bR"/__"sP92wRsP

Örnek çalışma:

llama@llama:...Code/snowman/ppcg53483lamp$ snowman lamp.snowman
5
[--]
 ()
 ()
 ()
 ()
 ()
/__\

Bu yüzden sadece bu zorluğu çözdüğümde dizelerdeki ters eğik çizgilerden kaçma yeteneğini uygulamayı unuttuğumu fark ettim. Bu kesinlikle bir sonraki versiyonda bir şey olacak, ancak şimdilik, son satırı yazdırmak için yaptığım şey:

"/__"sP92wRsP

92bir ters eğik çizgi için ASCII kodu wR, bir dizide sarar ve şimdi ile yazdırabilirsiniz sPçünkü Snowman "dizeleri" aslında sadece sayı dizileri.


7
Bir kar lambası yapmak ister misiniz?
Alex

3

> <> , 43 41 38 bayt

"\__/"aiv
"&-1v!?:<&a" ()
~"!_\
?!;o>l

Kod noktası aracılığıyla giriş, örneğin boşluk 32'dir. Bu, programın kendi kodunun bir kısmını abajur olarak kullanır ve uydu anteni gibi görünen bir şeyle sonuçlanır:

~\_!
 ()
 ()
 ()
 ()
 ()
/__\

(@Randomra sayesinde öneri)

Üç bayt daha, biraz daha özelleştirme eklemek için üçüncü satırı değiştirebiliriz:

"\__/"aiv
"&-1v!?:<&a" ()
__\"\~"/
?!;o>l

Bu, daha iyi bir şekilde yerleştirilmemesi nedeniyle ışığı yukarı doğru çeken lambalardan birini üretir:

\__/
 ()
 ()
 ()
 ()
 ()
/__\

3

R, 54 52 46 bayt

cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")

Bu versiyonda, giriş ve çıkış neredeyse birbirine karışıyor:

{in / out} PUT:

> cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")
1: 4
2: 
Read 1 item
RRRR
 ()
 ()
 ()
 ()
/__\

@Manatwork yorumu sayesinde 1 : -2 bayt DÜZENLE .
DÜZENLEME 2 : -6 bayt. Tam kredi @manatwork'e tekrar gidiyor


1
Görünümden başka hiçbir şeyi değiştirmez: " /_\\"olması gerekir "/__\\". BTW, bu \rgerekli mi?
manatwork

@manatwork Lambanın ayağının şeklini değiştirerek daha kararlı hale getirdi + \rbeni iki bayt kurtardı! Kodumu tekrar okumalıydım! Teşekkürler !
Frédéric

1
Hmm… Tuhaf bir araç. Etkileşimli olmayan bir şekilde çalışmasını sağlayamaz. Her neyse, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")işe yarıyor gibi görünüyor.
manatwork

@manatwork: iyi ... Bunun işe yarayacağını hiç düşünmemiştim! Gerçekten güzel bir çözüm. R sürprizlerle dolu!
Frédéric

Bonjour Frédéric, eğer hala PPCG'de aktifseniz 5 bayt tasarruf edebilirsiniz
JayCe



2

JavaScript ES6, 34 bayt

i=>`|==|
${` ()
`.repeat(i)}/__\\`

Yeni satırlar önemli

5 girişli örnek:

|==|
 ()
 ()
 ()
 ()
 ()
/__\

2

sed, 28 bayt

s#.# ()\n#g
s#^\|$#/__\\\n#g

Girdi olarak girdi alır. Gölge bariz seçimdir (tabanla aynıdır).

Test sürüşü

$ echo -n 111 | sed -f lamp.sed
/__\
 ()
 ()
 ()
/__\

1

Gema: 30 karakter

*=gema\n@repeat{*;\ ()\n}/__\\

Örnek çalışma:

bash-4.3$ gema '*=gema\n@repeat{*;\ ()\n}/__\\' <<< 3
gema
 ()
 ()
 ()
/__\

1

jq: 30 karakter

(29 karakter + 1 karakter komut satırı seçeneği.)

8888,(range(.)|" ()"),"/__\\"

Örnek çalışma:

bash-4.3$ jq -r '8888,(range(.)|" ()"),"/__\\"' <<< 3
8888
 ()
 ()
 ()
/__\

Çevrimiçi test ( -rURL'den geçme desteklenmez - Ham Çıktıyı kendiniz kontrol edin.)


1

C, 54 bayt

f()Lambanın istenen yüksekliğini arayın .

f(n){for(puts("||||");n--;puts(" ()"));puts("/__\\");}

İdeone üzerinde deneyin.

5 için örnek çıktı:

||||
 ()
 ()
 ()
 ()
 ()
/__\

1

Pyke, 15 bayt

" ()"~mQAD"/__\

Burada deneyin!

     ~m         - 1000
" ()"           -  " ()"
       QAD      - duplicate(^) input times
          "/__\ - "/__\"

Çıktılar:

1000
 ()
 ()
/__\


1

Boşluk , 169 bayt

[S S S N
_Push_0][T  N
T   T   _Read_STDIN_as_integer][S S S T S T T   T   S S N
_Push_92_\][S S S T S T T   T   T   T   N
_Push_95__][S N
S _Duplicate_95__][S S S T  S T T   T   T   N
_Push_47_/][N
S S N
_Create_Label_LOOP][S S S N
_Push_0][T  T   T   _Retrieve_at_address_0][S S S T N
_Push_1][T  S S T   _Subtract][S N
S _Duplicate][S S S N
_Push_0][S N
T   _Swap_top_two][T    T   S _Store_at_address_0][N
T   T   S N
_If_neg_Jump_to_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S T S S T   N
_Push_41_)][S S S T S T S S S N
_Push_40_(][S S S T S S S S S N
_Push_32_space][N
S N
N
_Jump_to_Label_LOOP][N
S S S N
_Create_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S S S S T   N
_Push_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][N
S S T   N
_Create_Label_LOOP_2][T N
S S _Print_as_character][N
S N
T   N
_Jump_to_Label_LOOP_2]

Harfler S(boşluk), T(sekme) ve N(yeni satır) yalnızca vurgulama olarak eklendi.
[..._some_action]yalnızca açıklama olarak eklendi.

Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).

Sahte kodda açıklama:

Tüm karakterleri yığına ters sırayla iter ve sonra bunları bir döngü halinde yazdırır.

Integer i = STDIN as input
Push "\__/" to the stack
Start LOOP:
  i = i - 1
  if(i is negative):
    Go to function PRINT
  Push "\n)( " to the stack
  Go to next iteration of LOOP

function PRINT:
  Push "\n!!!!" to the stack
  Start LOOP_2:
    Print top as character to STDOUT
    Go to next iteration of LOOP_2

NOT: iyukarıdaki sahte kodda, her yinelemede öbekte geri saklanır LOOP, çünkü sonunda yazdırılacak yığının üzerinde bırakmak istemiyoruz.


1

Tuval , 8 bayt

(×_¶/e⟳║

Burada deneyin!

Açıklama:

(×        repeat "(" input times
  _¶/e    encase it on both sides in "_\n/"
          the 1st line is surrounded in "_" and the second ends and starts with "/"
      ⟳   rotate the string clockwise without changing characters
       ║  palindromize horizontally with 0 overlap

1

05AB1E , 17 15 13 11 bayt

„ (и„/_.ø)˜∞

@EriktheOutgolfer sayesinde -2 bayt (17 → 15) . @Dzaima'nın Canvas cevabından
esinlendikten sonra -2 bayt (13 → 11) .

Kapak, taban ( /__\) ile aynıdır .

Açıklama:

 (            # Literal string " ("
   и           # Repeat " (" the input amount of times
               #  i.e. " (" and 3 → [' (',' (',' (']
    „/_        # Literal string "/_"
             # Surround the list of " (" with "/_" on both ends
               #  i.e. [' (',' (',' ('] → ['/_',[' (',' (',' (',' ('],'/_']
         ˜     # Flatten this list
               #  i.e. ['/_',[' (',' (',' ('],'/_'] → ['/_',' (',' (',' (','/_']
              # Mirror each item
               #  i.e. ['/_',' (',' (',' (','/_'] → ['/__\',' () ',' () ',' () ','/__\']
               # And output the list new-line delimited (implicitly due to the mirror)

Eski 13 bayt cevap:

„/_D (Iиs)˜∞

Çevrimiçi deneyin.


1

Excel, 31 bayt

Girdiyi aralıktan sayısal olarak alan [A1]ve çağıran hücreye giden anonim bir çalışma sayfası işlevi .

Bu lamba müzikaldir ve gününüzü canlandırmaya ve aydınlatmaya yardımcı olacaktır.

="/\
"&REPT(" ()
",A1)&"/__\"

Çıktı

Lambayı seviyorum


1

PowerShell 5.1, 28 26 Bayt

2 byte için teşekkürler Mazzy

8008;," ()"*"$args";"/__\"

Gölge herhangi bir 4 karakter olabileceğinden, bir sayı kullanmak bir çift tırnak kaydeder. En zor kısmı güzel görünümlü bir gölge bulmaktı.

Çıktı:

PS C:\Users\ItsMe\Desktop> .\scratch.ps1 4
8008
 ()
 ()
 ()
 ()
/__\

güzel lamba gölge)
mazzy

1
Bunu deneyin8008;," ()"*"$args";"/__\"
mazzy

1

Python 2, 36 bayt

print"-"*4+"\n ()"*input()+"\n/__\\"

Giriş 4 için:

----
 ()
 ()
 ()
 ()
/__\

Python için borular kullanan herhangi bir lamba gölgesinin bayt daha az olduğunu unutmayın.

@Alex sayesinde -1 bayt!


1
Abajurları tek bir karakterle değiştirir ve 4 ile çarparsanız, bir bayt kaydedebilirsiniz:print"-"*4+"\n ()"*input()+"\n/__\\"
Alex


0

SWI-Prolog, 73 60 bayt

a(X):-write(golf),writef("%r",["\n ()",X]),write("\n/__\\").

a(5). çıktılar

golf
 ()
 ()
 ()
 ()
 ()
/__\

0

Julia, 36 bayt

n->print("|~~|\n"*" ()\n"^n*"/__\\")

Bu, bir tamsayıyı girdi olarak alan ve stdout'a yazdırılan adsız bir işlev oluşturur.

Misal:

julia> f(4)
|~~|
 ()
 ()
 ()
 ()
/__\

0

Bash + coreutils, 37 bayt

yes ' ()'|sed '1i####
'$1'{a/__\\
q}'

Yeni satırlar gereklidir ve toplam bayt cinsinden sayılır. GNU sed gereklidir.

Çalıştırmak:

./squiggly_lamp.sh 2

Çıktı:

####
 ()
 ()
/__\



0

Java 7 11, 84 83 37 bayt

n->"i!!i\n"+" ()\n".repeat(n)+"/__\\"

Çevrimiçi deneyin. (NOT: Java 11 henüz TIO'da desteklenmediğinden , aynı bayt sayımı için String.repeat(int)taklit edilmiştir repeat(String,int).)

i!!iKapak olarak kullanır . ¡!!¡daha iyi görünüyor , ancak iki bayt daha fazla.

Açıklama:

n->                    // Method with integer parameter and String return-type
  "i!!i\n"             //  Return the cap + new-line
  " ()\n".repeat(n)    //   appended with " ()" and a new-line `n` amount of times
  "/__\\"              //   append with "/__\"




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.