Tekst do golfa DNA
Wyzwanie
Przekształć dane wejściowe w dane wyjściowe DNA.
Algorytm
- Konwertuj tekst na punkty kodowe ASCII (np.
codegolf
->[99, 111, 100, 101, 103, 111, 108, 102]
) - Połącz razem kody ASCII (np.
99111100101103111108102
) - Konwertuj na binarny (np.
10100111111001101001011010001000011001101011011110000110010111111011000000110
) - Pad
0
na końcu, aby uzyskać parzystą liczbę znaków (np.101001111110011010010110100010000110011010110111100001100101111110110000001100
) - Wymienić
00
zA
,01
zC
,10
zG
, i11
zT
(na przykładGGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
) - Wydajność
Przypadki testowe
codegolf > GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
ppcg > GGCTAATTGTCGCACTT
} > TTGG (padding)
Dane techniczne
- To jest golf golfowy
- Twój program musi akceptować spacje na wejściu.
- Twój program musi działać
codegolf
.
code-golf
string
conversion
Nikogo tu nie ma
źródło
źródło
}
moim zdaniemTTGG
.99111100101103111108102
na przykład jest większy niż uint-64, więc niektóre języki mogą mieć problemy z większymi konwersjami.Odpowiedzi:
Galaretka ,
1513 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
CJam,
2423 bajtyDzięki Dennisowi za zaoszczędzenie 1 bajtu w naprawdę sprytny sposób. :)
Sprawdź to tutaj.
Wyjaśnienie
Bardzo bezpośrednie wdrożenie specyfikacji. Jedynym interesującym bitem jest dopełnianie parzystej liczby zer (co w rzeczywistości było pomysłem Dennisa). Zamiast traktować cyfry w każdej parze w zwykłej kolejności, drugi bit jest najbardziej znaczący. Oznacza to, że kończenie na jednym bicie jest identyczne z dodawaniem do niego zera, co oznacza, że wcale nie musimy dodawać zera.
źródło
Python 2,
109103 bajtyPrzetestuj na Ideone .
źródło
Ruby, 59 bajtów
Pełny program. Uruchom z
-p
flagą.źródło
Python 3, 130 bajtów.
Zaoszczędzono 2 bajty dzięki vaultah.
Zaoszczędził 6 bajtów dzięki Kevinowi Lau - nie Kenny'emu.
Nienawidzę, jak trudno jest przekonwertować na binarny w Pythonie.
Przypadki testowe:
źródło
''.join
'ACGT'[int(z+y,2)]
zamiast tego, konwertuj bezpośrednio z pliku binarnego zamiast używać dłuższego łańcucha i konwertuj z bazy 10. Ponadto, nie wiesz, ile by to zmieniło, ale spójrz na użyciere.sub
zamiast bałaganu w sztuczce łączenia?int
. Zajrzę dore.sub
, dzięki za sugestię.Rubinowy, 80 bajtów
źródło
Mathematica, 108 bajtów
Pobiera ciąg znaków jako dane wejściowe i wyświetla listę zasad.
źródło
Python 3, 126 bajtów
źródło
Pyth, 25 bajtów
Wypróbuj tutaj!
Wyjaśnienie
Zagrzebując sztuczkę padding z odpowiedzi Martins CJam .
źródło
05AB1E , 23 bajty
Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Java, 194 bajty
Nie golfił
Uwaga
int[]
ponieważ zapisano jeden bajtchar[]
.Wydajność
źródło
MATL , 21 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Pyth , 23 bajty
Wypróbuj online!
Wyjaśnienie
Pożyczenie sztuczki od Jelly's Jelly odpowiedź .
źródło
Groovy, 114 bajtów
Wyjaśnienie:
źródło
Julia 0.4, 77 bajtów
Ta anonimowa funkcja pobiera tablicę znaków jako dane wejściowe i zwraca ciąg znaków.
Wypróbuj online!
źródło
Python 2.7, 135 bajtów
Nie golfowany:
Wydajność
źródło
g(...)
funkcję dwa razy, więc uważam, że zastąpienie jejjoin
dodaniem 2 bajtów?JavaScript ES7,
105103 bajtówCzęść ES7 jest
for(c of s)
częścią.Wersja ES6,
107105 bajtówNieskluczony kod
To moja pierwsza gra w golfa na PPCG, nie krępuj się i popraw mnie, jeśli coś jest nie tak.
Dzięki @AlexA za drobną poprawę.
źródło
f=
, oszczędzając 2 bajty. :)J, 52 bajty
Zastosowanie:
3 :'''ACGT''{~#._2,\#:".,&''x''":(,&:(":"0))/3&u:y' 'codegolf'
==>GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
źródło
Common Lisp (Lispworks), 415 bajtów
bez golfa:
Stosowanie:
źródło
Perl,
155148137 + 1 (-p
flaga) = 138 bajtówPrzetestuj na Ideone .
źródło
Perl 6, 57 + 1 (
-p
flaga) = 58 bajtówWyjaśnienie krok po kroku:
-p
Flaga powoduje, że interpreter Perla 6 uruchamia kod wiersz po wierszu, umieszcza bieżącą linię$_
, a na końcu umieszcza ją z powrotem$_
..ords
- Jeśli przed kropką nie ma nic, wywoływana jest metoda$_
.ords
Metoda zwraca listę punktów kodowych w ciągu.[~]
-[]
jest operatorem redukcji, który przechowuje swojego operatora redukcji między nawiasami. W tym przypadku~
jest to operator konkatenacji łańcuchów. Na przykład[~] 1, 2, 3
jest równoważne z1 ~ 2 ~ 3
.+
konwertuje argument na liczbę, potrzebną, ponieważbase
metoda jest zdefiniowana tylko dla liczb całkowitych..base(2)
- konwertuje liczbę całkowitą na ciąg znaków w bazie 2$_=
- przypisuje wynik do$_
.s:g/..?/{...}/
- jest to wyrażenie regularne zastępujące dowolne wystąpienie wyrażenia regularnego (w:g
trybie globalnym)..?
(jeden lub dwa znaki). Drugi argument to wzorzec zastępujący, który w tym przypadku w kodzie (w Perlu 6, nawiasy klamrowe w łańcuchach i wzorce zastępcze są wykonywane jako kod).$/
- zmienna dopasowania wyrażenia regularnego.flip
- odwraca ciąg. Niejawnie konwertuje$/
(obiekt dopasowania wyrażenia regularnego) na ciąg. Wynika to z faktu, że jeden znak1
należy rozwinąć do10
, w przeciwieństwie do01
. Z powodu tego odwrócenia kolejność elementów w tablicy odwróciła G i C.:2(...)
- analizuje ciąg base-2 na liczbę całkowitą.<A G C T>
- tablica czterech elementów....[...]
- operator dostępu do tablicy.Co to znaczy? Program pobiera listę wszystkich współrzędnych kodowych w ciągu, łączy je ze sobą, konwertuje na bazę 2. Następnie zastępuje wszystkie wystąpienia dwóch lub jednego znaku na jedną z liter A, G, C, T w zależności od odwróconej reprezentacji liczby binarnie.
źródło
Hoon ,
148138 bajtów„abc” to lista atomów. Interpoluj je w łańcuchy (
<a>
), jednocześnie składając listę, łącząc je w nowy łańcuch. Analizuj liczbę za pomocą,++dem
aby uzyskać z powrotem atom.Pomnóż liczbę przez (długość bitowa + 1)% 2, aby ją uzupełnić. Służy
++rip
do rozłożenia co dwie pary bajtów atomu na listę, zamapowania na liście i użycia liczby jako indeksu w ciągu „ACGT”.źródło