Entrada:
Tomamos dos entradas:
- Una entrada
b
con dos valores distintos:Left
yRight
. † - Y un entero positivo
n
.
Salida:
Según la entrada izquierda / derecha, mostramos cualquiera de las siguientes dos secuencias en el rango de 1-n
(en las secuencias a continuación se muestran los primeros 125 elementos):
Left:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966, 967, 1016, 1017, 1022, 1023, 31744, 31745, 31750, 31751, 31800, 31801, 31806, 31807, 32704, 32705, 32710, 32711, 32760, 32761, 32766, 32767, 2064384, 2064385, 2064390, 2064391, 2064440, 2064441, 2064446, 2064447, 2065344, 2065345, 2065350, 2065351, 2065400, 2065401, 2065406, 2065407, 2096128, 2096129, 2096134, 2096135, 2096184, 2096185, 2096190, 2096191, 2097088, 2097089, 2097094, 2097095, 2097144, 2097145, 2097150, 2097151, 266338304, 266338305, 266338310, 266338311, 266338360, 266338361, 266338366, 266338367, 266339264, 266339265, 266339270, 266339271, 266339320, 266339321, 266339326, 266339327, 266370048, 266370049, 266370054, 266370055, 266370104, 266370105, 266370110, 266370111, 266371008, 266371009, 266371014, 266371015, 266371064, 266371065, 266371070, 266371071, 268402688, 268402689, 268402694, 268402695, 268402744, 268402745, 268402750, 268402751, 268403648, 268403649, 268403654, 268403655, 268403704, 268403705, 268403710, 268403711, 268434432, 268434433, 268434438, 268434439, 268434488, 268434489, 268434494, 268434495, 268435392, 268435393, 268435398, 268435399, 268435448, 268435449
Right:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624, 639, 896, 911, 1008, 1023, 16384, 16415, 16864, 16895, 19968, 19999, 20448, 20479, 28672, 28703, 29152, 29183, 32256, 32287, 32736, 32767, 1048576, 1048639, 1050560, 1050623, 1079296, 1079359, 1081280, 1081343, 1277952, 1278015, 1279936, 1279999, 1308672, 1308735, 1310656, 1310719, 1835008, 1835071, 1836992, 1837055, 1865728, 1865791, 1867712, 1867775, 2064384, 2064447, 2066368, 2066431, 2095104, 2095167, 2097088, 2097151, 134217728, 134217855, 134225792, 134225919, 134471680, 134471807, 134479744, 134479871, 138149888, 138150015, 138157952, 138158079, 138403840, 138403967, 138411904, 138412031, 163577856, 163577983, 163585920, 163586047, 163831808, 163831935, 163839872, 163839999, 167510016, 167510143, 167518080, 167518207, 167763968, 167764095, 167772032, 167772159, 234881024, 234881151, 234889088, 234889215, 235134976, 235135103, 235143040, 235143167, 238813184, 238813311, 238821248, 238821375, 239067136, 239067263, 239075200, 239075327, 264241152, 264241279, 264249216, 264249343, 264495104, 264495231, 264503168, 264503295, 268173312, 268173439, 268181376, 268181503, 268427264, 268427391
¿Cómo se generan estas secuencias, preguntas?
Una secuencia predeterminada de 1 a través n=10
sería:
As integer:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
As binary:
1 10 11 100 101 110 111 1000 1001 1010
Cuando nos estiramos a la izquierda, el binario se convertirá en esto:
1, 110, 111, 111000, 111001, 111110, 111111, 1111000000, 1111000001, 1111000110
¿Por qué? El último bit se usa una vez; el single-last se usa dos veces; el penúltimo se usa tres veces; etc.
So `1010` will become (spaces added as clarification): `1111 000 11 0`
Y estas nuevas cadenas binarias estiradas a la izquierda se convierten de nuevo a enteros:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966
En cuanto a la derecha extendida, el primer bit se usa una vez; segundo dos veces; tercero tres veces; etc. Así:
As binary:
1, 100, 111, 100000, 100111, 111000, 111111, 1000000000, 1000001111, 1001110000
As integer:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624
Reglas de desafío:
- † Puede tomar dos valores distintos, pero indique cuál usa. Así que puede ser
1/0
,true/false
,null/undefined
,"left"/"right"
, etc. n
siempre es mayor que 0.- Debe admitir una salida máxima de al menos el entero predeterminado de su idioma (que es de 32 bits para la mayoría de los idiomas).
- El formato de salida es flexible. Se puede imprimir o devolver como matriz / lista. Puede ser con un espacio, una coma, una tubería y similares como delimitadores. Tu llamada. (Nuevamente, indique lo que ha usado).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de código. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
n < 128
, de modo que los resultados se ajusten a enteros de 32 bits?Respuestas:
Jalea , 9 bytes
Pruébalo en línea!
-1
por izquierda,1
por derecha.fuente
Python 2 ,
10296 bytes-1 para la izquierda, 1 para la derecha
Pruébalo en línea!
fuente
05AB1E ,
1413 bytesGuardado 1 byte gracias a Erik the Outgolfer
1
por izquierda0
(o cualquier otra cosa) por derecho.Pruébalo en línea!
Explicación
fuente
ε
para -1:LbεIiRƶRëƶ}JC
ë
. Resuelve el problema deif
en una solicitud en este caso :)Casco , 13 bytes
Son muchas letras punteadas ...
Toma primero
b
(0
para la izquierda y1
para la derecha), luegon
. Pruébalo en línea!Explicación
fuente
b
ḣ o ṫ directamente, ahorrándole tres bytes :)b
y hacer que mi solución sea soloI
...Japt ,
191817 bytes0
para "izquierda",1
para "derecha". (En realidad, puede tomar cualquier valor falso o verdadero en lugar de esos 2.)Pruébalo
Explicación
Entrada implícita de enteros
U
yV
.Cree una matriz de enteros de 1 a
U
, inclusive.Pase cada uno a través de una función.
Convierte el entero actual en una cadena binaria
Asigne sobre la cadena, pasando cada carácter a través de una función, donde
E
está el índice actual yF
es la cadena completa.Repite el personaje actual
©
es lógico AND (&&
) yª
es lógico OR||
, así que aquí estamos comprobando siV
es verdadero (no cero) o no.Si
V
es verdad, entoncesX
se repiteY+1
veces.Si
V
es falsey, entoncesX
se repiteY
sustraído de (n
) la longitud (l
) deZ
veces.Convertir de nuevo a un entero de base 10.
Salida implícita de la matriz resultante.
fuente
Gaia , 15 bytes
Usos
-1
para izquierda y1
para derecha.Pruébalo en línea!
Explicación
fuente
Protón , 79 bytes
0
está a la izquierda,1
está a la derecha.Pruébalo en línea!
Sin golf
fuente
C # (.NET Core) ,
192187 + 23 bytes-5 bytes gracias a TheLethalCoder
El recuento de bytes también incluye:
Pruébalo en línea!
Entrada:
left
estrue
,right
esfalse
Explicación:
fuente
using System.Linq;
más cortonamespace System.Linq{}
o me estoy perdiendo algo aquí? Hace mucho tiempoMath
yConvert
ambos están en elSystem
espacio de nombres, por lo que elegirnamespace System.Linq
es el más corto: permite usar ambosSystem
y lasSystem.Linq
clases.Dyalog APL, 23 bytes
left is
1
right is0
(se pasa como argumento izquierdo de la función)⍳
es generador de índice{
...}¨
aplica la función entre llaves a cada elemento de la derechab←2⊥⍣¯1⊢⍵
b está codificado como binario (usando el inverso de decodificación para obtener el número mínimo de bits necesarios para representar⍵
en la base 2)⍳≢b
generar índices para el vector b (≢b
es la longitud de b)⌽⍣⍺
marcha atrás⍺
tiempos (usados condicionalmente aquí para estiramiento izquierdo o derecho)b/⍨
b replicado por (replica los bits según el índice (inverso))2⊥
decodificar desde la base 2TryAPL en línea
fuente
JavaScript (ES6), 131 bytes
Esto es significativamente más largo que la respuesta de Shaggy , pero quería probar un enfoque puramente bit a bit.
Debido al límite de 32 bits de las operaciones JS bitwise, esto funciona solo para n <128 .
Toma entrada en la sintaxis de curry
(n)(r)
, donde r es falso para izquierda / verdad para derecha.Formateado y comentado
Manifestación
Mostrar fragmento de código
fuente
JavaScript (ES6), 113 bytes
¡Oh, esto es demasiado tiempo! Esto es lo que sucede cuando pasas el día escribiendo JavaScript "real", niños; te olvidas de jugar al golf correctamente!
Usos cualquier valor o Truthy Falsey para
b
, confalse
ser "izquierda" ytrue
"tener razón".Intentalo
fuente
Jalea , 11 bytes
Pruébalo en línea!
Argumento # 1:
n
Argumento # 2:
1
para la izquierda,0
para la derecha.fuente
Retina , 111 bytes
Pruébalo en línea! Toma el número y, o bien
L
oR
como un sufijo (o en una línea separada). Explicación:Convierte de decimal a unario y cuenta de 1 a
n
.Convierte de unario a binario.
Envuelva cada bit
R
yL
caracteres de acuerdo con su posición en la línea.Reemplazar el relevante
R
oL
caracteres con el dígito adyacente apropiado.Elimine los caracteres sobrantes y conviértalos de binario a decimal.
fuente
1
an
. No solo eln
número th.JavaScript (ES6),
130127 bytes3 bytes, gracias Kevin
Seguro que no conozco suficiente ES6 para este sitio, ¡pero lo intenté! Recorre cada número y recorre cada representación binaria para ese número, repitiendo cada carácter cuantas veces sea necesario.
fuente
d=>n=>
), como hicieron las otras dos respuestas de JS ES6. Además, creo que puede guardar otros 2 bytes cambiandok=-1,l=b.length;while(++k<l)s+=b[k].repeat(d?k+1:l-k);
ak=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l+~k);
(comenzando enk=0
lugar de-1
, y ell-k-1
que luego se requiere se acortal+~k
). Además, ¿están los paréntesis alrededor de lo(i).toString(2)
requerido?+~k
parece que debería funcionar, pero no puedo entenderlo, se pone cada vez loco. Gracias por los otros consejos!l+~k
es incorrecto, ya que no lo es,l-k-1
perol-k+1
... Lo malo. Todavía puede campo de un byte empezandok
en cero sin embargo:k=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l-k+1);
.Ruby, 98 bytes
fuente
a{r ?a:a.reverse}
??
,r?
se habrían interpretado como un nombre de método.Java 8, 136 bytes
Lambda (curry) de
Boolean
a un consumidor deInteger
. El parámetro booleano indica si estirar a la izquierda (valorestrue
,false
). La salida se imprime en salida estándar, separada por nuevas líneas, con una nueva línea final.Lambda sin golf
Pruébalo en línea
Límites
Porque se acumulan en
int
s, las salidas están limitadas a 31 bits. Como resultado, las entradas están limitadas a 7 bits, por lo que la entrada máxima que admite el programa es 127.Explicación
Esta solución acumula cada número estirado utilizando operaciones bit a bit. El bucle externo itera
i
sobre los números a estirar, de 1 a n , e imprime el valor estirado después de cada iteración.El
while
bucle interno se incrementas
al número de bitsi
y el siguientefor
iterac
sobre cada posición de bit. Dentro de ese ciclo,d
cuenta hasta el número de veces que se repite el bit actual, que depende de la entradal
. En cada paso,o
se desplaza hacia la izquierda yi
se enmascara el bit apropiado y se introduce OR.fuente