Учитывая прямоугольный стог сена размером не менее 2x2, состоящий из всех одинаковых печатаемых символов ASCII, выведите местоположение (считая от верхнего левого угла) иглы, которая является другим символом.
Например, если введен следующий стог сена:
#####
###N#
#####
#####
Выходные данные должны быть 3,1
при нулевой индексации (что я буду использовать в этой задаче) или 4,2
при одной индексации.
Стог сена может состоять из любого печатного символа ASCII:
^^^
^^^
^N^
^^^
^^^
^^^
выход: 1,2
и иглой будет любой другой печатный символ ASCII:
jjjjjj
j@jjjj
jjjjjj
выход 1,1
Также возможно иметь иглу в углу:
Z8
88
выход 0,0
88
8Z
выход 1,1
или иметь иглу на краю:
>>>>>>>>>>
>>>>>>>>>:
>>>>>>>>>>
выход 9,1
Правила и разъяснения
- Вход и выход могут быть заданы любым удобным способом . Это означает, что вы можете воспринимать ввод как список символов, одну строку и т. Д.
- Вы можете распечатать результат в STDOUT или вернуть его как результат функции. Пожалуйста, укажите в своем представлении, в каком порядке выводится результат (т. Е. Горизонтальный, а затем вертикальный, как используется в задании, или наоборот).
- Допустимы либо полная программа, либо функция.
- Вы не можете выбрать, какие символы использовать. Это проблема.
- Стог сена гарантированно будет размером не менее 2х2, так что однозначно, какая игла, а какая - сено.
- На входе присутствует только одна игла, и ее размер равен одному символу.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
88\n8Z
(с любыми двумя символами, конечно).("########N###########", 5)
Ответы:
R ,
494744 байтовПопробуйте онлайн!
Принимает ввод как матрицу, возвращает 1-индексированные координаты
источник
which
назначение позорно гладко.Perl 6 ,
41 3837 байт3 байта сохранены благодаря @nwellnhof.
1 байт сохранен благодаря Джо Кингу.
Попробуйте онлайн!
объяснение
Он принимает входные данные в виде списка списков символов и возвращает список длиной 2, содержащий основанные на нуле координаты X и Y стрелки.
Он работает, применяя блок
{[+] ^∞ Z* !<<.&[Z~~]}
на входе и его транспонирования..&[Z~~]
проходит через все столбцы аргумента и возвращает,True
если все элементы одинаковы, вFalse
противном случае. Затем мы отменяем все значения (поэтому у нас есть список с одним bool на столбец, где bool отвечает на вопрос «находится ли стрелка в этом столбце?»), Умножаем их поэлементно на последовательность 0,1,2 ,. .. (True = 1
иFalse = 0
) и суммируем список, поэтому результатом всего блока является номер столбца, в котором была найдена игла, на основе 0.Лучший подход Nwellnhof, Perl 6 , 34 байта
Попробуйте онлайн!
объяснение
Вообще такой же подход, просто более эффективный. Он по-прежнему использует блок массива и его транспонирование, но теперь блок преобразует все строки в
Sets
и проверяет количество элементов. Затемfirst
функция выдает индекс (из-за:k
) первой строки, которая содержит более 1 элемента. Из-за этого порядок$_
и.&[Z]
нужно было поменять местами.источник
first(:k)
,Set
и.&[Z]
..&[Z]
.).&[op]
не похоже,[op] $_
но это работаетZ
по какой-то причине.Python 2 , 57 байт
Попробуйте онлайн!
Порт этого для Python 3 может быть 62 байта :
Понимание списка
[len(set(v))for v in a]
теперь короче двойной карты на два байта, так как его нужно будет привести к списку, подобномуlist(map(len,map(set,a)))
Попробуйте онлайн!
источник
Брахилог , 20 байт
Попробуйте онлайн!
Выходы
[I,J]
, гдеI
находится индекс строки и индексJ
столбца, оба с 0 индексами.Глупо долго, но получение индексов в брахилоге обычно очень многословно.
объяснение
источник
PHP ,
9985 байтИспользование строки без перевода строки и ширины (или высоты
('########N###########', 5
) в качестве ввода.Попробуйте онлайн!
Ungolfed:
Выход:
источник
chr
: если вторым параметром для strpos является целое число, он будет интерпретирован как код ASCII. -> -5 байт. 2) Два функциональных параметра$s,$w
могут сохранить еще 9 байтов.05AB1E ,
96 байтовСохранено 3 байта переключения формата ввода.
Ввод принимается как строка и длина строки.
Выход - это нулевой список в форме
[y, x]
Попробуйте онлайн! или как тестовый набор
объяснение
источник
.m
...m
раньше, но я был достаточно уверен, что видел это в некоторый момент :)Python 3 + NumPy ,
7566 байт-9 байт благодаря @ ASCII-only
Попробуйте онлайн!
Это предполагает, что входные данные являются массивом NumPy. Выходные данные индексируются с нуля, и сначала вертикальный, а затем горизонтальный.
Он преобразует входные данные из
char
в, аint
затем вычисляет медиану массива, который будет символом стога сена. Мы вычитаем это из массива, что делает иглу единственным ненулевым элементом. Наконец, верните индекс этого элемента с помощьюnumpy.where()
.источник
uint8
на один байт меньше?uint8
ASCII-кодами. Я предполагаю, что это потому, что Python3 использует Unicode в качестве стандартного формата ввода для строк.Желе , 5 байт
Выходы [высота, ширина] (1-индексированный).
Попробуйте онлайн!
Желе , 5 байт
Попробуйте онлайн!
источник
Желе , 4 байта
Возможно, это мог быть просто комментарий для мистера Xcoder, он очень похож ...
Монадическая ссылка, принимающая матрицу символов, которая выдает список из одного элемента, координата с 1 индексом (строка, столбец) сверху слева.
(... Как полная программа, заданная аргументом, отформатированным так, что при синтаксическом анализе получается список списков символов - то есть список строк в формате Python - печатается одна координата.)
Попробуйте онлайн!
Как?
источник
EƇ
умный.JavaScript (ES6), 55 байт
Попробуйте онлайн!
JavaScript (ES6),
6564 байтаСохранено 1 байт благодаря @Neil
Попробуйте онлайн!
Как?
источник
~y&1
сохраняет байты надy&1^1
.Java 8,
132111 байт-8 байт (и -13 более неявно) благодаря @dana .
Ввод как символьная матрица.
Попробуйте онлайн.
Объяснение:
источник
return
утверждение никогда не должно быть ударено. Может быть, есть лучший способ сохранить внешний цикл?return"";
он недоступен и может быть удален. : D Так что -21 байт благодаря тебе.unreachable code
ошибку. Не знал, что устранение финалаreturn
было исправлением.i--
и>
. :) Смотрите этот так ответ для получения дополнительной информации. Таким образом,i > 0
выполняется сначала, проверяя,i
больше ли это значение 0. А затемi
уменьшается на 1 сi--
, прежде чем оно входит в тело цикла.MATL ,
128 байтПопробуйте онлайн!
Использование
mode
функции в качестве мажоритарного детектора. Возвращает 1 основанные индексы.-4 символа благодаря @LuisMendo
источник
find
, даже в MATLAB. (Привет, кстати!)Wolfram Language
3758 байтМоя более ранняя запись не правильно обрабатывает случай, когда "нечетный символ" был в верхнем левом углу матрицы. Это делает.
Counts@Flatten@#
списки , сколько каждый символ в массиве,#
.TakeSmallest[...,1]
возвращает наименее частое число в форме правила ассоциации, такого как<| "Z"->1|>
Keys...[[1]]
возвращает «ключ» к единственному элементу в ассоциации - наименее используемому символу. («Z» в данном случае)#~Position~...
возвращает затем положение ключа в исходной матрице#
.источник
Perl 5
-p00
,5245 байт45 байт
52 байта
Как
-p00
: нравится,-n
но и печать, режим абзаца/^(.)(\1* )*(\1*)|^/
: соответствует либо$1
: первый символ$2
,: повторение (не используется)$3
,: символы перед «иглой» в строке,$&
все совпадение$_=
: назначить переменную ввода / аргумента по умолчанию$&=~y/ //
что число новых строк$&
.$".
: объединить с$"
(пробел по умолчанию) и объединитьlength$3
: длина$3
источник
R 42 байта
Попробуйте онлайн!
Вход: матрица стога сена
m
Выход:
(row,col)
вектор - индекс, начинающийся с1
источник
f=
может быть опущено из числа байтов, но неfunction(m)=
.C # (интерактивный компилятор Visual C #) ,
109108107 байтFirst () => Last () для -1 байта
каррирование за -1 байт благодаря Embodiment of Ignorance
Попробуйте онлайн!
источник
J , 22 байта
Попробуйте онлайн!
NB. возвращает ответ в формате (строка, столбец).
источник
Python 2 ,
5347 байтПопробуйте онлайн!
Позвонить как
f("########N###########", 5)
(разрешено в комментарии ). Выходы(y, x)
.Эрик сохранил 6 байтов, предлагая переставить вывод + используя
divmod
. Благодарность!источник
divmod
встроенный .PowerShell ,
107988277 байтПопробуйте онлайн!
Принимает забрызганную строку с LFs. Возвращает место с нулевым индексом x, y. раскатали:
источник
Python 3 , 93 байта
Попробуйте онлайн!
Ввод принимается как многострочная строка. Вывод 0 проиндексирован
источник
Октава , 40 байт
Порт ответа @ sundar's MATL . Выход представляет собой двухэлементный вектор с индексами столбцов и строк на основе 1.
Попробуйте онлайн!
источник
Сетчатка 0.8.2 , 41 байт
Попробуйте онлайн! 0 индексированные. Объяснение:
Разрешить
.
совпадать с новыми строками. Это стоит 3 байта (3 байта -?
перед¶
), но экономит 6 байтов.Посмотрите вперед на двух одинаковых персонажей.
\1
затем становится сеном.Подсчитайте количество новых строк перед иглой.
Захватите сено слева от иглы.
Убедитесь, что игла не сено или новая строка.
Подходим остаток сена, чтобы результат заменил его.
Выведите ширину левого сена и количество новых строк.
источник
C # (интерактивный компилятор Visual C #) , 82 байта
Спасибо Дане за то, что она сбрила 6 байтов!
Попробуйте онлайн!
Старое решение, 106 байт
Оба принимают входные данные в виде строки и целого числа, определяющего количество столбцов.
Попробуйте онлайн!
источник
Enumerable.Last()
приняла делегата, спасибоJava 8, 104 байта
Входные данные - это массив char и целое число, указывающее ширину строки.
Выходные данные начинаются с нуля, вертикальные, а затем горизонтальные (т. Е. Номер строки, а затем номер столбца)
Объяснение:
источник
Питон 3 ,
93898558 байтПолное переписывание взятие ввода , как
concatenated string, width
:Попробуйте онлайн!
Оригинальный ответ:
РЕДАКТИРОВАТЬ: Сохранено 4 байта путем замены строки / отступ для точек с запятой. Сохранено еще 4 байта с помощью
divmod
(спасибо @JonathanFrech).Попробуйте онлайн!
Я знаю, что это может быть намного короче, но я просто хотел попытаться обойти это
dict
понимание.источник
divmod
спасло бы пять байтов.MATL , 11 байт
Выход - строка, затем столбец; 1 на основе.
Попробуйте онлайн!
объяснение
источник
Pyth,
151412 байтПринимает ввод как длину строки и ввод без строк и выводит как [строка, столбец].
Попробуй здесь
объяснение
Старый подход
Попробуй здесь
объяснение
источник
Древесный уголь , 40 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Должно быть, я что-то делаю не так, потому что это почти столько же, сколько отвечает Retina. Объяснение:
Проверьте, является ли второй символ в первой строке также первым символом, и возьмите первый символ первой строки, если это так, в противном случае первый символ второй строки, если нет. Это тогда сено.
Продолжайте читать строки, пока не найдете строку, сено которой меньше ее длины.
Выведите позицию несовпадающего элемента, а затем количество ранее прочитанных строк.
источник
MATLAB,
+6822 байта[r,c]=find(v~=v(1));if size(r,1)>1 disp([1,1]);else disp([r,c]);end;
Если бы я мог исключить какой-либо один случай, такой как[1,1]
в этом решении, я мог бы сохранить несколько байтов.Обновленное решение :
Спасибо @sundar за помощь в решении особого случая и экономию 42 байта! Кроме того, спасибо @Luis_Mendo за предложения и сохранение мне еще 2 байта!
источник
[1,1]
случай, используяmode(v(:))
вместоv(1)
.v
. Кроме того , вы , вероятно , можете заменить~=
на-
и удалить окончательный;
Рёда , 81 байт
Попробуйте онлайн!
Принимает ввод как строку, содержащую строки, оканчивающиеся на новую строку. Возвращает поток, содержащий 0-индексированные горизонтальные и вертикальные индексы.
источник