Losowo zainspirowany liczbami Zwiększaj, a zmniejszając litery
Biorąc pod uwagę listę mieszanych liter i liczb całkowitych (np. ['a', 2, 3, 'b']
), Zwiększ litery o jedną pozycję w alfabecie (zawijaj z
do a
) i zmniejsz cyfry o 1. W powyższym przykładzie wynik powinien być ['b', 1, 2, 'c']
.
- Dane wejściowe mogą być listą typu mieszanego, ciągiem rozdzielanym, listą ciągów itp.
z
owija sięa
, ale1
idzie do0
i0
idzie do-1
itp.- Dane wejściowe zawsze będą
[a-z]
i liczbami całkowitymi. Możesz wybrać duże litery[A-Z]
jako dane wejściowe, jeśli jest to dla ciebie łatwiejsze. - Wejście jest gwarantowane jako niepuste.
- Dane wejściowe mogą zawierać tylko cyfry lub tylko litery.
Przykłady:
Input
Output
['a', 2, 3, 'b']
['b', 1, 2, 'c']
['a', 'b', 'z']
['b', 'c', 'a']
[-1, 0, 257, 'x']
[-2, -1, 256, 'y']
[0, 3, 1, 20382876]
[-1, 2, 0, 20382875]
Zasady i wyjaśnienia
- Dane wejściowe i wyjściowe można podać dowolną dogodną metodą .
- Możesz wydrukować wynik do STDOUT lub zwrócić go jako wynik funkcji.
- Dane wyjściowe nie muszą mieć tego samego formatu co dane wejściowe (np. Dane wejściowe można traktować jako ciąg znaków, a dane wyjściowe jako listę).
- Dopuszczalny jest pełny program lub funkcja.
- Jeśli dotyczy, możesz założyć, że liczby całkowite wejścia / wyjścia pasują do natywnego
int
zakresu twojego języka . - Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
int
zakresu języków , więc nigdy nie dostanieszInteger.MinValue
danych wejściowych.Odpowiedzi:
05AB1E , 5 bajtów
Wypróbuj online!
źródło
Python 3 , 59 bajtów
Wypróbuj online!
-1 bajt dzięki Erik the Outgolfer
źródło
-96
z+8
oszczędza bajt.''!=i*0
jest o trzy bajty krótszy od mojejstr(i)>'9'
dobrej robotyPerl 5 (-p), 17 bajtów
Wypróbuj online!
Dodatkowy 19-bajtowy:
TIO . Ten zawiera kilka fajnych sztuczek, ale nie jest w stanie pokonać powyższego prostego rozwiązania.
źródło
Rubinowy , 34 bajty
Dla każdego elementu spróbuj zwrócić element -1. Ciągi nie mogą tego zrobić, więc popełniają błąd i są odbierane przez
rescue
klauzulę, która zamiast tego wzywasucc
ją do zwrócenia następnej litery w alfabecie.succ
„przewraca”z
i wracaaa
, więc po prostu bierzemy pierwszy znak ze zwróconego ciągu.Wypróbuj online!
źródło
JavaScript (Node.js) , 55 bajtów
Wypróbuj online!
źródło
Python 3 ,
182130118 bajtów-51 bajty dzięki @AdmBorkBork i @Black Sowa Kai -1 bajt dzięki @Black Sowa Kai -12 bajtów, zastępując
.append()
w+=[]
i zastępującn+1
z-~n
Wypróbuj online!
Zrobiłem to, gdy pytanie znajdowało się w piaskownicy, ale do tej pory nie widziałem tego. : P
Nie golfił
Wyjaśnienie
Dla każdego elementu na wprowadzonej liście
x
próbuje odjąć 1 i dodać go do ostatecznie zwróconej listy. Jeśli wystąpi błąd (ponieważ element jest łańcuchem), indeks litery w alfabecie jest dodawany przez 1 i ten mod 26 jest brany. Mod 26 zawija indeks 26 z powrotem do 0.źródło
(x+27)%26
ma ten sam wynik co(x+1)%26
str(d)==d
aby sprawdzić, czy jest to ciąg znaków, czy nie, zamiast polegać na try / else. Następnie, ponieważ nie musisz już próbować / z wyjątkiem, możesz to wszystko zrobić na liście! Pozwól, że pomyślę o tym trochę więcej, ale w ten sposób możesz łatwo uzyskać mniej niż 100 bajtów;)J , 30 bajtów
Wypróbuj online!
źródło
Gema , 55 znaków
Brudne rozwiązanie. Zawijanie przyrostów liter jest bolesnie długie, więc otrzymałem osobną zasadę.
Dane wejściowe mogą być dowolne, wystarczy użyć separatorów. (Możesz nawet pominąć separatory między cyframi i literami. Przy cenie 1 znaku za zamianę
<L1>
możesz również pominąć separatory między literami.)Przykładowy przebieg:
Wypróbuj online!
Gema, 66 znaków
Czyste rozwiązanie. Połowa względnie wydajna, a następnie połowa czystego bólu.
Przykładowy przebieg:
Wypróbuj online!
źródło
R , 77
85bajtówDzięki @Giuseppe za okropne 8 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę. Po dużej zmianie dokonanej przez @Giuseppe, służy to
Map
do zastosowania funkcji do listy. Wykorzystuje sięmatch
do testowania postaci. Podczas testu rozszerzona lista liter i indeks są zapisywane do zwrotu.źródło
character
e nie są skończone, ponieważ są one oddane donumeric
przezis.finite
, a zatem sąNA
?is.finite
, myślałem, że sam się tym zajmęMap
amatch
. Dobrze jest uczyć się każdego dnia :)MathGolf , 14 bajtów
Wypróbuj online!
Traktuje literę jako małe litery.
Wyjaśnienie
źródło
Siatkówka ,
525048584137 bajtów-4 bajty dzięki @FryAmTheEggman (i za wzmiankę, że miałem błąd:
1 → -1
zamiast1 → 0
).+10 bajtów, aby naprawić błąd z
1
i0
.. Taka irytująca skrzynka, która mnie spieprzyła przez dłuższy czas .. Ale grałem w golfa do 41 bajtów. (Teraz jestem ciekaw <40 bajtów wersjach @Neil i @CowsQuack wymienionych w komentarzach .. Dzięki @Neil za cynk przekształcania0
się-
i po raz pierwszy do czynienia z wartościami ujemnymi. Konwersja te z powrotem z jednoskładnikowa do liczby całkowitej bardzo mi pomogło.)Najwyraźniej nie potrzebuję granic w tym momencie, więc -4 bajty ..>.>
We / wy jest oddzielone przecinkami.
Wypróbuj online.
Wyjaśnienie:
Przetłumacz wszystko
"zabcdefghijklmnopqrstuvwxy(z)"
na"abcdefghijklmnopqrstuvwxyz"
:Zamień wszystkie samodzielne
0
na-
:Konwertuj wszystkie liczby na unary, zastępując je taką liczbą znaków podkreślenia:
Dla wszystkich wartości ujemnych, za którymi znajduje się zero lub więcej linii jednoargumentowych: zachowaj znak minus i uzyskaj całkowitą długość tego dopasowania (łącznie z
-
), przekonwertowaną z powrotem na liczbę całkowitą:Co do dodatnich liczb całkowitych: dopasuj dodatnią liczbę całkowitą, dopasowując pojedynczą linię jednoargumentową, a następnie zero lub więcej linii jednoargumentowych. A następnie zamień je na długość tej grupy przechwytywania, aby usunąć tę pojedynczą linię jednoargumentową i przekonwertować je z powrotem na liczby całkowite jednocześnie:
źródło
SNOBOL4 (CSNOBOL4) , 103 bajty
Wypróbuj online!
źródło
PHP , 50 bajtów
Wypróbuj online!
Testy
Wypisuje litery / liczby całkowite oddzielone
_
separatorem końcowym.W PHP możesz zwiększać litery bezpośrednio, więc skorzystałem z tego. Ale
z
jest zwiększanyaa
, aby go przekonwertowaća
,(++$a)[0]
jest używany, który wypisuje tylko pierwszy znak zwiększonej wartości.źródło
Japt
-m
,1312 bajtów-1 bajt dzięki Shaggy
Spróbuj
Wyjaśnienie:
Uwaga :
;
zmieniaC
się w małe literyźródło
z
doa
.o
->¤
uratuje ci bajt tutaj.+2
i-1
dzięki Shaggy byłby dokładniejszy! : D+2
to dzięki Oliverowi: PHaskell,
5251 bajtówPonieważ Haskell nie zezwala na listy typów mieszanych, litery i cyfry są pobierane i zwracane jako ciągi znaków.
Wypróbuj online!
Sprawdź każdy element listy: jeśli ciąg jest
"z"
, zwróć"a"
; jeśli pierwszym znakiem ciągu jest>'`'
(tj. litera, a nie cyfra), zwróć następcę znaku (ów) w ciągu; w przeciwnym razie musi być liczbą, więc przekonwertuj na liczbę całkowitą, odejmij 1 i ponownie zamień na ciąg.Edycja: -1 bajt dzięki @cole.
źródło
Galaretka , 13 bajtów
Wypróbuj online!
Sprytna poprawka autorstwa Jonathana Allana .
Uwaga: To nie jest pełny program, stopka nad TIO umożliwia wprowadzanie danych za pomocą argumentu wiersza poleceń w celu przetestowania funkcji.
źródło
®i‘ị®µ’e?€Øa©
to poprawka na zero.Ọ
to nie działa w tym przypadku. Ironiczne, ponieważ unikałem używania~
jako warunku do uwzględnienia-1
s na wejściu ... Ponadto, jak mam skrócić®i‘ị®
...C ++ 17 (gcc) , 120 bajtów
Oto
f
wymagana funkcja;l
jest zarówno parametrem wejściowym, jak i wyjściowym, i oczekuje się, że będzie to kontener obiektów, które są kompatybilnestd::variant<char, int>
lub odwrotnie.Wypróbuj online!
źródło
dzaima / APL,
2120 bajtówWypróbuj online!
-1 dzięki ngn.
źródło
(⎕l⍳⍵)⊇1⌽⎕l
->⎕l(⍳⊇1⌽⊣)⍵
K (oK) , 27 bajtów
Wypróbuj online!
-8 dzięki ngn i dzaima :)
źródło
{$[-9=@x;x-1;90=x;"A";`c$1+x]}'
wstawianych do specjalnego przypadku i przy użyciu wielkich liter (i'
należy je liczyć jako dane wejściowe powinna być listą)'
należy to policzyć. oto nieco dłuższe wyrażenie, które nie potrzebuje'
i zajmuje się również „z” -> „a”:{`c`i[t]$(-26*x~'"z")+x+1-2*t:x~'0+x}
@'
:{(`c$97+26!-96+;-1+)[x~'0+x]@'x}
. tutaj-96
(czyli +1 minus kod ascii z „a”) można zastąpić8
pobranym modem 26.{(`c$65+26!14+;-1+)[x=_x]@'x}
-9=@x
->x=_x
Runiczne Zaklęcia , 36 bajtów
Wypróbuj online!
Ogólny proces polega na czytaniu danych wejściowych, dodawaniu zera (przymus na ciąg), konwertowaniu z powrotem na liczbę (pojedynczy znak zawsze zwraca -1), porównywanie z danymi wejściowymi. Jeśli to samo, musi to być wartość liczbowa, odejmij 1 i wydrukuj. Jeśli nie to samo, musi to być znak, odejmij 1, porównaj z
{
. Jeśli mniej niż, wydrukuj, w przeciwnym razie zamień naa
i wydrukuj.Powtarzaj, aż program wykona niedopełnienie stosu.
Wyjście jest oddzielone
;
, aby zaoszczędzić 1 bajt (i ma jeden końcowy). Dane wejściowe są oddzielone spacją.źródło
Stax , 17 bajtów
Uruchom i debuguj
Wydaje mi się, że powinno być możliwe zrobienie tego krócej, ale nie mogę się oprzeć możliwości skorzystania z nowej funkcji stax z ostatniego wydania.
Traktując cały wkład jako ciąg:
eval(match) - 1
. Jest to nowa funkcja, ponieważ zamiana bloku wyrażenia regularnego nie jest ciągiem, ale liczbą całkowitą.źródło
Python 3, 66 bajtów
Edytować:
Do tej pory nie widziałem rozwiązania Jitse. Sztuczka if ''! = I * 0 jest niesamowita!
źródło
C #, 148 bajtów
Link Repl.it
Nie golfowany:
źródło
Węgiel drzewny , 16 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Pobiera dane wejściowe na STDIN, przy czym każdy wiersz jest albo jedną małą literą, albo liczbą całkowitą, i wysyła na osobnych wierszach na STDOUT. Wyjaśnienie:
Wielokrotnie wprowadzaj dane ze STDIN, aż do osiągnięcia pustej linii.
Wykonaj to wyrażenie we własnej linii.
Czy jest to podciąg predefiniowanego małego alfabetu?
Jeśli tak, wydrukuj następną literę indeksowaną cyklicznie.
W przeciwnym razie zmniejsz wartość i rzutuj ponownie na ciąg znaków w celu wydrukowania niejawnego.
źródło
Zsh , 47 bajtów
Wypróbuj online!
źródło
C (gcc) ,
9386 bajtówWypróbuj online!
Dane wejściowe to
NULL
-terminated tablica'\0'
-terminated string, np{"a", "b", "c", "17", NULL}
.-7 bajtów dzięki @ceilingcat
źródło
Perl 6 , 31 bajtów
Wypróbuj online!
Anonimowy Jakakolwiek lambda, która mapuje każdy element na listę i próbuje odjąć jeden z niego, w przeciwnym razie zwiększając go i biorąc pierwszy znak w przypadku, który się
z
zawijaaa
.źródło
T-SQL 2012, 61 bajtów
Wymagane są duże litery.
Wykorzystanie zmiennej tabeli jako danych wejściowych.
Wypróbuj online
źródło
SimpleTemplate, 80 bajtów
Zostało to napisane w języku, który stworzyłem.
Ze względu na ograniczenia w kompilatorze nie mogę już go zmniejszyć.
A teraz bez golfa:
I wyjaśnienie:
{@each argv as value}
- zapętla wszystkie wartości wargv
. (argv
zawiera wszystkie przekazane argumenty).Jeśli
as <var>
nie jest obecny,_
zakłada się zmienną domyślną .{@if value is matches "@\d+@"}
- sprawdza, czyvalue
pasuje do wyrażenia regularnego"@\d+@"
.{@inc by -1 value}
- zwiększa wartość o -1 (w zasadzie zmniejszenie).{@echo value, "\n"}
oraz{@echol_}
-echol
wyświetla przekazane wartości i dołącza wiersz na końcu.{@else}
- oczywiste{@inc by 1 value}
- zwiększa wartość o 1. Jeżeliby <value>
brakuje, przyjmuje się, że wynosi 1.{@echo value.0, "\n"}
oraz{@echol_.0}
-echol
wyświetla przekazane wartości i dołącza wiersz na końcu.Jest to konieczne ze względu na przepisy wyzwanie:
z wraps to a
.Kiedy
@inc
ciąg znaków jest używany, zwiększa znaki i po trafieniuz
zawija sięaa
.Wyprowadzenie pierwszego znaku spełnia wyzwanie kosztem 7 bajtów.
{@/}
- zamyka{@else}
powyższe (opcjonalnie).{@/}
- zamyka{@each}
powyższe (opcjonalnie).Możesz spróbować na: http://sandbox.onlinephpfunctions.com/code/7533641a0aa1fc8bf4699a9c758690de186b052f
Każdy przekazany argument
render()
będzie nową wartością, która jest brana pod uwagę.źródło
Perl, 64 bajty
źródło