Сапер - логическая игра, найденная на большинстве ОС. Цель игры состоит в том, чтобы определить, где находятся мины на сетке, учитывая числа, указывающие количество мин вокруг этого места.
Учитывая размер сетки и набор мин, создайте сетку Сапер для этого набора мин.
Входные данные: два целых числа, указывающие размер сетки, и неопределенное число целых чисел, указывающих положения шахты. Позиции будут заданы как (позиция столбца, позиция строки), а индексы начнутся с строки 1.
Вывод: Сетка Сапер. Если вокруг блока нет мин, выведите x
. Для каждой новой строки выведите новую строку. Пожалуйста, выведите все мины в виде звездочки *
. Не оставляйте пробелы между значениями в строке при печати.
Тестовые случаи:
Введите «5 5 1 3 3 5 2 4»:
xxxxx
11xxx
*21xx
2*21x
12*1x
Введите «3 4 3 1 1 4 2 3 3 2»:
x2*
13*
2*2
*21
Самый короткий код выигрывает.
источник
5 5 1
никогда не пройдет?Ответы:
GolfScript
122 98 94 93 91 88 87 85 82 81 8071Демоверсии онлайн:
Тестовый пример 1: ссылка
Тестовый пример 2: ссылка
источник
!!{a}{b}if
использует один символ больше, чем необходимо.'*'
может быть заменено на,42
потому что вы помещаете его в массив, а затем преобразуете в массив. Точно так же вы можете использовать коды ASCII для других выходных символов и сохранить символor
для обработки специального случая.!!{a}{b}if
действительно был действительно глуп. :) Забавно, какие ошибки высокого уровня вы можете совершать, концентрируясь на деталях. Я не могу понять, что вы имели в виду, используяor
.,,
того , как у вас есть номер. Вы хотите преобразовать его в соответствующую строку (или код ASCII), если только это не 0, в этом случае вы хотите х. Коды ASCII для цифр являются последовательными и начинаются с 48.x
Это ASCII 120, что составляет 72 + 48. Таким образом, вы можете сделать72or 48+
и сохранить символ поверх строкового подхода..48 120if+
, но вашor
трюк на два знака короче.J,
1241161121018786858483827976757268 символовНашел то, что искал - способ избавиться от пробелов (
1":
) - и наконец я стал конкурентоспособным. Теперь мне просто нужно выяснить проблему пустого набора мин.Принимает ввод с клавиатуры.
редактировать
Новая версия использует побочный эффект
1":
- числа больше 9 заменяются на*
.источник
0
, а неx
; 2. Сбой, если набор шахт пуст (например:10 10
- должен напечатать пустую доску 10х10, но возвращается|length error
)x
представлял собой пробел. Я не заметил, что это изменилось. Хм, никогда не думал, что набор шахт будет пустым ... Я должен над этим поработать.Mathematica - 247 символов
Примеры:
Выход:
ChessboardDistance
вычисляет, как далеко каждая ячейка от шахты, где 1 соответствует «рядом с шахтой». ИзCount
1 дает номер ячейки. Затем мины (*) вставляются в массив.источник
Mathematica ,
140139137Запись в более читаемой форме:
источник
ListCorrelate[BoxMatrix@1, %, 2, 0]
это волшебство.ListCorrelate
эффективно накладывает ядро (BoxMatrix@1
) на каждую позицию в сетке, умножает и дает сумму. (пингуйте меня в чате мма, если вам нужна иллюстрация) - Ваш комментарий напоминает мне, что онListConvolve
должен работать и здесь, так как это своего рода зеркальное отображениеListCorrelate
и мое ядро симметрично. Это спасет меня от характера. :-)2
в##2
. Я исправлю это сейчас. ps: как ты это заметил?VBA - 298 символов
Пропуск ошибок с
On Error Resume Next
сохранением некоторых символов, но это не так хорошо, как некоторые другие ответы. : - /источник
Питон,
192182180 символовЯ мог бы сохранить некоторые, если ввод был разделен запятыми. Тогда первая строка будет
d=input()
и длиной 171 символ.Помогло бы наличие шахтных координат на основе 0, а не 1. Это стоило мне 8 символов, чтобы преодолеть.
Безголовая версия:
источник
Скала, 280 символов
источник
C ++ - 454 символа
Это хуже, чем мой ответ VBA, что, вероятно, означает, что я не знаю, что я делаю в C ++. Тем не менее, я пытаюсь опираться на то, что я знаю о C ++, так что вот оно. Если у кого-то есть предложения по улучшению, я был бы рад их услышать!
источник
return 0
. И вы можете#include<cstdio>
,#include<cstdlib>
. Вы даже можете удалить эти два включает! Более того,using name.....
это слишком долго, вы можете использоватьstd::cin, std::cout, std::string
вместо этого.std::
звонков, которые сделали бы это более стоящим (думаю, еще одинstring
сделал бы это ). Спасибо за информацию о#include
линиях. Я не эксперт по С ++. ;-)C # (691 символ)
Версия без игры в гольф:
источник
К 175
,
источник
ECMAScript 2019 (современный Javascript) - 116 байт
негольфированная версия
это решение не строго придерживается формата ввода / вывода, но демонстрирует сжатый алгоритм.
Пример: https://gist.github.com/missinglink/ee02084cfb523665e8c9d34c24f01537
источник
Brainfuck ,
1001896 байтПопробуйте онлайн! или попробуйте старую версию с целочисленным вводом
Один день программирования и три дня исправления ошибок ^^
Это использует несколько частей моего кода Game Of Life. Вместо того, чтобы считать живые клетки, это считает бомбы. Поскольку ввод в качестве кодовых точек допускается общими правилами, он использует их вместо «читаемых» целых чисел.
источник
Это начало решения Brainfuck. Это должно быть довольно читабельно с отступом и комментариями стека (
@
указывает на указатель стека):Это, однако, далеко от завершения, и я начинаю сомневаться в том, что мой подход оптимален. Пока он рассматривает только первые два входных символа и печатает таблицу Xs. Например, «43» даст вам:
Я хотел бы посмотреть, если кто-то еще имеет то, что нужно и способен решить эту проблему в Brainfuck.
источник