your shift key is broken. wheNever you type two lines, the cApitaL
LetteRs in them get swappeD. you must write a program to fiX THIS!
Opis
Wejście jest dwa ciągi, s1
a s2
, równej długości. Każdy z nich będzie zawierał tylko ASCII do wydrukowania i będzie miał co najmniej jeden znak długości. Możesz wprowadzić je jako dwa ciągi, tablicę dwóch ciągów lub pojedynczy ciąg z s1
i s2
oddzielony tabulatorem lub znakiem nowej linii.
Dane wyjściowe są następujące:
Dla każdej postaci
c
ws1
:Jeśli znak nie jest literą, wyślij go bez zmian.
W przeciwnym razie, jeśli
c
jest to litera:Znajdź pasujący znak (ten o tym samym indeksie) w
s2
.Jeśli jest to wielka litera, produkcja jest
c
pisana wielkimi literami.Jeśli jest to mała litera,
c
wypisz małymi literami.W przeciwnym razie dane wyjściowe
c
pozostają niezmienione.
Następnie zrób to samo, z wyjątkiem przełączania
s1
is2
przełączania.
Zasadniczo wszystkie litery, w s1
których pasujący znak s2
jest wielką, powinny być pisane wielkimi literami, a wszystkie litery s1
z małą literą o tym samym indeksie w s2
powinny stać się małe (i odwrotnie).
Przypadki testowe
Wkład:
ABCDEfghijKlMnOpqrstuvwxyz
aaaaaaaaaaaaaaaa----------
Wydajność:
abcdefghijklmnopqrstuvwxyz
AAAAAaaaaaAaAaAa----------
Wkład:
PRogrammiNG puzZLes & CODe golf
SdlkhkfaladlKsdlalksdg7ldklDgsl
Wydajność:
Programming Puzzles & Code Golf
SDlkhkfalADlksdLAlksdg7LDkldgsl
Wkład:
AAAbbb111
Cc2Dd3Ee4
Wydajność:
AaABbb111
CC2dd3Ee4
Odpowiedzi:
Pyth,
1918 bajtówDefiniuje funkcję y, która akceptuje i zwraca listę ciągów znaków.
Zweryfikuj wszystkie przypadki testowe jednocześnie w Pyth Compiler / Executor .
Dzięki @Jakube za grę w golfa z 1 bajtu.
Jak to działa
źródło
CJam, 25 bajtów
Jest to anonimowa funkcja, która wyrzuca tablicę ciągów ze stosu i pozostawia jeden w zamian.
W obsługiwanych przeglądarkach możesz zweryfikować wszystkie przypadki testowe jednocześnie w interpretera CJam .
Przypadki testowe
Kod
Wkład
Wydajność
Jak to działa
źródło
C, 126 bajtów
To moja pierwsza w historii gra w golfa kodowego. Daj mi znać, jeśli zrobiłem coś złego.
Korzystam z operacji bitowych do przełączania
Gra w golfa:
Nie golfowany:
edycja: zastąpiono && *
źródło
SQL (PostGreSQL), 427 bajtów
Pomimo tego, że jest ogromny, okazało się, że jest nieco mniejszy niż się spodziewałem. Nie byłem całkiem pewien, czy będę w stanie to zrobić szczerze. Podejrzewam, że jest jeszcze wiele do zrobienia :)
Sformatowane i skomentowane
Testowe uruchomienie
źródło
Julia, 140 bajtów
Tworzy to funkcję, która akceptuje dwa łańcuchy i zwraca krotkę łańcuchów. Nie dzieje się tu nic szczególnie sprytnego; po prostu definiujemy funkcję wewnętrzną, która bezpośrednio implementuje algorytm w specyfikacji i wywołujemy go dwukrotnie.
Nie golfowany:
źródło
JavaScript ES6,
128108 bajtówJavaScript
toUpperCase()
itoLowerCase()
zajmują dużo bajtów, aleString.fromCharCode()
jest jeszcze dłuższyźródło
s2
nie jest literą, a odpowiadający mu znaks1
jest pisany wielkimi literami. W tym przypadku,c
ws1
musi być zwrócony bez zmian.Mathematica,
173169155 bajtówJest to funkcja pobierająca tablicę dwóch ciągów, np.
{"Foo","bAR"}
I wysyłająca tablicę dwóch ciągów. Un-przestrzennie ściskając go, przepisywanie schematf@x
jakf[x]
wszędzie wydaje się, rozszerzając skróty notacją (f=0>1
akaFalse
,t=!f
akaTrue
,c=Characters
iu=ToUpperCaseQ
), i un-zastąpienie UpperCaseQ [#] z#==u@#
(postać ta jest równa jego wersję duże litery), to jest:Interfejs: trailing
&
sprawia, że jest to funkcja. Jego argument jest wstawiany jako „#” w obu przypadkach/@ #
. Na przykładf=0>1; ... & [{"AAAbbb111", "Cc2Dd3Ee4"}]
produkuje dane wyjściowe{AaABbb111,CC2dd3Ee4}
.Przetwarzanie: Powiedziane zwykle na zewnątrz w celu:
MapThread[...]
to lista dwóch list znaków. StringJoin jest stosowany do każdej z tych dwóch list znaków, aby utworzyć listę dwóch ciągów, wynik.MapThread[#[#2]&, ... , 2]
działa na tablicę dwóch list elementów 2 na n. Pierwsza lista to tablica funkcji 2 na n. Druga lista to tablica znaków 2 na nCharacters /@ #
, lista znaków w dwóch ciągach wejściowych. Działa na głębokości 2, tj. Na funkcjach i poszczególnych znakach.Reverse[...]
zamienia dwie podlisty funkcji, dzięki czemu MapThread zastosuje funkcje drugiego ciągu do pierwszego ciągu i odwrotnie.{ ... } &
to anonimowa funkcja stosowana do każdego z dwóch ciągów wejściowych.{LetterQ[#], UpperCaseQ[#]} & /@ Characters[#]
dzieli ciąg na listę znaków, a następnie zastępuje każdy znak dwiema listami elementów. Na tych dwóch listach elementów pierwszy element maTrue
postać, jeśli znak jest literą, a wFalse
przeciwnym razie drugi element wskazuje, czy znak jest pisany wielkimi literami.UpperCaseQ[]
nie może zwrócić prawdy, jeśli nie otrzyma listu./. {{False, _} -> (# &), {True, True} -> ToUpperCase, {True, False} -> ToLowerCase}
zastępuje te dwie listy elementów funkcjami. (Rozwinięcie skrótówt
if
występuje przed próbą dopasowania). Jeśli lista dwóch elementów maFalse
swój pierwszy element, jest ona zastępowana funkcją(# &)
, funkcją tożsamości. (Nawiasy są konieczne, w przeciwnym razie strzałka wiąże się ściślej niż znak ampersand). W przeciwnym razie lista dwóch elementów zaczyna się odTrue
, znak był literą, a my wyprowadzamy funkcjeToUpperCase
iToLowerCase
odpowiadamy ich wielkości. (Sprawdzanie tego ostatniego nieFalse
jest konieczne, w rzeczywistości{_,_}->ToLowerCase
zadziałałoby, wyłapując wszystko, co jeszcze nie zostało wymienione, ale nie byłoby to krótsze i bardziej niejasne).Jedynym wyzwaniem było znalezienie zwięzłego sposobu spakowania dwuwymiarowej tablicy funkcji do tablicy argumentów.
Edycja: Podziękowania dla @Martin Büttner za wyłapanie ukośnych odwrotnych ukośników, skrótów
1>0
i1<0
skrótów, oraz pomoc w liczeniu długości w bajtach, a nie znakach (cokolwiek to jest :-))Edit2: Dalsze podziękowania dla @Martin Büttner za zwrócenie uwagi na to, że zanieczyszczenie globalnej przestrzeni nazw jest akceptowalnym golfem, przypomnienie mi jednej aplikacji funkcji znakowej i zasugerowanie zastąpienia dwóch funkcji wielkimi literami skrótem dla jednej i używanie jednej do emulacji drugiej (zapisywanie cztery znaki). (Myślę, że już to zrobił. :-))
źródło
f@g
zamiastf[g]
(w całym kodzie). Jestem również pewien, że nie potrzebujesz bloku. Po prostu zrób(f=0>1;t=!f;c=Characters;StringJoin/@...)&
. To zanieczyszcza globalną przestrzeń nazw, ale nie przeszkadza nam to podczas gry w golfa. Ponadto nie policzyłem, ale możesz być w stanie zaoszczędzić bajty, przechowującToUpperCase
w zmiennej (u
powiedzmy) i zastępującUpperCaseQ@#
ją#==u@#
.Python 3, 131 bajtów
Funkcja zwraca ciągi w krotce
źródło
Erlang, 157 bajtów
Zipuje dwa ciągi (właściwie listy) na listę krotek składającą się z dwóch znaków i mapuje każdy znak na odpowiedni przypadek, korzystając ze zrozumienia listy.
źródło
Python 2, 101 bajtów
Anonimowa funkcja, która pobiera dwa ciągi i zwraca ciągi wyjściowe z listy. Oznacziłem to jako Python 2, ponieważ Python 3 nie pozwala
I,I[::-1]
siedzieć samemu na końcu w ten sposób.źródło
Python, 126 bajtów
Funkcja
f
zwraca ciągi w krotceźródło
C, 181 bajtów
Miałem problem ze skracaniem standardowych nazw bibliotek w wartościowy sposób (# ich zdefiniowanie wymaga narzutu 11 znaków). Wykorzystuje jako argumenty główną rekurencję i zmienne globalne xiy.
main (<non-zero>, argv) = wywołanie main (0, {argv [1], argv [2]}), następnie wydrukowanie nowej linii, a następnie wywołanie main (0, {argv [2], argv [1]})
main (0, {x, y}) = jeśli x jest końcem łańcucha, zwraca 0, w przeciwnym razie wypisz poprawną wielkość pierwszego znaku x i wywołaj main (0, {x + 1, y + 1}).
Uruchom z dwoma ciągami jako argumentami.
źródło
C -
164153 bajtów - GCCgcc prog.c
./a.out AfdgF a2dfsd
Zaktualizuje się, jeśli uda mi się obniżyć wc -c. Właściwie działa bardzo dobrze
źródło
F #, 211 znaków
może być lepiej ...
źródło
Matlab, 140
Nie golfowany:
Przykład:
źródło
C, 164 bajty
Prawie implementacja algorytmu opisanego w problemie. Pobiera 2 łańcuchy jako parametry wejściowe.
Nie golfowany:
źródło
Ruby, 102
Usuwa oryginalne ciągi znaków, paruje litery w tablicach. Jeśli są albo niższe / cap lub cap / niższe, zamień na obu. Następnie przetransportuj tablice z powrotem do naszej uporządkowanej tablicy.
Wymaga to wprowadzenia nowego wiersza w danych wejściowych.
źródło
Perl 5.10+,
10199 bajtów96 bajtów + 3 bajty dla flag wiersza poleceń
p00
. Pobiera na wejściu pojedynczy ciąg rozdzielany znakiem nowej linii:Lub możesz wprowadzić dane wejściowe w STDIN:
Zepsuty:
źródło
Pierwsza próba w Scali, 138 znaków
f jest funkcją, która pobiera dwa ciągi wejściowe i wykonuje zadanie, używając funkcji lokalnej, użytej dwa razy, do zmiany wielkości liter ciągów.
Ten sam kod, z wcięciami i tylko trochę bardziej czytelnymi nazwami:
źródło
Galaretka , 13 bajtów
Monadyczny link przyjmujący i zwracający listy dwóch „ciągów” (list znaków w galarecie).
Wypróbuj online!
źródło
Python 2 , 97 bajtów
Wypróbuj online!
źródło
Tcl , 194 bajty
Wypróbuj online!
źródło
Haskell ,
10991 bajtówDzięki @Laikoni za 16 bajtów!
Wypróbuj online!
źródło