Aleatoriamente inspirado por los números aumentan mientras las letras disminuyen
Dada una lista de letras y enteros mixtos (p. Ej. ['a', 2, 3, 'b']
) , Aumente las letras en una posición en el alfabeto (ajustando z
a a
) y disminuya los números en 1. Para el ejemplo anterior, la salida debería ser ['b', 1, 2, 'c']
.
- La entrada puede ser una lista de tipo mixto, una cadena delimitada, una lista de cadenas, etc.
z
se ajusta aa
, pero1
va a0
, y0
va a-1
, etc.- La entrada solo será una vez
[a-z]
y enteros. Puedes elegir letras mayúsculas[A-Z]
como entrada si es más fácil para usted. - La entrada está garantizada no vacía.
- La entrada puede contener solo números o solo letras.
Ejemplos:
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]
Reglas y aclaraciones
- La entrada y salida se pueden dar por cualquier método conveniente .
- Puede imprimir el resultado en STDOUT o devolverlo como resultado de una función.
- La salida no tiene que tener el mismo formato que la entrada (por ejemplo, podría tomar la entrada como una cadena y la salida como una lista).
- Un programa completo o una función son aceptables.
- Si corresponde, puede suponer que los enteros de entrada / salida se ajustan al
int
rango nativo de su idioma . - Lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
int
rango nativo de su idioma , por lo que nunca obtendráInteger.MinValue
una entrada.Respuestas:
05AB1E , 5 bytes
Pruébalo en línea!
fuente
Python 3 , 59 bytes
Pruébalo en línea!
-1 byte gracias a Erik the Outgolfer
fuente
-96
con+8
guarda un byte.''!=i*0
es tres bytes más corto que mistr(i)>'9'
, buen trabajoPerl 5 (-p), 17 bytes
Pruébalo en línea!
Bonus de 19 bytes:
TIO . Este presenta algunos trucos geniales, pero no supera la solución directa anterior.
fuente
Rubí , 34 bytes
Para cada elemento, intente devolver el elemento -1. Las cadenas no pueden hacer esto, por lo que se equivocan y son recogidas por la
rescue
cláusula, que en su lugar le pidesucc
que devuelva la siguiente letra del alfabeto.succ
"vuelca"z
y regresaaa
, así que simplemente tomamos el primer carácter en la cadena devuelta.Pruébalo en línea!
fuente
JavaScript (Node.js) , 55 bytes
Pruébalo en línea!
fuente
Python 3 ,
182130118 bytes-51 bytes gracias a @AdmBorkBork y @Black Owl Kai, -1 byte gracias a @Black Owl Kai, -12 bytes reemplazando
.append()
con+=[]
y reemplazandon+1
con-~n
Pruébalo en línea!
Hice esto mientras la pregunta estaba en el Sandbox, pero no la vi publicada hasta ahora. :PAG
Sin golf
Explicación
Para cada elemento en la lista ingresada
x
, intenta restar 1 y agregarlo a la lista devuelta eventual. Si se produce un error (porque el elemento es una cadena), el índice de la letra en el alfabeto se agrega por 1 y se toma ese mod 26. El mod 26 envuelve un índice de 26 a 0.fuente
(x+27)%26
tiene el mismo resultado que(x+1)%26
str(d)==d
para verificar si es una cadena o no, en lugar de confiar en try / except. Entonces, como ya no necesita probar / excepto, ¡puede hacer todo en una lista de comprensión! Te dejaré pensarlo un poco más, pero puedes obtener fácilmente menos de 100 bytes de esta manera;)J , 30 bytes
Pruébalo en línea!
fuente
Gema , 55 caracteres
Solución sucia Ajustar el incremento de letras es dolorosamente largo, por lo que obtuve una regla por separado.
La entrada puede ser cualquier cosa, solo use algunos separadores. (Incluso puede omitir separadores entre números y letras. Con el precio de 1 carácter por cambiar,
<L1>
también puede omitir separadores entre letras).Ejecución de muestra:
Pruébalo en línea!
Gema, 66 personajes
Solución limpia Mitad relativamente eficiente, luego mitad dolor puro.
Ejecución de muestra:
Pruébalo en línea!
fuente
R , 77
85bytesGracias @Giuseppe por los 8 bytes.
Pruébalo en línea!
Toma la entrada como una lista. Después de un gran cambio por @Giuseppe, esto hace uso de
Map
aplicar una función a la lista. Se utilizamatch
para probar un personaje. Durante la prueba, la lista de letras extendidas y el índice se guardan para la devolución.fuente
character
s no son finitos, ya que se echan anumeric
poris.finite
y son asíNA
?is.finite
, penséMap
ymatch
. Es bueno aprender algo cada día :)MathGolf , 14 bytes
Pruébalo en línea!
Toma la letra en minúscula.
Explicación
fuente
Retina ,
525048584137 bytes-4 bytes gracias a @FryAmTheEggman (y por mencionar que tuve un error: en
1 → -1
lugar de1 → 0
).+10 bytes para arreglar un error con
1
y0
... Un caso de borde tan molesto que me fastidió durante bastante tiempo ... Pero ahora lo jugué a 41 bytes. (Ahora tengo curiosidad acerca de las versiones de <40 bytes @Neil y @CowsQuack mencionadas en los comentarios ... Gracias @Neil por la sugerencia de convertir el0
a-
, y tratar con los valores negativos primero. Convirtiendo esos de vuelta de unario a entero ayudó mucho)Aparentemente no necesito los límites en este punto, así que -4 bytes ..>.>
E / S está separada por comas.
Pruébalo en línea.
Explicación:
Transliterar todo
"zabcdefghijklmnopqrstuvwxy(z)"
a"abcdefghijklmnopqrstuvwxyz"
:Reemplace todos los
0
s independientes con un-
:Convierta todos los números a unarios, reemplazándolos con esa cantidad de guiones bajos:
Para todos los valores negativos, con cero o más líneas unarias detrás: mantenga el signo menos y obtenga la longitud total de esta coincidencia (incluida la
-
), convertida de nuevo a un entero:En cuanto a los enteros positivos: haga coincidir un entero positivo haciendo coincidir una sola línea unaria, seguida de cero o más líneas unarias. Y luego reemplácelos con la longitud de ese grupo de captura para eliminar esa única línea unaria y convertirlos nuevamente a enteros simultáneamente:
fuente
SNOBOL4 (CSNOBOL4) , 103 bytes
Pruébalo en línea!
fuente
PHP , 50 bytes
Pruébalo en línea!
Pruebas
Emite letras / enteros separados por
_
un separador final.En PHP puedes incrementar letras directamente, así que lo aproveché. Pero
z
se incrementa aaa
, para convertirloa
,(++$a)[0]
se usa el que solo genera el primer carácter del valor incrementado.fuente
Japt
-m
,1312 bytes-1 byte gracias a Shaggy
Intentalo
Explicación:
Nota : se
;
convierteC
en el alfabeto en minúsculasfuente
z
aa
.o
->¤
te ahorrará un byte aquí.+2
¡y luego-1
gracias a Shaggy sería más preciso! : D+2
fue gracias a Oliver: PHaskell,
5251 bytesComo Haskell no permite listas de tipos mixtos, las letras y los números se toman y se devuelven como cadenas.
Pruébalo en línea!
Verifique cada elemento de la lista: si la cadena es
"z"
, devuelva"a"
; si el primer carácter de la cadena es>'`'
(es decir, una letra, no un dígito), devuelve el sucesor de los caracteres en la cadena; de lo contrario, debe ser un número, así que conviértalo en un entero, reste 1 y vuelva a convertirlo en una cadena.Editar: -1 byte gracias a @cole.
fuente
Jelly, 13 bytes
Try it online!
Clever fix by Jonathan Allan.
Note: This is not a full program, the footer over TIO makes it possible to input using a command-line argument to test the function.
fuente
®i‘ị®µ’e?€Øa©
is a fix for zero I believe.Ọ
doesn't exactly work in that case. Ironic, since I avoided using~
as the condition to account for-1
s in the input... Also, how am I going to shorten®i‘ị®
...C++17 (gcc), 120 bytes
Here
f
is the required function;l
is both the input and output parameter, and it is expected to be a container of objects which are compatible withstd::variant<char, int>
or vice versa.Try it online!
fuente
dzaima/APL,
2120 bytesTry it online!
-1 thanks to ngn.
fuente
(⎕l⍳⍵)⊇1⌽⎕l
->⎕l(⍳⊇1⌽⊣)⍵
K (oK), 27 bytes
Try it online!
-8 thanks to ngn and dzaima :)
fuente
{$[-9=@x;x-1;90=x;"A";`c$1+x]}'
inlining the special-case & using uppercase (and the'
has to be counted as the input should be a list)'
should be counted. here's a slightly longer expression that doesn't need'
and also takes care of "z"->"a":{`c`i[t]$(-26*x~'"z")+x+1-2*t:x~'0+x}
@'
:{(`c$97+26!-96+;-1+)[x~'0+x]@'x}
. here-96
(which is +1 minus the ascii code of "a") can be replaced with8
as it's taken mod 26.{(`c$65+26!14+;-1+)[x=_x]@'x}
-9=@x
->x=_x
Runic Enchantments, 36 bytes
Try it online!
General process is to read input, prepend with a 0 (coercion to string), convert back to a number (single char will always return -1), compare with input. If same, it must be a numerical value, subtract 1 and print. If not same, it must be a char, subtract 1, compare with
{
. If less than, print, otherwise replace it witha
and print.Repeat until program performs a stack underflow.
Output is separated by
;
in order to save 1 byte (and has a trailing one). Input is space-separated.fuente
Stax, 17 bytes
Run and debug it
This feels like it should be possible to do shorter, but I can't resist the opportunity to use a new stax feature from the last release.
Treating the entire input as a string:
eval(match) - 1
. This is the new feature, as the regex block replacement is not a string, but an integer.fuente
Python 3, 66 bytes
Edit:
I didn't see the solution of Jitse until now. The trick of if''!=i*0 is awesome!
fuente
C#, 148 bytes
Repl.it link
Ungolfed:
fuente
Charcoal, 16 bytes
Try it online! Link is to verbose version of code. Takes input on STDIN, each line being either a single lowercase letter or an integer, and outputs on separate lines on STDOUT. Explanation:
Repeatedly input from STDIN until an empty line is reached.
Make this expression output on its own line.
Is this a substring of the predefined lowercase alphabet?
If so then print the next letter cyclically indexed.
Otherwise decrement the value and cast back to string for implicit print.
fuente
Zsh, 47 bytes
Try it online!
fuente
C (gcc),
9386 bytesTry it online!
The input is a
NULL
-terminated array of'\0'
-terminated strings, e.g.{"a", "b", "c", "17", NULL}
.-7 bytes thanks to @ceilingcat
fuente
Perl 6, 31 bytes
Try it online!
Anonymous Whatever lambda that maps each element to the list and attempts to subtract one from it, otherwise incrementing it and taking the first character in the case that
z
wraps over toaa
.fuente
T-SQL 2012, 61 bytes
Capital letters needed in input.
Using table variable as input.
Try it online
fuente
SimpleTemplate, 80 bytes
This was written on a language I've made.
Due to limitations in the compiler, I can't reduce it any more.
And now, ungolfed:
And the explanation:
{@each argv as value}
- loops through all values inargv
. (argv
contains all the arguments passed).If the
as <var>
isn't present, the default_
variable is assumed.{@if value is matches "@\d+@"}
- checks thatvalue
matches with the regular expression"@\d+@"
.{@inc by -1 value}
- increments the value by -1 (basically, a decrement).{@echo value, "\n"}
and{@echol_}
-echol
outputs the values passed and appends a line at the end.{@else}
- self-explanatory{@inc by 1 value}
- increments the value by 1. If theby <value>
is missing, it is assumed to be 1.{@echo value.0, "\n"}
and{@echol_.0}
-echol
outputs the values passed and appends a line at the end.This is required because of the challenge rules:
z wraps to a
.When an
@inc
is used on a string, it increments the chars and, once it hitsz
, it wraps toaa
.Outputting the first character satisfies the challenge, at the cost of 7 bytes.
{@/}
- closes the{@else}
above (optional).{@/}
- closes the{@each}
above (optional).You can try this on: http://sandbox.onlinephpfunctions.com/code/7533641a0aa1fc8bf4699a9c758690de186b052f
Each passed argument to
render()
will be a new value that is considered.fuente
Perl, 64 bytes
fuente