Wprowadzenie:
Pamiętam, że kiedy byłem dzieckiem, dostawałem kalkulator i naciskałem +
przycisk i sprawdzałem, jak wysoko mogę liczyć. Teraz lubię programować i rozwijam się na iOS.
Liczenie jest podstawową umiejętnością zarówno dla ludzi, jak i komputerów. Bez tego nie można zrobić reszty matematyki. Odbywa się to po prostu od rozpoczęcia 1
i powtarzalnego dodawania 1
do niego.
Wyzwanie:
To tylko proste wyzwanie. To, co chciałbym, aby twój program zrobił, to wypisywanie z 1
tego, Integer
co pobiera. Jednak wrzucę w to zwrot, ponieważ liczenie dziesiętne jest trochę nudne:
Liczenie nie może być w bazie 10, musi pokazywać się jako liczenie binarne.
Tak więc, aby policzyć do 5, używając 32-bitowych liczb całkowitych, wyglądałoby to tak:
0000 0000 0000 0000 0000 0000 0000 0001 ..... 1
0000 0000 0000 0000 0000 0000 0000 0010 ..... 2
0000 0000 0000 0000 0000 0000 0000 0011 ..... 3
0000 0000 0000 0000 0000 0000 0000 0100 ..... 4
0000 0000 0000 0000 0000 0000 0000 0101 ..... 5
To jest komputer. Oni najlepiej znają binarne. Dane wejściowe mogą być 32-bitową lub 64-bitową liczbą całkowitą. To naprawdę zależy od ciebie. Jeśli jednak używasz 32-bitowych liczb całkowitych, dane wyjściowe muszą być 32-bitowymi liczbami całkowitymi w formacie binarnym , a jeśli używasz 64-bitowych liczb całkowitych, dane wyjściowe muszą być 64-bitowymi liczbami całkowitymi w formacie binarnym .
Przykładowe dane wejściowe:
32-bitowa liczba całkowita, 5
Przykładowe dane wyjściowe:
0000 0000 0000 0000 0000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 0101
Punktacja:
Twój wynik jest równy liczbie bajtów kodu. Ponieważ jest to Code Golf, wygrywa najniższy wynik.
Punkty bonusowe:
Jeśli wyświetlisz na wyjściu liczbę, pod którą jest to liczba podstawowa 10 (na przykład 0000 0000 0000 0000 0000 0000 0000 0001
w systemie binarnym jest równa podstawie 10 1
), pomnóż swój wynik przez 0.8
.
Jeśli zgrupujesz 4 cyfry wyniku, tak jak ja, pomnóż swój wynik przez 0.8
(ponownie). To nie jest wymagane.
Nie zaokrąglać w górę i nie zaokrąglać w dół. Twój wynik jest liczbą zmiennoprzecinkową.
int
na przykład w języku Python 3 )?Odpowiedzi:
APL, 10 znaków
Kolejny włączony w APL. Zakłada
⎕IO←1
(domyślnie). Brak punktów bonusowych. Odczytuje liczbę z urządzenia wejściowego. Jeśli twoja APL używa 64-bitowych liczb całkowitych zamiast 32-bitowych liczb całkowitych, zamień 64 na 32 w razie potrzeby.Zauważ, że APL transparentnie konwertuje na liczby zmiennoprzecinkowe, gdy przekroczony zostanie zakres liczby całkowitej. Trudno jest więc dokładnie powiedzieć, z jaką wielkością całkowitą APL działa.
wyjaśnienie
źródło
JavaScript ( ES6 ) 56,8 (71 * 0,8)
Wersja 32-bitowa, ponieważ JavaScript nie obsługuje 64-bitowej precyzji (maksymalnie 53 bity przy użyciu podwójnych liczb zmiennoprzecinkowych)
Bez grupowania
Z grupowaniem - wynik 60,16 (94 * .64)
Testuj w dowolnej przeglądarce (ES5)
źródło
Pyth, 18 * 0,8 * 0,8 = 11,52 bajtów
Przykładowe dane wyjściowe:
źródło
Pyth, 19 * 0,8 * 0,8 = 12,16 bajtów
Przykładowe dane wyjściowe dla wejścia 5:
Demonstracja.
źródło
Python 2, 48 * 0,8 = 38,4
Konwertuje liczbę na binarną, używa formatowania ciągów, aby przekonwertować ją na binarną z 32 cyframi, a następnie drukuje liczbę dziesiętną premii. Wykorzystuje
exec
pętlę do zwiększania od1
wartości wejściowej.źródło
OverflowError: repeated string is too long
. Nie jestem jednak pewien, czy to ograniczenie tylko dla mojej maszyny.CJam, 13,44 (21 × 0,64)
Wypróbuj online.
źródło
APL, 23,68 (37 × .8 × .8)
źródło
KDB (Q), 50 * 0,8 * 0,8 = 32
Czuję się trochę smutny z powodu mojego zgłoszenia :( Powinien być lepszy sposób, aby to zrobić!
Wyjaśnienie
Test
źródło
k){-1{" "/:,/'$:(0N 4#0b\:x),x}@'1+!x}
Common Lisp, 96,0
Wynik:
(* 150 .8 .8)
Przykład
Wywołanie funkcji za pomocą 10:
Wyjaśnienie
(format()"~39,'0b ~:*~d" #b101010101010)
daje:Łańcuch pośredni (tablica) jest modyfikowany w celu umieszczenia znaku spacji w następujących indeksach zerowych: 4 9 14 19 24 29 34. Następnie jest drukowany.
Zauważ, że pozornie prosty
(format t"~39,'0,' ,4:b ~:*~d" #b101010101010)
format nie robi tego, co chcemy. Drukuje:(wypełnienie nie jest pogrupowane według 4)
źródło
Rubin, 28 (35 * 0,8)
źródło
C, 97 * 0,8 * 0,8 = 62,08
Przykładowe dane wyjściowe dla wejścia „5”:
Mógłbym dodać jeszcze jeden biały znak, aby oddzielić liczby dziesiętne od liczb binarnych, ale technicznie problem nie wymaga go, tak myślę?EDYCJA: Dzięki, CL!źródło
x%-4-1
zx%-4-2
dodać przestrzeń pomiędzy binarny i po przecinku bez dodatkowych kosztów bajtów. (Pozwoliłoby to również pozbyć się dodatkowej przestrzeni na początku każdej linii.)Oktawa, 23 znaki
Przykładowe dane wyjściowe dla wejścia 5:
źródło
MatLab, 19 bajtów
Nie za bardzo, MatLab ma wbudowany konwerter dziesiętny na binarny i automatycznie drukuje wynik.
źródło
Julia, 42 bajty
To jest nieco krótsze bez bonusów.
Tworzy to nienazwaną funkcję, która przyjmuje liczbę całkowitą i drukuje binarną reprezentację każdej liczby od 1 do n , a każda z lewej jest wypełniona zerami do 64 znaków.
Z bonusami 78 bajtów * 0,8 * 0,8 = 49,92
Tworzy to nienazwaną funkcję, która przyjmuje liczbę całkowitą i wypisuje reprezentację binarną jak poprzednio, tym razem podzieloną na grupy 4 z liczbą w bazie 10 na końcu.
źródło
Common Lisp, wynik: 64,0
100 bajtów * 0,8 * 0,8
Jestem całkiem zadowolony z mojego wyniku, ale nadal uważam, że powinna istnieć możliwość uproszczenia mojego kodu.
Wynik
Kod
Wyjaśnienie
Jak opisano w odpowiedzi Coredump , ciąg formatu
robi wyjściowe liczby base2, ale wydaje się, że nie ma również możliwości poprawnego zgrupowania. Dlatego przymuszam ciąg do listy i iteruję go, wybierając grupy 4 z tym ciągiem formatu:
„~ {~ a ~ a ~ a ~ a ~} ~ a ~%”
Po każdej grupie 4 jest puste, a po ostatniej grupie drukowany jest numer base10.
Bez grupowania (60 x 0,8 => 48,0)
Używa ~: * do ponownego przetworzenia argumentu (pojedynczego) formatu.
źródło
PHP, 51,84 (81 × .8 × .8)
Wersja 32-bitowa, ponieważ PHP jest ograniczony do 32-bitowego systemu Windows, niezależnie od tego, czy system operacyjny jest 64-bitowy.
Bierze jeden argument wiersza poleceń.
źródło
CoffeeScript, 60,8 (76 × .8)
Wersja 32-bitowa z wyżej wymienionych powodów , ponieważ CoffeeScript kompiluje się do JavaScript.
Zgrupowanie staje się nieco dłuższe: 64,64 (101 × .8 × .8)
źródło
Haskell, 56 bajtów
Stosowanie:
Dla 64bit, wymienić
32
się64
. Każda inna liczba też działa.źródło
J, 20 bajtów
Przykładowe dane wejściowe i wyjściowe:
źródło
Szybki: 98,56 (154 * 0,8 * 0,8)
źródło
Ruby, 64-bitowy
70 * 0,8 * 0,8 = 44,8 bajtów (podzielone, dziesiętne)
51 * 0,8 = 40,8 bajtów (dziesiętnie)
67 * 0,8 = 53,6 bajtów (podzielone)
44 bajty (bez bonusów)
źródło
05AB1E ,
1311 bajtów-2 bajty dzięki @ Mr.Xcoder .
Wyjścia bez separatora spacji ani numeru sekwencji.
Wypróbuj online.
Wyjaśnienie:
źródło
Lb32jsäð0:»
działa na 11 bajtówj
do prepend, aby stał się prawidłowej długości.