Текст в ДНК гольф
Вызов
Преобразование ввода в вывод ДНК.
Алгоритм
- Преобразование текста в кодовые точки ASCII (например,
codegolf
->[99, 111, 100, 101, 103, 111, 108, 102]
) - Строка кодов ASCII вместе (например
99111100101103111108102
) - Преобразовать в двоичный файл (например
10100111111001101001011010001000011001101011011110000110010111111011000000110
) - Вставьте
0
в конец, чтобы сделать четное количество символов (например101001111110011010010110100010000110011010110111100001100101111110110000001100
) - Заменить
00
наA
,01
сC
,10
сG
и11
наT
(напримерGGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
) - Выход
Тестовые случаи
codegolf > GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
ppcg > GGCTAATTGTCGCACTT
} > TTGG (padding)
Характеристики
- Это код-гольф
- Ваша программа должна принимать пробелы во входных данных.
- Ваша программа должна работать для
codegolf
.
code-golf
string
conversion
NoOneIsHere
источник
источник
}
Был бы ленивый выбор, которым я верюTTGG
.99111100101103111108102
например, он больше, чем uint-64, поэтому некоторые языки могут сталкиваться с большими конверсиями.Ответы:
Желе ,
1513 байтПопробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
CJam,
2423 байтаСпасибо Деннису за то, что он сэкономил 1 байт действительно умным способом :)
Проверьте это здесь.
объяснение
Очень прямая реализация спецификации. Единственный интересный бит - это добавление к четному числу нулей (что на самом деле было идеей Денниса). Вместо того, чтобы обрабатывать цифры в каждой паре в обычном порядке, мы делаем второй бит самым значимым. Это означает, что окончание одним битом идентично добавлению к нему нуля, что означает, что нам вообще не нужно добавлять ноль.
источник
Python 2,
109103 байтаПроверьте это на Ideone .
источник
Рубин, 59 байт
Полная программа. Беги с
-p
флагом.источник
Python 3, 130 байт.
Сохранено 2 байта благодаря vaultah.
Спасено 6 байтов благодаря Кевину Лау, а не Кенни.
Ненавижу, как трудно преобразовать двоичный код в Python.
Тестовые случаи:
источник
''.join
'ACGT'[int(z+y,2)]
вместо этого преобразования непосредственно из двоичного файла , вместо того , чтобы использовать вашу длинную строку и преобразование от основания 10. Кроме того , не зная , сколько разницы это будет сделать , но смотреть на использованиеre.sub
вместо вашего Messy присоединиться трюк?int
. Я посмотрюre.sub
, спасибо за предложение.Рубин, 80 байтов
источник
Mathematica, 108 байт
Принимает строку в качестве входных данных и выводит список баз.
источник
Python 3, 126 байт
источник
Pyth, 25 байт
Попробуй это здесь!
объяснение
Прорываем трюк с отступами от ответа Martins CJam .
источник
05AB1E , 23 байта
Код:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
Ява, 194 байта
Ungolfed
Заметка
int[]
потому что это один байт, сохраненный зановоchar[]
.Выход
источник
MATL , 21 байт
Попробуйте онлайн!
объяснение
источник
Pyth , 23 байта
Попробуйте онлайн!
объяснение
Заимствуя трюк у желе Денниса, ответь .
источник
Groovy, 114 байт
Объяснение:
источник
Юлия 0,4, 77 байт
Эта анонимная функция принимает массив символов в качестве входных данных и возвращает строку.
Попробуйте онлайн!
источник
Python 2.7, 135 байт
Ungolfed:
Выход
источник
g(...)
функция там дважды, поэтому я полагаю, что замена ееjoin
добавит 2 байта?Javascript ES7,
105103 байтаЧасть ES7 является
for(c of s)
частью.Версия ES6,
107105 байтКод без правил
Это моя первая попытка игры в гольф на PPCG, не стесняйтесь поправлять меня, если что-то не так.
Спасибо @AlexA за небольшое улучшение.
источник
f=
, сохранив 2 байта. :)J, 52 байта
Использование:
3 :'''ACGT''{~#._2,\#:".,&''x''":(,&:(":"0))/3&u:y' 'codegolf'
==>GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
источник
Common Lisp (Lispworks), 415 байт
ungolfed:
Использование:
источник
Perl
155148137 + 1 (-p
флаг) = 138 байтПроверьте это на Ideone .
источник
Perl 6, 57 + 1 (
-p
флаг) = 58 байтПошаговое объяснение:
-p
флаг заставляет интерпретатор Perl 6 запускать код построчно, ставить текущую строку$_
и в конце возвращать ее из$_
..ords
- Если до периода ничего не происходит, вызывается метод$_
.ords
Метод возвращает список кодовых точек в строке.[~]
-[]
это оператор сокращения, который хранит свой оператор сокращения в скобках. В данном случае это~
оператор объединения строк. Например,[~] 1, 2, 3
эквивалентно1 ~ 2 ~ 3
.+
преобразует свой аргумент в число, необходимое, потому чтоbase
метод определен только для целых чисел..base(2)
- преобразует целое число в строку в базе 2$_=
- присваивает результат$_
.s:g/..?/{...}/
- это регулярное выражение, заменяющее любой (в:g
глобальном режиме) экземпляр регулярного выражения..?
(один или два символа). Второй аргумент - шаблон замены, который в данном случае в коде (в Perl 6 фигурные скобки в строках и шаблоны замены выполняются как код).$/
- переменная соответствия регулярному выражению.flip
- инвертирует строку. Он неявно преобразует$/
(объект соответствия регулярному выражению) в строку. Это потому, что один символ1
должен быть расширен до10
, в отличие от01
. Из-за этого переворота порядок элементов в массиве имеет G и C в обратном порядке.:2(...)
- разбирает строку base-2 на целое число.<A G C T>
- массив из четырех элементов....[...]
оператор доступа к массиву.Что это значит? Программа получает список всех кодовых точек в строке, объединяет их вместе, преобразует их в базу 2. Затем она заменяет все вхождения двух или одного символа на одну из букв A, G, C, T в зависимости от перевернутого представления числа. в двоичном
источник
Хун ,
148138 байт«abc» - это список атомов. Интерполируйте их в strings (
<a>
) при свертывании по списку, объединяя их в новую строку. Разобрать число с помощью,++dem
чтобы вернуть его в атом.Умножьте число на (битовая длина + 1)% 2, чтобы дополнить его. Используется
++rip
для дизассемблирования каждой двухбайтовой пары атома в список, сопоставления со списком и использования числа в качестве индекса в строке «ACGT».источник