Oszalały profesor matematyki chce zakodować wszystkie swoje badania za pomocą systemu, który z pewnością okaże nawet najbardziej szalonych konkurentów!
W tym celu profesor postanowił zmienić bazę nie tylko liczby, którą piszą, ale każdej cyfry w tym numerze, zgodnie z miejscem, w którym cyfra się znajduje (licząc od prawej, zaczynając od 1). Na przykład:
Liczba 0 ma jedną cyfrę, więc jest reprezentowana w bazie 1: 0
Liczba 1 miałaby jedną cyfrę w bazie dziesięciu, ale w systemie naszego profesora nie jest to poprawne. Pierwsze miejsce jest zarezerwowane tylko dla cyfr podstawowych 1! Oznacza to, że należy go uderzyć w drugie miejsce, w którym dozwolona jest baza 2: 10
Liczba 2 wymaga zapisu co najmniej bazy 3: 100
Ale teraz cyfrę 3 można zapisać, zmieniając cyfrę na drugim miejscu: 110
i 4 jako tak: 200
Oto kilka przykładów, które pomogą Ci uzyskać pomysł:
5: 210
6: 1000
7: 1010
8: 1100
9: 1110
10: 1200
11: 1210
12: 2000
13: 2010
14: 2100
15: 2110
16: 2200
17: 2210
18: 3000
Korzystając z tego systemu, notatki profesora nie będą miały sensu dla nikogo oprócz nich i mogą w końcu przejąć świat !!!! śpij dobrze w nocy.
Oczywiście metoda kodowania musi być tak niejasna, jak to możliwe.
Twoim zadaniem jest napisanie 10 fragmentów kodu, z których każdy reprezentuje jedną z 10 cyfr podstawowych
0 1 2 3 4 5 6 7 8 9
który po połączeniu w kolejności konwertowanej liczby da liczbę zapisaną w diabelskim systemie numeracji profesora (metoda wyjściowa może być wybrana przez ciebie, ale musi być liczbą czytelną dla człowieka, używając tylko cyfr 0-9)
Na przykład, jeśli moje fragmenty to:
0 = MONKEY 1 = PRZYKŁAD, 2 = KOD, 3 = ZŁOTA, a 9 = TEST
następnie
19 = PRZYKŁADOWY -> 3010
20 = CODEMONKEY -> 3100
21 = PRZYKŁAD KODU -> 3110
22 = KODEKS -> 3200
23 = CODEGOLF -> 3210
Nie należy brać pod uwagę liczb wejściowych zawierających więcej niż 10 cyfr lub liczb ujemnych, ale jeśli chcesz napisać kod dla dodatkowych cyfr, otrzymasz dodatkowe wyróżnienia. To jest golf golfowy, więc najkrótsza odpowiedź (przy użyciu sumy bajtów wszystkich fragmentów) wygrywa, a standardowe luki nie są dozwolone.
DODATEK: Zanim ktokolwiek zacznie od tego, czy 0 jest prawidłową reprezentacją 0 w bazie 1, chciałbym przypomnieć, że ten profesor jest szalony. Żyj z tym.
źródło
Odpowiedzi:
Mathematica (środowisko REPL), 858 bajtów ogółem
Oto 86-bajtowy fragment kodu dla cyfry 9:
Fragmenty kodu dla cyfr od 1 do 8 są identyczne, z wyjątkiem tego, że 9 jest zastąpione odpowiednią cyfrą. Fragment kodu dla cyfry 0 jest identyczny, z tą różnicą, że
+9
jest po prostu usuwany.a~IntegerDigits~MixedRadix@Range[b,1,-1]
oblicza listę cyfr systemowych na czynnika
, pod warunkiem, żeb
jest co najmniej tak duża jak liczba cyfr;FromDigits
konwertuje tę listę cyfr na zwykłą liczbę całkowitą base-10 na potrzeby danych wyjściowych. (Jeśli którykolwiek z elementów listy przekracza 9, dzieje się coś śmiesznego).W środowisku REPL Mathematica obliczenia mogą być zakończone średnikami, aby stłumić dane wyjściowe; więc wyświetlane będą tylko ostatnie dane wyjściowe w łańcuchu oddzielonym średnikami. Rekurencyjnie definiujemy liczbę całkowitą
a
wyznaczoną przez fragmenty, a także ograniczamyb
liczbę potrzebnych cyfr układu czynnikowego. PolecenieValueQ@a||(a=0;b=3)
inicjuje te zmienne, jeśli są niezainicjowane (tj. W pierwszym fragmencie) i pozostawia je same; następniea=10a+9;b++
przeprowadza rekurencję. Wreszcie, początkowa1;
polega na sklejeniu fragmentów: pomnaża obliczenia pośrednie przez 1 (czego i tak nigdy nie widzimy).źródło
Goruby, 790
810980Oto druga próba, polegająca na tym, że w zasadzie w dowolnej powłoce wydrukowanie powrotu karetki („\ r”) bez nowej linii („\ n”) zastąpi poprzednio wydrukowaną linię, ostatecznie zapewniając, że wydrukowany zostanie tylko ostatni bit (czyli wynik końcowy) jest pokazany.
Musi to być uruchomione w powłoce, np
ruby name_of_file.rb
.Działa dla dodatnich liczb o nieograniczonej długości.
Kod to dziesięć kopii fragmentu poniżej, z
X
(u góry) zastąpionymi cyframi od 0 do 9, po jednym na fragment.Oznacza to, że fragment reprezentujący (na przykład) 8 wyglądałby następująco:
Wyzwanie mówi, że fragmenty muszą zostać „połączone”, aby utworzyć reprezentację liczby wielocyfrowej, więc aby dołączyć cyfrę do liczby, po prostu umieść ją w nawiasach kwadratowych na końcu numeru. Zatem liczba 103 (dziesiętnie) byłaby:
źródło