Друк Трикутна хвиля чисел


14

Враховуючи амплітуду та період для хвилі, надрукуйте хвилю. Дивіться зразок виводу для отримання більш детальної інформації. Загальна кількість форм хвиль дорівнює періоду, а висота кожної хвилі дорівнює амплітуді. Амплітуда та Період менші за 10. Ви можете ігнорувати проміжні проміжки, але не провідні пробіли.

Sample Input
3 2

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

2
Це більше схоже на трикутники, ніж синуси.
JB

Я думаю, що це підпадає під ascii-artтег. Але мистецька частина не зовсім присутня, можливо, повинен бути ще один тег для графіки ascii?
Хуан

Я думаю, ви маєте на увазі "кількість періодів", а не частоту. Частота (кількість періодів) / час, як RPM у автомобілях.
Доктор Белісарій

@Juan, я думаю, що люди, які шукають запитання про мистецтво, можуть, не заперечуючи проти того, щоб це було включено до результатів
gnibbler

Чи дозволено мені мати пробіл у кожному рядку? Врятувало б мене три символи.
FUZxxl

Відповіді:


4

Діалог APL, 43 40 байт

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

{⍉⊃⍪/⍺⍴⊂(⌽⍪⊢)n(1-n←2×⍵)↑↑⍴∘⍕¨⍨a,1↓⌽a←⍳⍵}( Спасибі, Моріс Цука )

Це діадична функція з амплітудою як правий аргумент ( ) і період як лівий аргумент ( ). Програма, яка читає введення користувача, матиме однакову кількість символів.

Черпаючи трохи натхнення з відповіді CJam Мартіна Бюттнера :

{⍉⊃⍪/⍺⍴⊂(⌽⍪⊢)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

Ха-ха, і я був такий щасливий, що за один раз побив APL значною мірою. : D
Мартін Ендер

Я б не намагався, якби ви цього не зробили :) До речі, схоже, що ваша відповідь, як і інші відповіді APL, дають неправильний вихід. Відповідно до вибірки, трикутники повинні зустрічатися на центральній лінії.
ngn

О, гарний улов, виправлений!
Мартін Ендер

1
Ви можете пограти в гольф ще на 2: b⍴¨⍕¨b ← можна переписати як ⍴∘⍕¨⍨ Я думаю. Чудова відповідь btw, мені це дуже подобається!
Моріс Зукка

Дуже мило з вашого боку! Я просто зрозумів , що я також може скоротити (n,1-n←2×⍵)до n(1-n←2×⍵).
ngn

4

Пітон - 135 символів

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

Ця версія з провідним простором - 132 символи

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

Він також може бути значно коротшим, якщо не потрібно читати з stdin або навіть якщо вхід розділений комами

Для введення розділених комами перший рядок стає

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 символів

Як програма:

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

працює так:

,.~^:(<: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 

Це ще 5 символів, якщо нам це потрібно як функція F:

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

Я сумніваюся, чи вважається це аргументацією.

2

Haskell ( 226 225 222 220 214)

Моя спроба в Haskell:

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

Вибачте, хлопці, (€)оптимізовано далеко, він займає три байти за один € на відміну від! який займає лише один байт.
Ось "бета-версія", яка не задовольняє специфікації:

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! Я вперше зіткнувся з цим :)
JB

1
Я вважав, що € занадто сильно дискримінований у мовах програмування. А тому, що я шукав невикористану оп, це дуже зручно.
FUZxxl

4
Що це робить? Це 1,35 * американський оператор? :)
gnibbler


1

CJam, 45 байт

CJam набагато молодший за цей виклик, тому ця відповідь не відповідає зеленій галочці (яку слід оновити до відповіді APL Марінуса). Це все ще було веселою маленькою вправою, хоча.

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

Тестуйте це тут.

Ідея полягає в тому, щоб генерувати половину періоду вертикально , наприклад:

  1  
 22  
333  
 22  
  1  

(Плюс наступний порожній рядок, який SE проковтує). Потім це дублюється, кожен рядок перевертається, а друга половина періоду додається. Потім вся справа повторюється за кількістю періодів, і в кінцевому підсумку сітка переноситься для орієнтації хвилі вздовж горизонталі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.