El doble tiempo no es doble

36

Basado en este desafío.

En el juego de ritmo osu! , el modificador de dificultad "Doble tiempo" en realidad solo aumenta la velocidad en un 50%.

Su tarea, es escribir un programa que da salida a una positiva incluso entero (mayor que 0), y cuando se duplica cada byte / personaje (a elegir cuál) en el código fuente, se debe emitir el número multiplicado por 1,5.

Por ejemplo, si su código fuente es ABCy que genera 6, entonces AABBCCdebería generar 9.

Siguiendo las reglas del desafío original:

Reglas

  • Debes construir un programa completo.
  • La fuente inicial debe tener al menos 1 byte de longitud.
  • Ambos enteros deben estar en la base 10 (está prohibido enviarlos a cualquier otra base o con notación científica).
  • Su programa no debe tomar entradas (o tener una entrada vacía no utilizada) y no debe arrojar ningún error (las advertencias del compilador no se consideran errores).
  • La salida de los enteros con espacios finales / iniciales está permitida.
  • No puede asumir una nueva línea entre copias de su fuente.
  • Este es el , por lo que gana la menor cantidad de bytes en cada idioma .
  • Se aplican las lagunas predeterminadas .

Me imagino que esto será mucho menos trivial que el desafío original, ¡pero esperamos ver algunas respuestas creativas y únicas!

Skidsdev
fuente
@ Fatalize write a program that outputs a positive even integerSí, lo hará. Cada número par se puede multiplicar por 1.5 para dar como resultado un entero entero
Skidsdev
Me parece un tonto.
Erik the Outgolfer
@EriktheOutgolfer Muy similar, pero estoy seguro de que será mucho más difícil (a menos que me falte algo obvio).
TheLethalCoder
99
La duplicación de caracteres puede hacer que los idiomas triviales no sean ejecutables. Me pregunto si hay una solución en un lenguaje que no sea de un solo carácter o basado en expresiones.
Keyu Gan
3
@TheLethalCoder Quizás el mayor obstáculo sea full program. Es difícil imaginar que un programa duplicado todavía tenga un punto / función de entrada válido.
Keyu Gan

Respuestas:

22

Pilones , 7 5 4 bytes

Elegí un idioma aleatorio en TIO lo usé

46vt

Explicación:

Pruébalo en línea!

46    # Stack is [4, 6]

v     # Reverse the stack [6, 4]

t     # take top of stack 4

Doblado:

4466   # Stack is [4, 4, 6, 6]

vv     # Reverse the stack twice so it's the same [4, 4, 6, 6]

tt     # take top of stack 6 and again which is 6 again

Guardado 2 bytes gracias a officialaimm

Guardado 1 bytes gracias a Veedrac

LiefdeWen
fuente
1
Hola, 4/6vtfunciona bien ...
officialaimm
18
De todo corazón apruebo la estrategia de elegir un lenguaje TIO aleatorio y aprenderlo para un desafío
Skidsdev
@officialaimm tienes razón, gracias.
LiefdeWen
1
4/6 <- 4 dividido por nada -> 4; y luego 6. 44 // 66 <- 4 dividido por 4 -> 1; nada dividido por nada -> nada; y luego 6 y 6. Quizás. Bien hecho sin embargo.
V. Courtois
1
¿No 46vtharía lo mismo?
Veedrac
21

Jalea , 2 bytes

!‘

Pruébalo en línea!

Explicación:

!‘ Implicit 0
!  Factorial
 ‘ Increment

Versión duplicada:

!!‘‘

Pruébalo en línea!

Explicación:

!!‘‘ Implicit 0
!    Factorial
 !   Factorial
  ‘  Increment
   ‘ Increment
Erik el Outgolfer
fuente
Si lo haces por tercera vez, pasa de 3 -> 4, no 3-> 4.5 ??
tuskiomi
@tuskiomi No porque no se espera que lo haga.
Erik the Outgolfer
14

LibreOffice Calc, 8 bytes

=A2+3
19

Guárdelo como *.csvy ábralo en LibreOffice Calc. Obtendrás 22 en A1.


Doblarlos:

==AA22++33

1199

Obtendrás 33 en A1

tsh
fuente
1
elección inteligente de idioma!
Giuseppe
11

MATL , 3 bytes

TnQ

Pruébalo en línea! O versión duplicada .

Explicación

En MATL, un valor escalar (número, carácter, valor lógico) es lo mismo que una matriz 1 × 1 que contiene ese valor.

Versión normal:

T    % Push true
n    % Number of elements of true: gives 1
Q    % Add 1: gives 2

Versión duplicada:

TT   % Push [true, true]
n    % Number of elements of [true, true]: gives 2
n    % Number of elements of 2: gives 1
Q    % Add 1: gives 2
Q    % Add 1: gives 3
Luis Mendo
fuente
77
TnQ para la respuesta ...: D [A veces usamos tnq como forma abreviada de agradecimiento]
officialaimm
8
@officialaimm :)[a veces usamos eso para obtener los primeros nelementos de una matriz ...]
Luis Mendo
10

vim, 5

i1<esc>X<C-a>

Sin duplicar:

i1<esc>  insert the literal text "1"
X        delete backwards - a no-op, since there's only one character
<C-a>    increment, giving 2

Con duplicación:

ii11<esc>   insert the literal text "i11"
<esc>       escape in normal mode does nothing
XX          since the cursor is on the last character, delete "i1"
<C-a><C-a>  increment twice, giving 3
Pomo de la puerta
fuente
10

No estoy seguro si esta respuesta es válida. Solo publique aquí en caso de que alguien tenga ideas de aquí.

Nodo.js con bandera -p, 7 bytes

Por Alex Varga :

3/3*22

33//33**2222

Nodo.js con bandera -p, 11 bytes

El viejo:

3*2*0/1+22

33**22**00//11++2222

Salida 22 y 33.

tsh
fuente
¿Cómo se supone que debe hacer 33? TIO no parece capaz de hacerlo. Se cierra a las 00.
V. Courtois
1
Qué tal: 3/3 * 22
Alex Varga
@AlexVarga tan dulce.
tsh
@ V.Courtois está utilizando el modo estricto
tsh
1
@EdmundReed necesita un -pindicador para generar el valor de expresión
tsh
10

Python 2 REPL, 11 bytes

(3/1)*(2/1)

Esto simplemente evalúa a 3 * 2 = 6. Duplicado, es

((33//11))**((22//11))

que evalúa a 3 ** 2, que es 3 a la potencia de 2, o 9.

Carl Schildkraut
fuente
Bienvenido al sitio. Este python no produce ningún resultado y, por lo tanto, no es una respuesta válida. Sin embargo, si cambia su respuesta para que sea una REPL de Python , esto produce resultados y, por lo tanto, es una respuesta válida. Tendrá que eliminar esta respuesta o cambiar el idioma de python 2 a python 2 repl.
Wheat Wizard
@WheatWizard ¡Gracias y gracias por ayudar! ¿Hice esto correctamente?
Carl Schildkraut
8

APL, 7 bytes

⊃⍕⌊3×⍟2

Impresiones 2.

⊃⊃⍕⍕⌊⌊33××⍟⍟22

Impresiones 3.

Pruébalo en línea!

Waaat?

Soltero:

3×⍟2         → 2.079441542  ⍝  3 * ln 2
⌊2.079441542 → 2            ⍝  floor
⊃⍕           → '2'          ⍝  format and take first character

Doble:

⍟⍟22          → 1.128508398  ⍝  ln ln 22
×1.128508398  → 1            ⍝ signum
33×1          → 33           ⍝  33 * 1
⌊⌊33          → 33           ⍝  floor
⊃⊃⍕⍕          → '3'          ⍝  format and take first character
Uriel
fuente
¿Podría alinear los comentarios verticalmente? ¿O tenemos configuraciones diferentes o algo que hace que mi extremo se repita de esta manera ?
Kevin Cruijssen
@KevinCruijssen Creo que esa es la fuente de su navegador, pero de todos modos los navegadores no muestran APL como monoespaciado. that mine prntscr.com/fwp0l0
Uriel
Ah, bueno, todavía es legible y una gran respuesta independientemente. :)
Kevin Cruijssen
Se presenta como monoespacio para mí. Probablemente solo depende de la fuente ( prnt.sc/fwrnz1 ). Sin embargo, los comentarios definitivamente no están alineados: P
therealfarfetchd
@therealfarfetchd gracias, he actualizado las últimas 3 filas
Uriel
5

En realidad , 3 bytes

1u*

Pruébalo en línea!

Explicación:

1u* Errors are ignored
1   Push 1
 u  Increment
  * Multiply

Versión duplicada:

11uu**

Pruébalo en línea!

Explicación:

11uu** Errors are ignored
1      Push 1
 1     Push 1
  u    Increment
   u   Increment
    *  Multiply
     * Multiply
Erik el Outgolfer
fuente
5

CJam , 4 bytes

],))

¡Pruébalo normalmente!

¡Pruébalo doblado!

Explicación

Normal:

]     e# Wrap the stack in an array: []
 ,    e# Get its length: 0
  ))  e# Increment twice: 2

Doble:

]         e# Wrap the stack in an array: []
 ]        e# Wrap the stack in an array: [[]]
  ,       e# Get its length: 1
   ,      e# Get the range from 0 to n-1: [0]
    )     e# Pull out its last element: 0
     )))  e# Increment 3 times: 3
Gato de negocios
fuente
Las sobrecargas son complicadas ...;)
Erik the Outgolfer
AB],También funciona.
geokavel
4

05AB1E , 2 bytes

X>

Pruébalo en línea!

Explicación:

X> Only top of stack is printed
X  Push X (default 1)
 > Increment

Versión duplicada:

XX>>

Pruébalo en línea!

Explicación:

XX>> Only top of stack is printed
X    Push X (default 1)
 X   Push X (default 1)
  >  Increment
   > Increment
Erik el Outgolfer
fuente
4

Neim , 2 bytes

𝐓>

Pruébalo en línea!

Explicación:

𝐓> Implicit 0
𝐓  Factorial
 > Increment

Versión duplicada:

𝐓𝐓>>

Pruébalo en línea!

𝐓𝐓>> Implicit 0
𝐓    Factorial
 𝐓   Factorial
  >  Increment
   > Increment
Erik el Outgolfer
fuente
4 de las 5 respuestas ... ¡realmente lo vas a conseguir en esta!
TheLethalCoder
55
@TheLethalCoder Al menos no son 15 todavía. ;)
Erik the Outgolfer
3

Pyth, 3 bytes

he1

Pruébalo aquí

Explicación:

he1
h   Increment
 e   Last digit
  1   1

Versión duplicada:

hhee11

Pruébalo aquí

Explicación:

hhee11
h      Increment
 h      Increment
  e      Last digit
   e      Last digit
    11     11
Erik el Outgolfer
fuente
1
uno he11 de una respuesta
Uriel
3

R , 11 bytes

8*(!0)+1*!1

Pruébalo en línea!

!es negación, y **es exponenciación (un alias para ^). Los números se convierten en booleanos: 0a FALSE, todos los demás a TRUE. Booleanos se convierten en enteros: FALSEa 0, TRUEa 1, por lo que !0==1, !1==0, !!00==0y !!11==1.

La versión única calcula así 8×1+1×0 0=8, y la versión doble calcula 880 0+111=12.

Robin Ryder
fuente
1
Yo sólo estaba tratando de llegar a una solución depender de *y **, pero se me adelantó!
Giuseppe
@Giuseppe No estoy convencido de que mi solución sea óptima (la necesidad de corchetes !0es molesta). Puede haber algo más corto con -y *, pero aún no he encontrado una solución así ...
Robin Ryder
2

Cubix , 6 bytes

O.1)W@

Impresiones 2.

  O
. 1 ) W
  @

Empujes 1, )incrementos,W salta a la izquierda a Oqué salidas 2y @finaliza el programa.

Doblado, obviamente OO..11))WW@@ , lo que en un cubo es:

    O O
    . .
1 1 ) ) W W @ @
. . . . . . . .
    . .
    . .

Empuja 1dos veces, )aumenta dos veces, Wsalta nuevamente a la izquierda, lo que lo coloca a la derechaO hacia el norte, que sale 3, y luego el siguiente comando es el @que finaliza el programa.

Pruébalo en línea!

Duplicado en línea!

Giuseppe
fuente
2

Klein , 8 6 bytes

/3+@4\

individual , doble

Explicación

Para el single, el programa sigue un camino bastante sencillo. El primer espejo lo desvía hacia el segundo que lo desvía a través del4 hasta el final del programa.

El doble es un poco más complejo. Aquí está:

//33++@@44\\

Los primeros dos espejos funcionan de la misma manera, sin embargo, hay un nuevo espejo debido a la duplicación que desvía la ip hacia el principio, es atrapado por el duplicado del primer espejo y desviado hacia el final. Todo lo que se ejecuta es el 33++que se evalúa como 6.

Asistente de trigo
fuente
2

TI-Basic, 3 bytes

Soltero:

int(√(8

La última expresión se devuelve / imprime implícitamente en TI-Basic, por lo que imprime 2

Doblado:

int(int(√(√(88

Devoluciones / impresiones 3

TI-Basic es un lenguaje tokenizado ; int(,, √(y 8cada uno de los bytes en memoria.

pizzapants184
fuente
Técnicamente la especificación desafío afirma explícitamente que cada personaje se duplica, pero voy a permitir esto y actualizar la especificación
Skidsdev
2

Ruby REPL, 8 bytes

";3#";22

El REPL sólo imprime el último valor evaluado: 22.

Doblado:

"";;33##"";;22

Esta vez 33es el último valor evaluado. La cadena se descarta una vez más y #comienza un comentario.

m-chrzan
fuente
2

> <>, 19 8 bytes

32b*!{n;

Impresiones 22
Pruébelo en línea!

Explicación:

32b   push literals onto the stack: [3,2,11]
*     multiply the top two values: [3,22]
!     skip the next instruction
{     (skipped)
n     pop and print the top value from the stack (22)
;     end execution

Doblado:

3322bb**!!{{nn;;

Impresiones 33
Pruébelo en línea!

Explicación:

3322bb push literals onto the stack: [3,3,2,2,11,11]
**     multiply top values (twice): [3,3,2,242]
!      skip next instruction
!      (skipped)
{{     rotate the stack to the left (twice): [2,242,3,3]
nn     pop and print the top two values from the stack (33)
;      end execution

Versión Antigua:
Normal:

11+!vn;
    n
    ;

Impresiones 2
Pruébelo en línea!

Explicación:

1    push 1 on the stack: [1]
 1    push 1 on the stack: [1,1]
  +    add top two values of the stack: [2]
   !    skip the next instruction
    v    (skipped)
     n    print the top value of the stack (2)
      ;    end execution

Doblado:

1111++!!vvnn;;
        nn
        ;;

Impresiones 3
Pruébelo en línea!

Explicación:

1111    push four 1's on the stack: [1,1,1,1]
    +    add top two values of the stack: [1,1,2]
     +    add top two values of the stack: [1,3]
      !    skip the next instruction
       !    (skipped)
        v    change direction of execution (down)
         n    print the top value of the stack (3)
          ;    end execution

KSmarts
fuente
55
Creo que también debes duplicar las nuevas líneas.
Erik the Outgolfer
@EriktheOutgolfer Ya no hay nuevas líneas.
KSmarts
1

Zsh , 14 bytes

<:|echo 22
3
:

Pruébalo en línea!

Obtener un programa completo en un lenguaje que no sea de golf para imprimir cualquier cosa con el código fuente duplicado de esta manera es un desafío. Zsh es muy útil para esto, porque los archivos y heredocs se pasan implícitamente a cat. Echemos un vistazo a la primera línea en ambos casos:

<:|echo 22            # Give the file : on stdin to cat. cat pipes to 'echo 22', which ignores stdin
<<::||eecchhoo  2222  # Start heredoc on following lines with EOF string '::', pass to cat.
                      # Since cat exits 0, 'eecchhoo 2222' is not executed

Mientras 3no sea un programa, solo se imprimirá el primer programa 22. El segundo programa se imprimirá 33rodeado de nuevas líneas adicionales (debido a la duplicación).


Si 3es una función / programa / alias, ¡entonces esta solución de 18 bytes seguirá funcionando!

<:|echo 22\\c\
3
:

Pruébalo en línea!

La última \es la continuación de la línea, por lo que la nueva línea se descarta, lo que efectivamente hace la declaración de eco echo '22\c3'. El \ceco deja de imprimir después 22(lo que también suprime la nueva línea).

Función Gamma
fuente
1

Perl 6 , 14 bytes

'|d 3#';say 22

Pruébalo en línea! ¡Pruébalo doblado!

Esto utiliza la función de depuración convenientemente nombrada ddpara enviar el programa duplicado a STDERR. Para separar la lógica, encerramos el programa duplicado entre comillas, que luego se cancelan entre sí cuando se duplica, junto con un carácter #de comentario para comentar el programa normal ahora no válido.

Jo King
fuente
0

MathGolf , 2 bytes

▬)

Pruébalo en línea! Pruébalo doblado

Similar a otras respuestas en que la primera instrucción produce un 1par cuando se duplica y la segunda la incrementa. En este caso, he usado la exponenciación inversa ( 0**0 = 0**0**0 = 1), pero también podría haber sido cualquiera de las !£≤°instrucciones y quizás incluso más que me perdí.

Jo King
fuente