Król starożytnego Rzymu ma trudności z ustaleniem, czy magiczny kwadrat jest prawidłowy, czy nie, ponieważ magiczny kwadrat, który sprawdza, nie zawiera żadnych separatorów między liczbami. Zatrudnił inżyniera oprogramowania, który pomoże mu ustalić, czy magiczny kwadrat jest prawidłowy, czy nie.
Opis wejścia
Dane wejściowe pochodzą z argumentów STDIN lub wiersza poleceń. Nie można wstępnie zainicjować danych wejściowych w zmiennej (np. „Ten program oczekuje danych wejściowych w zmiennej x
”). Dane wejściowe mają następujący format:
<top>,<middle>,<bottom>
Każdy z <top>
, <middle>
i <bottom>
to ciąg znaków, który będzie zawsze tylko zawierać duże litery I
, V
i X
. Nie będzie zawierać spacji ani żadnych innych znaków. Każdy ciąg reprezentuje trzy cyfry rzymskie, w wyniku czego powstaje macierz liczb 3x3. Jednak te cyfry rzymskie mogą (ale niekoniecznie) być niejednoznaczne . Pozwól, że zilustruję to przykładem. Rozważ następujący przykładowy rząd trzech cyfr rzymskich, bez spacji między każdą liczbą:
IVIIIIX
Ponieważ między literami nie ma spacji, cyfry mają dwie możliwości:
- 1, 8, 9 (
I VIII IX
) - 4, 3, 9 (
IV III IX
)
Gdy weźmiesz pod uwagę, że wszystkie trzy wiersze macierzy mogą być niejednoznaczne, istnieje możliwość, że z jednego wejścia będzie wiele różnych matryc 3x3.
Zauważ, że sekwencje takie jak 1, 7, 1, 9 ( I VII I IX
) nie są możliwe, ponieważ każdy wiersz zawsze będzie reprezentował trzy cyfry rzymskie. Zauważ też, że cyfry rzymskie muszą być poprawne, więc sekwencje takie jak 1, 7, 8 ( I VII IIX
) również nie są możliwe.
Opis wyjścia
Wynik:
- Liczba całkowita
A
, gdzieA
jest liczba unikalnych macierzy 3x3, które można utworzyć z niejednoznacznych danych wejściowych, oraz: - Truthy wartość, jeśli każdy z unikalnych matryc 3x3 tworzą magiczny kwadrat, lub:
- Falsy wartość, jeżeli żaden z unikalnych matryc 3x3 tworzą magiczny kwadrat.
Wartości prawdy i fałszu muszą być spójne. Są oddzielone przecinkiem.
Wymagane jest wyjaśnienie tego, co jest uważane za unikalne. Dopóki macierz nie ma dokładnie takich samych liczb w dokładnie takich samych pozycjach jak poprzednio znaleziona macierz, jest liczona jako unikalna. Oznacza to, że odbicia itp. Wcześniej znalezionych matryc są liczone jako unikalne.
Przykładowe wejścia i wyjścia
W tych przykładach używam true
jako mojej prawdziwej wartości i false
mojej wartości fałszowania.
Wejście: VIIIIVI,IIIVVII,IVIXII
Wyjście: 24,true
(Magiczny trójkąt to 8-1-6, 3-5-7, 4-9-2.)
Wejście: IIIXVIII,IVIII,VIIII
Wyjście:210,false
Dodatki
- Nie możesz korzystać z wbudowanych funkcji konwersji cyframi rzymskimi, jeśli masz wybrany język.
źródło
Odpowiedzi:
Perl, 219
237Dodano podział linii dla zachowania przejrzystości.
Przetestuj mnie .
źródło
Prolog - 686
Nie golfił
Oczywiście
p
można to również zdefiniować jako:W takim przypadku środowisko powie „Tak” lub „Nie” po zapisaniu liczby kwadratów.
Przykład
Korzystanie z zaćmienia .
Przykładowe wyniki dla drugiego są wklejone tutaj .
źródło
Python, 442 znaki
Najpierw buduje się kod,
N
który jest odwzorowaniem ciągu cyfr rzymskich na jego wartość dla wszystkich możliwych liczb, których możemy potrzebować. Dzieli każdą linię na trzy w każdy możliwy sposób i sprawdza, w których z wszystkich trzech potęg ma wszystkie odwzorowaniaN
. Finałany
sprawdza, czy jakakolwiek kombinacja jest magicznym kwadratem.źródło
Haskell,
451429423 bajtówStosowanie:
Około 70 bajtów tylko po to, aby uzyskać właściwy format wejściowy i wyjściowy.
Funkcja
r
konwertuje liczbę rzymską (podaną jako ciąg znaków) na liczbę całkowitą (jeśli nie0
jest zwracana poprawna liczba rzymska ).s
dzieli ciąg cyfr rzymskich na 3 podłańcuchy i zachowuje te trzykrotnie z prawidłowymi liczbami rzymskimi i konwertuje jer
na liczby całkowite.e
sprawdza, czy wszystkie liczby całkowite z listy trzech elementów są równe.p
pobiera trzy ciągi cyfr rzymskich, dzieli jes
na listy liczb całkowitych, łączy jedną liczbę całkowitą z każdej listy w trzykrotnie i utrzymuje je z jednakowymi sumami we wszystkich kierunkach.f
oblicza liczbę prawidłowych macierzy i sprawdza, czyp
zwraca pustą listę (brak poprawnego rozwiązania), czy nie (poprawne rozwiązanie istnieje). Główna funkcjai
odczytuje dane wejściowe ze STDIN, konwertuje je na listę ciągów (q
Pomaga zastępując,
z\n
) i rozmowyp
.źródło
R,
489474464To stało się znacznie większe, niż chciałem, ale podejrzewam, że mogę trochę pograć w golfa.
Wykorzystuje metodę brutalnej siły, obliczając wszystkie możliwe kombinacje cyfr rzymskich i odpowiadające im cyfry.
Po zakończeniu porównuje dane wejściowe z listą cyfr rzymskich i otrzymuje możliwe cyfry.
Następnie przechodzi przez każdą macierz liczb i testuje magiczny kwadrat, w końcu generując wynik.
Testowe uruchomienie. Po wklejeniu do RGui czeka na dane wejściowe.
źródło