Если в качестве входных данных задана двумерная строка в виде строки с символами новой строки или списком строк, выведите координаты (x, y)
всех хэшей (#
) в списке. Входные данные будут содержать только хэши и пробелы. (и переводы строки, если вы решили принять ввод как 2D-строку)
Если хэшей нет, вы можете вывести что угодно.
Вывод должен быть однозначным относительно того, какие номера связаны с каким.
Пример:
##
Должен вывести:
(0,0), (1,0)
Это предполагает индексирование на основе 0, начиная с верхнего левого угла. Вы можете начать с любого угла, использовать индексирование на основе 0 или 1 и / или y
сначала выводить данные . (например, в формеy,x
).
Еще несколько тестов (опять же, все с использованием (x, y)
индексации слева направо на основе 0 ):
#
#####
#
(4, 0), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (0, 2)
# ###
### #
(0, 0), (2, 0), (3, 0), (4, 0), (0, 1), (1, 1), (2, 1), (4, 1)
Обратите внимание, что все эти тестовые примеры перечислены по строкам, а не по пути.
Вы можете предположить, что хэши образуют непрерывный след, т.е. # #
никогда не будут входными данными. (вероятно, это не имеет значения, но в случае, если кто-то захочет переопределить это)
Вы также можете вывести координаты в любом порядке: вертикальные столбцы, горизонтальные строки или просто несортированный список.
Ответы:
слип , 2 + 1 = 3 байта
+1 байт за
p
флаг. Код:Объяснение:
В
p
-flag возвращает позицию каждого совпадения следующих:Попробуй это здесь!
источник
Грязь , 5 байт
Попробуйте онлайн! Формат вывода немного прикольный, но OP заявил, что он действителен.
объяснение
Grime - мой язык сопоставления двухмерных шаблонов. Часть после
`
- это шаблон , в данном случае квадрат 1 × 1, содержащий#
-символ. Grime найдет совпадения во входной сетке и распечатает первую найденную по умолчанию. Часть перед`
содержит параметры, в этом случае означающие, чтоa
должны быть напечатаны все match ( ), а также их позиции и размеры (p
).источник
MATL ,
7 65 байтЭто использует индексирование на основе 1
(1,1)
в верхнем левом углу.Объяснение:
Спасибо @DJMcMayhem и @LuisMendo за каждый -1 байт!
Попробуйте онлайн!
источник
ooH#fh
чтобы сохранить один байт. (преобразовать в целые числа, mod2) Поскольку пробел четный (mod 2 == 0, ложь) и#
нечетный (mod 1 == 1, правдивый)Python , 67 байт
На самом деле это просто ответ на мой вопрос о переполнении стека на похожую тему.
Попробуйте онлайн!
Зацикливается на 2D-списке, записывает хэш-символы и возвращает результат. Мы сохраняем байт, используя
char > '!'
вместоchar == '#'
, потому что входные данные будут состоять только из хэшей и пробелов, и поэтому хэши (0x23
) будут единственными символами больше восклицательных знаков (0x21
).источник
JavaScript (ES6),
7067 байтВывод списка разделенных новой строкой и пробелом координат, например
Вы можете стать намного короче с помощью странного формата вывода:
Это выводы
для второго теста. До сих пор ясно, какие числа в паре с каким ...
источник
J , 12 байт
Попробуйте онлайн!
объяснение
источник
Желе , 8 байт
Попробуйте онлайн!
Имеется двумерный массив символов (= список строк):
источник
Dyalog APL 16,0, 5 символов = 9 байтов или 6 символов = 8 байтов
Дает список (y, x) пар слева сверху.
⍸
где⎕
вход=
равно'#'
этот персонаж ** Можно сохранить символ в стоимости одного байта, заменив
'#'
с⍕#
(форматом корневого пространства имен)Попробуй APL онлайн! Обратите внимание, что
⍸
эмулируется с,i
потому что TryAPL работает версия 14.0.источник
⍸
не входит в однобайтовую версию. Смотрите ссылку "байты".JavaScript (Firefox 30-57), 61 байт
Возвращает 1 основанные координаты. Легко переключается между
[y, x]
и[x, y]
заказа. Ungolfed:источник
Vim, 37 байт
Поскольку V в основном обратно совместим, вы можете попробовать его онлайн!
Простое решение для регулярных выражений, где оно заменяет каждое '#' на местоположение, в котором оно было найдено (индексация по одному). Когда я писал это, я немного волновался, что местоположение будет меняться после замены первого в строке, но это не проблема. TBH Я приятно удивлен тем, насколько простым оказалось это решение.
К сожалению, vimscript очень многословен, поэтому большая часть байтов получается путем разделения результатов, чтобы их можно было прочитать. В противном случае мы могли бы сделать
Но это создает результат, который довольно сложно интерпретировать. Кроме того, он будет работать только в том случае, если сетка всегда 9x9 или меньше.
Это действительно забавное решение, потому что оно показывает каждую пару координат в месте хеша, которое оно представляет. Например, вход
выходы
Конечно, если бы мы использовали V, мы могли бы удалить завершающий символ новой строки и сжать регулярное выражение. Тогда это может быть просто
(32 байта)
Но так как это тот же самый подход и все еще мучительно многословный, кажется, не стоит использовать язык игры в гольф.
источник
Haskell, 53 байта
Ввод принимается как список строк. Вывод представляет собой список
(x,y)
пар (0 проиндексирован), напримеристочник
Луа, 141 байт
Сейчас 2:30 утра, я в кровати, на моем телефоне. Почему я это делаю?
источник
Mathematica, 12 байт
Операторская форма
Position
. Предполагается двумерный массив символов. 1-индексированный, начиная с верхнего левого входа. Выводит список координат в форме{row,column}
.источник
char[]
, что на самом деле является распространенным способом хранения строк в языках на основе Си. Кроме того, в этом описании задачи конкретно упоминается «либо строка с новыми строками, либо список строк», и не упоминается список списков символов или двумерная матрица символов.PHP, 69 байт
Использует индексирование на основе 1, начиная с верхнего левого угла.
Используйте как:
Будет выводить:
источник
C 113 байтов
Выходы из тестовых случаев:
Попробуйте онлайн!
источник
RBX.Lua, 131 байт
Должен предполагать, что ввод действителен (Z - плоская ось, пробелы - это
White
плитки, хэши могут быть любого другого цвета, верхняя левая часть расположена в0, 0, 0
), и все части являются частью той же моделиM
, а модель в противном случае пуста.Пример ввода / вывода:
источник
Perl 6 , 25 байт (22 символа)
Принимает ввод в виде списка строк.
Выводит по одному списку на строку, каждый из которых содержит (y, x) кортежи для координат.
Попробуйте онлайн!
Как это устроено
источник
Groovy,
8068 байтПример ввода:
Пример вывода:
источник
Рубин , 24 + 1 = 25 байт
+1 байт за
-n
флаг. Координаты основаны на 1, по одному номеру в строке.Попробуйте онлайн!
источник
C, 80 байтов
Требует ввода в виде массива символов с разделителями новой строки, выводит вывод на экран.
Ungolfed & использование:
источник
x,y;f(char*s){for(x=y=0;*s;*s++==10?++y,x=0:++x)*s==35&&printf("%d,%d ",x,y);}