Biorąc pod uwagę dwa ciągi liter, przenieś wzór wielkich liter każdego łańcucha na drugi. Wygrywa najmniej bajtów.
Input: CodeGolf xxPPCGxx
Output: coDEGOlf XxppCgxx
- Oba ciągi będą jednakowej długości i niepuste, będą zawierać tylko litery
a..z
iA..Z
. - Możesz wyprowadzić dwa wynikowe ciągi w dowolnej kolejności względem danych wejściowych.
- Możesz reprezentować parę ciągów jako jeden ciąg z nieliterowym separatorem jednoznakowym dla danych wejściowych i / lub wyjściowych.
- Możesz reprezentować ciąg jako listę znaków lub ciągi jednoznakowe, ale nie jako sekwencję wartości punktów kodowych, chyba że są to po prostu ciągi w twoim języku.
- Twoje dane wejściowe i wyjściowe mogą reprezentować ciągi inaczej.
Przypadki testowe:
CodeGolf xxPPCGxx -> coDEGOlf XxppCgxx
lower UPPER -> LOWER upper
MiXeD lower -> mixed LoWeR
A A -> A A
ABcd EfGh -> AbCd EFgh
array[i++%n]+=...;
?array[t=i++%n]=array[t]+...;
działa w porządku; iarray[i%n]+=...;i++;
działa również dobrze, ale używaniei++
lub++i
z modulo i+=
dołączanie do wiersza w tablicy nie działa. Tutaj TIO Java 10 jako przykład, aby zobaczyć problem. Czy to błąd (lub funkcja: S) w JDK Java 10 lub w kompilatorze Java 10 TIO?String
navar
.C (gcc) ,
86585553 bajtówWypróbuj online!
źródło
f(S,Z)char*S,*Z;{for(int d;d=(*Z^*S)&32,*Z++^=d;)*S++^=d;}
c(a,s,e)char*a,*s;{for(;*s++^=e=(*s^*a)&32;)*a++^=e;}
(53 bajty)Galareta , 9 bajtów
Wypróbuj online!
Jak to działa
źródło
APL (Dyalog Classic) ,
1312 bajtówWypróbuj online!
wejście i wyjście jest macierzą znaków 2 × N.
⎕a
jest wielkim alfabetem angielskim'ABC...Z'
∊∘⎕a
zwraca macierz logiczną wskazującą, które litery na wejściu są dużymi literami819⌶
konwertuje prawy argument na wielkie lub małe litery w zależności od logicznego lewego argumentu („819” to leetspeak dla „BIG”)819⌶¨⍨
robi to dla każdego¨
znaku ( ), zamieniając (⍨
) argumenty⊖
oznacza odwrócenie w pionie; jeden⊖
działa jako lewy argument do819⌶
drugiego, a drugi jest działaniem końcowymźródło
"819" is leetspeak for "BIG"
... Poważnie? To jest prawdziwe wytłumaczenie, dlaczego jest to 819? 0_oPyth , 10 bajtów
Wypróbuj tutaj!
Wyjaśnienie i zgrabne sztuczki Pythona
rVV_mmrIk1
- Pełny program. Dane wejściowe są pobierane ze STDIN jako lista dwóch ciągów, a dane wyjściowe są zapisywane do STDOUT jako lista dwóch list znaków.mm
- Dla każdego znaku w każdym z ciągów:Ik
- Sprawdź, czy jest niezmienny w ...r...1
- ... Konwersja na wielkie litery. Wydajność Prawda dla wielkich liter i Fałsz dla małych._
- Odwróć tę listę.VV
- I podwójnie wektoryzuj następującą funkcję na dwóch listach:r
- Konwertuj na wielkie litery, jeśli wartość toTrue
(aka1
), w przeciwnym razie konwertuj na małe litery.To przesłanie narusza fakt, że
r0
ir1
są funkcjami małych i wielkich liter w Pyth, i używamy wartości prawdy (wartości uzyskane przez sprawdzenie, czy każdy znak jest pisany wielkimi literami, odwrócony), uzyskującTrue
wielkie iFalse
małe litery. Fakt, że booleany są podklasami liczb całkowitych w Pythonie, jest bardzo przydatny w podejściu stosowanym w tej odpowiedzi. Podejście do portowania Dennisa i Jonathana Jelly zaowocowało ponad 18 bajtami, więc jestem całkiem zadowolony z zastosowanych tutaj sztuczek specyficznych dla Pytha.źródło
MATL , 11 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Haskell , 78 bajtów
Wypróbuj online!
źródło
isUpper x
może byćx<'a'
.J ,
36 3127 bajtów-9 bajtów dzięki FrownyFrog!
Wypróbuj online!
Poprzednie rozwiązanie to:
J ,
3631 bajtów-5 bajtów dzięki FrownyFrog!
Wypróbuj online!
Jak to działa:
źródło
[:
Może wynosić 0, a(22 b.)
może byćXOR
.&.(3&u:)
oszczędza 1 bajt."
i$
? Dzięki!,:
, po lewej stronie znajdują się 2 rzędy. Potrzebujemy,"(1)
ale"$
też działa, ponieważ to oznacza"1 _
.$ b.0
daje rangę $ (monadyczna, dyadyczna lewa, dyadyczna prawa).R ,
118 94 7572 bajtyWypróbuj online!
Musi być dużo bardziej golfowy sposób.-43 bajty dzięki Giuseppe, który wskazał mi rozwiązanie MATL autorstwa Luisa Mendo. Łącze TIO zawiera rozwiązanie funkcyjne dla tej samej liczby bajtów.Premia: Wyjście to nazwany wektor, którego nazwy są oryginalnymi ciągami wejściowymi!
źródło
a<-
ponieważ nie używasza
nigdzie indziej.kod maszynowy x86-64, 14 bajtów
Wywoływany z C (konwencja wywoływania SysV x86-64) z tym prototypem:
Wersja o jawnej długości z długością w
rcx
ma ten sam rozmiar.void casexchg(char *rdi, char *rsi, int dummy, size_t len);
Używa tego samego algo wymiany bitów, co odpowiedzi C i Java: Jeśli obie litery są takie same, żadna nie musi się zmienić. Jeśli są w przeciwnym przypadku, oboje muszą się zmienić.
Użyj XOR, aby różnicować bit wielkości dwóch ciągów.
mask = (a XOR b) AND 0x20
wynosi 0 dla tego samego lub 0x20 dla różnicy.a ^= mask; b ^= mask
caseflip obie litery, jeśli były przeciwne. (Ponieważ kody liter ASCII dla górnej i dolnej różnią się tylko bitem 5).Lista NASM (od
nasm -felf64 -l/dev/stdout
). Użyj,cut -b 26- <casexchg.lst >casexchg.lst
aby zmienić to z powrotem w coś, co możesz złożyć.Wolna
loop
instrukcja ma również 2 bajty, tak samo jak krótkajcc
.scasb
jest wciąż najlepszym sposobem na zwiększenierdi
instrukcji jednobajtowej. Chyba moglibyśmyxor al, [rdi]
/stosb
. Byłby to ten sam rozmiar, ale prawdopodobnie szybszy dlaloop
przypadku (pamięć src + sklep jest tańsza niż pamięć dst + przeładowanie). I nadal ustawiłby ZF odpowiednio dla przypadku o niejawnej długości!Wypróbuj online! z _start, który wywołuje go na argv [1], argv [2] i używa sys_write na wyniku
źródło
k , 14 bajtów
Wypróbuj online! Wejście / wyjście to lista dwóch ciągów.
źródło
Python 3 , 83 bajty
Wypróbuj online!
-3 bajty dzięki Mr. Xcoder
-3 bajty dzięki Chas Brown
źródło
Haskell , 78 bajtów
Wypróbuj online!
źródło
QBasic, 133 bajty
Pobiera dwa ciągi rozdzielone przecinkami i wyświetla wyniki rozdzielone znakiem nowej linii. Wykorzystuje algorytm kręcący bity z odpowiedzi Jelly'ego na Jelly . Poza tym główną sztuczką golfa jest to, że pierwszy ciąg wyniku jest drukowany bezpośrednio, po jednym znaku na raz, co jest nieco krótsze niż zapisywanie obu ciągów wyników w zmiennych i drukowanie ich poza pętlą.
źródło
JavaScript,
777473 bajtówPokaż fragment kodu
Pobiera tablicę char znaków, generuje tablicę char znaków.
-1 bajt ( @Arnauld ):
c>'Z'
→c>{}
źródło
c>{}
.Siatkówka , 75 bajtów
Wypróbuj online! Objaśnienie: Znaki nowej linii są używane jako znaczniki do ustalenia, ile łańcucha zostało przetworzone. Wyrażenie regularne próbuje dopasować do wielkich liter lub zawieść, że dowolne znaki. Jeśli dopasowana jest wielka litera, wówczas drugi znak jest pisany wielkimi literami, w przeciwnym razie jest pisany małymi literami i odwrotnie, podczas gdy nowe linie są przenoszone do następnego znaku.
źródło
Python 3,
7675 bytesTry it online!
Outputs the result as one string with a single-character separator.
Thx to Jonathon Allan for 1 byte.
źródło
(y>'Z')*32
->ord(y)&32
Assembly (nasm, x64, Linux), 25 bytes (123 bytes source)
Hex bytes:
The function entry point is at
a
, with the strings passed in usingRDI
andRSI
.Try it online!
źródło
and al,32
is only 2 bytes, using the special AL,imm8 encoding that most ALU instructions have. You could require the string length in RCX and useloop
. I was going to say you shouldtest ah,ah
because that's more efficient thanor
while being the same length, but it's longer in asm source so the crusty old idiom actually has merit for asm-source code golfing :PGalaretka , 13 bajtów
Wypróbuj online!
Również 13:
=ŒuṚ×32ạŒlO$Ọ
(lub=ŒuṚæ«5ạŒlO$Ọ
)źródło
Charcoal, 17 bytes
Try it online! Link is to verbose version of code. Takes input as an array of two strings. Explanation:
źródło
F#, 120 bytes
Bugger.
Try it online!
The function
g
takes the two strings as parameters.Seq.fold2
applies a function with an accumulator (a
) to each element (x
andy
) in the strings. Initiallya
is an empty string, and it adds the converted character to it in each iteration.b
is the main function. It first convertsf
with respect tos
, and then convertss
with respect tof
. It then returns a tuple with both values.źródło
Prolog (SWI), 121 bytes
Try it online!
źródło
Ruby,
7469 bytesTry it online!
Input and output are arrays of chars, so the footer does back and forth transformations from strings.
I'm not yet sure whether this is a good approach to the problem, but this challenge definitely looks like a nice use scenario for
swapcase
method.źródło
PHP 4.1.2, 40 bytes
Replace the pair of quotation marks with byte A0 (in ISO-8859-1 or Windows-1252, this is NBSP) to get the byte count shown, then run from a web browser (or from the command line), providing the strings as the query string arguments (or environment variables)
a
andb
.In this version of PHP, register_globals is on by default, so the strings will automatically be assigned to the variables
$a
and$b
. Increase the value2e5
(200000) if necessary.PHP 7.1+, 58 bytes
Run on the command line, using
php -r 'code here' string1 string2
:The value
3e5
(300000) is chosen to exceed (MAX_ARG_STRLEN * 2 + 1) on most Linux systems (specifically, x86 and other architectures for which PAGE_SIZE is 4096, and MAX_ARG_STRLEN is thus 131072), to avoid problems with any possible input string. Increase if necessary.Try it online!
źródło
Stax, 10 bytes
Run and debug it
Here's an ungolfed representation of the same program to show how it works.
Run this one
źródło
Crystal, 108 bytes
Try it online!
How it works?
źródło