Bu "fonksiyonları gergin çekmek" ile ilgili iki zorluğun ikincisidir. İşte biraz daha basit Bölüm I olduğunu .
Hadi sürücü m pozisyonlarda bir tahta içine çivi (x 1 , y 1 ) için (x m , y m ) . Bunların ilkine ve sonuna bir lastik bant bağlayın ve diğer tırnakların etrafında gerdirin, böylece bant tüm tırnakları sırayla geçirir. Lastik bandın artık 2B alanda parçalı doğrusal parametreleştirilmiş bir işlevi (x (t), y (t)) açıkladığını unutmayın .
Şimdi tahtaya (x 1 , y 1 ) ila (x n , y n ) konumlarında başka bir n çivi sürün . Şimdi ilk ve sonuncusu (kauçuğun uçları bağlı) hariç tüm orijinal m tırnaklarını çıkarırsak , lastik bant yeni tırnakların etrafında gerginleşene kadar kısalır ve başka bir parçalı doğrusal işlev verir.
Bir örnek olarak, almak , m = 12 pozisyonlarda başlangıç çivi (2, 1) (0, 0), (3/2, 4/3), (7/2, 1/3), (11/2, 16/3), (1, 16/3), (0, 1), (7, -2), (3, 4), (8, 1), (3, -1), (11, 0) ve n = (1, 1), (3, 1), (4, 4), (1, 3), (2, 2), (5, -1), (5, 0 konumlarında 10 çivi daha ), (6, 2), (7, 1), (6, 0) . Aşağıdaki üç grafik, yukarıda açıklanan işlemi göstermektedir:
Daha büyük sürüm için: Sağ tıklayın -> Yeni sekmede aç
Ve burada görselleştirmekte zorluk çekiyorsanız lastik bant sıkma animasyonudur:
Meydan okuma
İki "çivi" listesi verildiğinde, ilk listedeki tüm çivilerden geçen şekilden başlıyorsa gergin lastik bandı ikinci listenin etrafına çizin.
Bir program veya işlev yazabilir ve STDIN, ARGV veya işlev bağımsız değişkeni ile girdi alabilirsiniz. Sonucu ekranda görüntüleyebilir veya görüntüyü bir dosyaya kaydedebilirsiniz.
Sonuç rasterleştirilirse, her iki tarafta da en az 300 piksel olması gerekir. Son lastik bant ve çiviler görüntünün yatay ve dikey boyutunun en az% 75'ini kapsamalıdır. X ve y uzunluk ölçekleri aynı olmak zorundadır. Çivileri ikinci sette (en az 3x3 piksel kullanarak) ve dizede (en az 1 piksel genişliğinde) göstermeniz gerekir. Eksenleri dahil edebilir veya eklemeyebilirsiniz.
Renkler seçiminizdir, ancak en az iki ayırt edilebilir renge ihtiyacınız vardır: biri arka plan için, diğeri tırnaklar ve dize için (bunlar farklı renklere sahip olabilir).
İkinci listedeki tüm çivilerin lastik bandın başlangıç şeklinden en az 10-5 birim uzakta olduğunu varsayabilirsiniz (böylece kayan nokta yanlışlığı konusunda endişelenmenize gerek yoktur).
Bu kod golf, yani en kısa cevap (bayt cinsinden) kazanır.
Daha fazla örnek
İşte iki örnek daha:
{{1, 1}, {3, 3}, {2, 4}, {1, 3}, {4, 0}, {3, -1}, {2, 0}, {4, 2}}
{{2, 1}, {3, 2}, {1, 2}, {4, 1}}
{{1, 1}, {3, 1}, {3, 3}, {1, 3}, {1, 5}, {3, 5}, {-1, 3}, {-1, 0}, {3, 4}, {5, 1}, {5, -1}, {7, -1}, {3, 7}, {7, 5}}
{{0, 0}, {0, 2}, {0, 4}, {0, 6}, {2, 0}, {2, 2}, {2, 4}, {2, 6}, {4, 0}, {4, 2}, {4, 4}, {4, 6}, {6, 0}, {6, 2}, {6, 4}, {6, 6}}
Ve burada kalan ilk çivilerin ikisinin önemini gösteren bir örnek var. Sonucu olmalıdır b ve değil bir :
{{0, 0}, {0, 1}, {-1, 1}, {-1, -1}, {1, -1}, {1, 0}}
{{-0.5, 0.5}}
Bu örneği verdiği için Ell'e teşekkürler.