Muszka alfanumeryczna

14

Wypisz dokładnie ten tekst:

1                i
12              hi
123            ghi
1234          fghi
12345        efghi
123456      defghi
1234567    cdefghi
12345678  bcdefghi
123456789abcdefghi
12345678  bcdefghi
1234567    cdefghi
123456      defghi
12345        efghi
1234          fghi
123            ghi
12              hi
1                i

Pojedynczy znak nowej linii jest dopuszczalny, ale żadne inne zmiany formatowania są niedozwolone.

Reguły i I / O

  • Brak wejścia
  • Dane wyjściowe można podać dowolną dogodną metodą .
  • Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
AdmBorkBork
źródło
1
Czy zamiast tego możemy użyć wielkich liter?
user41805
3
@Cowsquack To byłaby zmiana zasad. Mówi Wyjście dokładnie ten tekst .
Dennis
@Cowsquack Nope - wymagana jest mała litera.
AdmBorkBork

Odpowiedzi:

13

C, 87 85 81 80 bajtów

j;main(i){for(;++i<19;)for(j=19;j--;)putchar(j?j<i^j<20-i?32:106-j-j/10*39:10);}

Wypróbuj online!

Wyjaśnienie

j; // same as int j;
main(i){ // same as int main(int i){, where i = argc (1 with no arguments)
  for(;++i<19;) // loop over rows, i = 2..18
    for(j=19;j--;) // loop over chars, j = 19..0
      putchar(j?j<i^j<20-i?32:106-j-j/10*39:10); // output characters:
      //      j?                           :10 // on last char (j=0), output \n
      //        j<i                            // check for top/left half
      //            j<20-i                     // check for bottom/left half
      //           ^                           // 1 if only one half matched
      //                  ?32:                 // if so, output space
      //                      106              // char code for j
      //                         -j            // get desired letter
      //                           -j/10*39    // subtract 39 for j>9 (numbers)
}
PurkkaKoodari
źródło
Dziwi mnie, że ^ma niższy priorytet niż <... jaka ładna odpowiedź!
Lynn
@ Lynn Operatory bitowe w C (a nawet Java / JS i tym podobne) mają niższy priorytet niż porównania. Jest to zarówno dobre dla kodu golfa, jak i naprawdę miłe źródło błędów (pomyśl if (x & 2 == 0), co zawsze ocenia 0)
PurkkaKoodari
7

Python 2 , 73 bajty

i=9
exec"i-=1;a=abs(i);print'123456789'[:9-a]+'  '*a+'abcdefghi'[a:];"*17

Wypróbuj online!

Lynn
źródło
6

R , 64 bajty

for(i in abs(8:-8))cat(intToUtf8(c(57-8:i,32*!!-i:i,97+i:8,13)))

Wypróbuj online!

  • -3 bajty dzięki @Giuseppe
  • -5 bajtów dzięki @ J.Doe
digEmAll
źródło
67 bajtów zintToUtf8
J.Doe
catna jeden bajt?
JayCe,
2
64 bajty budowane na twoim rozwiązaniu, używając skrótu @ Giuseppe, aby dodać repfunkcję tego, intToUtf8że 0zamienia się w "".
J.Doe
@ J.Doe great trick!
JayCe
@ J.Doe: Świetnie, dziękuję!
digEmAll
4

Python 2 , 80 bajtów

j=i=1
exec"print'123456789'[:i]+'  '*(9-i)+'abcdefghi'[-i:];i+=j;j-=2*(i>8);"*17

Wypróbuj online!

Pręt
źródło
@ovs zbiegnie się w odpowiedź Lynn, więc zostawię tę taką, jaka jest
Rod
3

QBasic, 72 bajty

Na podstawie oświadczenia Taylora Scotta .

FOR y=-8TO 8
z=ABS(y)
?"123456789abcdefghi";
LOCATE,10-z
?SPC(2*z)"
NEXT

Podstawowe wyjaśnienie

W każdej linii drukujemy pełny ciąg 123456789abcdefghi. Następnie wracamy i zastępujemy część spacjami.

Pełne wyjaśnienie

Z nieznacznie zmienionym kodem:

FOR y = -8 TO 8           ' Loop for 17 rows
 z = ABS(y)               ' z runs from 8 to 0 and back to 8
 ? "123456789abcdefghi";  ' Print the full string and stay on the same line (important!)
 LOCATE , 10-z            ' Go back to column 10-z on that line
 ? SPC(2*z); ""           ' Print 2*z spaces
                          ' (SPC keeps the cursor on the same line unlesss you print
                          ' something after it, so we'll use the empty string)
NEXT                      ' Go to the next y value
DLosc
źródło
To naprawdę sprytne użycie Locatepolecenia
Taylor Scott,
2

T-SQL, 108 bajtów

DECLARE @ INT=8a:
PRINT STUFF('123456789abcdefghi',10-abs(@),2*abs(@),SPACE(2*abs(@)))
SET @-=1IF @>-9GOTO a

Zwroty służą wyłącznie do odczytu.

Wypróbowałem wiele innych odmian, w tym tablice liczb, było to najkrótsze.

BradC
źródło
2

Japt , 20 bajtów

9Æ9Ç>YÃê1 Ë?S:°EsH
ê

Japt Interpreter

Dane wyjściowe jako tablica tablic znaków. The-RFlaga nie jest konieczne do pracy, to właśnie sprawia, że wyjście ładniejszy wygląd.

Wyjaśnienie:

9Æ9Ç                    create a 9x9 2D array 
    >YÃ                 fill bottom left triangle with "false", upper right with "true"
       ê1               mirror horizontally
          Ë?S           replaces "true" with a space
             :°EsH      replaces "false" with the horizontal index + 1 converted to base 32
                  \n    Store the result in U (saves bytes by not closing braces)
                    ê   palindromize vertically
Kamil Drakari
źródło
1

Stax , 18 lat bajtów

â4+╤jo♂▐▀3bkWíæß╝╖

Uruchom i debuguj

Wyjaśnienie:

9R$|[|<Va17T|]r|>\|pm Full program
9R$                   Produce "123456789"
   |[|<               Left-aligned prefixes (["1        ", "12       ", ...])
       Va17T          Produce "abcdefghi"
            |]        Suffixes (["abcdefghi", "bcdefghi", ...])
              r|>     Reverse and left-align (["        i", "       hi", ...])
                 \    Zip both arrays (["1                i", "12              hi", ...])
                  |p  Palindromize array
                    m Map over array, printing each with a newline                        
pustkowie
źródło
1

APL (Dyalog Unicode) , 30 bajtów

(⊢⍪1↓⊖)(↑,\1↓⎕d),⌽↑,\⌽8199↑⎕a

Wypróbuj online!

konwertuj na matrycę (automatyczne pady ze spacjami)

  • ,\ przedrostki

  • 1↓ pierwszy element spadł z

  • ⎕d ten ciąg '0123456789'

  • Daje to macierz znaków

1        
12       
123      
1234     
12345    
123456   
1234567  
12345678 
123456789

, połączony z

  • odwrócony

  • zmiksyfikowany

  • ,\ prefiksy

  • odwrócony

  • 819⌶ i małe litery

  • 9↑ pierwszych 9 elementów

  • ⎕a ten ciąg 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • Daje to macierz znaków

        ja
       cześć
      ghi
     Fghi
    efghi
   defghi
  cdefghi
 bcdefghi
abcdefghi

i na ten wynik

1 i
12 cześć
123 ghi
1234 fghi
12345 efghi
123456 defghi
1234567 cdefghi
12345678 bcdefghi
123456789abcdefghi

wykonać następujący pociąg (⊢⍪1↓⊖)

właściwy argument

połączony pionowo z

1↓ pierwszy wiersz spadł z (pozwala to uniknąć powtarzania środkowego rzędu)

prawy argument odwrócony pionowo


Inne rozwiązania

33 bajty

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⎕ucs 106-q←⍳9

Wypróbuj online!

33 bajty

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⌽ucs 96+q←⍳9

Wypróbuj online!

user41805
źródło
1

Węgiel , 22 17 bajtów

G↗↓←⁹β←G↖↓⁹⭆χι‖O↓

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

G↗↓←⁹β

Narysuj prawy dolny trójkąt i wypełnij go małymi literami. (Wypełnienie polega na kafelkowaniu płaszczyzny alfabetem, a następnie skopiowaniu narysowanego obszaru).

Przesuń w lewo, aby narysować trójkąt liczbowy.

G↖↓⁹⭆χι

Narysuj lewy dolny trójkąt i wypełnij go cyframi. (Ponieważ trójkąt jest rysowany po lewej stronie źródła, cyfry są traktowane jako wyrównane do prawej, więc używane są tylko cyfry od 1 do 9).

‖O↓

Zastanów się, aby ukończyć dolną połowę.

Neil
źródło
1

V , 25 , 21 bajtów

¬19¬ai8ñHÄ/á
r ge.YGp

Wypróbuj online!

2-4 bajty zapisane dzięki nmjcman101!

Hexdump:

00000000: ac31 39ac 6169 38f1 48c4 2fe1 0a72 2067  .19.ai8.H./..r g
00000010: 652e 5947 70                             e.YGp
James
źródło
Wiem, że wszystko, co robię, to śledzenie twoich odpowiedzi dzisiaj, ale myślę, że to działa na 23: Wypróbuj online!
nmjcman101
@ nmjcman101 Z jakiegokolwiek powodu nie mogę zrozumieć, jak działa ta wersja. Ale wymyśliłem jeszcze krótszy, więc dzięki!
James
Doszło do końca /\d*wyszukiwania
nmjcman101,
1

J , 44 bajty

(m]\u:49+i.9),.(m=.,}.@|.)]\&.(|."1)u:97+i.9

Wypróbuj online!

Próbowałem wygenerować liczbowo maskę 1 i zero, aby użyć jej do indeksowania, ale koszt pozbywania się dodatkowego wiersza był wysoki i zrezygnowałem:

   (9-.~i.18){0<:-/~(,|.)i.9
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Galen Iwanow
źródło
1

Japt, 24 bajty

Zwraca tablicę wierszy

9Æ´AçXÄ
c¡A°îYd#a
Vù y ê

Sprawdź to


Wyjaśnienie

9Æ            :Map each X in the range [0,9)
  ´A          :  Prefix decrement A (initially 10)
    ç         :  Repeat
     XÄ       :  X+1
\n            :Assign to variable U
 ¡            :Map each element at index Y in U
  A°          :  Postfix increment A
    î         :  Repeat
      d       :  The character at codepoint
     Y #a     :  Y+97
c             :Concatenate with U
\n            :Assign to variable V
Vù            :Left pad each element in V to the length of the longest element
   y          :Transpose
     ê        :Palindromise

Alternatywy

9õÈîZqÃú Ë+EòdEn#i)¬ù9Ãê

Sprawdź to

9ÇòdZn#i)cZòÄ)¬Ãú ®éJ´Ãê

Sprawdź to

Kudłaty
źródło
Zastanawiam się teraz, czy budowanie tego w poziomie mogło nie doprowadzić do krótszego rozwiązania! : \
Shaggy
1

QBasic , 87 bajtów

Anonimowa funkcja, która nie pobiera danych wejściowych i wyjściowych do konsoli.

For y=-8To 8:z=Abs(y):a$="123456789abcdefghi":?Mid$(a$,1,9-z)Spc(2*z)Mid$(a$,10+z):Next

Ta odpowiedź jest technicznie poliglotą i będzie działać w VBA

Taylor Scott
źródło
1

Befunge-93 , 314 308 bajtów

<p0+3*67p0+4*77p0+3*77p0-7*88p0-6*88"#v#v>"
"i        "11g1-21p56+1g1+56+1p28*1g1+28*1p  ^       >25*
"        1"92g1+82p56+2g1-56+2p28*2g1-28*2p91g00g`#v_^   >
"ihgfedcba "93p26*3g1-26*3p">^"88*7-0p88*7-4pv     >25*
"987654321 "14p26*4g1+26*4p26*4g12g`#v_            ^
                             >:#,_@#:<

Wypróbuj online!

Zagrał w golfa 6 bajtów, umieszczając >z pinstrukcją

ItsJ0el
źródło
1

Matlab, 122 bajty

function[r]=f,s=[49:57,'a':'i'];r=[];for i=1:9,r=[r;s(1:i),repmat(' ',[1,18-2*i]),s(19-i:18)];end,r=[r;flip(r(1:8,:))];end

Wypróbuj online!

DimChtz
źródło
1

PowerShell 5.1, 70 69 64 57 bajtów

Dzięki Mazzy za -7 bajtów

1..9+8..1|%{-join(1..$_+'  '*(9-$_)+' ihgfedcba'[$_..1])}

Okazuje się, że sklejenie ze sobą ręcznie oszczędza bajt. Połączenie jednego mega-złącza pozwala zaoszczędzić jeszcze 5. Działa również poprzez zamianę zakresu ints na char [], aby uzyskać ai. Korzystanie z zakresu w stosunku do rzeczywistych liter jest o 5 bajtów lepsze.

Veskah
źródło
1
spróbuj tego: 1..9+8..1|%{-join(1..$_+' '*(9-$_)+' ihgfedcba'[$_..1])}. Uwaga ' '*(9-$_)zawiera 2 symbole spacji
mazzy
1
@ mazzy ooof, brakuje tej sztuczki podwójnej spacji. Myślałem o różnych stwierdzeniach matematycznych, ale oczywiste rozwiązanie nigdy nie przyszło mi do głowy.
Veskah
1

C (gcc) ,143 142 127 + 10 = 137 136 + 10 = 146 (flagi kompilatora) bajtów

-1 bajt poprzez zastąpienie logicznego OR operatorem bitowym.

-5 bajtów dzięki Logern.

+9 bajtów, aby naprawić linię środkową, która została wyprowadzona dwukrotnie.

char*s="123456789abcdefghi";G{for(;j<18;++j)putchar(i>j|j>17-i?s[j]:32);puts("");}f(){int i=0,j=0;for(;i++<8;)G;g(i+1,j);for(;i-->1;)G;}

Flaga kompilatora:

-DG=g(i,j)

To makro uwzględnia występowanie g(i,j): deklaracji funkcji i wywołań.

Wypróbuj online!

Inne podejście niż świetna odpowiedź Pietu1998 , prostsze (i czytelne), ale wyższy wynik.

Punktem wejścia jest funkcja f(); funkcja g()obsługuje drukowanie każdej kolejnej linii.

Można zmienić go w pełny program, zmieniając fjego nazwę na main, ale zwiększy to wynik.

Ładna wersja, makro Grozszerzone:

char *s = "123456789abcdefghi";
int g(int i, int j) {
    for(; j < 18; ++j)
        putchar((i > j | j > 17 - i) ? s[j] : 32);
    puts(""); // Break the line -- shorter than putchar(10) or printf("\n")
}
int f() {
    int i = 0, j = 0; // j is constant, declared here to not have to declare and init it inside g()
    for(; i++ < 8;) // Upper half of the tie
        g(i, j);
    g(i + 1, j); // Median line
    for(; i-- > 1;) // Lower half; --i > 0 would also work for the condition
        g(i, j);
}
joH1
źródło
137, ale +10 dla flag kompilatora
joH1
137 to łącznie 127 bajtów kodu i 10 bajtów flag kompilatora.
Logern
Ups, przepraszam, mój zły. Aktualizuję teraz!
joH1
@Logern Pozwoliłem sobie zmienić nazwę makra na G, aby dopasować nazwę funkcji.
joH1
0

JavaScript (ES6), 76 bajtów

f=(x=y=0)=>y<17?(x>y^x++<17-y?x.toString(36)+[`
`[x%=18]]:' ')+f(x||!++y):''

Wypróbuj online!

Arnauld
źródło
0

VBA, 75 bajtów

Anonimowa funkcja bezpośredniego okna VBE, która nie pobiera żadnych danych wejściowych i wyjściowych do konsoli.

For y=-8To 8:z=Abs(y):a="123456789abcdefghi":Mid(a,10-z)=Space(2*z):?a:Next
Taylor Scott
źródło
0

Galaretka , 22 21 bajtów

9R€z⁶Zµạ106Ọ$Ṡ¡€Uṭ)ŒḄ

Wypróbuj online!

Opiera się na (prawdopodobnym) niezamierzonym zachowaniu, które gdy (znak) działa na znak, powoduje zachowanie Pythona None. Z tego powodu jest sprawdzanie, czy argument jest niezerową liczbą całkowitą, ponieważ Nonew Pythonie występuje falsey. Jeśli to zachowanie zostanie zmienione, działa również dla jeszcze jednego bajtu.

Funkcja, która zwraca listę linii.

dylnan
źródło
0

Python 2 , 97 94 bajtów

i=o="123456789abcdefghi";c=8
while c:i=i[:c]+' '*(9-c)*2+i[-c:];o=i+'\n'+o+'\n'+i;c-=1
print o

Wypróbuj online!

Opublikowałem tylko jako alternatywę dla używania eval()i ponieważ w końcu mam go poniżej 100. Zasadniczo zaczyna się od środkowego rzędu, a następnie działa jednocześnie w górę i w dół.

ElPedro
źródło
0

Yabasic , 103 bajty

a$="123456789abcdefghi"
For y=-8To 8
z=Abs(y)
?Mid$(a$,1,9-z);
For i=1To z?"  ";Next
?Mid$(a$,10+z)Next

Wypróbuj online!

Taylor Scott
źródło