¿Quieres hacer una cadena donde el ( 1-indexada caracteres) en el índice n
es n
. Cuando n
es menor de 10, esto es fácil: "123456789"
. Cuando n
es 12, por ejemplo, se vuelve imposible, ya que los números mayores que 9 (en la base 10) ocupan más de un carácter. Podemos poner en peligro al dividir la cadena en subcadenas de dos caracteres: "020406081012"
. Ahora el índice del final de cada subcadena n
es n
.
Esto se puede generalizar para cualquier d
número de dígitos. Aquí hay una explicación para la parte "0991021" de la cadena para un número de tres dígitos:
Index: ... * 97 98 99*100 101 102*103 ...
* * *
*---+---+---*---+---+---*---+
Character: ... * 0 | 9 | 9 * 1 | 0 | 2 * 1 | ...
*---+---+---*---+---+---*---+
Si aún no lo ha descubierto, debe escribir un programa / función que tome una cadena o un entero y genere su cadena autorreferencial como se especificó anteriormente. También puede generar una matriz de números de un solo dígito, caracteres o cadenas de un solo carácter.
El entero dado siempre será positivo y divisible por su longitud (por ejemplo, 126 es divisible por 3; 4928 es divisible por 4). Teóricamente, su programa debería funcionar para una entrada arbitrariamente grande, pero puede suponer que es más pequeña que el entero máximo y / o la longitud de cadena de su idioma.
Algunas observaciones si aún no lo entiende: la longitud de la salida siempre será la entrada en sí, y los números que aparecen en la salida serán divisibles por el número de dígitos en la entrada.
Este es el código de golf , por lo que la respuesta más corta en bytes gana.
Casos de prueba
1 => 1
9 => 123456789
10 => 0204060810
105 => 003006009012015018021024027030033036039042045048051054057060063066069072075078081084087090093096099102105
1004 => 00040008001200160020002400280032003600400044004800520056006000640068007200760080008400880092009601000104010801120116012001240128013201360140014401480152015601600164016801720176018001840188019201960200020402080212021602200224022802320236024002440248025202560260026402680272027602800284028802920296030003040308031203160320032403280332033603400344034803520356036003640368037203760380038403880392039604000404040804120416042004240428043204360440044404480452045604600464046804720476048004840488049204960500050405080512051605200524052805320536054005440548055205560560056405680572057605800584058805920596060006040608061206160620062406280632063606400644064806520656066006640668067206760680068406880692069607000704070807120716072007240728073207360740074407480752075607600764076807720776078007840788079207960800080408080812081608200824082808320836084008440848085208560860086408680872087608800884088808920896090009040908091209160920092409280932093609400944094809520956096009640968097209760980098409880992099610001004
C, 64 bytes
Toma un solo entero como entrada en stdin.
fuente
JavaScript (ES6), 83 bytes
Sí, esa es una cadena de plantilla anidada. 79 bytes en ES7:
fuente
MATL ,
1514 bytesPruébalo en línea!
fuente
05AB1E , 15 bytes
Código:
Explicación:
La fusión se realiza así:
A partir de estos:
Resulta en esto:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
ñ
funcionaba así.Python 2,
7870686463 bytesEn realidad, basarse en la idea de Sandía Destructible lo hace aún más pequeño (usar
input
es aún mejor) (llenar la cadena hacia atrás ahorra 4 bytes) (no()
enwhile
):Aquí está el viejo enfoque de 70 bytes (Ahorro de 8 bytes usando comillas inversas en lugar de
str
y soltando los corchetes alrededor del generador gracias a Dennis):fuente
`x`
lugar destr(x)
. Además, no necesita[]
alrededor del generador.while(n)
.Python 2, 63 bytes
Pruébalo en Ideone .
fuente
JavaScript (ES6), 66
Recursivo, ingrese
n
como una cadena (no un número) y limite el tamaño de la cadena de salida a 2 GB (que está por encima del límite de la cadena de la mayoría de los motores javascript)Prueba
fuente
R,
666462 byteseditar:
x=nchar(n<-scan());paste0(str_pad(1:(n/x)*x,x,,0),collapse="")
primer intento de golf ...
fuente
2sable , 13 bytes
Código:
Utiliza la codificación CP-1252 .
fuente
15AB1E
Brachylog ,
5345423728 bytesPruébalo en línea!
fuente
Bash,
3122 bytesPruébalo en Ideone .
¡Gracias a @izabera por jugar golf en 6 bytes!
fuente
Ruby,
5248 +n
bandera = 49 bytesfuente
chop
si asume que la entrada se pasa sin una nueva línea final? No estoy seguro de si eso funcionaría. ¿O qué tal asumir que siempre hay uno y escribirl=~-size
?size
así no funciona para mí. Oh, bueno, recordé un truco que había usado en una respuesta anterior que de todos modos es más cortoPython
32,797469656867 bytesGracias Dennis!
aumento del recuento de bytes del método de salida incorrecto
fuente
len(x)
lugar def
y luego guardar bytes asignándolos a una variable?/
realiza la división de enteros foe.integer argumentos.zsh, 28 bytes
zsh + seq,
2120 bytesEsta es la misma respuesta que Dennis pero en 20 bytes porque zsh
fuente
Haskell, 51 bytes
fuente
Perl, 40 bytes
Código de 39 bytes + 1 para
-n
.Uso
fuente
k4, 27
Realmente no se juega golf, solo una implementación directa de la especificación.
fuente
Javascript - 76
o 71 si permite argumentos de cadena:
Gracias a @ user81655!
Sin golf:
mucho lugar para mejorar, pero ahora estoy cansado
fuente
n=>eval('c="";for(a=b=(""+n).length;a<=n;a+=b)c+=`${+`1e${b}`+a}`.slice(1)')
. Los bits principales están usando unfor
bucle y el1e${b}
truco de Neil .Uncaught SyntaxError: Invalid or unexpected token
. Todavía no he depurado ya que estoy despierto: DR,
149142138 bytesDejarlo
nchar
en el código le da a un programa el mismo número de bytes que reemplazarlob
, pero tener letras aleatorias deambulando por el código lo hace más ... misteriosoSin golf:
cada uno
nchar(strtoi(something))
permite calcular el número de números en un número dado.La
strsplit
función genera una lista de vectores que contienen los elementos divididos. Es por eso que tienes que llegar al1
elemento st de la lista, y luego ali
elemento th del vector, escribiendostrsplit[[1]][i]
fuente
SQF - 164
Usando el formato de función como archivo:
Llamar como
INTEGER call NAME_OF_COMPILED_FUNCTION
fuente
PowerShell, 77 bytes
Utiliza la interpolación de cadenas para acortar la conversión de cadenas. Las partes antes del segundo punto y coma acortan los nombres de las cosas reutilizadas. Luego, cada número entero hasta la entrada, y solo aquellos que son múltiplos de la longitud de la entrada, se rellenan para ser tan largos como la cadena de entrada y finalmente se unen en uno.
fuente
En realidad, 30 bytes
Pruébalo en línea!
No estoy satisfecho con la longitud de este código, pero no estoy seguro de que se pueda acortar mucho (si es que lo hay).
Explicación:
fuente
CJam, 19 bytes
Pruébalo en línea . Nadie ha publicado en CJam todavía, así que este es el script que utilicé para los casos de prueba.
Explicación
fuente
PHP,
8378 bytesLas propinas son más que bienvenidas. Me las arreglé para jugar al golf por un byte cambiándolo de un ciclo for a un ciclo while.
Este código supone que esto se está ejecutando desde la línea de comando y que $ argv [1] es el int.
Gracias a:
@AlexGittemeier Su sugerencia (ver comentarios) fue de 5 bytes a 78 bytes.
fuente
echo sprintf(...)
->printf(...)
Perl 6,
695946 bytesfuente
fmt
en la lista en lugar demap
,sprintf
y[~]
. 42 bytes