Üçgen Sayı Dalgası Yazdır


14

Bir dalganın genliği ve süresi göz önüne alındığında dalgayı yazdırın. Daha fazla ayrıntı için örnek çıktıya bakın. Dalga formlarının toplam sayısı noktaya eşittir ve her dalganın yüksekliği genliğe eşittir. Genlik ve Periyot 10'dan küçüktür. Sondaki boşlukları yoksayabilir, öndeki boşlukları göz ardı edebilirsiniz.

Sample Input
3 2

Sample Output
  3           3    
 232         232  
12321 12321 12321 12321
       232         232
        3           3  

2
Bu sinüslerden ziyade üçgenlere benziyor.
JB

Bunun ascii-artetiketin altına düştüğünü düşünüyorum . Ama sanat kısmı tam olarak mevcut değil, belki ascii grafikleri için başka bir etiket olmalı?
Juan

Sanırım, sıklık değil, "dönem sayısı" demek istediniz. Frekans (dönem sayısı) / süredir, örneğin arabalarda RPM.
Dr. belisarius

@Juan, sanırım ascii-art soruları
arayanlar

Her satırda önde gelen boşluk bırakabilir miyim? Bana üç karakter kazandýrdý.
FUZxxl

Yanıtlar:


4

Dyalog APL, 43 40 bayt

{⍉⊃⍪/⍺⍴⊂(⌽⍪⊢)(n,1-n←2×⍵)↑↑b⍴¨⍕¨b←a,1↓⌽a←⍳⍵}

{⍉⊃⍪/⍺⍴⊂(⌽⍪⊢)n(1-n←2×⍵)↑↑⍴∘⍕¨⍨a,1↓⌽a←⍳⍵}( Teşekkürler Moris Zucca )

Bu, genlik sağ argüman ( ) ve nokta ise sol argüman ( ) olan ikili bir fonksiyondur . Kullanıcı girişini okuyan bir program aynı sayıda karakter alacaktır.

Martin Büttner'in CJam cevabından biraz ilham almak :

{⍉⊃⍪/⍺⍴⊂(⌽⍪⊢)n(1-n←2×⍵)↑↑⍴∘⍕¨⍨a,1↓⌽a←⍳⍵}
                                   a←⍳⍵ ⍝ numbers 1 2 3, call them "a"
                                  ⌽     ⍝ reverse them: 3 2 1
                                1↓      ⍝ drop one: 2 1
                              a,        ⍝ prepend "a": 1 2 3 2 1
                         ⍴∘⍕¨⍨          ⍝ format a[i] and repeat it a[i] times:
                                        ⍝     (,'1') '22' '333' '22' (,'1')
                        ↑               ⍝ mix, i.e. obtain a character matrix:
                                        ⍝    ┌───┐
                                        ⍝    │1  │
                                        ⍝    │22 │
                                        ⍝    │333│
                                        ⍝    │22 │
                                        ⍝    │1  │
                                        ⍝    └───┘
             n(1-n←2×⍵)↑                ⍝ take a 2×⍵ by 1-2×⍵ matrix
                                        ⍝ (negative length extends backwards):
                                        ⍝    ┌─────┐
                                        ⍝    │  1  │
                                        ⍝    │  22 │
                                        ⍝    │  333│
                                        ⍝    │  22 │
                                        ⍝    │  1  │
                                        ⍝    │     │
                                        ⍝    └─────┘
        (⌽⍪⊢)                           ⍝ the reverse of it, vertically joined with it
                                        ⍝    ┌─────┐
                                        ⍝    │  1  │
                                        ⍝    │ 22  │
                                        ⍝    │333  │
                                        ⍝    │ 22  │
                                        ⍝    │  1  │
                                        ⍝    │     │
                                        ⍝    │  1  │
                                        ⍝    │  22 │
                                        ⍝    │  333│
                                        ⍝    │  22 │
                                        ⍝    │  1  │
                                        ⍝    │     │
                                        ⍝    └─────┘
     ⍺⍴⊂                                ⍝ take ⍺ copies
  ⊃⍪/                                   ⍝ join them vertically
 ⍉                                      ⍝ transpose

Haha, ve APL'yi bir kez önemli bir farkla yendiğim için çok mutluydum. : D
Martin Ender

Eğer olmasaydı denemezdim :) Bu arada, yanıtı yanı sıra diğer APL yanıtı yanlış çıktı üretiyor gibi görünüyor. Örneğe göre, üçgenler merkez hatta buluşmalıdır.
ngn

Oh, iyi yakaladın, düzeltildi!
Martin Ender

1
2 tane daha golf oynayabilirsiniz: b⍴¨⍕¨b ← sanırım ⍴∘⍕¨⍨ olarak yeniden yazılabilir. Harika cevap btw, çok beğendim!
Moris Zucca

Çok naziksiniz! Sadece ben de kısaltabilir fark ettik (n,1-n←2×⍵)için n(1-n←2×⍵).
ngn

4

Python - 135 karakter

A,F=map(int,raw_input().split());R=range
for y in R(-A+1,A):print"".join((" %s"%x)[-x<s*y<1]for s in(1,-1)for x in R(1,A)+R(A,-1,-1))*F

Önde gelen alana sahip bu sürüm 132 karakterdir

A,F=map(int,raw_input().split());R=range
for y in R(-A+1,A):print"".join((" %s"%x)[-x<s*y<1]for s in(1,-1)for x in R(A)+R(A,0,-1))*F

Ayrıca stdin'den okumak gerekmiyorsa veya giriş virgülle ayrılmış olsa bile çok daha kısa olabilir

Virgülle ayrılmış girdi için ilk satır

A,F=input();R=range

4

APL (77)

,/{×⍎⍵:⍵⋄' '}¨¨⊃∘↑∘⍕¨¨K⍴⊂(⊖M),⍨M←(2⍴N+N-1)↑(0 1↓M),⍨⌽M←(⌽⊖/¨M)×≥/¨M←⍳2⍴⊃N K←⎕

3

J, 87 karakter

Bir program olarak:

b=:]\@(]#~' '~:])(":@:>:@i.@-)
,.~^:(<:Y)(,.|.)@(' ',.~((<:({."1|."1)b),.b),' '$~2<:])X
        Y                                              X

şu şekilde çalışır:

,.~^:(<:2)(,.|.)@(' ',.~((<:({."1|."1)b),.b),' '$~2#<:) 3
  3           3         
 232         232        
12321 12321 12321 12321 
       232         232  
        3           3   
,.~^:(<:4)(,.|.)@(' ',.~((<:({."1|."1)b),.b),' '$~2#<:) 2
 2       2       2       2       2       2       2       2      
121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 121 
     2       2       2       2       2       2       2       2 

F işlevi olarak ihtiyacımız olursa 5 karakter daha var:

3 F 2
  3           3         
 232         232        
12321 12321 12321 12321 
       232         232  
        3           3   

Bunun tartışmayı kabul edip etmediğinden şüpheliyim.

2

Haskell ( 226 225 222 220 214)

Haskell'deki denemem:

import List
n!k|n>k=p:n!(k+1)++[p]|0<1=[p]where p=(n-1)?" "++k?show k++(n-k)?" ">>=id
f[n,k]=k?(n!1++(2*n-1)?' ':map reverse(n!1)++[(2*n-1)?' '])>>=id
main=interact$unlines.transpose.f.map read.words
(?)=replicate

Üzgünüm çocuklar, (€)optimize edilmiş, aksine bir € için üç bayt alır! her biri sadece bir bayt alır.
İşte özellikleri karşılamayan bir "beta Sürümü":

import List

-- Creates a single wave of numbers. k should be equal to 1
-- and is used for internal stuff,
wave n k|n==k=[peek]
        |otherwise = peek:wave n(k+1)++[peek] where
  peek=replicate(n-1)" "++replicate k(show k)++replicate(n-k)" ">>=id

-- Creates a full wave
-- k: number of waves, n: size of waves
fullWave[n,k]=unlines.transpose.concat.replicate k$wave n 1++map reverse(wave n 1)

main=interact$fullWave.map read.words

1
EUR operatörü! İlk karşılaştığımda :)
JB

1
€ 'nun programlama dillerinde çok fazla ayrımcılığa uğradığını düşündüm. Ve kullanılmayan bir op aradığım için bu çok kullanışlı oldu.
FUZxxl

4
Bu ne işe yarıyor? ABD operatörü 1,35 * midir? :)
gnibbler


1

CJam, 45 bayt

CJam bu meydan okumadan çok daha genç, bu yüzden bu cevap yeşil onay işareti için uygun değildir (marinus'un APL cevabı için güncellenmelidir). Bu yine de eğlenceli küçük bir egzersizdi.

r~:I2*,{)IS*I@I\-z-_a*+I~)>I(S*+}%_Wf%+r~*zN*

Burada test edin.

Fikir dikey olarak yarım dönem oluşturmaktır , şöyle:

  1  
 22  
333  
 22  
  1  

(Artı SE'nin yutacağı bir sonraki boş satır). Bu daha sonra çoğaltılır, her satır ters çevrilir ve dönemin ikinci yarısı eklenir. Daha sonra, her şey nokta sayısı ile tekrarlanır ve sonuçta ızgara, dalgayı yatay olarak yönlendirmek için transpozisyonlanır.

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.