Esta es una versión de código de golf de una pregunta similar que hice en la pila anteriormente, pero pensé que sería un rompecabezas interesante.
Dada una cadena de longitud 10 que representa un número base 36, increméntelo en uno y devuelva la cadena resultante.
Esto significa que las cadenas solo contendrán dígitos de 0
a 9
y letras de a
a z
.
Base 36 funciona de la siguiente manera:
El dígito del extremo derecho se incrementa, en primer lugar mediante el uso 0
de9
0000000000> 9 iteraciones> 0000000009
y después de que a
a z
se utiliza:
000000000a> 25 iteraciones> 000000000z
Si z
necesita incrementarse, vuelve a cero y el dígito a su izquierda se incrementa:
000000010
Reglas adicionales:
- Puede usar letras mayúsculas o minúsculas.
- Es posible que no deje caer los ceros iniciales. Tanto la entrada como la salida son cadenas de longitud 10.
- No necesita manejar
zzzzzzzzzz
como entrada.
Casos de prueba:
"0000000000" -> "0000000001"
"0000000009" -> "000000000a"
"000000000z" -> "0000000010"
"123456zzzz" -> "1234570000"
"00codegolf" -> "00codegolg"
code-golf
string
base-conversion
Jack Hales
fuente
fuente
"0zzzzzzzzz"
(modificar el dígito más significativo) como un caso de prueba. Se tropezó con mi solución C debido a un error de uno por uno.Respuestas:
05AB1E , 10 bytes
La entrada está en mayúscula .
Código
Explicación
Utiliza la codificación 05AB1E . Pruébalo en línea! o Verificar todos los casos de prueba .
fuente
Japt , 13 bytes
Pruébalo en línea! y verificar casos de prueba
Toma la entrada como una cadena
Explicación
fuente
JavaScript (ES6), 45 bytes
Guardado 4 bytes gracias a @OOBalance
Pruébalo en línea!
fuente
Haskell , 58 bytes
Pruébalo en línea!
Una estrategia de fuerza bruta: genera todas las cadenas de longitud 10 base-36 en orden, y encuentra la que viene después de la entrada en la lista. Tómese una enorme cantidad de tiempo en cadenas lejos del comienzo de la lista.
Haskell , 60 bytes
Pruébalo en línea!
Lee la cadena de izquierda a derecha hasta que alcanza un carácter seguido de un sufijo de todas las z, que puede estar vacío. Incrementa ese carácter y reemplaza las z por 0.
fuente
Stax , 7 bytes
Ejecutar y depurarlo
Explicación:
fuente
C (gcc) ,
5048 bytesNo fue necesario un indicador de acarreo explícito después de reestructurar el ciclo para que finalice tan pronto como no ocurra ningún acarreo. El ajuste 9-> A se realiza durante la verificación del bucle.
Gracias a ceilingcat por la sugerencia.
Pruébalo en línea!
Versión original:
7157 bytesEsta versión utiliza un indicador de acarreo para propagar actualizaciones: lo configuré como verdadero para comenzar el incremento. La cadena se modifica en el lugar y solo acepta 0-9, AZ. La parte difícil fue asegurarse de que 9-> A se manejara correctamente en los acarreos.
Editar: reutilicé el puntero de entrada como el indicador de acarreo.
Pruébalo en línea!
fuente
C,
82815350 bytesModifica directamente la cadena de entrada; La entrada y la salida están en mayúsculas. Pruébelo en línea aquí . Gracias a Arnauld por jugar al golf 24 bytes y a ceilingcat por jugar al golf 3 bytes más.
Sin golf:
fuente
ZZZZZZZZZZ
. La respuesta de ErikF hace lo mismo, pero aún más corta: codegolf.stackexchange.com/a/169468/79343Simulador de máquina de Turing en línea , 745 bytes
Intérprete en línea
fuente
Perl 6 ,
34 3230 bytesGracias a nwellnhof por -2 bytes a través del uso del
o
operador para combinar funcionesPruébalo en línea!
Función que convierte el argumento en base 36, agrega 1, convierte de nuevo y luego lo formatea. Ahora usa la misma táctica que la respuesta de Adnan para preservar los ceros iniciales.
fuente
{S/.//}o{base :36(1~$_)+1: 36}
por 30 bytes.o
para jugar al golf, ¡pero puedo ver dónde podría ser útil!.succ
(incremente en uno) no funcioneMATL , 12 bytes
Pruébalo en línea!
fuente
Haskell , 63 bytes
Pruébalo en línea! Invierte la cadena y comprueba el primer carácter:
9
es reemplazado por una
.z
se reemplaza por a0
y recursivamente se verifica el siguiente carácter.succ
la función sucesora que se puede usar en Chars porque son una instancia de la clase Enum .Finalmente, la cadena resultante se invierte nuevamente.
fuente
Rutina de código de máquina 6502 (NMOS *) , 26 bytes
*) Utiliza un código de operación "ilegal"
ISB
/0xF3
, funciona en todos los NMOS 6502 fichas originales, no en las variantes más adelante CMOS.Espera un puntero a una cadena de 10 caracteres en
$fb
/$fc
que se espera que sea un número base 36. Incrementa este número en el lugar.No hace nada sensato en una entrada no válida (como, por ejemplo, una cadena más corta): maneja
ZZZZZZZZZZ
"correctamente" por accidente;)Desmontaje comentado
Ejemplo de programa ensamblador C64 usando la rutina:
Demostración en línea
Código en sintaxis ca65 :
fuente
Retina 0.8.2 , 12 bytes
Pruébalo en línea! Explicación: La
dl
parte del destino de sustitución se expande hasta0-9a-z
que seo
copia en la fuente, lo que da como resultadoz0-9a-z
(aunque el segundoz
se ignora, ya que nunca puede coincidir). Esto incrementa los dígitos coincidentes. La.z*$
parte del patrón coincide con el último noz
dígito más todos losz
s finales , manejando así el acarreo desde su incremento hasta0
.fuente
Rubí , 40 bytes.
Pruébalo en línea!
0
s"zzzzzzzzzz"
devuelve una cadena de 11 largosfuente
brainfuck , 109 bytes
Pruébalo en línea!
fuente
Apl (Dyalog Unicode) ,
302824 bytesGracias a ngn por la sugerencia de guardar algunos bytes.
Pruébalo en línea!
Requiere ⎕IO de 0
Utiliza mayúsculas
fuente
'1',
partef
? luego1↓
pasará a ser parte de su inverso(⎕D,⎕A)⍳'1',
->1,(⎕D,⎕A)⍳
(f⍣¯1)1+f←36⊥1,(⎕D,⎕A)⍳⊢
PHP,
6964 bytesversión pobre :
Ejecutar como tubería con
-R
. Entrada insensible a mayúsculas y minúsculas.primer enfoque, 69 bytes:
Corre como tubería con
-F
versión de bucle, también 69 bytes :
PHP más joven generará advertencias para constantes indefinidas.
Y
yA
con letras minúsculas para la entrada en minúsculas.Corre como tubería con
-nR
... o pruébalos en línea .
fuente
-R
y llamar a este 66 bytes también.printf('%010s',($b=base_convert)(1+$b($argn,36,10),10,36));
- 59 bytes($b=base_convert)(a,b,c)
. Estoy aprendiendo mucho de ti.Python 2 , 88 bytes
Pruébalo en línea!
Incrementa la cadena "a mano".
fuente
Carbón , 14 bytes
Pruébalo en línea!El enlace es a la versión detallada del código. Explicación:
Imprimir 9
0
s. Esto sirve para rellenar el resultado.Convierta la entrada de la base 36, incremente, luego vuelva a convertir a la base 36. Luego, invierta el resultado e imprímalo hacia la izquierda.
fuente
Java 8,
907656 bytesAcepta letras mayúsculas y minúsculas para la entrada. La salida siempre está en minúscula.
Gracias a Okx por jugar al golf 18 bytes.
Pruébelo en línea aquí .
Sin golf:
fuente
"".format("%10s",t).replace(' ','0')
1
al principio y luego eliminarlo:s->Long.toString(Long.valueOf("1"+s,36)+1,36).substring(1)
"1"+s
=>1+s
JavaScript (ES6), 89 bytes
Este no es tan eficiente en bytes como la otra entrada de JavaScript , pero lo hice sin notar esta regla:
Así que esta no es una entrada seria, ¡solo por diversión! Funciona con cadenas de longitud general, como
0abc
, y antepone a1
cuando el primer dígito esz
, por ejemplo,zzz
->1000
. La entrada debe estar en minúscula.Explicación
La expresión en
(A, B, C)
realidad significa "hacer A, luego hacer B, luego devolver C", que utilizo para declarar algunas variables que reutilizo en el código.s
significa "cadena",l
significa "último",r
significa "descanso".Esta es una función recursiva. Para una cadena típica como
aza
, solo incrementará el último carácter (ver línea 6) -azb
. Pero para una cadena que termina conz
, comoh0gz
, se ejecutará en todo hasta el último carácter (elz
) y sustituirá a0
en su lugar (vea la línea 5) -f(h0gz)
=f(h0g) + 0
=h0h0
.La
||'0'
línea 5 es para que la función funcione cuando se llama en una cadena de 1 longitud (es decir, la cadena'z'
). Sin él,f('')
se llama (como'z'.slice(0, -1)
es''
), que tiene un comportamiento indefinido (literalmente, pruébelo usted mismo), y eso no es bueno. El resultado esperado def('z')
es'10'
, que es de lo que obtenemosf('0') + 0
, por lo que utilizamos||'0'
. (||'0'
es particularmente útil porque no se interpone en el caso habitual , yar
que tiene al menos 1 longitud (s
al menos 2 de longitud), porque las cuerdas son falsey solo cuando son de longitud 0).El método para incrementar una cadena es el mismo que el utilizado en la otra entrada JS: convierta el "número" base 36 en un número real, agregue 1 y luego vuelva a convertirlo en base 36. No debemos preocuparnos por el
1
incremento de 'z' ('z'
->'10'
), ya que nunca incrementamos 'z' (ver líneas 4 y 6: el último carácter solo se incrementa si no es 'z').Además, nunca corremos el riesgo de descartar los ceros a la izquierda, porque en realidad nunca manipulamos más de un solo carácter a la vez, solo el último carácter de la cadena. El resto de los caracteres se cortan limpiamente a medida que corta cualquier cadena y palabras posteriores.
fuente
Limpio ,
8984 bytesPruébalo en línea!
Una solución más corta gracias a Laikoni .
Limpio , 115 bytes
Me encanta cuando puedo usar
limit(iterate...
Pruébalo en línea!
Produce la respuesta sin convertir bases usando la comparación de listas.
? :: [Char] -> [Char]
realiza transporte hacia adelante.@ :: Char -> Char
incrementos en uno, lo que representa la brecha entre'9'
y'z'
.$ :: [Char] -> [Char]
incrementa el último carácter y se aplica?
hasta que el valor se estabilice.fuente
R ,
152123 bytesPruébalo en línea!
Un enfoque completamente diferente. Obtenga los puntos de código ASCII y "incremente" recursivamente el punto de código más a la derecha (haciendo que
0
(57) salte aa
(97) yz
(122) regrese a0
(48)) hasta que se quede sinz
s. Convertir de nuevo a cadena.Versión antigua
Pruébalo en línea!
Todo esto es manipulación de texto, que no va de la mano con el golf de código R.
Reemplace todo
z
al final de las cadenas con0
. Encuentre la ubicación del último elemento antes del0
s. Encuentra la siguiente base de 36 dígitos. Haz el cambio. Alégrate de haber superado apenas la solución Online Turing Machine Simulator.fuente
strtoi
para comenzar; Hay un par de trucos de golf más para llegar a 72.strtoi
¿se limita a números bastante pequeños? Lo dejé hace un tiempo.int
restricción era tan problemática. ¡Gorrón! Para la posteridad, esta fue mi solución fallida: ¡ Pruébelo en línea!Estrellado , 325 bytes
Pruébalo en línea!
Explicación:
fuente
Wolfram Language (Mathematica) , 39 bytes
Pruébalo en línea!
fuente
Python 3.6+ y gmpy2 , 62 bytes
Pruébalo en línea!
(Tenga en cuenta que gmpy2 no es parte de la biblioteca estándar de Python y requiere una instalación separada)
fuente
f=
. Las funciones anónimas generalmente se consideran encontrar en el código de golf.Pyke , 11 bytes
Pruébalo aquí!
Podría ser 2 bytes más corto con el siguiente cambio de idioma: si se utiliza el modo hexadecimal, cambie todos los usos de base_36 y base_10 a base_92 (que de todos modos no es realmente base 92 en ese contexto)
fuente
sed , 94 bytes
Pruébalo en línea!
Sed sufre mucho por tener que cambiar los personajes por búsqueda.
fuente
Zsh ,
4136 bytesPruébalo en línea!
fuente
Jalea , 21 bytes
Pruébalo en línea!
Utiliza mayúsculas. El enlace TIO también permite mayúsculas / minúsculas.
fuente