Problem
Zdefiniujmy uogólniony zestaw Cantor , iteracyjnie usuwając niektóre segmenty racjonalnej długości ze środka wszystkich przedziałów, które nie zostały jeszcze usunięte, zaczynając od pojedynczego przedziału ciągłego.
Biorąc pod uwagę względne długości segmentów do usunięcia lub nie oraz liczbę iteracji do wykonania, problemem jest napisanie programu lub funkcji, która wyświetli względne długości segmentów, które zostały lub nie zostały usunięte po n
iteracjach.
Przykład: Iteracyjnie usuń 4. i 6. ósmy
Wejście:
n
- liczba iteracji, indeksowana od 0 lub 1
l
- lista długości segmentów jako dodatnie liczby całkowite o gcd(l)=1
długości nieparzystej, reprezentujące względne długości części, które albo pozostają, albo zostają usunięte, zaczynając od segmentu, który nie zostanie usunięty. Ponieważ długość listy jest nieparzysta, pierwszy i ostatni segment nigdy nie zostaną usunięte. Na przykład dla zwykłego zestawu Cantor będzie to [1,1,1] dla jednej trzeciej, która pozostanie, jednej trzeciej, która zostanie usunięta, i jednej trzeciej, która nie zostanie.
Wynik:
Lista Integer o
, gcd(o)=1
, względnych długości segmentu w n
XX iteracji gdy segmenty, które nie zostały usunięte w poprzedniej iteracji są zastępowane przez zmniejszoną kopię listy l
. Pierwsza iteracja jest słuszna [1]
. Możesz użyć dowolnej jednoznacznej metody wyjściowej , nawet jednostkowej.
Przykłady
n=0, l=[3,1,1,1,2] → [1]
n=1, l=[3,1,1,1,2] → [3, 1, 1, 1, 2]
n=2, l=[3,1,1,1,2] → [9,3,3,3,6,8,3,1,1,1,2,8,6,2,2,2,4]
n=3, l=[5,2,3] → [125,50,75,100,75,30,45,200,75,30,45,60,45,18,27]
n=3, l=[1,1,1] → [1,1,1,3,1,1,1,9,1,1,1,3,1,1,1]
Możesz założyć, że dane wejściowe są prawidłowe. To jest golf golfowy , więc wygrywa najkrótszy program mierzony w bajtach.
[0, 1, 2, 4, 6, 7]
zamiast[3, 1, 1, 1, 2]
?Odpowiedzi:
Galaretka ,
15 1312 bajtów-2 dzięki Dennisowi (użycie Link zamiast łańcucha pozwala na niejawne korzystanie z prawa
¡
; Nie ma potrzeby zawijania1
listy ze względu na fakt, że Jelly drukuje listy jednego elementu tak samo jak przedmiot)-1 dzięki Erik the Outgolfer (użyj,
Ɗ
aby zapisać nowy wiersz przed użyciemÇ
)Pełny program drukujący listę w formacie galaretki (więc
[1]
jest drukowany jako1
)Wypróbuj online!
W jaki sposób?
źródło
Python 2 ,
1201071041031009989 bajtówWypróbuj online!
Zapisano
źródło
R , 94 bajty
Wypróbuj online!
źródło
Haskell ,
7658 bajtówWypróbuj online!
Funkcja
(%)
przyjmuje listę długości liniil
jako pierwszy argument, a liczbę iteracjin
jako drugie wejście.Dzięki Angs i Ørjan Johansen za -18 bajtów!
źródło
n
i#
całkowicie%
można skrócićl%a=do(x,m)<-zip a$a>>[l,[sum l]];(*x)<$>m
.JavaScript (Firefox 42-57), 80 bajtów
Potrzebuje tych konkretnych wersji, ponieważ wykorzystuje zarówno wyrażenia tablicowe, jak i potęgowanie.
źródło
JavaScript (Node.js) , 71 bajtów
Wypróbuj online!
źródło
Java 10, 261 bajtów
Zmienia listę wejściową zamiast zwracać nową, aby zapisać bajty.
Wypróbuj online.
źródło
Galaretka , 13 bajtów
Wypróbuj online!
Pełny program Wyjścia
1
zamiast[1]
. Irytujące,ḋ
nie działa jak×S¥
w tym kontekście iƭ
nie działa dobrze z niladami. > _ <źródło
APL (Dyalog Classic) , 20 bajtów
Wypróbuj online!
źródło
K (ngn / k) , 27 bajtów
Wypróbuj online!
{
}
jest funkcją z argumentamix
iy
(y;+/y)
paray
i jej suma{
}[(y;+/y)]
rzutowanie (inaczej curry lub częściowe zastosowanie) funkcji diadadowej z jednym argumentem.x
po zastosowaniu będzie(y;+/y)
iy
będzie argumentem.,1
lista singletonów zawierająca 1x{
}[
]/
zastosujx
czasy projekcji(#y)#x
zmienić kształt na długość bieżącego wyniku, tj. na przemian między zewnętrznymy
a jego sumąy*
pomnóż każdy z powyższych elementów przez odpowiedni element bieżącego wyniku,/
powiązaćźródło
Rubinowy , 73 bajty
Wypróbuj online!
źródło
Pyth , 20 bajtów
Dane wejściowe to tablica segmentów
l
, a następnie iteracjen
. Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .źródło