Wejście
Niepusty kodowany ciąg znaków składający się z drukowalnych znaków ASCII (w zakresie 32-126), w którym niektóre brakujące litery zostały zastąpione _
.
Wynik
Dekodowany ciąg o tej samej długości ze wszystkimi literami zapisanymi małymi literami, w tym brakującymi.
W jaki sposób?
Edycja: Jak wspomniano w komentarzach @Deusovi, jest to wariant szyfru Bacona .
- Zbierz wszystkie litery z oryginalnego ciągu i pogrupuj je według 5. Dodatkowe litery, które nie mieszczą się w pełnej grupie 5, są ignorowane.
- Konwertuj każdą grupę na binarną: małe litery = 0 , wielkie litery = 1 . To prowadzi do listy liczb całkowitych.
- Użyj każdej wartości N na tej liście, aby zastąpić każdą
_
w oryginalnym ciągu N-tą literą alfabetu (z indeksowaniem 0), w kolejności pojawiania się.
Przykład: prOGraMMIng PuZZleS & cOde ____
prOGr --> 00110 --> 6 --> 7th letter = 'g'
aMMIn --> 01110 --> 14 --> 15th letter = 'o'
gPuZZ --> 01011 --> 11 --> 12th letter = 'l'
leScO --> 00101 --> 5 --> 6th letter = 'f'
Zastępując brakujące litery i konwertując wszystko z powrotem na małe litery, odsłonięty zostaje oryginalny ciąg:
programming puzzles & code golf
To jest oczekiwany wynik.
Wyjaśnienia i zasady
- Brakujące litery z pewnością pojawią się na końcu łańcucha. Bardziej formalnie: nigdy nie będzie żadnej litery po pierwszej
_
w ciągu wejściowym. Mogą jednak występować inne drukowalne znaki ASCII, takie jak spacje i znaki interpunkcyjne. - Dane wejściowe z pewnością nie zawierają niepotrzebnej dużej litery: wszystkie duże litery to bity ustawione na 1, które są wymagane do odkodowania brakujących liter. Cała reszta jest zapisana małymi literami.
- Gwarantowany ciąg wejściowy. Szczególnie:
- Zawsze będzie zawierać wystarczającą liczbę pełnych grup 5 liter, aby zdekodować podkreślenia.
- Binarnie zakodowane liczby całkowite z pewnością mieszczą się w zakresie [0–25] .
- W
_
łańcuchu wejściowym może nie być wcale , w takim przypadku wystarczy zwrócić dane wejściowe. - To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
Przypadki testowe
Input : hello!
Output: hello!
Input : helLO, worl_!
Output: hello, world!
Input : i aM yoUr faTh__.
Output: i am your father.
Input : prOGraMMIng PuZZleS & cOde ____
Output: programming puzzles & code golf
Input : Can YOu gUesS tHE ENd oF This ____?
Output: can you guess the end of this text?
Input : THe qUICk brown FOx JUMps oVEr the la__ ___.
Output: the quick brown fox jumps over the lazy dog.
Input : RoadS? wHERe we're goinG WE doN't need _____.
Output: roads? where we're going we don't need roads.
Input : thE greatESt Trick thE DeVIl EVer PUllEd wAs CONvInciNg tHe WorLD h_ ____'_ _____.
Output: the greatest trick the devil ever pulled was convincing the world he didn't exist.
Niektóre dodatkowe przypadki testowe:
Input : BInar_
Output: binary
Input : 12 MonKey_
Output: 12 monkeys
Input : hyPerbolIZ__
Output: hyperbolized
Input : {[One Last Test ca__]}
Output: {[one last test case]}
_
łańcucha wejściowego, jest trochę szczególnym przypadkiem.The input is guaranteed not to contain any useless capital letter
w przypadku braku podkreślenia nie będzie też dużej litery.[32-126]
. Dodałem inny przypadek testowy.Odpowiedzi:
05AB1E , 18 bajtów
Kod:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
Wyjaśnienie:
źródło
Python 2 , 113 bajtów
Wypróbuj online!
źródło
Perl 5
-pF -MList::Util=sum
, 75 bajtówWypróbuj online!
Wyjaśnienie:
-pF
wczytuje wiersz danych wejściowych do zmiennej$_
i dzieli na znaki w tablicy@F
.@a=grep!/\W|\d/,@F
ustawia tablicę@a
równą tym członom@F
, które nie spełniają wyrażenia regularnego\W|\d
.\W
oznacza wszystko oprócz liter, cyfr i_
;\d
to liczby. Podobnie\W|\d
jest z literami i_
, i@a
ma wszystkie litery i_
znaki. Skończymy, nigdy nie badając_
postaci@a
. (Należy pamiętać, że działa to tylko dlatego, że wejście jest gwarantowane ASCII.)map{a gt shift@a&&16/2**$_}0..4
robi następujące dla 0 do 4: Przesuwa następny element@a
, skraca go i ocenia, czya
jest asciibetycznie większy niż ten element (tj. czy ten element jest pisany wielkimi literami). Jeśli tak,&&
to nie ulega zwarciu, więc otrzymujemy 16 podzielone przez 2 do mocy wartości wejściowej (od 0 do 4). W przeciwnym razie&&
nastąpi zwarcie i otrzymamy 0.map
zwraca listę pięciu liczbsum
, która dodaje je.a..z
, i to właśnie otrzymujemy(a..z)[…]
.s!_!…!eg
konwertuje każdy_
z$_
kolei na odpowiednią literę.$_=lc
konwertuje$_
na małą wersję i-p
drukuje ją.źródło
J ,
6261 bajtówWypróbuj online!
źródło
Galaretka ,
28 2726 bajtów-1 dzięki Erikowi Outgolfer i dylnan
Niezbyt przyjazne dla galaretki wyzwanie!
Monadyczny link przyjmujący i zwracający listy znaków.
Wypróbuj online!
W jaki sposób?
źródło
Siatkówka ,
9190 bajtówWypróbuj online! Wyjaśnienie:
Przetłumacz małe
a
i duże litery naA
, usuwając wszystko inne.Podziel
Aa
s na grupy po 5.Konwertuj z binarnego na jednorzędowy, traktując
A
jako 1 ia
jako 0. PonieważAa
pierwotnie było 5 s, pozostało 5a
s plus kilkaA
s zależnie od pożądanej pozycji w alfabecie.Zwiększ ostatni
a
zgodnie z liczbą kolejnychA
s.Przygotuj oryginalne wejście.
Zamień dowolne
_
s na kolejną zdekodowaną literę.Usuń wszystkie zapasowe zdekodowane litery.
Wszystko małymi literami.
Retina 0.8.2 , 117 bajtów
Wypróbuj online! Wyjaśnienie:
Zduplikuj dane wejściowe.
Pierwsza kopia ma małe litery.
Przetłumacz małe litery
a
na drugą kopię.Przetłumacz wielkie litery na
A
. Muszą być w drugiej kopii, ponieważ pierwsza kopia była już pisana małymi literami.Usuń wszystko inne w drugiej kopii.
Podziel drugą kopię (teraz tylko
Aa
s) na grupy po 5.Odkoduj litery i wstaw je jak poprzednio.
źródło
APL (Dyalog Unicode) , 46 bajtów SBCS
Anonimowa lambda, zakłada
⎕IO
(indeks pochodzenia)0
.Wypróbuj online!
{
...⋄
...}
funkcji dwóch oświadczenie;⍵
jest argumentem,⋄
oddziela instrukcje⊢
argument (funkcja no-op)'_'=
gdzie równa się podkreśleniu (tj. boolowskiej funkcji odwzorowania)_←
przypisuje tę funkcję do_
A[
… Umieść]@_⍵
następujące znakiA
w pozycjach podkreślenia w argumencie⎕A
wielkimi literami A alfabetA←
przypisuje to doA
819⌶
małych liter ( 819 ≈ BIg , bez żadnego lewego argumentu oznacza, że nie jest duży, tj. Małe litery),A,
dodaje wielkie litery; daje nam to wszystkie litery⍵∩
przecięcia argumentu i to; tylko litery argumentu,A∊⍨
które z nich są członkami wielkich liter; wielkie bity(
...)5⍴
r eshape że na następującą liczbę wierszy i kolumn: pięć_⍵
maską podkreślenia w argumencie+/
suma tego; liczba podkreśleń⍉
transponuj (aby traktować każdy wiersz jako liczbę, a nie pozycję bitową),2⊥
oceniaj wszystko jako819⌶
małe litery base-2źródło
Scala , 189 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
JavaScript (Node.js) ,
125124 bajtówWypróbuj online!
źródło
Galaretka , 26 bajtów
Wypróbuj online!
Inne podejście niż Jonathan Allan. EDYCJA: Tak więc najwyraźniej myślałem o takiej samej redukcji bajtów jak Jonathan Allan, więc nie będzie bolało, gdybym ponownie wspomniał jego imię.
źródło
CJam , 43 bajty
Wypróbuj online!
źródło
Czysty ,
180... 150 bajtówWypróbuj online!
Definiuje funkcję
$ :: [Char] -> [Char]
z@ :: [Char] [Char] -> [Char]
jako pomocnik zastąpić podkreślenia, a? :: [Char] -> [Char]
jako pomocnika do generowania znaków zastępczych.źródło
i<-:""
część? Czy znaki są domyślnie konwertowane na liczby podczas ich sumowania lub dodawania?JavaScript (Node.js) , 100 bajtów
Wypróbuj online!
Dzięki @Arnauld oszczędza 2 bajty.
źródło
/[a-z]/gi
teraz.R ,
153135113 bajtówWypróbuj online!
Wydaje niektóre ostrzeżenia przy użyciu,
matrix
ale nie powinno to wpływać na wynik. Wydaje również ostrzeżenia, ponieważ[<-
przypisanie domyślnie usunie przypisane obce obiekty.40 (!) Bajtów w dół dzięki ulepszeniom JayCe
źródło
,length(L)%/%5
[<-
wyrzucą elementy poza długość indeksów ...intToUtf8
C (gcc) ,
111109101100 bajtówEdycja: Dodano małą literę dla komentarza @ FrownyFrog; dzięki Lynn, Christoph i user5329483 za sugestie!
Wypróbuj online!
źródło
i+=i+(*s<97)
.j
, wprowadzając bit znacznikai
i przepisując drugi dla asfor(i=1;i<32;s++)
. I zrekompensuj dodatkowe 32 w zewnętrznej części. Jako nowicjusz tutaj liczę siedem bajtów zapasowych.for(i=3;i<96;s++)
sprowadza 65 do liczby jednocyfrowej, alias1
.Idź,
219217192210209156 bajtówZaoszczędź 25 bajtów dzięki @Lynn! Zaoszczędź 53 bajty dzięki @ovs!
Musiałem stracić 18 bajtów z powodu błędu w ciągach znaków bez podkreślników :(
Wypróbuj online!
źródło
Stax , 22 bajty
Uruchom i debuguj
Ogólne podejście polega na zastępowaniu wyrażeń regularnych
"_"
za pomocą funkcji zwrotnej, która wycina litery danych wejściowych w celu obliczenia każdego znaku zastępczego.Uruchom ten
źródło
Czerwony , 247 bajtów
Wypróbuj online!
Bardziej czytelny:
źródło
Java 10, 186 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
Ruby ,
107106103 bajtówWypróbuj online!
źródło
Japt, 25 bajtów
Spróbuj
Wyjaśnienie
źródło
Pyth, 36 bajtów
Wypróbuj tutaj
Wyjaśnienie
źródło
Python 3.5 , 296 bajtów
Wypróbuj online
Pierwszy kod golfa :)
(Wiem, że nie jest to małe bajty, po prostu dobrze się bawiłem, tworząc 1-liniowy kod)
Oto wyjaśnienie:
Wprowadzane przez użytkownika
Znajduje indeks pierwszego _ w ciągu i przechowuje go
usuwa ciąg wszystkich znaków innych niż alfa
Dzieli ciąg alfa na tablicę, w której każdy element składa się z 5 znaków
Dawny. [„THeqU”, „ICkbr”, „ownFO”, „xJUMp”, „soVEr”, „thela”]
Następnie konwertuje małe litery na 0 i wielkie litery na 1
Dawny. [„11001”, „11000”, „00011”, „01110”, „00110”, „00000”]
i konwertuje ciąg binarny na liczbę całkowitą, dodaje 65 i konwertuje to na znak
Dawny. [„z”, „y”, „d”, „o”, „g”, „a”]
znajduje wszystkie znaki po pierwszym _ i wypycha je do tablicy z w odpowiednich miejscach (zdefiniowanych powyżej)
Dawny. [„z”, „y”, „”, „d”, „o”, „g”, „.”, „a”]
podziel nasz ciąg na listę znaków
pokrój nasz ciąg od pierwszego _ do końca listy i zastąp go tablicą z. Musiałem także pociąć tablicę z na długość podzielonego łańcucha od pierwszego _ do końca, ponieważ dostałem dodatkowy znak w leniwym psie („a” na końcu powyższych przykładów)
* wydrukuj odpowiedź *
źródło
o.islower()
ielse
, a ja myślę'1'
ifor
. Możesz także zmienićif d!="_"
naif"_"!=d
, ale powyższy komentarz już to robi.Haskell , 165 bajtów
Wypróbuj online! Przykładowe użycie:
g"" "BInar_"
daje"binary"
.źródło
PowerShell , 121 bajtów
Wypróbuj online!
Mniej golfa:
źródło
Perl 5
-p
, 78 bajtówWypróbuj online!
źródło