Dominoların bir kurulumu göz önüne alındığında, göreviniz hangi dominoların düştüğünü ve hangilerinin olmadığını bulmaktır.
Giriş
Bir domino kurulumunun dikdörtgen ASCII temsilini alın. ASCII ızgarası için aşağıdaki karakterler kullanılır:
(boşluk): boş hücre
|
,-
,/
,\
: Domino
Dominolar, aşağıdaki harflerle (WASD yönelimlerine benzer) temsil edilen 8 yönde düşebilir:
Q W E
A D
Z X C
Dominoların biri veya daha fazlası, domino'nun başlangıçta itildiğini belirtmek için bu harflerden biriyle değiştirilecektir. İşte bir örnek:
D||||/
- /
- -
- -
/|||||
Aşağıdaki giriş formlarından herhangi birine izin verildiğinden, bu zorluğun girdi ayrıştırmada bir egzersize dönüşmesini istemiyorum:
- Izgaralı bir dize (yardımcı olursa isteğe bağlı olarak boyutlarından önce gelir)
- Her satır için bir dize içeren bir dizi / liste / tuple (isteğe bağlı olarak genişlik ve yükseklik tamsayılarıyla birlikte)
- Her ızgara hücresi için bir dize / karakter içeren (iç içe) bir dizi / liste / tuple (isteğe bağlı olarak genişlik ve yükseklik değişkenleriyle birlikte)
STDIN'den okuyabilir veya bir işlev bağımsız değişkeni alabilir veya girdinin bir değişkende saklanmasını bekleyebilirsiniz.
Çıktı
Hangi dominoların düştüğünü ve hangilerinin düşmediğini belirten geçerli giriş biçimlerinden herhangi birinde geçerli ızgarayı STDOUT'a yazın veya döndürün (veya bir değişkene kaydedin). Yani, düşmüş her dominoyu#
ve her duran dominoyu girişte olduğu gibi bırakın.
kurallar
Tabii ki, domino düşüşlerini kurulum boyunca yayıyor. Yarış koşulları olabileceğinden, sabit zaman aşamaları olduğunu ve düşen zaman zaman adımı başına bir ızgara hücresi yaydığını varsayıyoruz.
Dominolar genellikle sezgisel olarak beklediğiniz şekilde düşer, ancak sağduyunun titiz bir belirtimi oldukça uzun olur. Bunun için üzgünüm, umarım örnekler yardımcı olur. İşte tüm benzersiz iki karo kombinasyonları (dönme ve yansıma) kadar bir öz . Titiz kurallar için okumaya devam edin.
Her domino sadece iki yönde düşebilir:
W Q E
A | D - / \
X C Z
Bir domino düştüğünde hücreyi düşme yönünde etkiler. Bu hücre, aynı yönde veya 45 derecelik farklı bir yönde düşebilen bir domino içeriyorsa, bu domino bir sonraki zaman adımında bunu yapar.
Örnekler:
D| -> DD (falls in same direction)
D/ -> DC (falls at 45 degrees)
C -> C (falls at 45 degrees)
- X
Ne zaman çapraz olarak yönlendirilmiş bir domino ( /
veya\
) düştüğünde, hem hücresine hem de hücreye düşme yönünde dokunan iki hücreyi de etkiler. Bu hücreler, orijinal domino ile aynı yönde veya ondan uzağa eksene hizalanmış yönde düşebilen bir domino içeriyorsa, bir sonraki zaman adımında bu domino bunu yapar.
Örnekler:
C/ -> CC (the cell in the direction of the fall is the one below
the /, so it falls in the same direction)
C| -> CD (falls in the axis-aligned direction away from the C)
C- -> C- (the direction away from the Q is W,
or but neither - nor \ can fall to W)
C\ -> C\
İstisna : Bir domino her iki geçerli yönde bir kerede itilirse (yani, yukarıdaki kurallardan herhangi biri uyuşmazsa) düşmez.
Örnekler:
D|A -> D|A (central domino in pushed in both directions)
Z Z (although it's pushed in one direction by two dominoes
D\A -> D\A and in the other by only one, it doesn't fall)
X X (the domino is being pushed from two opposing sides
D-A -> DXA D and A, but neither is valid for that domino. Hence,
there is no conflict and the X can push the domino over)
Z Z (pushed in the same direction by two dominoes, so falls)
\A -> ZA
Z Z Z (once the conflict arises, the affected
\ -> Z -> Z domino is locked in its position and can't
D|A D|A D|A be pushed over by future dominoes)
Örnekler
8 5
D||||/ ######
- / - #
- - --> - #
- - - #
/||||| /|||||
===============================================
17 9
E|/|||/ #######
- - # #
- - # #
- - # #
/|||/|||||||||/ --> ###############
/ - # #
/ - # -
/ - # #
/|||||\ #######
===============================================
19 8
\|/ ###
- - # #
D||||/|\ /|||/ ######## #####
/ - # #
- \- --> - \#
\- \ - #- \ #
D||||\ / \ / ###### / \ #
|\ ||||| |\ #####
==============================================
11 11
-\\\/|\|\-| -\##/|###-|
-|\\||\-|\- -|#####-|\-
|\//\//|-/- |#//\//|#/-
\|//|-|\-\| #####-|##\|
---||/-\//| #-######//|
///|||\---- --> #/#####----
-|/---|-|-\ #|##--|-|-\
--|--\/|/// ####-\/|///
/|//--|//-| ####--|//-|
|/\-|||-/-\ |/\####-/-\
E||\-|\---/ ####-|\---/
Bir hata yaptığımı düşünüyorsanız (özellikle sonuncusu ile) bana bildirin.
E
(fark yarattığı için değil ...). Girinti derinliklerini en aza indirgeyerek bir grup karakteri kaydedebileceğiniz anlaşılıyor.