Era solo un bug


76

Ispirato dall'output corretto nella risposta Clojure di @Carcigenicate per la sfida Print this diamond .

Stampa questo testo esatto:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

(Dal centro verso l'esterno in entrambe le direzioni, ogni cifra è separata da uno spazio in più rispetto alla riga precedente.)

Regole della sfida:

  • Non ci saranno input ( o input vuoti non utilizzati ).
  • Gli spazi finali sono opzionali.
  • Una singola nuova riga finale è facoltativa.
  • Non sono ammessi spazi iniziali o nuove righe.
  • Restituire un array di stringhe non è permesso. Dovresti produrre il testo o avere una funzione che restituisca una singola stringa con il risultato corretto.

Regole generali:

  • Questo è , quindi vince la risposta più breve in byte.
    Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione.
  • Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
  • Sono vietate le scappatoie predefinite .
  • Se possibile, aggiungi un link con un test per il tuo codice.
  • Inoltre, si prega di aggiungere una spiegazione, se necessario.

L'output di una matrice di stringhe - 1 stringa per riga - è consentito?
Shaggy,

@Shaggy Siamo spiacenti, in questo caso dovrebbe restituire una singola stringa con new-line o generare il risultato. Ho aggiunto questo come regola alla sfida.
Kevin Cruijssen,

Nessun problema, Kevin; Stavo solo cambiando il braccio per vedere se potevo salvarmi un paio di byte.
Shaggy,

3
@Shaggy Hehe. Quale altro motivo dovremmo porre domande in una sfida di code-golf, oltre ad avere lo scopo di salvare quei pochi byte? ;)
Kevin Cruijssen,

8
Ah, è fantastico. Mi chiedevo perché quella risposta improvvisamente abbia attirato così tanta attenzione. Grazie!
Carcigenicate,

Risposte:


7

SOGL V0.12 , 12 byte

9{SUē↕∑}¹№╬«

Provalo qui! Spiegazione:

9{     }      9 times do
  SU            push "1234567890"
    ē           push e, predefined with the input, which defaults to 0, and then increase it
     ↕          get that many spaces
      ∑         join the string of digits with those spaces
        ¹     collect the results in an array
         №    reverse the array vertically
          ή  palindromize vertically with 1 overlap

Oh bello, questo è ancora più breve della risposta accettata. Qual è la politica sulle risposte più brevi un paio di mesi dopo l'accettazione di una risposta? Questo ora ottiene il controllo (un po 'ingiusto rispetto alla risposta attualmente accettata credo) o dovrei fare qualcos'altro? Ottima risposta a prescindere! +1 da me.
Kevin Cruijssen,

@KevinCruijssen Di solito la migliore pratica è quella di aggiornare la risposta accettata, ma poiché utilizza un paio di nuove funzionalità, direi che c'è un motivo per andare in entrambi i modi - tu scegli.
dzaima,

62

Python 2 , 59 57 56 55 byte

i=8;exec"print(' '*abs(i)).join('1234567890');i-=1;"*17

Provalo online!

@Leaky Nun mi ha aiutato molto a giocare a golf, @Praind ha suggerito un metodo per salvare 1 byte, che in precedenza avevo pensato, ma ho dimenticato di modificare, @CotyJohnathanSaxman ha suggerito di cambiare il loop.


Spiegazione

  • i=8- Assegna il valore 8a una variabile chiamata i.

  • exec"..."*17- Esegui quel blocco di codice ( ...) 17 volte.

  • print(...) - Emette il risultato.

  • ' '*abs(i)- Crea una stringa con uno spazio ripetuto |i|volte.

  • .join('1234567890')- Interlaccia la stringa creata sopra con 1234567890, in modo tale che gli |i|spazi siano inseriti tra le cifre.

  • i-=1- Decrementa i, ed eseguendolo 17 volte, raggiunge -8, il che crea il modello ripetitivo con l'aiuto di abs().



23
Questa è una fattoria più impressionante di 25 byte in qualsiasi linguaggio golfistico.
Jylo,

4
@Jylo Grazie, ma le soluzioni a 25 byte sono davvero impressionanti, poiché mostrano molti sforzi di golf fatti dai loro autori. Dovresti prima sapere cosa significa ogni personaggio nella loro fonte, e poi capirai quanto sono meravigliosamente giocati.
Mr. Xcoder,

2
@JasonChen No, Python non consente tale sintassi, perché è specifico per i linguaggi simili a C.
Mr. Xcoder,

5
Possibile ispirazione: può essere fatto anche senza exec 55 byte . Ha usato un approccio simile per portare Python 3 a 57 byte . Non vedevo alcun modo ovvio per accorciarlo, omettendo exec, ma ho pensato di menzionarlo come una possibilità.
ShadowRanger,

32

Vim, 35 byte:

i1234567890<esc>qqYP:s/\d/& /g
YGp{q7@q

Spiegazione:

i1234567890<esc>    " insert '1234567890'
qq                  " Record the following into register 'q'
  Y                 "   Yank a line
   P                "   Paste it above us
    :s/\d/& /g      "   Put a space after each number
Y                   "   Yank this line
 G                  "   Move the end of the buffer
  p                 "   Paste the line
   {                "   Move the beginning of the buffer
    q               " Stop recording
     7@q            " Call macro 'q' 7 times

6
Non mi interessa nemmeno che questo non sia il vincitore, è bello.
MrDuk,

@MrDuk Thankyou! Sono contento che ti piaccia :)
DJMcMayhem

21

05AB1E ,  14  13 byte

17F9ÝÀN8αð×ý,

Provalo online!

Spiegazione

17F            # for N in [0 ... 16] do
   9Ý          # push [0 ... 9]
     À         # rotate left
      N8α      # compute the absolute difference between N and 8
         ð×    # push that many spaces
           ý   # merge the list of digits with the space string as separator
            ,  # print

1
Hmm ... avresti potuto battere SOGL se non avessi avuto bisogno di s... ha senso unire una stringa con una lista o una lista con una stringa? Suggerirò un miglioramento ad Adnan. Oh, e c'è .∊per û».
Erik the Outgolfer,

@EriktheOutgolfer: Oppure potrei cambiare il mio metodo e salvare quel 1 byte di cui avevo bisogno :)
Emigna,

Scusa se ho già votato.
Erik the Outgolfer,

3
Ciò significa che avrei nuovamente votato ...
Erik the Outgolfer,

4
8F9ÝÀNð×ý}».∊Ho fatto una nave spaziale maw! Ed ero entusiasta di suggerire una modifica a 12 byte.
Magic Octopus Urn,

20

C64 ASM, 358 byte (102 byte compilati con basicstub)

Questo è il più vicino che potrei ottenere a causa di ovvie limitazioni:

C64

jsr $E544
lda #9
sta $FD
nl1: jsr dl
jsr il
dec $FD
bne nl1
inc $FD
nl2: ldy $FD
cpy #9
bne nt1
bl: jmp bl
nt1: iny
sty $FD
jsr dl
jsr il
jmp nl2
dl: clc
ldx #$31
ldy #0
lp: txa
sm: sta $0400, y
inx
cpx #$31
bne c1
rts
c1: cpx #$3A
bne nt2
ldx #$30
clc
nt2: tya
adc $FD
cmp #40
bcc c2
rts
c2: tay
jmp lp
il: lda sm+1
adc #39
bcc nc
inc sm+2
nc: sta sm+1
rts

(Probabilmente potrebbe essere ottimizzato un po ')


Benvenuti in PPCG! Si prega di utilizzare il tag di codice per pubblicare piuttosto. Ho modificato il tuo post. Dopo l'applicazione delle modifiche, puoi vedere cosa è cambiato facendo clic su modifica
Евгений Новиков

Ho appena controllato e non si adatta nemmeno a un PET da 80 cols poiché la prima e l'ultima riga richiedono 82 colonne.
Shaun Bebbers

17

TSQL, 220 148 byte

Miglioramento pubblicato da ZLK:

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+'
'FROM sys.objects PRINT @

Produzione:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+' 'FROM sys.objects PRINT @
ZLK,

Sostituisci sys.objectscon sysobjects, e 1object_id` con idHo cercato tabelle più brevi nello sysschema, ma a dir poco avevano colonne brevi comesysobjects
Jaloopa

E puoi salvare altri pochi byte modificando l'interno CAST(con il POWER(10)) inVARCHAR
Jaloopa il

In effetti, evita tutto ciò che sostituisce roba usando LOG10e REPLICATE:DECLARE @o VARCHAR(MAX)=''SELECT TOP 17 @o+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',replicate(' ',LOG10(POWER(10,ABS(ROW_NUMBER()OVER(ORDER BY id)-9)+1)/10)))+' 'FROM sysobjects PRINT @o
Jaloopa

Puoi cambiare il nome della variabile in solo @per radere 3 caratteri.
Ponte

14

APL (Dyalog) , 22 byte

↑∊¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D

Provalo online!

⎕DD igits da zero a nove

1⌽ ruota di un passo a destra (mette zero alla fine)

 allegare (da trattare come unità)

(... )↑¨¨ per ciascuno di questi numeri, prendi tanti caratteri da ciascuna delle lettere:

⍳17 uno attraverso diciassette anni

¯9+ sottrarre nove

| trova i valori assoluti

1+ Aggiungi uno

∊¨ arruolarsi (appiattire) ciascuno

 cambia uno strato di profondità in un livello di rango (matrifica)


3
In un linguaggio compatto come questo ci vogliono davvero due byte per aggiungerne uno?
aschepler

3
@aschepler Sì. APL non è un linguaggio da golf e non ha una primitiva di incremento. J lo fa, ma ci vogliono due byte; >:.
Adám,

4
APL is not a golfing language... ↑⊃¨,/¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D... ಠ_ಠ
Alexander,

1
@Alexander Grazie per aver richiamato la mia attenzione su questo. Potrei giocare a golf 3 byte.
Adám,


12

Java 11 (JDK) , 98 byte

o->{for(int i=-9;++i<9;)System.out.println("".join(" ".repeat(i<0?-i:i),"1234567890".split("")));}

Provalo online!

  • -14 byte passando a JDK 11, che ora ha un nativo String::repeat.

Risposta precedente ( Java (OpenJDK 8) ), 113 112 byte

o->{for(int i=-9;++i<9;)System.out.printf("".join("%1$"+(i<0?-i:i>0?i:"")+"s","1234567890".split(""))+"%n","");}

Provalo online!

spiegazioni

Fondamentalmente sto costruendo le seguenti String17 volte ( Nè una variabile, non un valore reale):

"1%1$Ns2%1$Ns3%1$Ns4%1$Ns5%1$Ns6%1$Ns7%1$Ns8%1$Ns9%1$Ns0%n"

Sono tutte le cifre previste, unite da %1$Nsdove si Ntrova il numero di spazi tra ogni cifra.

%1$Nsin pratica significa "prendi il primo argomento e riempilo fino a quando la lunghezza è almeno N". Inoltre, %1$0snon è supportato così un caso particolare %1$sè fatto per 0.

Infine, formatto la stampa di quella stringa usando un singolo argomento "":, quindi il formattatore riutilizza sempre la stessa stringa vuota, riempiendola con gli spazi necessari.

Salva

  • 1 byte grazie a Kevin Cruijssen

2
Bella risposta! A proposito, ho menzionato esplicitamente nella sfida un parametro vuoto inutilizzato è consentito, quindi puoi sostituirlo ()->con o->per salvare un byte. :)
Kevin Cruijssen,

Puoi crearne ouno inte utilizzarlo nel tuo ciclo for? for(o=-9;++o<9;)
Inverno

2
@Winter No, perché la sfida dice " inutilizzato ", e questo userebbe la variabile parametro, anche se il valore non sarebbe usato.
Olivier Grégoire,

@ OlivierGrégoire Si collega a questo post codegolf.meta.stackexchange.com/questions/12681/… e questo post dice solo che dovrebbe essere vuoto (0 per ints).
Inverno

@Indeed In effetti, ma la sfida stessa dice "inutilizzata". Decisioni specifiche in una sfida hanno la precedenza sui valori predefiniti.
Olivier Grégoire,

11

Japt -R , 19 18 16 14 13 byte

Aõ%A
£qYçÃÔÅê

Provalo o provalo online


Spiegazione

A             :10
 õ           :Range [1,10]
  %A         :Modulo each by 10
\n           :Assign to variable U
£            :Map each element at 0-based index Y
 q           :  Join U with
  Yç         :   Space repeated Y times
    Ã        :End map
     Ô       :Reverse
      Å      :Slice off first element
       ê     :Mirror
             :Implicitly join with newlines and output

2
Bello. La mia soluzione a 16 byte era9ÆAõ%A qXîÃw ê ·
ETHproductions,

8

JavaScript (ES2017), 83 73 72 68 byte

Grazie Shaggy per aver salvato 10 byte. Grazie Craig per aver salvato 1 byte. Grazie agli archi per aver salvato 4 byte.

for(i=-9,a="";i++<8;)a+=[...`1234567890
`].join("".padEnd(i<0?-i:i))

for(i=-9,a="";i++<8;)a+=[...`1234567890
`].join("".padEnd(i<0?-i:i))

console.log(a);
.as-console-wrapper { max-height: 100% !important; top: 0; }
.as-console-row:after { display: none !important; }


Salvare 1 byte utilizzando un polyfill per Math.abs. Ho anche creato un aelenco non codificato, ma questa è una preferenza ...a=[...Array(10).keys()];for(i=-8;i<9;i++)console.log(a.join(' '.repeat(i<0?-i:i)))
Thomas W,

1
Salva alcuni byte con[..."1234567890"].join("".padEnd(i<0?-i:i))
Shaggy,

@Shaggy Grazie. Ciò ha salvato 10 byte. :)
Tushar,

1
@ThomasW: [...Array(10).keys]avrebbe 0come primo elemento, non l'ultimo.
Shaggy,

1
Puoi salvare un byte usando il tuo metodo memorizzando il risultato in una stringa piuttosto che registrare:, for(i=-8,s="";i<9;i++)s+=[..."1234567890"].join("".padEnd(i<0?-i:i))+`X`dove si Xtrova una nuova riga effettiva
Craig Ayre

7

Brachylog , 30 29 28 byte

Ị↺{∧≜;Ṣj₍g;?↔zcc}ᶠ⁹↔;XcP↔Pẉᵐ

Provalo online!

Salvato un byte grazie a Leaky Nun .

Spiegazione

Ị↺                               The string "1234567890"
  {               }ᶠ⁹            Find the first 9 outputs of:
   ∧≜                              Take an integer
       ;Ṣj₍                        Juxtapose " " that number of times
           g;?↔z                   Zip that string of spaces with "1234567890"
                cc                 Concatenate twice into one string
                    ↔            Reverse the resuling list
                     ;XcP↔P      Palindromize the list (concatenate X to it into the list P,
                                   P reversed is still P)
                           ẉᵐ    Map writeln


@LeakyNun Mi sono bloccato sul grande "Stampa questo testo esatto" e non ho letto che potremmo avere delle righe finali ...
Fatalizza il


1
@LeakyNun Perché non hai pubblicato la tua risposta?
Fatalizza il

7

Carbone , 18 byte

F⁹⪫⁺…I¹:⟦0¶⟧× ι‖B↑

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

F⁹      Repeat 9 times (i = loop variable)
  ⪫       Join
   ⁺       Concatentate
    …I¹:    All the characters from str(1) below ":" (i.e. to "9") as a list
    ⟦0¶⟧    A list whose element is the string "0\n"
   × ι     With i spaces
‖B↑     Reflect everything upwards but without duplicating the top line

Nota: Cast(1)accetta lo stesso numero di byte perché prima "1"avrebbe bisogno di un separatore ":"(che non riesce a inserire nel deverbosificatore).


7

R , 108 byte

for(i in abs(-8:8))cat(paste0(el(strsplit("1234567890","")),paste(rep(" ",i),collapse=""),collapse=""),"\n")

Basta incollare e far collassare le corde.

Provalo online!

Modifica: grazie per Challenger5 per aver segnalato un problema. Risolto il problema ora.

Modifica 2: salvato un byte grazie a bouncyball.


Benvenuti nel sito! :)
DJMcMayhem

2
Questo non sembra del tutto corretto: la linea mediana non dovrebbe avere alcuno spazio.
Esolanging Fruit

@ Challenger5 hai ragione! risolto usando paste0invece di pasteaggiungere un byte :(
Probel

1
salva 2 byte usando el: el(strsplit("1234567890",""))invece distrsplit("1234567890","")[[1]]
bouncyball il

Puoi liberarti di una delle pasteaffermazioni usando l' separgomento cate facendo un po 'di più per portarlo a 70 byte
Giuseppe,

7

Python 3 , 58 57 54 byte

i=8
while i+9:print(*'1234567890',sep=' '*abs(i));i-=1

Provalo online!

(grazie a @flornquake per gli ultimi tre byte; ho completamente dimenticato di usare sepper salvare vs. .join)


1
54 byte:while i+9:print(*'1234567890',sep=' '*abs(i));i-=1
terremoto


6

Java 8, 235 234 206 163 byte

interface A{static void main(String[]a){for(int i=-8;i<9;i++){String s="";for(int j=1,k;j<10;j++){s+=j;for(k=0;k<(i>0?i:-i);k++)s+=" ";}System.out.println(s+0);}}}

Aggiornamento : -28 byte grazie a Leaky Nun!
Aggiornamento 2 : -43 byte grazie a Leaky Nun di nuovo!

Ungolfed:

interface A {
    static void main(String[] a) {
        for (int i = -8; i < 9; i++) {
            String s = "";
            for (int j = 1, k; j < 10; j++) {
                s += j;
                for (k = 0; k < (i > 0 ? i : -i); k++)
                    s += " ";
            }
            System.out.println(s + 0);
        }
    }
}

Provalo online

EDIT: il codice prima era sbagliato! Hai commesso un errore giocando a golf il codice, ora dovrebbe funzionare come previsto!


4
Benvenuti in PPCG! Suggerimenti per giocare a golf in Java e Suggerimenti per giocare a golf in <tutte le lingue> potrebbero essere interessanti da leggere. :) Alcune cose che puoi giocare a golf stanno rimuovendo publice liberarti di alcuni spazi non necessari. E ci sono altre cose da migliorare, ma suggerisco di leggere i suggerimenti e vedere dove puoi migliorare te stesso. Ancora benvenuto, e goditi il ​​tuo soggiorno! :)
Kevin Cruijssen,

2
Hmm, inoltre, sei sicuro di aver pubblicato il codice corretto? Quando copio e incollo il tuo codice in TryItOnline non dà l'output corretto.
Kevin Cruijssen,

1
Oh maledizione, ho fatto qualcosa di sbagliato mentre giocavo a golf il codice! Lo aggiusterò!
Alex Ferretti,



6

Buccia , 21 byte

mΣṪ`:§+↔tḣR8' ṁs`:0ḣ9

Questo è un programma completo che stampa su STDOUT. Provalo online! Ci sono molti spazi finali.

Spiegazione

A Husk mancano ancora molte cose essenziali come una funzione di intervallo a due argomenti, quindi alcune parti di questa soluzione sono un po 'confuse.

mΣṪ`:§+↔tḣR8' ṁs`:0ḣ9
              ṁs`:0ḣ9  This part evaluates to the string "1234567890".
                   ḣ9   Range from 1 to 9.
                `:0     Append 0.
              ṁs        Convert each number to string and concatenate.
     §+↔tḣR8'          This part evaluates to a list like ["  "," ",""," ","  "]
                       but with 17 elements instead of 5.
          R8'           A string of 8 spaces.
         ḣ              Take prefixes.
     §+                 Concatenate
       ↔                the reversal and
        t               tail of the prefix list, palindromizing it.
  Ṫ                    Take outer product of the two lists
   `:                  with respect to flipped prepeding.
                       This prepends each digit to each string of spaces.
mΣ                     Map concatenation over the results, computing the rows.
                       Implicitly join with newlines and print.

È possibile sostituire ṁs`:0ḣ9con uṁsḣ10per generare la stringa "1234567890" con un byte in meno!
Sophia Lechner,

6

T-SQL 145 152 byte

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(number-8)))+'
'FROM master..spt_values WHERE type='P'PRINT @

Aggiornato per usare:

  • master..spt_valuesper generare numeri ( WHERE type = 'P', questi sono sempre consecutivi, a partire da 0)
  • @ L' TOP 17idea di ZLK
  • STAMPA (per rispettare le regole - nessuna lista di stringhe)
  • La grande idea di JanDrozen di includere il ritorno a capo nella stringa (l'ho considerato come un solo byte - Windows CRLF cosa?)
  • Idea di @Bridge per usare solo @ per il nome della variabile - tutti questi trucchi !!

risultati:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

(Grazie @JanDrozen per l'idea di SOSTITUZIONE)


Questa è una bella risposta! Benvenuti nel sito :)
DJMcMayhem

Grazie. Vedo che alcuni di noi hanno inventato le nostre lingue qui :)
Reversed Engineer

1
Un mix tra questa risposta e l'altra è ottimale: ad es. SELECT TOP 17REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))FROM sys.objects(Supponendo che non sia necessario stampare).
ZLK,

Aha @ZLK - alcuni bei trucchi - TOP 17, RANK OVER e sys.objects - grazie!
Ingegnere inverso

6

Clojure, 126 99 byte

-27 correggendo un paio di errori stupidi. L'uso esteriore di anon era necessario, quindi sono stato in grado di liberarmi del atutto e scrivere solo apply struna volta. Ciò mi ha anche permesso di utilizzare una macro di funzione per la funzione principale, che ha salvato alcuni byte. Ho anche sottolineato la chiamata Math/absinvece di ribattere n-spaces.

Fondamentalmente una porta Clojure dell'idea Python di @ Mr.Xcoder. In retrospettiva, avrei dovuto usare il metodo abs/ rangeper la sfida del diamante in origine, ma potrei non aver prodotto l'output corretto!

Abbastanza semplice. Unisce la stringa numerica con un numero di spazi che dipende dalla riga corrente.

#(doseq[n(range -8 9)](println(clojure.string/join(apply str(repeat (Math/abs n)\ ))"1234567890")))

(defn bugged []
  (doseq [n-spaces (range -8 9)]
    (println
        (clojure.string/join
          ; "String multiplication"
          (apply str
                 (repeat (Math/abs n-spaces) \space))
          "1234567890"))))


5

Mathematica, 92 byte

Column@Join[Reverse@(s=Row/@Table[Riffle[Range@10~Mod~10,""<>Table[" ",i]],{i,0,8}]),Rest@s]

Provalo online

copia / incolla il codice con ctrl-v
premi maiusc + invio per eseguire


Potresti forse aggiungere un link TryItOnline ?
Kevin Cruijssen,

@KevinCruijssen Mathematica non è un linguaggio gratuito e la matematica non sembra funzionare .
Leaky Nun,

@LeakyNun Ah ok, grazie. Vedo che MartinEnder pubblica link TIO a volte, ma quelli erano davvero collegamenti Mathics.
Kevin Cruijssen,

1
@Kevin Cruijssen sì, certo, ho aggiunto il link con le istruzioni
J42161217

5

C, 97 byte

i=-9;main(j){for(;++i<9;putchar(10))for(j=0;++j<11;printf("        "+8-abs(i)))putchar(48+j%10);}

Il compilatore probabilmente si lamenterà molto di questo codice; il mio ha lanciato 7 avvisi di 4 tipi diversi. Potrebbe migliorare il codice in seguito.

Provalo online!


5

C (gcc) , 76 byte

f(x,y){for(y=-9;++y<9;puts(""))for(x=10;x++;printf("%-*d",abs(y)+1,x%=10));}

Provalo online!

Emette alcuni spazi finali, che dovrebbe essere OK.

Stampa i numeri usando campi giustificati a sinistra di lunghezza dinamica: ecco a cosa %-*dserve la stringa di formato .

Il ciclo interno ha qualche inizializzazione divertente (inizia da 10; qualsiasi multiplo di 10 andrebbe bene) per "semplificare" la sua condizione di terminazione.


4

Carbone , 21 20 19 18 byte

F⁹«F…¹χ⁺κ… ι0⸿»‖B↑

Provalo online!

Link alla versione dettagliata . Fondamentalmente creo la parte inferiore del disegno e quindi rifletto il testo verso l'alto.


1
Quando ho visto la domanda, ho pensato di provarlo io stesso in Carbone prima di guardare la risposta. Ho iniziato con una risposta di 21 byte, ma ho golfizzato a 20 byte ... spettrale!
Neil,

@Neil :-D Bene, adesso sono 19 byte!
Charlie

Sì, ho appena scoperto quel golf da solo. Stavo anche esaminando E…⁹⪫E…·¹χI﹪κχ× ι‖B↑(anche per 19 byte) ma l'interprete non sembra gradirlo (non riesco a vedere cosa c'è che non va in me stesso).
Neil,

Oh, Range accetta due argomenti, sciocco me.
Neil,

1
Si è scoperto che Mapera un'aringa rossa, quindi ho pubblicato la mia risposta a 18 byte.
Neil,

4

CJam , 21 byte

A,(+aH*ee{:\8-zS**n}/

Provalo online!

Spiegazione

A,     e# Get [0 1 2 ... 9].
(+     e# Rotate the 0 to the end.
aH*    e# Wrap in an array and repeat 17 times.
ee     e# Enumerate. This pairs each copy of the array with its index in
       e# the list.
{      e# For each [index array] pair...
  :\   e#   Unwrap the pair and swap its order.
  8-z  e#   Get the absolute difference of the index from 8.
  S*   e#   Get a string of that many spaces.
  *    e#   Riffle the list of digits with the string of spaces.
  n    e#   Print it with a trailing linefeed.
}/

1
Soluzione alternativa (anche 21 byte):9{S*A,(+\*}%_W%);\+N*
Esolanging Fruit

4

Lotto, 163 byte

@set s=1 2 3 4 5 6 7 8 9 0
@set t=         
@for %%l in (9 7)do @for /l %%i in (1,1,%%l)do @call:%%l
:7
@set t=  %t%
:9
@set t=%t:~1%
@call echo %%s: =%t%%%

Nota: la prima riga termina in 9 spazi. Spiegazione: utilizza la numerazione delle righe creative! Il primo ciclo deve essere eseguito 9 volte ed eliminare uno spazio ogni volta, mentre il secondo ciclo deve essere eseguito 8 volte e aggiungere uno spazio ogni volta. Il primo si ottiene eseguendolo 7 volte e cadendo per l'ottava volta, mentre il secondo si ottiene aggiungendo due spazi e cadendo per eliminarne di nuovo uno.


4

SOGL V0.12 , 14 byte

ā9{SUčf@*∑Κ}╬Æ

Provalo qui!

Spiegazione:

ā               push an empty array
 9{        }    9 times do
   SU             push "1234567890"
     č            chop into characters
      f@*         get current iteration (0-based) amount of spaces
         ∑        join with that
          Κ       prepend this to the array
            Β  palindromize vertically with 1 overlap


4

PowerShell , 30 byte

8..0+1..8|%{1..9+0-join' '*$_}

Provalo online!

Crea un intervallo di 8,7,6...2,1,0,1,2...8cicli quindi attraverso ciascun numero. All'interno del ciclo costruiamo un intervallo di 1..9concatenati con 0quindi -joini numeri nell'intervallo insieme al numero appropriato di spazi. Ogni stringa viene lasciata sulla pipeline e l'output è implicito al completamento del programma.


1
Bella risposta! Powershell si sente improvvisamente più matto :)
Mr. Xcoder,
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.