Rozważ proces:
Biorąc nieujemną liczbę całkowitą N.
np27
.Podzielenie go na liczby całkowite
N - floor(N/2)
ifloor(N/2)
(„większą” i „mniejszą” połowę) i zapisanie ich w tej kolejności.
np.27
staje się14 13
. .Usunięcie spacji, aby połączyć liczby całkowite w nową, znacznie większą liczbę całkowitą.
np.14 13
staje się1413
. .Powtarzając kroki 2 i 3 kilka razy pożądaną liczbę razy.
np.1413
→707 706
→707706
→353853 353853
→353853353853
→ ...
Wyzwanie polega na zrobieniu dokładnie tego, ale nie zawsze w bazie 10.
Wyzwanie
Napisz program, który przyjmuje trzy liczby: B, N i S:
B jest liczbą całkowitą od 2 do 10, która jest podstawą N (dwójkowa do dziesiętnej).
N jest nieujemną liczbą całkowitą, do której ma zostać zastosowany proces dzielenia-łączenia. Aby ułatwić wprowadzanie danych przez użytkownika, podaje się go jako ciąg znaków w bazie B, a nie liczbę całkowitą.
S jest nieujemną liczbą całkowitą, która oznacza liczbę powtórzeń procesu dzielenia-łączenia.
Wynikiem programu jest ciąg znaków reprezentujący N w bazie B po S procedurach łączenia rozdzielonego.
Gdy S jest 0
, nie są wykonywane żadne podziały, więc wyjście zawsze jest N.
Kiedy N jest 0
, wszystkie podziały mają formę 0 0
i redukują do 0
ponownie, więc wynik zawsze jest 0
.
Przykłady
B = 10, N = 27, S = 1
→1413
B = 10, N = 27, S = 2
→707706
B = 9, N = 27, S = 1
→1413
B = 9, N = 27, S = 2
→652651
B = anything, N = anything, S = 0
→N
B = anything, N = 0, S = anything
→0
Tabela dla wszystkich B z N = 1
dla S = 0
do 7
:
B S=0 S=1 S=2 S=3 S=4 S=5 S=6 S=7
2 1 10 11 101 1110 111111 10000011111 10000100001000001111
3 1 10 21 1110 202201 101101101100 1201201201212012012011 212100212102121002121212100212102121002120
4 1 10 22 1111 223222 111311111311 2232222232322322222322 11131111131311311111311113111113131131111131
5 1 10 32 1413 432431 213441213440 104220331443104220331442 2433241322130211014044424332413221302110140443
6 1 10 33 1514 535535 245550245545 122553122553122553122552 4125434125434125434125441254341254341254341254
7 1 10 43 2221 11111110 40404044040403 2020202202020220202022020201 10101011010101101010110101011010101101010110101011010100
8 1 10 44 2222 11111111 44444454444444 2222222622222222222226222222 11111113111111111111131111111111111311111111111113111111
9 1 10 54 2726 13581357 62851746285173 3142536758708231425367587081 15212633743485606571782880411521263374348560657178288040
10 1 10 55 2827 14141413 70707077070706 3535353853535335353538535353 17676769267676676767692676771767676926767667676769267676
Tabela dla wszystkich B z losowym N dla S = 0
do 3
:
B S=0 S=1 S=2 S=3
2 11011 11101101 11101111110110 11101111110111110111111011
3 2210 11021101 20102012010200 1001212100121210012121001211
4 1113 230223 112112112111 2302302302323023023022
5 101 2323 11341134 31430423143042
6 120 4040 20202020 1010101010101010
7 134 5252 24612461 1230456412304564
8 22 1111 445444 222622222622
9 4 22 1111 505505
10 92 4646 23232323 1161616211616161
Detale
- Weź dane wejściowe za pomocą stdin lub wiersza poleceń. Wyjście na standardowe wyjście.
- Zamiast programu możesz napisać funkcję, która pobiera B, N i S i wypisuje wynik normalnie lub zwraca go (jako ciąg znaków).
- B, N i S można przyjmować w dowolnej kolejności.
- Wszystkie dane wejściowe, które generują dane wyjściowe, których wartości dziesiętne są niższe niż 2 32, powinny działać.
- N jest reprezentowany w zwykły sposób. tzn. pierwsza cyfra najbardziej znacząca i bez zer wiodących, z wyjątkiem samego zera, które jest zapisane
0
. (Wyjście00
zamiast0
jest niepoprawne.) - Najkrótszy kod w bajtach wygrywa.
IFF lubisz moje wyzwania, rozważają budulcem Bot stad! trochę miłości :)
źródło
Odpowiedzi:
Pyth,
2119 bajtówPobiera dane wejściowe w formacie
N\nB\nS
. Wypróbuj online: Demonstracja lub Uprząż testowaWyjaśnienie
źródło
Pyth,
2921 bajtówNaprawdę prosta implementacja.
Pobiera dane wejściowe na standardowe wejście w następującym formacie:
źródło
00
dlaN=0
.Mathematica, 101 bajtów
Wykorzystuje pewne
Through
sztuczki, aby zastosować zarówno funkcję sufitu, jak i podłogi. Po prostu zignoruj błędy.źródło
CJam, 24 bajty
Sprawdź to tutaj. Pobiera dane wejściowe jako
"N" S B
.Wyjaśnienie
źródło
"0" 1 9
wyprowadzony00
. Próbowałem to zagrać w golfaq~:B;{:~Bb,2/z:,Bfbs}*
:, ale także nieważne, ponieważ zamiast tego wypisałem pusty ciąg.i
końcu zajmie się00
. Możesz odzyskać bajt, zastępując2/:I-I]
go)\]2f/
.JavaScript ( ES6 ) 78
79Funkcja rekurencyjna. Uruchom fragment kodu, aby przetestować (tylko Firefox)
Edytuj 1 bajt zapisany thx @DocMax
źródło
m&&s
gom*s
.ECMAScript 6, 90 bajtów
Definiowanie funkcji rekurencyjnej za pomocą zmiennej nie jest naprawdę dobrym stylem, ale jest to najkrótszy kod, jaki mogłem wymyślić w ECMAScript 6.
"00" => "0"
Prawidłowe ustawienie narożnika powoduje marnowanie trzech bajtów (s(n)
zamiast po prostuN
).Aby go wypróbować, można użyć rEPL Babla : kopiuj / wklej kod i wydrukować wyniki przykład procedury wywołania tak:
console.log(f(9, "27", 2))
.źródło
Common Lisp - 113 znaków
Nie golfił
~vR
Dyrektywa formacie Wyjścia całkowitą w baziev
, gdziev
jest dostarczany jako argumentyformat
.parse-integer
akceptuje:radix
argument do konwersji z określonej bazy.#1=
oraz#1#
(odpowiednio przypisać i użyć) są zmiennymi czytnika, które pozwalają na dzielenie wspólnych podwyrażeń. Po rozwinięciu dają następujący kod:źródło
Pip , 27 bajtów
Pobiera bazę, liczbę całkowitą i liczbę powtórzeń jako argumenty wiersza poleceń. Algorytm jest prosty, ale wykorzystuje kilka interesujących funkcji językowych:
Przydaje się tutaj typ skalarny Pipa, który reprezentuje zarówno liczby, jak i ciągi znaków, podobnie jak operacje na listach według pozycji; niestety, nawiasy i operatorzy dwóch znaków
FB
,TB
oraz//
Negate wszelkie korzyści.Alternatywne rozwiązanie, bez pośredniego przypisania, ale nadal 27 bajtów:
źródło
C, 245 bajtów
To nie wygra nic , ale to była zabawa, aby!
źródło
PHP ,
115112 bajtówWypróbuj online!
Nie golfowany:
Wynik
źródło
Japt , 17 bajtów
Wypróbuj online!
Pobiera dane wejściowe w kolejności S, N, B z N jako listą singletonów . Zaakceptowanie N bez pojedynczej listy kosztuje 2 bajty .
Wyjaśnienie:
źródło
Dalej (gforth) , 105 bajtów
Wypróbuj online!
Wyjaśnienie
Zmienia bazę na B, a następnie w pętli, która uruchamia S razy:
Po zakończeniu drukuje ciąg i ustawia bazę z powrotem na 10 (abyśmy mogli uruchomić wiele razy z rzędu)
Objaśnienie kodu
źródło