feragat
Bildiğim halde bu özel ilgili soru , sorum iki garaj kapıları, bir randomizing bileşenini kullanır ve Ben de dışarı yürüyordu iken oğlum yanlışlıkla bahsedilen garaj kapıları birini düşürdü görerek, gerçek yaşam olayları bu kurdum geçen hafta garaj ... Yaratıcı meyve sularının akması için kafaya bir darbe gibi bir şey yok! ;)
Arkaplan
Lucas (15 aylık oğlum) garaj uzaktan kumanda ile oynamayı seviyor. Bu uzaktan kumandada biri sol garaj kapısı, diğeri sağ garaj kapısı için olmak üzere iki düğme vardır. Her iki düğme de aynı şekilde çalışır; kapıyı açmaya başlamak için bir kez basın, durdurmak için tekrar basın, kapatmaya başlamak için tekrar basın, tekrar durdurmak için tekrar basın, vb.
Lucas bu uzaktan kumandayı seviyor, düğmelerden birine ya da her ikisine rastgele basacak ya da hiç basmayacak. Her ikisine de basılırsa, sinyal gönderilmez, ancak bir düğmeye basıldığında bir sinyal gönderilir.
Yani, kod golf zorluğu iki bölüme ayrılmıştır:
Bölüm Bir
Bir dakika içinde Lucas rastgele düğmesine basmayı temsil eden 60 karakter uzunluğunda bir dize oluşturun. Bu durumda "Rastgele", "her bir işarette her girişin eşit şansı ile" anlamına gelir. Karakterler aşağıdaki gibidir:
- 0: Lucas ya hiçbir düğmeye basmadı ya da her iki düğmeye de bastı. Her iki durumda da sinyal gönderilmedi.
- 1: Sol garaj kapısı düğmesine Lucas tarafından basıldı
- 2: Sağ garaj kapısı düğmesine Lucas tarafından basıldı
Bölüm iki
Birinci Bölümde üretilen ipi kullanarak, bu kapıların açılması, durdurulması ve kapatılması için tetikleyici olarak sayıları kullanarak iki araçlık garajın açılıp kapanmasını simüle edin.
Garaj kapılarım oldukça hızlı (neden hakkında yukarıdaki Feragatnameye bakın). Düğmeye bastıktan sonra, tamamen açık veya kapalı olması dört saniye sürer.
Yani, kapalıysa:
- 0 sn:% 0 açık (kapalı); düğmeye basıldığında, kapı açılmaya başlar
- 1 sn:% 25 açık
- 2 sn:% 50 açık
- 3 sn:% 75 açık
- 4 sn:% 100 açık, kapı duruşları
Bu nedenle, açıksa:
- 0 sn:% 100 açık; düğmeye basıldığında, kapı kapanmaya başlar
- 1 sn:% 75 açık
- 2 sn:% 50 açık
- 3 sn:% 25 açık
- 4 sn:% 0 açık (kapalı), kapı duruşları
Belirli bir kapı hareket ediyorsa, aynı kapıya giden bir sinyal kapıyı durduracaktır. Bundan sonra aynı kapıya gönderilen bir sonraki sinyal, onu ters yönde hareket ettirecektir. Bir kapı daha önce hareket halindeyken durdurulursa ve "durdurma" sinyali alındığında şimdi tamamen açık veya tamamen kapalı ise, kapı tamamen açık veya tamamen kapalı durumda "durdurulmuş" olarak kaydedilecektir. yeni bir sinyal aldığında ters yönde hareket edin.
Bu simülasyonla, her iki garaj kapısı başlangıçta kapalı konumda olacaktır. Öyleyse, 10 saniyelik bir komut listesine bakalım ve Lucas bunları uzaktan kumandada gerçekleştirirse ne olacağını görelim:
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
Çıktı
Çıktının ilk kısmı, Birinci Bölümden oluşturulan 60 karakter uzunluğunda rastgele "0", "1" ve "2" karakterlerinin dizgesinin görüntülenmesini gerektirir. Örneğin.
212022112021202211202120221120212022112021202211202120221120
Bu dizginin altında, bu "sinyallerin", garaj kapılarının her bir ilgili karakterle nasıl davranacağına ilişkin olarak (ikinci bir saniye bazında) yukarıda belirtilen kurallara göre işlenmesidir. İlk ekran dizesinin altında 60 satırla sonuçlanmalısınız.
Bu işlenen satırların her biri şu şekilde olacaktır:
N: (L:X% XXXXXXX, R:Y% YYYYYYY)burada:
- N, 0, 1 veya 2 şeklinde olacak ilgili rastgele dizeden gelen n. Karakterdir.
- % X, sol kapının açıklık yüzdesidir (sıfır dolgu yoktur)
- XXXXXXX sol kapının durumudur. Kapı hareket halinde değilse (yani açılmıyor veya kapanmıyorsa) "durdu" durumu uygulanır, yani hareket halinde durdurulmuştur (sadece% 25,% 50 veya% 75'te mümkündür) veya tamamen açıldığında (% 100 ) veya tamamen kapalı (% 0). Aksi takdirde, kapı "açılır" veya "kapanır".
- % Y, sağ kapının açıklık yüzdesidir (sıfır dolgu yoktur)
- YYYYYYY, sağ kapının durumudur. Kapı hareket halinde değilse (yani açılmıyor veya kapanmıyorsa) "durdu" durumu uygulanır, yani hareket halinde durdurulmuştur (sadece% 25,% 50 veya% 75'te mümkündür) veya tamamen açıldığında (% 100 ) veya tamamen kapalı (% 0). Aksi takdirde, kapı "açılır" veya "kapanır".
Aşağıda 10 "sinyaller" ve 10 işlenmiş hat kullanılarak gösterilen örnek
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
Bu kod golf, bu yüzden en kısa kod açık kazanan olacak. Yedi harften oluşan "açılış", "durdurulmuş" ve "kapanış" gibi ifadeler kullanarak bunu biraz kolaylaştırdım ... bu yüzden bunu stratejinize eklemek isteyebilirsiniz.
İyi şanslar!
1komut neden örneğinizde sol kapıyı% 75'te durdurmuyor?