Недавно вы приобрели новый телефон, но вам не нравится, как он вибрирует, вы решили создать свои собственные шаблоны вибрации. Итак, вы написали программу, в которой вы использовали ключевые слова long
, short
иpause
чтобы ваш телефон вибрировал в соответствии с этими ключевыми словами.
задача
Создайте небольшую программу , которая принимает строку long
, short
и pause
и выводит другую строку , представляющую фонетический звук телефона вибрационного;Rrrr - Rr
long
звуки есть Rrrr
short
звуки Rr
(Корпус имеет значение)
pause
это тире -
все звуки ограничены тире с окружающими пространствами' - '
Тестовые случаи
вход: long long short long short
выход:Rrrr - Rrrr - Rr - Rrrr - Rr
вход: long long long short short short
выход:Rrrr - Rrrr - Rrrr - Rr - Rr - Rr
вход: short short short pause short short short
выход:Rr - Rr - Rr - - - Rr - Rr - Rr
вход: long short short long long pause short short
выход:Rrrr - Rr - Rr - Rrrr - Rrrr - - - Rr - Rr
Это вопрос по коду-гольфу, поэтому ответы будут оцениваться в байтах, при этом выигрывает наименьшее количество байтов.
-
? Это так в вашем примере, но нигде не указано.Ответы:
Пайк ,
2220 байтПопробуй это здесь!
Суть этого ответа - превращение
["long", "short", "pause"]
в[4, 2, 0]
. Он получает кодовую точку первой буквы каждого слова и получаетAND
его с 6. По счастливой случайности он преобразуется в значения, которые мы ищем. (Я искал несколько других более длительных решений, прежде чем нашел это). Как только это будет сделано, мы можем далее преобразовать этот список целых чисел["RRRR", "RR", ""]
, умножив наше int на,"R"
а затем превратившись в,["RRRR", "RR", "-"]
и, наконец, заголовок, получая его["Rrrr", "Rr", "-"]
. Затем мы присоединяемся к полученному списку" - "
источник
j" - "m|*\M.&Chd6\-c
\xef
и\xa6
есть.o
и.&
соответственно. Это обратно совместимое изменение, при котором, если установлен старший бит, он запускает его, как старые 2-байтовые команды. Я пишу это таким образом, чтобы сделать его более легким для читателя, и поскольку Pyke технически больше не использует кодовую страницу, и я не хочу вставлять случайные байты, которые не работаютJavaScript,
7063 байта2 байта сохранены благодаря Люку
Попробуйте онлайн!
источник
[]
с!Haskell ,
716659 байтПопробуйте онлайн!
Ах да,
=<<
это concatMap.Воспользуется тем, что
"long"
и у"short"
обоих есть письмоo
.источник
f=
(>>=(\case 'o'->"Rr";'n'->"rr";'p'->"-";' '->" - ";_->""))
JavaScript (ES6),
6559 байтисточник
05AB1E ,
33272521 байтПопробуйте онлайн!
объяснение
Сохранено 3 байта с помощью
AND 6
трюка из ответа Pyke мутной рыбыисточник
Python 2 ,
766964 байтаПопробуйте онлайн!
Заместители:
Python 2 ,
7669 байтПопробуйте онлайн!
Python 2 , 69 байт
Попробуйте онлайн!
источник
Mathematica, 81 байт
Попробуйте онлайн!
источник
Сетчатка ,
3129 байт1 байт сохранен благодаря Dom Hastings
1 байт сохранен благодаря Neil
Попробуйте онлайн!
Это другой подход, чем ответ @ DomHastings .
источник
Perl 5 , 39 байт
37 байт код + 2 для
-pa
.Попробуйте онлайн!
источник
R 77 байт
Принимает ввод через STDIN, проверяет, совпадает ли ввод
long
,short
илиpause
меняет местами совпаденияRrrr
,Rr
или-
соответственно.Затем он печатается с
-
дополнением пробелами в качестве разделителя, соответствующего желаемому результату.источник
scan(,'') %in% c('long','short','pause')
a %in% b
проверяет наличие записей вa
, вb
то время какmatch(a, b)
возвращает фактические индексы совпадений. Поскольку мы можем предположить, что ввод действителен, использование%in%
просто вернет векторTRUE
s.[
, он интерпретируется как[which(bool) == TRUE]
, что в вашем примере будет[c(1,2,3)]
, что, в свою очередь, даст правильный результат.sep=' - '
него можно использоватьs=' - '
на 2 байта меньшеRöda ,
735747464044 байтаПопробуйте онлайн!
+4 байта из-за изменения правила (необходимо использовать
Rrrr
вместо любого 4-буквенного варианта).Предыдущий код:
источник
Mmm
иMm
на 1 байт короче.C (gcc) ,
937776 байтов-2 байта благодаря Scepheo!
-1 байт благодаря Cyoce!
Принимает ** завершенный ** символ или эквивалент в качестве ввода.
Попробуйте онлайн!
Пояснения:
источник
a++,*a
в ,*++a
чтобы сохранить два байта, и воспользоваться смутным определением «звука» , чтобы использовать*a
вместо ,"Rrrr"
чтобы сохранить еще четыре байта.R , 72 байта
Принимает ввод из стандартного ввода, печатает в стандартный вывод.
Попробуйте онлайн!
источник
Пакетная, 88 байтов
Принимает участие в STDIN. К сожалению, издержки цикла стоят 26 байтов, так что это просто скучные замены.
источник
@
сMmmm
иMm
наRrrr
иRr
, было бы неплохо обновить ваш ответ c:Сетчатка , 31 байт
-1 байт благодаря @ fergusq !
Попробуйте онлайн!
источник
PHP, 113 байт
Попробуйте онлайн!
Первая попытка кода гольф, так что, вероятно, много оптимизаций!
источник
Vim (52 байта)
:s/long/Rrrr/ge|s/short/Rr/ge|s/pause/-/ge|s/ / - /g
войтиВозможно, можно сделать короче ...
источник
e
флаг в концеs/[^ -]/r/
, начинайте с первого пробела после каждого пробела, обрезайте четыре-r на два-r) вышел дольше.Excel, 100 байт
В соответствии с примерами, ввод
SPACE
отдельная строка, как и output.В самом вопросе не упоминается
SPACE
требование, предусматривающее несколько более короткое 97-байтовое решение:источник
AutoIt , 145 байт
(AutoIt действительно плохой выбор для кода гольф, старался изо всех сил, чтобы сделать его как можно меньше)
источник
Алиса , 37 байт
Попробуйте онлайн!
объяснение
Эта программа делает следующие замены:
l
,h
→R
o
,n
,g
→r
p
→-
источник
Sed, 50 байтов
Принимает данные от
stdin
, печатает вstdout
Изменить - сохранено 2 байта
Sed, 40 байт
Копирование идеи из ответа Нитродона
Изменить: сохранил еще 2 байта
источник
Python 2 , 69 байт
Попробуйте онлайн!
Порт моего Pyke ответа
источник
Paradoc (v0.2.10), 21 байт (CP-1252)
Попробуйте онлайн!
Принимает строку в стеке и приводит к строке в стеке. Prepend
i
превратиться в полноценную программу, которая читает из STDIN.Использует
&6
как ответ Pyke и всех остальных, но соединяет токены немного по-другому, добавляя"-"
токен после каждого шума, удаляя последний, а затем соединяя эти токены пробелами. Кажется, чтобы сохранить байт за присоединение" - "
.Объяснение:
v0.2.11 будет поддерживать Shaving еще два байта, заменив
\°
сx
и"-"
с'-
.источник
SOGL V0.12 , 28 байт
Попробуй здесь!
Забавный факт: если бы он был разрешен с разделителем
-
или-
это было бы на байт корочеисточник
Рубин , 67 байт
Это JavaScript-решение Johan Karlsson, портированное на Ruby. Если вам нравится этот ответ, вы должны проголосовать за ответ Йохана.
Основная идея состоит в том, чтобы сравнить строки слов
'short'
и т. Д. С одним символом, чтобы различать слова.Или в алфавитном порядке:
Попробуйте онлайн!
источник
Рубин , 78 байт
Единственные важные части ввода являются
p
,o
,g
и пространство ... игнорировать все остальное.short
становитсяo
long
становитсяog
pause
становитсяp
Попробуйте онлайн!
источник
V , 32 байта
Попробуйте онлайн!
источник
Python 3 , 66 байт
Попробуйте онлайн!
источник