Wydrukuj tabelę ASCII

28

Zadanie polega na wyświetleniu n znaków w tabeli ASCII .

Możesz napisać funkcję (lub program, który przyjmuje argument jako parametr, dozwolone jest również STDIN), który przyjmuje parametr n , który będzie indeksem ostatniego znaku do wydrukowania.

Zadanie jest dość proste, więc jako przykład oto możliwa implementacja w Pythonie 2.7:

(lambda n:map(chr, range(n)))(256)

Jak powiedziałem, jest to proste zadanie. To jest golf golfowy, a najkrótsze kody wygrywają!

EDYTOWAĆ

Jak niektórzy z was zauważyli, ten kod nie drukuje wyniku. To tylko przykład, ponieważ mogę mieć problem z wyjaśnieniem problemu w języku angielskim ;-).

EDYCJA 2

Możesz opublikować odpowiedź w dowolnym języku programowania, nawet jeśli nie jest to najkrótszy kod. Może są tam jakieś ciekawe wdrożenia!

EDYCJA 3

Naprawiono przykład, aby wyświetlał wynik.

oopbase
źródło
1. Czy to musi być funkcja? 2. Zgodnie z kodem referencyjnym n będzie pierwszym znakiem, który nie jest drukowany.
Dennis
2
W rzeczywistości kod referencyjny nic nie drukuje. Zwraca tylko listę znaków i pozwala REPL robić wszystko, co chce z wynikiem.
manatwork
1
Czy ktoś może wyjaśnić opinię? Przykro mi, jeśli mój angielski nie jest zbyt dobry. Jeśli w pytaniu jest coś niejasnego, proszę mi powiedzieć.
oopbase
1
for x in range(input()):print chr(x)W rzeczywistości wydrukowałby znaki, jeśli chcesz edytować swój przykład.
FryAmTheEggman
2
nota [i for i in range(n)]jest dość podobna dorange(n)
njzk2

Odpowiedzi:

19

CJam, 4 bajty

ric,

Pełny program, który czyta ze STDIN (pole wejściowe w tłumaczu online ).

Wykonuje się to po prostu range(chr(int(input()))), wykorzystując fakt, że ,zwraca tablicę znaków, jeśli jej argumentem jest znak.

Wzywam dibs na c,(2 bajty), na wypadek, gdyby zakładanie, że dane wejściowe są już na stosie, okazało się dozwolone.

Dennis
źródło
Czy musisz podać dane wejściowe? Online runner po prostu wyprowadza sam kod.
manatwork
12
@manatwork: Just a sec. Musisz się spieszyć, publikując te ...;)
Dennis,
Trochę mnie to zagubiło. Znak o wartości 0 (aka 0c) zapobiega drukowaniu po nim czegokolwiek innego. ric, (wydaje się, że działa dobrze. Oznacza to, że kod nie działa.
kaine
1
@kaine: Internet Explorer jest napisany w C ++, który nie używa łańcuchów zakończonych znakiem null. Zgodnie z tym , znaki puste to błędy analizy w HTML 5; przeglądarka musi zastąpić go znakiem lub przerwać przetwarzanie dokumentu.
Dennis
4
Pamiętaj, że musisz wprowadzić odpowiednio dużą wartość n, ponieważ pierwsze kilkadziesiąt znaków ASCII to znaki, które nie mogą być drukowane. Ciekawostka: ten program wyświetla również tabelę Unicode, na przykład n = 9999
Sanchises
25

pieprzenie mózgu - 169 146 142 bajty

-[+>+[+<]>+]>+>>,[>,]<[<]<[->>[->]<[<]<]>>>[[<[-<+<+<+>>>]+++++++++[<[-<+>]<<[-<+>>>+<<]<[->+<]>>>>-]]<,<<,>[->>>+<<<]>>>---------->]<-[->.+<]

Ograniczenia:

  • EOF musi wynosić 0
  • Wymaga 8-bitowych komórek do zawijania
  • Z powodu ^ modów wprowadzanych przez 256

Nie najkrótsza odpowiedź tutaj, ale hej, pieprzony mózg! To byłoby naprawdę, naprawdę dobre wyzwanie, z wyjątkiem faktu, że wymaga wprowadzenia czytelnego dla człowieka bez zagwarantowania liczby cyfr. Mogłem potrzebować danych wejściowych, aby mieć zera wiodące, aby miały 3 znaki, ale co to za zabawa? : D Jednym z głównych problemów z przyjmowaniem danych wejściowych w ten sposób jest to, że jedyna struktura odgałęzienia lub zapętlenia mózgu sprawdza, czy bieżąca komórka ma zero, czy nie. Gdy dane wejściowe mogą zawierać zera, może to spowodować, że Twój kod przejmie gałęzie, których nie powinien przyjmować. Aby rozwiązać ten problem, przechowuję każdą cyfrę wejścia plus 1 , a następnie odejmuję nadmiar z ostatniej możliwej sekundy. W ten sposób zawsze wiem, gdzie są moje zera.

Powiedziałem, że byłoby to wielkie wyzwanie, bez konieczności analizowania danych wejściowych. Dlaczego? Udawajmy, że nie przyjmujemy danych liczbowych. Powiemy, że wyzwaniem jest „Biorąc pod uwagę bajt wejścia, wypisz wszystkie znaki ASCII poniżej tego bajtu”. Oto moja odpowiedź:


brainfuck - 8 bajtów

,[->.+<]

To spora różnica! Prawdziwy program używa 135 instrukcji do zebrania danych wejściowych (ponad 95% programu!), Tylko dlatego, że to człowiek je pisze. Zapisać numer jako bajt i dać to do mnie, a to zajmuje tylko jeden.

(Ciekawostka: jeśli zrozumiałeś hipotetyczny program, to gratulacje! Rozumiesz pieprzenie mózgu w całości. Cały język ma tylko osiem poleceń, a ten program używa każdego z nich dokładnie raz).

Wyjaśnienie

-[+>+[+<]>+]>+               abuse 8 bit wrapping to put 47 in cell 4

>>,[>,]                      starting in cell 6; get each character of input

<[<]<[->>[->]<[<]<]          subtract the value of cell 4 from each input character
                             '0' has an ascii value of 47 so subtracting 47 from each
                             digit gives you that digit's value plus 1

>>>[                         if the number is in more than one cell
                             (when the program first starts this means "if the input has
                             more than one digit")

[<[-<+<+<+>>>]               copy first input cell to 3 new cells

+++++++++[<[-<+>]<<          do some fancy addition magic to multiply that value by 10
[-<+>>>+<<]<[->+<]>>>>-]]

<,<<,>                       clean up a bit (abusing comma to set cells to 0)

[->>>+<<<]>>>                add the value to the next cell of input

----------                   because we multiplied (the digit plus 1) by 10; the answer
                             is 10 too high; so subtract 10

>]                           if the input is still in multiple cells; do the song and
                             dance again (multiply by 10; add to next cell; subtract 10)

<-                           we never got a chance to fix the final digit; so it's still 1
                             too high

               ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
               ;;         we have now finished processing input         ;;
               ;;     the tape is empty except for the current cell     ;;
               ;;  the current cell contains the number that was input  ;;
               ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[                            while the cell containing input != 0

-                            subtract 1 from it

>.+                          go a cell to the right; output that cell; then add 1

<]                           repeat
podziemny monorail
źródło
Miły! Zdecydowanie +1 za wysiłek :-)
oopbase
1
Możesz zapisać niektóre bajty na części wyjściowej: >[-]<[->.+<]Ustaw komórkę obok bieżącej komórki na 0, a następnie odlicz bieżącą komórkę, jednocześnie zwiększając komórkę obok niej i jednocześnie drukując wartość.
Shujal
@shu To doskonały punkt! W ogóle o tym nie myślałem. Oprócz tego, że jest krótszy, naprawia problem, który miałem z dławieniem się przy dużych wejściach i prawdopodobnie jest szybszy! Dzięki :)
undergroundmonorail
Tak, teraz jest o wiele, znacznie szybszy. Nie potrzebowałem też tej >[-]<części, ponieważ byłem już przy pustej celi. :)
undergroundmonorail
1
Również twoja druga odpowiedź jest prawidłowa.
Esolanging Fruit
12

Pyth , 4 bajty

VQCN

Zasadniczo tłumaczenie programu Python 3:

for N in range(eval(input())):print(chr(N))
FryAmTheEggman
źródło
11

Befunge 93 - 23 21

&> :#v_,>:#,_@
 ^-1:<

Befunge 93 - 15 13 (Ingo Burk)

Ten drukuje listę w odwrotnej kolejności, ale OP powiedział tylko, że musimy wydrukować pierwsze nznaki, a nie to, że musi być w porządku.

&>::>v
@^-1,_

Nie będzie już możliwości gry w golfa bez przejścia do Befunge98 (operator „;”, patrz odpowiedź @ Kasran )

Wypróbuj tutaj:

karhell
źródło
Mam nadzieję, że nie masz nic przeciwko, że użyłem tutaj wbudowanego tłumacza :)
Ingo Bürk,
Pytanie nie mówi, że musimy go wydrukować w dowolnej kolejności, więc jest to pięć bajtów krótszych: &> #- #1:# :#,_@(drukuje się tylko w odwrotnej kolejności)
Ingo Bürk,
Ogoliłem kolejne bajty w sumie na 15. Z powodu nowych linii zmodyfikuję go w twoim poście.
Ingo Bürk
Dobra gra na dodatkowej grze w golfa :) Jeśli chodzi o tłumacza liniowego, nie wiedziałem, że jest taki. Świetnie, dziękuję :)
karhell
Tłumacz jest nowy od połączonego wyzwania. Po prostu pomyślałem, że z niego skorzystam, kiedy zobaczyłem twoją odpowiedź. :)
Ingo Bürk
8

Java, 151 128 77 62 56 bajtów

Najpierw spróbuj golfa.

void f(int n){for(char i=0;++i<=n;System.out.print(i));}

Stosowanie:

import java.util.Scanner;
class A {

    public static void main(String[] a) {
        int num = new Scanner(System.in).nextInt();
        new A().f(num);
    }

    void f(int n) {
        for (char i = 0; ++i <= n; System.out.print(i));
    }
}

Dzięki @Shujal, @flawr, @Ingo Bürk i @Loovjo za poważną redukcję bajtów.

Rodolfo Dias
źródło
1
Możesz zapisać niektóre znaki, deklarując int podczas otwierania skanera: int i,n=new Scanner(...i zmieniając pętlę na for(;++i<n;). Nie musisz też wywoływać Character.toString. Możesz po prostu podać System.out wartość char, a ona z przyjemnością ją wygeneruje.
Shujal
1
Wyzwanie pozwala na użycie twojego ajako danych wejściowych. I myślę, że możesz skrócić forpętlę, nadużywając miejsca przyrostu jako ciała pętli: for(;++i<n;System.out.print((char)i));(ale być może będziesz musiał zmienić wartość inicjalizacji lub wartość końcową o + - 1)
flawr
1
Możesz napisać funkcję, więc nie potrzebujesz całej klasy i wszystkiego.
Ingo Bürk
1
@RodolfoDias Czy jesteś pewien? Oczywiście ++i<n+1powinno być równoważne z ++i<=n. Zwróć jednak uwagę na =tam! To po prostu oszczędza jeden bajt. Mi to pasuje.
Ingo Bürk
1
Sprowadzamy więc do void f(int n){int i=0;for(;++i<=n;System.out.print((char)i));}62 bajtów. Przynajmniej nie widzę teraz więcej w golfa. :)
Ingo Bürk
6

APL, 5

⎕UCS⍳

Przykładowe użycie:

⎕UCS⍳256
Shujal
źródło
1
Nie musisz robić dfn. Po prostu ⎕UCS⍳ działałoby dobrze. Więc 5 znaków
Moris Zucca
1
Nie musisz obsługiwać punktów kodowych powyżej 127. Tylko ↑ ⎕AV działałoby dobrze. Więc 4 znaki
Adám
6

JavaScript, ES6 - 52 58 56 53 44 42 bajty

n=>String.fromCharCode(...Array(n).keys())

Wklej to do konsoli Firefox. Uruchom jako f(NUM).

Musiałem wydłużyć ten czas, ponieważ pierwszy nie zaakceptował poprawnie danych wejściowych.

Down 3, dzięki edc65! Zmniejsz do 44 dzięki Swivel!

Scimonster
źródło
1
To tak naprawdę nie obsługuje ani parametru, ani danych wejściowych.
manatwork
Po prostu zmień 70 na inną liczbę; to jest wkład.
Scimonster,
Dobra, zaktualizowałem go, aby pobierać dane wejściowe, kosztem 6 bajtów.
Scimonster,
3
-2: f = n => [... Array (n)]. Map ((v, i) => String.fromCharCode (i))
edc65
2
44 postacie! f=n=>String.fromCharCode(...Array(n).keys())
Obrotowa
6

Haskell, 17 23 bajtów

flip take['\0'..]

Nie jestem pewien, czy można zrobić coś lepszego bez importu.

Edytować

Moje pierwsze rozwiązanie nie wydrukowało wyniku, więc pozwól na to 6 dodatkowych znaków:

print.flip take['\0'..]

Również nie krótszy (25 znaków z drukowaniem, 19 bez), ale ciekawe alternatywne podejście (wymaga jednak „Data.List”):

print.((inits['\0'..])!!)
archaephyrryx
źródło
To nie drukuje wyniku.
nyuszika7h
@ nyuszika7h teraz to robi
John Dvorak
(`take`['\0'..])zapisuje bajt.
Laikoni,
4

Wspólne narzędzia Bash + BSD, 9 bajtów

jot -c $1

GNU dc, 20 bajtów

?sc_1[1+dPdlc>m]dsmx
Cyfrowa trauma
źródło
4

DO, 31 30 28 27

k;f(n){putch(k++)<n&&f(n);}

Ponieważ putch jest niestandardowy, oto w pełni zgodna wersja:

k;f(n){putchar(k++)<n&&f(n);}

Należy wywołać z głównego:

main(){f(255);}

EDYCJA: Ulepszona dzięki wykorzystaniu wartości zwracanej przez putchar
EDYCJA 2: Zredukowana przez inną postać poprzez rekurencję

takra
źródło
1
putch to niestandardowa funkcja. Czy mogę również zapytać, dlaczego ta odpowiedź została odrzucona?
Stuntddude
@Stuntddude Dodam alternatywną wersję, która wykorzystuje putchar, i nie mam pojęcia, dlaczego jest to zaniżone. W końcu jest to jeden z krótszych.
takra
4

Perl, 17 bajtów

say chr for 0..$_
Demnogoni
źródło
1
Za dużo nawiasów. print chr for 0..$ARGV[0]
manatwork
Masz rację! Minęło trochę czasu, odkąd użyłem perla
Demnogonis
1
Możesz użyć shiftzamiast $ARGV[0]zapisać 2 bajty.
nyuszika7h
Jeśli możesz drukować znaki w różnych wierszach, możesz użyć say. Ponadto liczba znaków jest krótsza, jeśli robisz to jako jeden wiersz -n. echo "90" | perl -nE'say chr for 0..$_'liczyłby się jako 18postacie. 17na say chr for 0..$_plus 1za n.
hmatt1
Masz rację. Ale saynie będzie działać z każdą wersją perla.
Demnogonis
3

CJam, 3

,:c

Założyłem, że argumentem jest element najwyższego stosu.

Przykładowe użycie:

256,:c

ri,:c
Shujal
źródło
3

Ruby, 30 znaków

puts (0..$*[0].to_i).map &:chr
Klamka
źródło
3

awk - 27

{while(i<$0)printf"%c",i++}

Aby nadać parametr stdin, uruchom go w następujący sposób:

awk '{while(i<$0)printf"%c",i++}' <<<96

Dla zabawy: „Myśl pozytywnie” zaczynając od ostatecznego yes:

yes|head -96|awk '{printf"%c",NR-1}'

NR-1jest potrzebny do drukowania (char)0dla NR==1. :-(

A dlaczego nie mamy nopolecenia? To trochę wredne!


źródło
1
alias no='yes no'
nyuszika7h
... ale wtedy musiałbym też policzyć znaki tej definicji aliasu ... :-(
3

J - 5 bajtów

{.&a.

{.is Head, a.is Alphabet (lista wszystkich znaków) i &łączy je, generując czasownik monadyczny o nazwie:

{.&a. 100 NB. first 100 characters

Uwaga : Wygląda na to, że to nie działa interaktywnie: Jconsole i jQt wydają się konfigurować tłumaczenie, wyprowadzając znaki pola zamiast niektórych znaków kontrolnych. W skrypcie lub z wiersza poleceń działa jednak:

  ijconsole <<< '127 {. a.' | hd
jpjacobs
źródło
Zauważ, że alfabet nie jest dokładnie ASCII.
FUZxxl
Do {.&a. 127tego nie jest?
jpjacobs,
Nie, ponieważ J ma znaki rysujące w polu zamiast niektórych znaków kontrolnych.
FUZxxl,
W rzeczywistości zapisanie tego do pliku i sprawdzenie go za pomocą przeglądarki szesnastkowej mówi mi, że J wyprowadza prawidłowe wartości (0x00 0x01, ...). to tylko interpreter J / IDE interpretuje te wartości jako znaki rysujące w polu zamiast znaków kontrolnych. Robi to dokładnie tak samo, jak wszystkie inne używane języki charlub ich odpowiedniki.
jpjacobs,
To dziwne, ponieważ przetestowałem to na moim UNIXowym pudełku i rzeczywiście wypisało znaki Unicode dla niektórych punktów kodowych.
FUZxxl,
3

gs2, 2 bajty

V.

To powinno być konkurencyjne, tak myślę! Działałoby to nawet we wczesnych dniach gs2. Wypróbuj tutaj.

Lynn
źródło
1
Pomyślnie przetestowany w tej wersji , która wyprzedza wyzwanie o miesiąc.
Dennis
3

Brainfuck, 44 bajty

,
[
  <[>++++++++++<-]
  -[>-<-----]
  >+++>,
]
<[>.+<-]

Oczekuje ciągu dziesiętnego bez końcowego znaku nowej linii.

Wypróbuj online.

Czytanie liczb całkowitych z zakresu [0, max_cell_size]w pieprzeniu mózgu nie jest trudne. Zachęcam do samodzielnego opracowania czystej metody. Uważam to za ćwiczenie dla początkujących. (Operacja odwrotna drukowania wartości liczbowej komórki jest bardziej zaangażowana i można ją uznać za zadanie na poziomie pośrednim).

Oto 58-bajtowa wersja, która może obsługiwać 256implementacje 8-bitowe:

,
[
  <[<+> >++++++++++<-]
  -[>-<-----]
  >+++>,
]
<[>]
-<<[>.]
>[>+.<-]

Mitch Schwartz
źródło
Dlaczego o tym nie pomyślałem ??? To jest genialne !!!
FinW,
Czy mogę pożyczyć to do wykorzystania w przyszłych odpowiedziach?
FinW,
1
@FinW Zgaduję, że nie wiesz o tym metatagu .
Mitch Schwartz
2

Golfscript - 5

Dzięki @Dennis

~,''+
Rozpad beta
źródło
1
~,""+jest krótszy i poprawnie przetwarza dane wejściowe z STDIN.
Dennis
@Dennis To nie produkuje dla mnie żadnych wyników ...
Rozpad Beta
1
Czy korzystasz z tłumacza internetowego? Aby poprawnie symulować dane wejściowe ze STDIN, musisz użyć np. ;"65", Ponieważ dane wejściowe ze STDIN zawsze będą ciągiem znaków.
Dennis
1
@Dennis O dzięki, to działa teraz!
Beta Decay
2

Lua - 43 41 bajtów

for i=1,arg[1]do print(string.char(i))end
William Barbosa
źródło
Możesz to skrócić bajtema=""for i=1,arg[1]do print(a.char(i))end
Digital Veer
Możesz to skrócić o 2 bajtyfor i=1,arg[1]do print(("").char(i))end
manatwork
2

Befunge 98, 22

&:00pv>0gk,@
0::-1<^j`

Trochę smutne, że to tak długo.

&:00p        ; gets numerical input, stores a copy at cell (0,0)               ;
     v       ; IP goes down                                                    ;

     <       ; IP goes left, so I execute 1-::0`j^                             ;
 ::-1        ; (1-::) subtract one from our number and duplicate it twice      ;
0       `    ; (0`) compare the number with 0, push 1 if greater else 0        ;
     <^j     ; if the result was 0, go up, otherwise continue going left       ;

      >0gk,  ; get the value at cell (0,0), print that many numbers from stack ;
           @ ; terminate program                                               ;
Justin
źródło
2

Python 3.4 - 36 bajtów / 43 bajtów

print(*map(chr,range(int(input()))))
print(*map(chr,range(int(input()))),sep='')

255 danych wejściowych ()

Jak to działa:

  1. Uzyskaj górną granicę zasięgu
  2. Wygeneruj zakres tabeli.
  3. Odwzoruj zakres na funkcję chr (przyjmuje int, zwraca ascii).
  4. Zużyj mapę poprzez rozwinięcie argumentu splat (liczba -> znak -> drukuj!)

Drugi usuwa po prostu spację oddzielającą każdy znak w zamian za 7 bajtów.

W całości z metalu
źródło
Mógłbyś bardzo przekształcić to w lambda, jak to stwierdza pytanie, aw Pythonie 2 mapzwraca listę, więc możesz to zrobićf=lambda i:map(chr,range(i))
Justin,
To prawda, a moje początkowe rozwiązanie było podobne, ale nie chciałem używać lambda, aby móc natychmiast wydrukować wydruk. Chciałbym, aby mapa zachowywała tendencję do zwracania listy zamiast iteratora, nawet jeśli jest w ten sposób bardziej pytoniczna.
Full Metal
2

Pascal 87

program _;var c:char;n:byte;begin n:=0;readln(n);for c:=chr(0)to chr(n)do write(c);end.

Pascal 73

program _;var c,n:byte;begin readln(n);for c:=0to n do write(chr(c));end.

Kompiluje i działa poprawnie z http://www.onlinecompiler.net/pascal

Mark K Cowan
źródło
1
FreePascal (i jeśli dobrze pamiętam, Turbo Pascal też) potrzebuje tylko 60 takich znaków: var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end. pastebin.com/aFLVTuvh
manatwork
Całkiem możliwe, że używałem tylko Delphi. Ale ktoś edytował to z tytułu.
Mark K Cowan
2

x86 ASM (Linux) (wiele wielu bajtów, chyba że go skompilujesz)

Zapisany jako funkcja zakłada, że ​​parametr jest przekazywany w AX (nie pamiętam numeru dla odczytanego połączenia systemowego) Nie zachowuje również [SP] ani BX.

test ax,ax
jz @Done
mov [sp],ax
@Loop:
mov ax,4
mov bx,1
mov cx,sp
mov dx,1
int 0x80
sub [sp],1  ; Can I do this?  Or do I need to load/sub/store separately?
jnz @Loop
@Done:
ret
Mark K Cowan
źródło
2
(Powinienem umieścić tam exploit F00F, to i tak nie jest tak, że ktokolwiek go uruchomi)
Mark K Cowan
7
Zamierzałem to uruchomić. Nie zamierzam tego teraz uruchamiać.
Aearnus
2

Perl - 29

sub f{print map{chr}0..shift}
nyuszika7h
źródło
2

Ruby, 23 lata

f=->n{puts *?\0..n.chr}

Wyjaśnienie

  • Dane wejściowe są traktowane jako argument dla lambda. Oczekuje liczby całkowitej.
  • „Operator destrukcji” ( *) wywołuje #to_aryw zakresie, aby wydrukować każdy znak w osobnej linii.
Britishtea
źródło
2

Julia: 20 znaków (REPL)

Jest to bliskie przykładowi pytania: po prostu generuje postacie i pozwala REPL robić z nimi, co chce.

f(n)=map(char,[0:n])

Julia: 33 znaki

Drukuje każdy znak w osobnej linii.

print(map(char,[0:int(ARGS[1])]))
człowiek w pracy
źródło
2

M (MUMPS) - 21

R n F i=1:1:n W $C(i)

W rozszerzonej formie: READ n FOR i=1:1:n WRITE $CHAR(i)

zabójstwo
źródło
2

T-SQL: 68 63

Jako pętla drukująca

DECLARE @i INT=64,@ INT=0A:PRINT CHAR(@)SET @+=1IF @<=@i GOTO A

T-SQL: 95 86

Jako zapytanie

DECLARE @ INT=64SELECT TOP(@+1)CHAR(ROW_NUMBER()OVER(ORDER BY 0/0)-1)FROM sys.messages

Edycja: Wprowadzono zmiany i poprawki wskazane przez Muqo. Dzięki. Poprawki i gra w golfa sugerowane przez @ t-clausen.dk

MickyT
źródło
W przypadku pętli można zapisać około 5 znaków, konwertując WHILE na GOTOetykietę. W przypadku zapytania można określić, msdb.sys.objectsaby zagwarantować wystarczającą liczbę obiektów. Ponadto nie wyświetla CHAR (0). Jednak na pocieszenie możesz ORDER BY @.
Muqo
Druga odpowiedź jest nieprawidłowa. Możesz przepisać go w ten sposób i golf 9 znaków: DECLARE @ INT = 64 WYBIERZ GÓRĘ (@ + 1) CHAR (ROW_NUMBER () OVER (ORDER BY 0/0) -1) OD
sys.messages
@ t-clausen.dk nie jestem pewien, jak to przepuściłem. Dziękuję za to.
MickyT,
2

BrainFuck - 140 112 bajtów

,>,>,>-[>+<-----]>---[<+>-]<[<<<->->->-]<[>+<-]<[>>++++++++++<<-]<[>>>>++++++++++[<++++++++++>-]<<<<-]>>>[>.+<-]

Wypróbuj tutaj!

Zapisano 28 bajtów, zmieniając [<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-]na [<<<->->->-].

Co to robi

,>,>,>                                                              Takes three inputs
                                                                    in three separate cells

-[>+<-----]>---[<+>-]<[<<<->->->-]<                                 Takes 48 off of each to
                                                                    convert them to decimal

[>+<-]<[>>++++++++++<<-]<[>>>>++++++++++[<++++++++++>-]<<<<-]>>>    Combines them into a
                                                                    three digit number by
                                                                    multiplying the first
                                                                    by 100, the second by
                                                                    10 and then adding all
                                                                    three

[>.+<-]                                                             Repeatedly prints the
                                                                    value of the adjacent
                                                                    cell and then adds one
                                                                    to it until it reaches
                                                                    the input value.
FinW
źródło