«Восходящая матрица» представляет собой бесконечную матрицу целых чисел (включая 0), в которой любой элемент является наименьшим доступным элементом, который ранее не использовался в соответствующей строке и столбце:
| 1 2 3 4 5 6 ...
--+----------------
1 | 0 1 2 3 4 5 ...
2 | 1 0 3 2 5 4 ...
3 | 2 3 0 1 6 7 ...
4 | 3 2 1 0 7 6 ...
5 | 4 5 6 7 0 1 ...
6 | 5 4 7 6 1 0 ...
. | ...............
Ваша задача - написать программу, которая будет выводить элемент, найденный в строке и столбце, указанных входными данными. (стандартный ввод и вывод)
Тестовые случаи:
5 3 -> 6
2 5 -> 5
Применяются правила Code Golf - выигрывает самый короткий код.
PS Даже если это имеет алгоритмическую природу, код может быть очень, очень кратким.
РЕДАКТИРОВАТЬ: я не ожидал увидеть решение XOR так рано. Я действительно надеялся увидеть 10 постов с алгоритмическим подходом и затем решение XOR. Теперь, имея в виду, что не очень интересно видеть, как писать xor на разных языках, я рекомендую вам также попробовать алгоритмический подход.
Так что, да, я думаю, что сейчас никто не может побить 5-значную отметку - поэтому я поздравляю Илмари Каронен с самым умным и кратчайшим решением. Но впереди стоит новая задача: написать кратчайшее алгоритмическое решение .
источник
Ответы:
GolfScript, 5 символов
Действительно, эта задача очень проста, когда вы узнаете шаблон. Единственный неудобный бит - индексация на основе 1 - если бы входные индексы были на основе нуля, этого двухсимвольного решения было бы достаточно:
Чтобы объяснить это читателям, незнакомым с GolfScript,
~
команда пропускает ввод, оставляя два числа в стеке.^
затем XOR объединяет два верхних числа в стеке, оставляя результат для вывода. Чтобы справиться с вводом, основанным на 1, необходимы еще две команды:(
уменьшает верхнее число в стеке на одну, а также\
меняет два верхних элемента в стеке.источник
^
? Я ссылался на встроенную страницу GolfScript и симметричное различие ; использование этой операции с двумя наборами массивов имеет смысл, но я не понимаю, как она работает только для двух отдельных чисел.^
оператор возвращает их побитовое значение XOR .Mathematica
1044редактировать
Мой первый ответ был основан на недоразумении относительно характера проблемы, как отметил Илмари. Вот еще одна попытка.
использование
источник
К, 31
Украл XOR-логику Илмари Каронена, которую я никогда бы не заметил.
источник
PHP, 38
Просто простая реализация XOR Илмари Каронена
<?php echo --$_GET['a']^--$_GET['b']?>
Использование:
... / xor.php? А = 4 & Ь = 7
напечатает 6
источник
Haskell 174
Думаю, я бы сделал решение, которое не полагалось на XOR. Лень правильно играть в гольф.
Изменить: день спустя я понял, что это просто вычисление XOR. Таким образом, если это считается алгоритмическим решением, то и Ильмари Каронен.
источник
Python 2, 36
Я понимаю, так как я только начинаю изучать Python, что это было бы идеальным временем для отправки моего первого ответа, используя его (и никто не ответил с помощью Python), и, возможно, я мог бы получить некоторую обратную связь.
Спасибо @IlmariKaronen за очень крутой ярлык.
Спасибо @Gareth за приведенный ниже код.
Python 3, 56
Оригинальная программа, которую я написал.
IDEONE с 2 и 5
IDEONE с 3 и 3
источник
input
уже оценивает ввод, поэтомуint()
не должно быть необходимости. Кроме того, поскольку вы получаете Int непосредственно отinput()
вас, вы можете сделать-1
прямо сейчас. Вы также можете полностью избавиться от промежуточных переменных и перейти прямо кprint(input()-1^input()-1)
. Относительно того, нужен ли импорт - другие пользователи Python на этом сайте не включают его в программы, которые используютinput()
, но я не программист Python, поэтому я не мог сказать, нужно это или нет.print(input()-1^input()-1)
. Спасибо вам за помощь!sys
?MATL , 2 байта
Попробуйте онлайн!
MATL откладывает задачу на несколько лет, но естественная индексация на основе 1 и побитовая функция xor делают это красиво и аккуратно!
источник
Perl 5 , 12 байт
Попробуйте онлайн!
источник
JavaScript 13 байт
источник
Japt , 5 байт
Попробуйте онлайн!
источник