Это довольно простой код для игры в гольф. Ваша программа, учитывая строку ASCII, должна разбить эту строку на две строки, которые она будет оценивать. Если вторая строка «позже», чем первая, она вернет 1, если она «раньше», чем первая, вернет -1, а если они одинаковые, вернет 0. В уточнить, что означают «позже» и «раньше», давайте рассмотрим коды символов ASCII. Вам нужно сравнить каждый символ строки, рассматривая каждый из них как цифры числа. Позже относится к большему числу, встречающемуся после меньшего числа. Строки будут отформатированы с дефисом для разделения двух групп ввода.
Посмотрите на этот пример:
7-9
как вход должен вернуться1
.
7
преобразует в код ASCII55
и9
преобразует в код ASCII57
.Как
57
происходит численно после55
,9
позже7
.
Другой пример:
LKzb-LKaj
как вход должен вернуть-1
Последовательности кода ASCII для этого
76-75-122-98
и76-75-97-106
Это задача для игры в гольф, и количество байтов определяет, как будут оцениваться записи.
Любой ввод из 95 печатных символов ASCII принимается, за исключением пробелов и дефисов для чего угодно, кроме разделения ввода. Кроме того, строки не обязательно имеют одинаковую длину.
Удачи!
РЕДАКТИРОВАТЬ: Чтобы быть более ясным, каждый символ должен рассматриваться как цифра в числе. В этом примере LKzb-LKaj
, хотя j
позже b
, позже , z
позже a
, и поскольку это более значимая цифра, она имеет приоритет. Предоставленная строка всегда будет содержать не менее 3 символов, что исключает пустые строки из сферы этой проблемы.
РЕДАКТИРОВАТЬ: Вот еще несколько тестов, для вашей помощи:
A-9
->-1
11-Z
->-1
3h~J*-3h~J*
->0
Xv-Y0
->1
источник
11-Z
->-1
не имеет смысла, учитывая текущую формулировку вопроса.Z
(90) больше1
(49) и является наиболее значимой буквой. Пожалуйста, уточните, как сравниваются строки разной длины.A-AA
?11>Z
в ваших примерах, когда1<Z
. Должно быть какое-то неопределенное поведение для строк разной длины, или пример неправильный.~
равным 126, затем увеличивали бы следующую цифру на единицу, возвращая начальную цифру в!
. Каждое увеличение самой значимой цифры эквивалентно увеличению второй самой значимой цифры на 127.Ответы:
Pyth - 11 байт
Легко, использует
._
знак, чтобы получить знак иC
получить коды символов.Попробуйте это онлайн здесь .
Тестовый пакет .
источник
CJam, 12 байт
Попробуйте онлайн в интерпретаторе CJam .
Как это работает
источник
Ява,
86118Очень странный способ сравнения строк. Сделано быстрое исправление, чтобы он прошел дополнительные тестовые случаи, позже будет искать больше гольфизма.
Спасибо Вартану в комментариях за
signum
предложениеисточник
return s[0].compareTo(s[1]);
11-Z
возврата-1
, он возвращается1
."A".compareTo("Z")
возвращает-25
. К несчастью.i = a!=b ? b-a : s[1].compareTo(s[0]);
Кажется, я не понимаю ... Кроме того, вы можете использовать Math.signum и сохранить себя, объявив i;Perl, 31 байт
30 байт + 1 байт для
-p
. Принимает ввод на STDIN.объяснение
Когда операнды
cmp
имеют разную длину, например,chicken
иegg
, они выравниваются так:так что
egg
>chicken
(\0
это нулевой байт). Но мы хотим, чтобы они были выровнены так:так что
chicken
>egg
.Для этого мы объединяем их, один раз с
chicken
доegg
и один раз сegg
передchicken
:Теперь, когда две наши строки имеют одинаковую длину, мы удаляем ведущее слово, используя XOR для получения:
И теперь мы можем использовать,
cmp
чтобы найти то, что было первым. (Там я это сказал!)источник
Python 2, 88 символов
cmp
не работает правильно, когда у вас есть две строки разной длины, поэтому я должен дополнить их обоими нулевым символом (которыйord
преобразуется в0
) для обработки этого случая. К сожалению, это добавило около 35 символов, плюс теперь это две строки вместо одной, потому что мне нужна длина ввода и его перебор.источник
1-2
, который должен возвращать1
возвращается-1
. Умная работа, хотя.11-A
случаю, который должен вернуться-1
, а не возвращаться1
в этом примере.R, 54 байта
Это требует библиотеки пракмы. Он разбивает входную строку на
-
. Право оправдывает строки. Занимает их и делает различий.Таким образом, для 11-7 мы получаем строки «11» и «7». Их ранг [2, 1]. Разница -1. Для 3h ~ J * -3h ~ J * мы получаем "3h ~ J *" и "3h ~ J *". Ранг этих [1.5, 1.5] с diff 0.
Тестовые примеры
источник
CoffeeScript,
143140139Вот jsfiddle с результатами (смотрите в консоли)
источник
PERL,
4636 байтПреобразует список argv в строку, разбивает дефисом на arg слева и справа без пробелов, а затем возвращает вызов cmp.
источник
"@ARGV"=~/-/;print$`cmp$'
(непроверенный)cmp
, но она не работает, когда длина строки отличается."A" cmp "9"
равен 1, а"11" cmp "Z"
равен -1, хотя оба входа должны возвращать одно и то же значение для этой задачи.Python 3, 84 байта
Разделить строку ввода по
"-"
. Преобразуйте строки Unicode в строки байтов, затем интерпретируйте эти строки байтов как целые числа с прямым порядком байтов. Наконец сделайте сравнение - (не) к счастьюcmp
) больше не доступно в Python 3.Python 2, 69 байт
источник
print
иcmp
.Python 2, 79 байт
Довольно простое решение, и его легко понять. Сравнивает длины строк, затем сравнивает строки лексографически.
Попробуй здесь
источник
perl5, 64
Просто запустите его из командной строки. хотя это будет выглядеть лучше с новой строкой, но это стоит 1 символ.
Эта более длинная версия правильно обрабатывает несоответствующие длины.
источник
/-/,$_=$`cmp$'
было бы проще, и вы можете пропустить-aF-
бит. Кроме того, я считаю это 20 (16 для$_=$F[1]cmp$F[0]
и 4 дляpaF-
, сохраненные в файл и запустить какperl -paF- file.pl
).cmp
он не работает, когда две строки имеют разную длину, например, с11-Z
./-/;$_=length$'<=>length$`||$' cmp$`
и-p
. ($`
сохраняет все до совпадения с регулярным выражением,$'
сохраняет все после.) Использование наmap
самом деле стоит больше байтов, чем просто вызовlength
дважды.F #, 53
Это в форме анонимной функции (лямбда), поэтому вы должны вставить ее и предоставить параметр сразу после is (или, используя обозначение трубопровода). Например (в FSI):
источник
JavaScript ES6,
4643 байтаисточник
11-Z
должен вернуться,-1
но он возвращается1
.'11'>'Z'
когда'11'<'ZZ'
в вопросе нет ничего о том, как сравнивать строку разной длины или какое значение имеет пустая строка?Рубин, 59 байт
источник
05AB1E ,
12119 байтПопробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник