инструкции
Учитывая неизвестную входную строку i
со значением либо головки или хвостов , возвратите 1
для головок или -1
для хвостов с самым коротким кодом.
Образец не гольф-кода (55b):
if(i == "heads"){
print(1);
}else{
print(-1);
}
Пример гольф-кода (16b):
print("t">i||-1)
Javascript был использован для примера, но это не является обязательным требованием . Извините, если это слишком просто для большинства пользователей, его можно улучшить.
Ответы:
CJam, 4 байта
Предполагается, что переменная
I
содержит входные данные, посколькуi
не является допустимым идентификатором в CJam.Попробуйте онлайн.
Это эквивалентно коду JavaScript
I.indexOf('e')
.источник
p
в это? Это стандартно в CJam не для?p
это не нужно.C, 18 байтов
Довольно просто, но давайте сделаем это просто для удовольствия ...
Учитывая строку,
char *i
она печатает 1 дляheads
и -1 дляtails
, с завершающим переводом строки.объяснение
В C
"-1" + 1
указывает на 1 символ вперед, поэтому он такой же, как"1"
. Давайте посмотрим на первые символы:Если мы посчитаем биты от самого правого, начиная с нуля, бит 3 равен 1 в,
heads
а 0 вtails
: суммируя его,"-1"
получаем правильную строку. Это выглядит так:Теперь, заменить
i[0]
с*i
и сдвиг вправо с разделением мощности на двоих , чтобы сохранить несколько байт. Также удалите ненужные скобки:Теперь
& 1
можно заменить на% 2
. Количество символов одинаковое, но модуль имеет более высокий приоритет, что позволяет убрать скобки. Удалить пробелы:бонус
Я думаю, что самый короткий способ получить целое число 1 или -1 (не строка) в C:
Объяснение:
источник
Рубин, 8 (6 без выхода)
Оператор ракеты!
источник
PHP - 11 байт
Это работает, потому что
'tails' ^ 'F'
→'2'
и'heads' ^ 'F'
→'.'
, который при вводе в виде целого числа0
.Вы можете проверить это решение (или любое из нижеперечисленного) следующим образом:
Ideone Link
альтернативы
15 :
<?=1-md5($i)%3;
16 :
<?=md5($i)[5]-5;
16 :
<?=-crc32($i)%5;
источник
TI-BASIC, 9-10 байтов
Непосредственная. «t» находится в позиции 1 «tails», но «t» не в строке «глав », поэтому inString (возвращает 1 для хвостов и 0 для голов.
Если ваш калькулятор работает в радианах (как и любой математик), он занимает всего девять байтов:
Обратите внимание, что в калькуляторах TI нет именованных строк, поэтому входные данные находятся в переменной ответа калькулятора. Также обратите внимание, что строчные буквы составляют два байта каждая, поэтому это решение на самом деле занимает меньше памяти, чем слово «head».
источник
t
иinString(
два байта.Деление ,
2621 байтМартин (и его превосходный ответ здесь ) убедил меня выучить новый язык, а что может быть лучше, чем быстрый гольф? Это почти наверняка не оптимально, но эй, это было весело! Как только я почувствую себя хорошо по этому поводу, я могу предоставить некоторую форму объяснения, если это будет запрошено.
источник
Python 2, 16 байт
источник
Pyth - 4 байта
Бег с головами или хвостами . Как
i
иint
в Pyth, здесь используетсяz
имя переменной, которая содержит любой пользовательский ввод. Он эквивалентен Pythonprint(z.find("e"))
, поэтому использует метод @ Dennis.источник
VBA (Excel), 12 байт
Немного фантастики, но с VBA интересно попробовать подобрать подходящий язык программирования ...
i - это строка, и она просто использует значение ASCII первого символа, разделенное на 6 и вычтенное из 13, чтобы получить 1 или -1. Очень просто.
Пример выполнения в непосредственном окне (10 дополнительных байтов для установки входной переменной):
источник
C, 22 байта
Кредиты идут в @TheE для того, чтобы рассказать мне об этом !
Объяснение:
Если первый символ строки больше чем
'h'
, строка"-1"
печатается. В противном случае строка"1"
печатается. Обратите внимание, что этот подход сопровождается завершающим символом новой строки.Старая версия (25 байт):
Объяснение:
Если первый символ строки больше чем
'h'
, печатается -1. В противном случае печатается 1.источник
h
и 7 дляt
.puts(*i>'h'?"-1":"1");
бы лучше использовать путы ? (22 байта)Тр:
1713 символов(Или
1410 если считать только аргументы ...)Образец прогона:
Краткое объяснение:
tr
расшифровывается как транслитерация, то есть заменяет каждый символ ввода, найденного в первом аргументе, символом в той же позиции, что и во втором аргументе:Если первый аргумент длиннее, символы без позиционного соответствия во втором аргументе заменяются последним символом второго аргумента:
Когда используется опция
-s
(--squeeze-repeats
), последовательные символы, которые будут заменены одним и тем же символом, заменяются сразу:Поэтому, если мы перечислим все символы в «хвостах», мы получим то, что нам нужно:
То же самое для «голов», но нам нужно держать «t» впереди, чтобы использовать минус (символы отсортированы в алфавитном порядке для удобства):
Объединение всех уникальных символов «хвостов» и «голов» в один первый аргумент, сохранение «t» впереди приводит к окончательному решению:
Чтобы избежать перечисления символов, вместо этого можно использовать интервал от - до формата.
источник
tr
. POSIXly:tr -s ta-s '-[1*]'
Сборка 8088, IBM PC DOS, 17 байт
разобранное:
Объяснение:
Используйте флаг четности процессора, чтобы определить, является ли первый символ
'h'
(четным числом двоичных1
файлов) или't'
(нечетным числом двоичных1
файлов). Это экономит один байт при сравнении char в ASCII.Ввод из командной строки, вывод в консоль.
Ввод, вывод:
источник
Japt , 2 байта
Попробуйте онлайн
источник
оболочка (переносная / POSIX), 16 байт
expr $i : he - 1
Попробуйте онлайн!
Благодаря @ StéphaneChazelas в unix.stackexchange.com
echo $[30#$i%7-1] # 17 bytes but only in bash, zsh.
Попробуйте другие решения: попробуйте онлайн!echo $((30#$i%7-1)) # 19 bytes but only bash,ksh,zsh.
Попробуйте онлайн!he=2;echo $[${i%a*}-1] # 22 bytes But only in bash,zsh .
Попробуйте онлайн!a=${i%h*};echo ${a:+-}1 # 23 .
портативный Попробуйте онлайн!he=2;echo $((${i%a*}-1)) # 24 bytes .
портативный Попробуйте онлайн!IFS=h;set $i;echo ${1:+-}1 # 26 (change IFS) .
портативный Попробуйте онлайн!(IFS=h;set $i;echo ${1:+-}1) # 28 (subshell) .
портативный Попробуйте онлайн!(IFS=h;set $i;echo $(($#*2-3))) # 31 bytes .
портативный Попробуйте онлайн!Примечание: использование
dash
в качестве разумного сравнения портативного тестера оболочки.expr $i : he - 1
работает, считая, сколько символов совпадаютhe
с$i : he
.heads
Матч2
иtails
(нет) .Затем вычитая матч 01
с- 1
.$[30#$i%7-1]
работает путем преобразования строки в целое число. Основание 30 и мод на 7 были выбраны, чтобы получить разницу 2 междуheads
иtails
. Затем вычитание 1 преобразует числа в1
и-1
.Обратите внимание, что a
$[...]
является архаичной формой арифметического выражения,$((...))
действительного только в некоторых оболочках.he=2;echo $[${i%a*}-1]
работает, создавая переменную некоторого значения, а затем используя Арифметическое Расширение, чтобы раскрыть эту переменную (из текстового значения). В${i%a*}
обращенныхheads
кhe
иtails
кt
(что, как переменная, имеет значение 0).IFS=h;set $i;echo ${1:+-}1
работает в два этапа. Установка IFS вh
перерывах некотируемым$i
вset $i
на части разделены по характеруh
,heads
делится на''
и'eads'
, таким образом , установив$1
в нуль.tail
не делится наh
, таким образом, делая$1
равнымtails
. Затем${1:+-}
генерирует a,-
если значение$1
является ненулевым (как вtails
) или ничем (как с нулевым$1
). Этот знак (или ничего) соединяется с1
.(IFS=h;set $i;echo $(($#*2-3)))
работает аналогичным образом, но использует количество частей ($#
), в которые$i
была разбита строка .источник
Python 2, 17 байт
'heads'
меньше't'
, поэтому он оцениваетTrue == 1
и печатает строку после первого символа.'tails'
больше, чем't'
, поэтому он оцениваетFalse == 0
и печатает всю строку.Если мы делаем это из командной строки с неявной печатью, это просто становится:
... для 12 байтов, но добавляет к выводу одинарные кавычки.
источник
QBasic, 11 байт
Это должен быть самый короткий кусок QBasic, который я когда-либо писал.
Объяснение:
Выше приведен довольно сильный QBasic. Как только автоформатер справится с этим, он будет выглядеть так:
Первая строка сравнивает строку
i
с"t"
. Еслиi
есть"heads"
,i > "t"
ложно иc = 0
. Еслиi
есть"tails"
,i > "t"
верно иc = -1
. Да,-1
это значение по умолчанию для логического true в QBasic!Вторая строка отображается
-1
на-1
и0
с1
помощью математического трюка:(-1)^(-1) == 1/(-1) == -1
и0^0
, хотя технически математически не определено, возвращает1
.Этот код требует, чтобы он
i
был явно объявлен как строковая переменная; иначе это должно было бытьi$
. Полная тестовая программа (тестируется на QB64 ):источник
Gaia ,
54 байтаПодобно ответу CJam Денниса , находит индекс
e
во входной строкеСохранен один байт, так как я не знал, что ввод автоматически использовался в качестве аргумента, если не хватает стековых значений.
Как это работает
Попробуйте онлайн!
источник
Баш , 22
Берет 2-ю букву (
e
илиa
) и интерпретирует ее как шестнадцатеричное число (14 или 10), затем делит на 2 и вычитает 6, чтобы получить правильные ответы.Попробуйте онлайн!
источник
echo $[30#$i%7-1]
только 17 байтов. :-)ed ,
272521 байтed
дал мне головную боль. Наконец-то разобрался с помощью@ed1conf
твиттера и немного заглянулunix.se
. Вы не можете просто сопоставить вещи сs/re/newtext/
, вы должны префикс это сg
другимиed
пакетами грустно. Это как сварливая 50-летняя Unix-программа, говорящая «сойди с моего газона».Попробуйте онлайн!
-2 байта, отбрасывая последние
/
s-4 байта благодаря @manatwork (и чей
sed
ответ я плагиат)Старая версия:
g/t/s//- g/\w\+/s//1 wq .
источник
q
, оно само прекратит работу, когда ничего не останется делать. И после них вам нужен только перевод строки: «.» (Или «roblogic»…) не нужен. Попробуйте онлайн!Python, 20 байт
Это возвращает,
False
если это не так, иTrue
если это так. В питонеFalse
и0
есть то же самое, иTrue
и1
есть так же.Так:
источник
Golflua
252018Вероятно, можно было бы сыграть в гольф еще, используя некоторые хитрости, о которых я сейчас не думаю.(см. историю для старой версии). Сохранение 5 символов путем перемещения вводаwrite
и игнорированияif
оператора там. Еще два символа были сохранены, игнорируя необязательные скобкиfind
. Он не проверяет наличие неисправных условий (т. Е. Входных данных, которые не являются головами или хвостами ).Эквивалент Lua будет
источник
Haskell, 18 байт
Каждая строка, начинающаяся с буквы
h
, сопоставляется со1
всеми остальными-1
.источник
Sed: 16 символов
Образец прогона:
источник
ed
решения, но все равно потребовалось 23 байта, потому чтоed
он старый и сварливый!\w
и\+
являются расширениями GNU.Stax , 3 байта
Запустите и отладьте его
источник
Stax , 4 байта
Запустите и отладьте его
Это кодовая точка первого символьного мода 7 минус 5.
источник
PowerShell , 15 байт
Попробуйте онлайн!
Вводит через сплаттинг. Использует
e
противa
ASCII для математикиисточник
постоянный ток , 8 байт
dc не может делать ничего значащего со строками, кроме как читать их и пытаться оценить их. При этом «головы» выводит некоторые предупреждения о невыполненных командах и пустом стеке, которые мы игнорируем, но важно, чтобы стек оставался пустым. "tails" делает почти то же самое с важным исключением, что заключительный "ls" загружает значение из регистра s в стек.
Затем мы используем «z», чтобы получить длину стека, и арифметически, чтобы получить правильные ответы.
Попробуйте онлайн!
источник
Треугольный , 10 байтов
Попробуйте онлайн!
Делит значение ASCII для ввода символов на 7. Вычитает частное из 15. Выполнение останавливается, когда IP заканчивается из пространства программы. Это работает, потому что треугольный может управлять только целочисленным делением. Удобно, чтобы «h» имел значение 104, которое равно 14, когда целое число делится на 7; «t» равно 116, то есть 16, когда целое число делится на 7.
Ungolfed / Пояснение:
Предыдущая версия (14 байт):
Читать символ из ввода; если значение ASCII этого символа, разделенное на 8, содержит остаток, выведите -1, в противном случае выведите 1.
источник
Бочонок ,
8128 байтПопробуйте онлайн!
Объяснение (синтаксически неверно)
источник
^
.Витси , 13 байт
Ну и что, я опаздываю на вечеринку. ¯ \ _ (ツ) _ / ¯
источник