Stampa Triangle Wave of Numbers


14

Data l'ampiezza e il periodo di un'onda, stampare l'onda. Vedi l'output di esempio per maggiori dettagli. Il numero totale di forme d'onda è uguale al periodo e l'altezza di ciascuna onda è uguale all'ampiezza. L'ampiezza e il periodo sono inferiori a 10. È possibile ignorare gli spazi finali ma non gli spazi iniziali.

Sample Input
3 2

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

2
Sembra più un triangolo che un seno.
— JB,

Sto pensando che questo rientri nel ascii-arttag. Ma la parte artistica non è del tutto presente, forse ci dovrebbe essere un altro tag per la grafica ASCII?
— Juan,

Immagino, intendi "numero di periodi" e non frequenza. La frequenza è (numero di periodi) / tempo, come RPM in auto.
— Dr. belisarius,

@Juan, penso che le persone alla ricerca di domande sull'arte ascii probabilmente non dispiaceranno vedere questo incluso nei risultati
— gnibbler,

Sono autorizzato ad avere spazi bianchi iniziali in ogni riga? Mi risparmierebbe tre caratteri.
— FUZxxl,

Risposte:


4

Dyalog APL, 43 40 byte

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

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

Questa è una funzione diadica con l'ampiezza come argomento destro ( ⍵) e il periodo come argomento sinistro ( ⍺). Un programma che legge l'input dell'utente richiederebbe lo stesso numero di caratteri.

Traendo ispirazione dalla risposta CJam di Martin Büttner :

{⍉⊃⍪/⍺⍴⊂(⌽⍪⊢)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, ed ero così felice di aver battuto APL con un margine considerevole per una volta. : D
— Martin Ender,

Non avrei provato se non l'avessi fatto :) A proposito, sembra che la tua risposta e l'altra risposta APL stiano producendo risultati errati. Secondo il campione, i triangoli dovrebbero incontrarsi sulla linea centrale.
— ngn,

Oh, buona cattura, risolto!
— Martin Ender,

1
Puoi giocare a golf con altri 2: b⍴¨⍕¨b ← può essere riscritto come ⍴∘⍕¨⍨ credo. Ottima risposta tra l'altro, mi piace molto!
— Moris Zucca,

È molto gentile da parte tua! Ho appena realizzato che posso anche ridurre (n,1-n←2×⍵)a n(1-n←2×⍵).
— ngn

4

Python - 135 caratteri

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

Questa versione con uno spazio iniziale è di 132 caratteri

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

Può anche essere notevolmente più breve se non è necessario leggere da stdin o anche se l'input è separato da virgola

Per l'input separato da virgola, la prima riga diventa

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 caratteri

Come programma:

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

funziona così:

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

Sono altri 5 caratteri se ne abbiamo bisogno come funzione F:

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

Sono dubbioso sul fatto che ciò valga come prendere argomenti.

2

Haskell ( 226 225 222 220 214)

Il mio tentativo in 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

Scusate ragazzi, (€)è ottimizzato, ci vogliono tre byte per un € invece di! che richiede solo un byte ciascuno.
Ecco una "versione beta", che non soddisfa le specifiche:

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
L'operatore EUR! La prima volta che lo incontro :)
— JB,

1
Pensavo che € fosse troppo discriminato nei linguaggi di programmazione. E poiché stavo cercando un'opera inutilizzata, questo mi è stato molto utile.
— FUZxxl,

4
Che cosa fa? È 1,35 * l'operatore statunitense? :)
— Gnibbler,


1

CJam, 45 byte

CJam è molto più giovane di questa sfida, quindi questa risposta non è ammissibile per il segno di spunta verde (che dovrebbe essere aggiornato alla risposta APL di Marinus). Questo è stato comunque un piccolo esercizio divertente.

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

Provalo qui.

L'idea è di generare mezzo periodo in verticale , in questo modo:

  1  
 22  
333  
 22  
  1  

(Più la riga vuota successiva che ingoia SE). Questo poi duplicato, ogni riga viene invertita e viene aggiunta la seconda metà del periodo. Quindi l'intera cosa viene ripetuta dal numero di periodi e alla fine la griglia viene trasposta per orientare l'onda lungo l'orizzontale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.