Saper to gra logiczna, którą można znaleźć w większości systemów operacyjnych. Celem gry jest ustalenie, gdzie znajdują się miny na siatce, z podanymi liczbami wskazującymi liczbę min wokół tego miejsca.
Biorąc pod uwagę rozmiar siatki i zestaw min, wygeneruj siatkę Saper dla tego zestawu min.
Dane wejściowe: dwie liczby całkowite wskazujące rozmiar siatki i nieokreślona liczba liczb całkowitych wskazujących pozycje kopalni. Pozycje zostaną podane jako (pozycja kolumny, pozycja wiersza), a indeksy zaczną się od wiersza 1.
Dane wyjściowe: siatka Saper. Jeśli wokół bloku nie ma min, wydrukuj x
. Dla każdego nowego wiersza wydrukuj nowy wiersz. Proszę wypisać wszystkie kopalnie jako gwiazdkę *
. Podczas drukowania nie należy pozostawiać spacji między wartościami w wierszu.
Przypadki testowe:
Wpisz „5 5 1 3 3 5 2 4”:
xxxxx
11xxx
*21xx
2*21x
12*1x
Wpisz „3 4 3 1 1 4 2 3 3 2”:
x2*
13*
2*2
*21
Najkrótszy kod wygrywa.
źródło
5 5 1
nigdy nie zostanie przekazany?Odpowiedzi:
GolfScript
122 98 94 93 91 88 87 85 82 81 8071Dema online:
Przypadek testowy 1: link
Przypadek testowy 2: link
źródło
!!{a}{b}if
używa jednej postaci więcej niż to konieczne.'*'
można zastąpić,42
ponieważ umieszcza się go w tablicy, a następnie strituje tablicę. Podobnie możesz użyć kodów ASCII dla innych znaków wyjściowych i zapisać znak wor
celu obsługi specjalnego przypadku.!!{a}{b}if
był naprawdę głupi. :) To zabawne, jakie błędy na wysokim poziomie możesz popełnić, koncentrując się na szczegółach. Nie mogę zrozumieć, o co ci chodziłoor
.,,
masz numer. Chcesz przekonwertować go na odpowiedni ciąg (lub kod ASCII), chyba że ma wartość 0, w którym to przypadku chcesz x. Kody ASCII dla cyfr są sekwencyjne i biegną od 48.x
to ASCII 120, czyli 72 + 48. Możesz więc zrobić72or 48+
i zapisać znak w oparciu o podejście łańcuchowe..48 120if+
, ale twojaor
sztuczka jest o dwa znaki krótsza.J,
1241161121018786858483827976757268 znakówZnalazłem to, czego szukałem - sposób na pozbycie się spacji (
1":
) - i wreszcie jestem konkurencyjny. Teraz muszę tylko znaleźć problem z pustym zestawem min.Pobiera dane z klawiatury.
Edytować
Nowa wersja wykorzystuje efekt uboczny
1":
- liczby większe niż 9 są zastępowane przez*
.źródło
0
, niex
; 2. Nie powiedzie się, jeśli zestaw min jest pusty (np .:10 10
- powinien wydrukować pustą tablicę 10x10, ale wraca|length error
)x
po prostu reprezentowałem spację. Nie zauważyłem, że to się zmieniło. Hmm, nigdy nie myślałem, że zestaw min będzie pusty ... Muszę nad tym popracować.Mathematica - 247 znaków
Przykłady:
Wynik:
ChessboardDistance
oblicza, jak daleko każda komórka jest od kopalni, gdzie 1 odpowiada „obok kopalni”. ZCount
1 daje numer komórki. Następnie miny (*) są wstawiane do tablicy.źródło
Mathematica ,
140139137Pisząc to w bardziej czytelnej formie:
źródło
ListCorrelate[BoxMatrix@1, %, 2, 0]
działa jego magia.ListCorrelate
skutecznie nakłada jądro (BoxMatrix@1
) na każdą pozycję w siatce, mnoży i daje sumę. (pinguj mnie na czacie mma, jeśli chcesz ilustrację) - Twój komentarz przypomina mi, żeListConvolve
tutaj też powinien działać, ponieważ jest to rodzaj lustrzanego odbicia,ListCorrelate
a moje jądro jest symetryczne. To uratuje mi postać. :-)2
in##2
. Naprawię to teraz. ps: Jak to zauważyłeś po tak długim czasie?VBA - 298 znaków
Pomijanie błędów w
On Error Resume Next
zapisaniu mi niektórych postaci, ale wciąż nie jest tak dobre, jak niektóre inne odpowiedzi. : - /źródło
Python,
192182180 znakówMógłbym zapisać trochę, gdyby dane wejściowe były oddzielone przecinkami. Wtedy byłaby pierwsza linia
d=input()
i długość 171 znaków.Pomogłoby także współrzędne kopalni oparte na 0 zamiast na 1. Pokonanie mnie kosztowało mnie 8 znaków.
Wersja bez golfa:
źródło
Scala, 280 znaków
źródło
C ++ - 454 znaków
To gorsze niż moja odpowiedź VBA, co prawdopodobnie oznacza, że nie wiem, co robię w C ++. Jednak staram się bazować na tym, co wiem o C ++, więc oto jest. Jeśli ktoś ma jakieś sugestie dotyczące ulepszeń, byłbym wdzięczny za ich wysłuchanie!
źródło
return 0
. I można#include<cstdio>
,#include<cstdlib>
. Możesz nawet usunąć te dwa elementy! Co więcej,using name.....
jest za długi, można go użyćstd::cin, std::cout, std::string
zamiast tego.std::
połączeń, które sprawiłyby, że było to bardziej opłacalne (myślę, że jeszcze jedenstring
zrobiłby to ). Dziękuję również za informacje o#include
liniach. Nie jestem ekspertem od C ++. ;-)C # (691 znaków)
Wersja bez gry w golfa:
źródło
K, 175
.
źródło
ECMAScript 2019 (Modern Javascript) - 116 bajtów
wersja bez golfa
to rozwiązanie nie ściśle przestrzega formatu wejścia / wyjścia, ale pokazuje zwięzły algorytm.
przykład: https://gist.github.com/missinglink/ee02084cfb523665e8c9d34c24f01537
źródło
brainfuck ,
1001896 bajtówWypróbuj online! lub wypróbuj starą wersję z liczbą całkowitą
Jeden dzień programowania i trzy dni naprawy błędów ^^
Wykorzystuje to kilka części mojego kodu Game of Life. Zamiast zliczać żywe komórki, liczy się bomby. Ponieważ ogólne zasady dopuszczają wprowadzanie jako punkty kodowe, wykorzystuje je zamiast liczb całkowitych „czytelnych”.
źródło
To początek rozwiązania Brainfuck. Powinien być dość czytelny z wcięciami i komentarzami stosu (
@
wskazuje wskaźnik stosu):Jest jednak daleki od ukończenia i zaczynam wątpić, czy moje podejście jest optymalne. Jak dotąd bierze pod uwagę tylko dwa pierwsze znaki wejściowe i drukuje tabelę Xs. Na przykład „43” daje:
Chciałbym zobaczyć, czy ktoś inny ma to, czego potrzeba i jest w stanie rozwiązać ten problem w Brainfuck.
źródło