Введение
Вы недавно приняли предложение о работе в довольно хорошей компании по разработке программного обеспечения. Вы довольно довольны размером своего офиса, но у вас самый большой офис? Трудно сказать, просто заглядывая в офисы ваших коллег, когда вы заходите. Единственный способ понять это - изучить чертежи здания ...
Твое задание
Напишите программу, сценарий или функцию, которая принимает план здания для вашего здания и указывает, является ли ваш офис самым большим. План этажа легко читается, потому что здание представляет собой квадрат n на n .
Вход будет состоять из n + 1 \n
-лимитированных строк. В первой строке будет номер n . Следующими n строками будет план этажа здания. Простой пример ввода:
6
......
. . .
.X . .
. . .
. . .
......
Правила для плана этажа следующие:
.
(ASCII 46) Будет использоваться для представления стен.(Пробел [ASCII 32]) будет использоваться для представления открытого пространства.
- Вы представлены
X
(ASCII 88). Вы находитесь в своем офисе. - План этажа будет состоять из n строк, каждая из которых содержит n символов.
- Здание полностью окружено стенами со всех сторон. Это означает, что все 2-я строка ввода (первая строка плана этажа) и последняя строка ввода будут все
.
s. Это также подразумевает, что первый и последний символы каждой строки плана этажа будут.
s. - Размер офиса определяется как сумма смежных пространств (смежных, перемещаясь в 4 направлениях, N, S, E, W, не проходя через стену).
- Для размера офиса, X, представляющий вас, считается как
(открытое пространство)
- 4 <= n <= 80
Вы должны указать, является ли ваш офис строго больше всех остальных офисов. Выходными данными могут быть все, что однозначно означает Истина или Ложь в выбранном вами языке программирования и соответствует стандартным соглашениям, равным нулю, нулю и пустому значению Ложь. Правда подразумевает, что ваш офис строго самый большой.
Пример вывода для вышеуказанного ввода:
1
Потому что ваш офис 8 квадратных футов, а единственный другой офис - 4 квадратных фута.
Руководство по вводу / выводу
- Входные данные могут быть прочитаны из стандартного ввода, а выходные данные - в стандартный вывод.
Или
- Входные данные могут быть одним строковым аргументом функции, а answer - возвращаемым значением этой функции.
Вопросы-Ответы
- Все здание состоит из стен и офисов.
- В здании всего один этаж
- На входе гарантированно указан X, но не должно быть пробелов. У вас может быть офис 1х1, а остальная часть здания - стены (у вас самый большой офис! Ура!).
Другой пример
10
..........
. . . .
. . . .
. . . .
. .. . .
.. .
..........
. X .
. .
..........
Здесь есть 3 офиса, ваш южный офис прямоугольный, северо-западный офис - треугольник (иш), а северо-восточный офис странно деформирован, но больше, чем ваш. Вывод должен быть False.
Это задача написать самый короткий код, счастливый код-гольф !
источник
X
входных данных. :)Ответы:
Ruby 2.0, 133 символа
Сотрудничество с @Ventero. Всегда хороший знак, когда он начинает нарушать подсветку синтаксиса!
Это рекурсивное решение для заливки. Читает из STDIN и выводит в STDOUT:
Посмотрите, как это работает на Ideone .
источник
f
немного:f=->l{a=[*l];a.product([~n,-1,1,n+1]){|p,d|a|=[p+d]if$_[p+d]<?.};a!=l ?f[a]:l.size}
. И поправьте меня, если я ошибаюсь, но, похоже, на самом деле не имеет значения, если первая строка, содержащая длину, оставлена в$_
, что позволило бы сократить входной анализ доgets$e;n=$_.to_i
gets(p)
asp
ничего не делает и возвращает,nil
если вызывается без аргумента.product
возвращает получателя дляl
полного устранения :f=->*a{a.product([~n,-1,1,n+1]){|p,d|a|=[p+d]if$_[p+d]<?.}!=a ?f[*a]:a.size}
- к сожалению, мы не можем переключить lhs и rhs of!=
для удаления пробела, так как в противном случае обе стороны указывают на неизмененный массив.String#scan
иARGV
, находя самую большую комнату, можно немного сократить:$_.scan(/ /){$*<<f[$
.size]}; p $ *. Max <f [~ / X /] `n
вf
with с помощью чего-то вроде[~n=$_.to_i,...]
, вы можете объединить первую и третью строкиgets(p).scan(...
общей сложности 134 символа.GolfScript (85 байт)
Онлайн демо
Это имеет три раздела:
Первоначальное входное преобразование, которое создает двумерный массив, использующий
0
для представления стеныN
(общее количество ячеек) для представления моей стартовой позиции, и различное число между ними для каждого открытого пространства.Заливка.
Финальный подсчет. Это использует вариант на кончике для наиболее распространенного элемента в массиве , добавляя прерыватель связи, который смещает против
N
.источник
qN/(~_*:T:U;{[{i5%[0_U(:UT]
=}/]}%{{[{_2$*!!{[\]$W=_}*}*]}%z}T*:+0-:A{_T=A@-,2*+}$0=T=
.Javascript (E6) 155
292Ungolfed базовая версия
Тест
Консоль Javascript в Firefox
F('6\n......\n. . .\n.X . .\n. . .\n. . .\n......')
F('10\n..........\n. . . .\n. . . .\n. . . .\n. .. . .\n.. .\n..........\n. X .\n. .\n..........\n')
источник
1
тоже дает мне (в Firefox 30.0)C #,
444372 / (342 спасибо HackerCow) байтовДовольно плохой счет и опоздание на вечеринку, но, похоже, на работу Вывод 1, когда у вас самый большой офис, 0, когда у вас нет. Я еще не был очень запутан с игрой в гольф. Работает, создавая непересекающиеся множества из входных данных (первый цикл), подсчитывая размер каждого набора (второй цикл), а затем проверяя, является ли мой набор самым большим (третий цикл).
Предусмотрены две версии: одна - скомпилируемая программа, принимающая ввод из командной строки, другая - просто функция, которая ожидает строку в качестве ввода и возвращает int как результат (и является просто переработанной копией первой) - он не нуждается ни в каких пунктах использования или тому подобном, должен иметь возможность поместить его куда угодно, и он будет работать.
Программа 372 байта :
Функция 342 байта :
Менее гольф:
источник
Main
функцией и замените функцию на, скажем,int f(string s)
вы могли бы использоватьs.Split('\n')[0]
вместоConsole.ReadLine()
и return1
или0
. Это должно сэкономить вам много кодаCJam, 106 байт
Другой подход к заливке. Хотя, делает это дольше ...
Попробуй здесь
источник
Python 2 - 258 байт
использует ввод для ввода
Примечание: сначала
if
отступ в один пробел, в других строках с отступом используется либо символ табуляции, либо табуляция и пробел.источник
J:
150121 байтРедактировать :
id
иcomp
были смехотворно сложными и медленными. Теперь он работает, сдвигая карту 4 раза, вместо сканирования с помощью окна 3х3 с помощьюcut
(;.
).Принимает в качестве аргумента план в виде строки. Объяснено ниже:
источник
Python 2 - 378 байт
Вау. Я вне практики.
Это функциональный ответ, но он загрязняет глобальное пространство имен. Если это недопустимо, это может быть исправлено за счет 1 байта:
У меня было написано целое длинное объяснение, но, видимо, оно не сохранилось должным образом, и я больше не буду это делать.
источник