Fajne rzeczy
Następujące różaniec może pomóc obliczyć liczby modulo 7.
Aby to zrobić, musisz zacząć od 0 i obrócić w prawo o liczbę kroków podanych przez pierwszą cyfrę. Następnie, dla każdej kolejnej cyfry, postępuj zgodnie ze strzałką, a następnie obróć zgodnie z ruchem wskazówek zegara liczbę kroków podaną przez tę cyfrę.
Oto jak postępujesz w przypadku numeru 294:
- Zaczynasz w kręgu 0.
- Obracasz zgodnie z ruchem wskazówek zegara liczbę kroków podaną przez pierwszą cyfrę (czyli 2, kończysz na 2).
- Kierujesz się tam strzałką (kończysz na 6).
- Obracasz zgodnie z ruchem wskazówek zegara liczbę kroków podaną przez drugą cyfrę (czyli 9, kończysz na 1).
- Kierujesz się tam strzałką (kończysz na 3).
- Obracasz zgodnie z ruchem wskazówek zegara liczbę kroków podaną przez trzecią liczbę (czyli 4, kończysz na 0).
- 294 mod 7 = 0 (co oznacza, że 294 jest wielokrotnością liczby 7).
( Wyjaśnienie wideo, jeśli nadal go nie otrzymałeś )
Cel
Dowiedz się, jak to działa (wiem, ale nie powiem ci).
Utwórz program, który przyjmuje liczbę n
w parametrze i który generuje różaniec dla mod n
.
Różaniec może być wyświetlany w dowolny sposób (ASCII, generowanie PNG, generowanie SVG, ...), o ile może być używany przez 8-letnie dziecko ( więc nie ma listy reguł, chcę zdjęcie )!
Można użyć cieśniny linie, nawet jeśli jest to nieco mniej jasne niż to, co zrobiłem dla przykładu, ale musi wyraźnie pokazują liczby, które wskazują na siebie z pewnego rodzaju gryzienie ogona strzałki.
Przypadki testowe
(Podaję tylko linki między liczbami, możesz edytować moje pytanie, gdy Twój program je wygeneruje)
mod 2:
0 -> 0
1 -> 0
mod 3:
0 -> 0
1 -> 1
2 -> 2
mod 4:
0 -> 0
1 -> 2
2 -> 0
3 -> 2
mod 5:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
mod 6:
0 -> 0
1 -> 4
2 -> 2
3 -> 0
4 -> 4
5 -> 2
mod 7:
0 -> 0
1 -> 3
2 -> 6
3 -> 2
4 -> 5
5 -> 1
6 -> 4
mod 8:
0 -> 0
1 -> 2
2 -> 4
3 -> 6
4 -> 0
5 -> 2
6 -> 4
7 -> 6
mod 9:
0 -> 0
1 -> 1
2 -> 2
3 -> 3
4 -> 4
5 -> 5
6 -> 6
7 -> 7
8 -> 8
mod 10:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
5 -> 0
6 -> 0
7 -> 0
8 -> 0
9 -> 0
Zasady
To jest code-golf , wygrywa najkrótszy kod w bajtach.
Jak zwykle, luki i kody są zabronione.
źródło
Odpowiedzi:
Mathematica, 192 bajty
Ten rodzaj wyzwania (nietrywialne obliczenia matematyczne wraz z wysokopoziomową grafiką) jest tym, po co jest Mathematica!
Rozszerzony i wyjaśniony:
Linie 1 i 8 ograniczają nienazwaną funkcję jednego argumentu. Linie 3 i 7 ograniczają kilka poleceń generujących grafikę.
Linie 2 przechowują dane wejściowe jako
d
; definiuje funkcję binarnąt
podającą współrzędne punktun/d
drogi wokół koła o promieniur
, zgodnie z ruchem wskazówek zegara od góry (w duchu tej strony zapisałem bajt zaokrąglając 2π do6.3
!); i definiuje jednoargumentową funkcjęm
obliczającą miejsce docelowe strzałki, zaczynając od jej argumentu.Linia 4 renderuje liczby
0
wd–1
równych odstępach wokół okręgu o promieniu 9 (dokładny promień jest nieistotny, wybrany w celu zmaksymalizowania estetyki pod warunkiem dopasowania w jednym bajcie).Linia 5 renderuje proste strzałki zgodnie z ruchem wskazówek zegara na obwodzie koła. I
1/7
i6/7
pozostaw wystarczająco dużo miejsca, aby odczytać liczby.Linia 6 renderuje zakrzywione strzałki z każdej liczby na (10-krotność liczby modulo
d
).BezierCurve
automatycznie rysuje krzywą Béziera przy użyciu podanych punktów kontrolnych. Na szczęście użycie punktu początkowego jako pojedynczego wewnętrznego punktu kontrolnego daje rozsądną wydajność.Przykładowe dane wyjściowe (zauważ, że przypadki 9, 10 i 11 są trywialne na różne sposoby):
d = 7
d = 8
d = 9
d = 10
d = 11
d = 12
d = 13
d = 37
Ten ostatni wkład został wybrany, ponieważ 37 dzieli 10 ^ 3–1, a zatem wewnętrzne strzałki (nie licząc obowiązkowej samostrzałki od 0 do 0) tworzą wiele trójkątnych cykli.
źródło
Python 2, 294 bajty
Drukuje diagram w tym formacie:
Nie wiem, czy ten format jest w porządku, dlatego na razie pozostawię tę odpowiedź nieważną.Tak, to jest ważne!Wypróbuj na repl.it!
źródło
n
działało z cyframi -digit. Nie jestem jednak pewien, czy wyzwanie wymaga od ciebie zrobienia tegon>9
.PHP + SVG, 500 bajtów
mała strzałka dla połączeń między tymi samymi wartościami
aby zobaczyć strzałki do tych samych wartości, używam tej wartości koloru
rgba(255,0,0,0.3)
. istnieje możliwość skrócenia go.rozszerzony
wyjście dla n = 45
320 bajtów pracujących z odbiciem
rozszerzony
wyjście dla n = 72
źródło
Python 2,
540464431 bajtówNiektórzy grają w golfa, np. Używając krótszych nazw zmiennych, podstawiania zmiennych, rozumienia listy i zmieniania wszystkiego na biały (z wyjątkiem tekstu). Największym zapisem była zmiana pozycji obliczonych wstępnie na dynamicznie (patrz
L
).L
oblicza pozycje okręgów według odległości do początku dla dużych zawierających liczby i zewnętrznych małych, wskazujących na samokierowanie.Pierwsza pętla rysuje połączenia: 1. linia to okrąg dookoła, a 2. linia znajduje się we wnętrzu, dodano małe kółko, aby pokazać kierunek lub samo-wskazywanie.
Druga pętla stawia duże koło i liczbę.
To oczywiście nie jest tak miłe, jak odpowiada Mathematica, ale wszystko wykonane od zera.
źródło
Mathematica,
124121 bajtówTworzy figurę jako wykres z ukierunkowanymi krawędziami. Dane wyjściowe wykresu są teraz zgodne z tym samym wzorem, z wyjątkiem wskazówek zegara. Wolę rozwiązanie Grega Martina o wiele bardziej, ponieważ efekt jest znacznie bardziej estetyczny.
Za pomocą 82 bajtów można wygenerować mniej przyjemny wizualnie wykres
Dla d = 8
źródło
Graph
ale miałem taką samą negatywną reakcję. Ponadto w przypadku algorytmu ważne jest rozróżnienie krawędzi „zgodnych z ruchem wskazówek zegara” od krawędzi „razy 10”. Jestem pewien, że istnieją opcje dlaGraph
tego uchwytu - ale potem nadchodzi więcej bajtów ....Graph
funkcji i znalazłem sztuczki takie jak używanie->
zamiastDirectedEdge
. Skróciłem tę początkową wersję 100-bajtową do 82 bajtów, ale poprawiając ją tak, aby była w odpowiednim formacie, dodałem kolejne 42 bajty.CircularEmbedding
, ale nie ustawiłem wierzchołków w kolejności zgodnej z ruchem wskazówek zegaran=7
(przyznaję, że nie próbowałem innych danych wejściowych). Czy to działa dla ciebien=7
?Join
, aTranspose
więc, że zewnętrzne krawędzie będzie wymienione na początku przed wewnętrznymi krawędziami. Wierzchołki są uporządkowane poprawnie wzdłuż ścieżki kołowej, ale ponieważ krawędzie wolą być proste, w rezultacie przypomina n- gon.Python 2 + graphviz, 147 bajtów
Nie zawsze rysuje okrąg, wyświetla plik pdf o nazwie
o
źródło
Haskell, 350 bajtów
Zainspirowany przez @Loovjo, używam również sztuki ASCII. Działa to dla liczb poniżej 100000 (lub czegoś takiego).
Zasadniczo wskazujesz od x do (x * 10)% n.
Możesz spróbować tego tutaj . Ponieważ jednak klawiatura kodowa nie obsługuje wprowadzania, zmień q na wartość n, którą chcesz, i prześlij ponownie. (Pamiętaj, że rozwidlenie nie działa, więc skopiuj i prześlij ponownie ze strony głównej). Podany tam kod jest nieco inny, ponieważ powyższa wersja pobiera dane z konsoli.
Mam nadzieję, że wynik jest intuicyjny. Sugestie dotyczące kompresji są mile widziane (szczególnie jeśli przekroczy 294 ;)).
źródło
foldl (++) ""$map (\...
Partia, 394 bajty
Ucieczka w partii jest brzydka w najlepszym wypadku. Przykładowe dane wyjściowe dla 7:
źródło
>0<
pokazy że0
mapy do siebie, podczas>2<<<3<
pokazów, które3
odwzorowuje się2
.