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.
for x in range(input()):print chr(x)
W rzeczywistości wydrukowałby znaki, jeśli chcesz edytować swój przykład.[i for i in range(n)]
jest dość podobna dorange(n)
Odpowiedzi:
CJam, 4 bajty
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.źródło
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 = 9999pieprzenie mózgu -
169146142 bajtyOgraniczenia:
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
źródło
>[-]<[->.+<]
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ść.>[-]<
części, ponieważ byłem już przy pustej celi. :)Pyth , 4 bajty
Zasadniczo tłumaczenie programu Python 3:
źródło
Befunge 93 -
2321Befunge 93 -
1513 (Ingo Burk)Ten drukuje listę w odwrotnej kolejności, ale OP powiedział tylko, że musimy wydrukować pierwsze
n
znaki, a nie to, że musi być w porządku.Nie będzie już możliwości gry w golfa bez przejścia do Befunge98 (operator „;”, patrz odpowiedź @ Kasran )
Wypróbuj tutaj:
Pokaż fragment kodu
źródło
&> #- #1:# :#,_@
(drukuje się tylko w odwrotnej kolejności)Java,
151128776256 bajtówNajpierw spróbuj golfa.
Stosowanie:
Dzięki @Shujal, @flawr, @Ingo Bürk i @Loovjo za poważną redukcję bajtów.
źródło
int i,n=new Scanner(...
i zmieniając pętlę nafor(;++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.a
jako danych wejściowych. I myślę, że możesz skrócićfor
pę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)++i<n+1
powinno być równoważne z++i<=n
. Zwróć jednak uwagę na=
tam! To po prostu oszczędza jeden bajt. Mi to pasuje.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. :)APL, 5
Przykładowe użycie:
źródło
JavaScript, ES6 -
525856534442 bajtyWklej 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!
źródło
f=n=>String.fromCharCode(...Array(n).keys())
Haskell,
1723 bajtówNie 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:
Również nie krótszy (25 znaków z drukowaniem, 19 bez), ale ciekawe alternatywne podejście (wymaga jednak „Data.List”):
źródło
(`take`['\0'..])
zapisuje bajt.Wspólne narzędzia Bash + BSD, 9 bajtów
GNU dc, 20 bajtów
źródło
DO,
31302827Ponieważ putch jest niestandardowy, oto w pełni zgodna wersja:
Należy wywołać z głównego:
EDYCJA: Ulepszona dzięki wykorzystaniu wartości zwracanej przez putchar
EDYCJA 2: Zredukowana przez inną postać poprzez rekurencję
źródło
Perl, 17 bajtów
źródło
print chr for 0..$ARGV[0]
shift
zamiast$ARGV[0]
zapisać 2 bajty.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ę jako18
postacie.17
nasay chr for 0..$_
plus1
zan
.say
nie będzie działać z każdą wersją perla.CJam, 3
Założyłem, że argumentem jest element najwyższego stosu.
Przykładowe użycie:
źródło
Ruby, 30 znaków
źródło
awk - 27
Aby nadać parametr stdin, uruchom go w następujący sposób:
Dla zabawy: „Myśl pozytywnie” zaczynając od ostatecznego
yes
:NR-1
jest potrzebny do drukowania(char)0
dlaNR==1
. :-(A dlaczego nie mamy
no
polecenia? To trochę wredne!źródło
alias no='yes no'
J - 5 bajtów
{.
is Head,a.
is Alphabet (lista wszystkich znaków) i&
łączy je, generując czasownik monadyczny o nazwie: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:
źródło
{.&a. 127
tego nie jest?char
lub ich odpowiedniki.gs2, 2 bajty
To powinno być konkurencyjne, tak myślę! Działałoby to nawet we wczesnych dniach gs2. Wypróbuj tutaj.
źródło
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ć
256
implementacje 8-bitowe:źródło
Golfscript - 5
Dzięki @Dennis
źródło
~,""+
jest krótszy i poprawnie przetwarza dane wejściowe z STDIN.;"65"
, Ponieważ dane wejściowe ze STDIN zawsze będą ciągiem znaków.Lua -
4341 bajtówźródło
a=""for i=1,arg[1]do print(a.char(i))end
for i=1,arg[1]do print(("").char(i))end
Befunge 98, 22
Trochę smutne, że to tak długo.
źródło
Python 3.4 - 36 bajtów / 43 bajtów
255 danych wejściowych ()
Jak to działa:
Drugi usuwa po prostu spację oddzielającą każdy znak w zamian za 7 bajtów.
źródło
map
zwraca listę, więc możesz to zrobićf=lambda i:map(chr,range(i))
Pascal 87
Pascal 73
Kompiluje i działa poprawnie z http://www.onlinecompiler.net/pascal
źródło
var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end.
pastebin.com/aFLVTuvhx86 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.
źródło
Perl - 29
źródło
Ruby, 23 lata
Wyjaśnienie
*
) wywołuje#to_ary
w zakresie, aby wydrukować każdy znak w osobnej linii.źródło
Julia: 20 znaków (REPL)
Jest to bliskie przykładowi pytania: po prostu generuje postacie i pozwala REPL robić z nimi, co chce.
Julia: 33 znaki
Drukuje każdy znak w osobnej linii.
źródło
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)
źródło
T-SQL:
6863Jako pętla drukująca
T-SQL:
9586Jako zapytanie
Edycja: Wprowadzono zmiany i poprawki wskazane przez Muqo. Dzięki. Poprawki i gra w golfa sugerowane przez @ t-clausen.dk
źródło
GOTO
etykietę. W przypadku zapytania można określić,msdb.sys.objects
aby zagwarantować wystarczającą liczbę obiektów. Ponadto nie wyświetla CHAR (0). Jednak na pocieszenie możeszORDER BY @
.BrainFuck -
140112 bajtówWypróbuj tutaj!
Zapisano 28 bajtów, zmieniając
[<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-]
na[<<<->->->-]
.Co to robi
źródło
Beczka , 4 bajty (SBCS)
TIO
Wciśnij wejście, wyjście tabeli ASCII.
źródło