Como es bien sabido ,
Chuck Norris contó hasta el infinito. Dos veces
Además ,
Chuck Norris puede contar hasta el infinito al revés.
Además, aunque quizás sea menos conocido, Chuck Norris puede hablar un poco de español además del inglés.
El reto
Escriba un programa (o función) que se pueda ejecutar en dos idiomas diferentes. En un idioma, el programa debería generar la secuencia
1, 1, 2, 2, 3, 3, 4, 4, ...
y en el otro idioma debe producir la secuencia (incluidos los ceros a la izquierda)
1, 2, ..., 9, 01, 11, 21, 31, ..., 89, 99, 001, 101, 201, ...
Reglas
- Se permiten programas o funciones , en cualquier lenguaje de programación . Las lagunas estándar están prohibidas.
- Las diferentes versiones del mismo idioma (como Python 2/3) no cuentan como idiomas diferentes. Los lenguajes relacionados (como C / C ++ o Matlab / Octave) cuentan como diferentes.
- No se tomará ninguna entrada.
- El programa debe continuar emitiendo términos de la secuencia hasta que el usuario lo detenga. Como el programa no se detendrá solo, la salida no se puede producir al final. Debe producirse mientras se ejecuta el programa, ya sea de forma continua o en lotes.
- La salida puede usar STDOUT o equivalente, o puede mostrarse en una ventana gráfica. Se permite cualquier separador no numérico entre términos de secuencia, siempre que cada término pueda distinguirse claramente de sus términos vecinos. También es aceptable si la pantalla se borra entre los términos.
- Cualquiera de las secuencias puede comenzar en
0
lugar de1
. En ese caso, en la secuencia "dos veces" se0
debe repetir, al igual que los otros números. - Los ceros iniciales son significativos en la secuencia "hacia atrás". Por ejemplo, el décimo término es
01
; Ni1
ni001
son aceptables. - Si los dos idiomas usan codificaciones de caracteres diferentes, el programa se define por sus bytes , no por sus caracteres. Es decir, los bytes deben ser los mismos en los dos idiomas.
- El código más corto en bytes gana.
Respuestas:
05AB1E / Jelly ,
1413 bytes-1 byte gracias a Adnan (evite triplicar con una impresión no emergente)
Bytes sin formato (hexadecimal):
En la página de códigos de 05AB1E :
Pruébalo en línea!
En la página de códigos de Jelly :
Pruébalo en línea!
¿Cómo?
El programa 05AB1E imprime la cuenta doble con cada entrada separada por líneas nuevas:
El programa Jelly imprime el recuento inverso con cada entrada separada por nuevas líneas.
El analizador tratará un literal válido entre
[
y]
como el literal adjunto, de lo contrario, estos bytes son tokens indefinidos y, como tales, se convierten en tokens que separan el código en líneas.==>
no se analiza como un literal, por lo que el código es efectivamente:fuente
Ð,,
por==
.Python 2 / C (sonido metálico) ,
10910710084958889888784 bytesPython: ¡ Pruébalo en línea!
C: ¡ Pruébelo en línea!
La L en el código de Python es parte del delimitador.
Explicación:
En el código C, primero establece i en 0. Luego, comienza un comentario (
#
es un código válido en C para las#include
declaraciones) donde va el código Python. Al final del comentario, define una función que incrementa para siempre una variable y la imprime dos veces, delimitada por espacios. Entonces comienza un comentario.En el código de Python,
i=0;
establece i en cero. Python ignora la siguiente línea porque#
comienza un comentario de una sola línea. Luego lo incrementa para siempre y lo convierte en un número largo e imprime su representación de cadena invertida. La 'L' del largo es parte del delimitador. Después de eso, comienza una cadena de varias líneas para comentar el código C, que termina más tarde.-2 bytes gracias a @LuisMendo. -7 bytes gracias a @ZacharyT. -6 bytes más gracias a @ZacharyT. +11 bytes para corregir un error gracias a @ mbomb007. -7 bytes gracias a @Doorknob. +1 byte para corregir un error gracias a @Doorknob. -1 byte gracias a @yoann. -1 byte más gracias a @yoann. -3 bytes gracias a @Cyoce.
fuente
a(i){printf("%i %i ",i,i);a(i+1)}
while
bucle para el código C?`i`
lugar destr(i)
for(;;)printf("%i %1$i ",i++);
para guardar un byte. El1$
es un argumento posicional que le indicaprintf
que muestre el primer argumento (después de la cadena de formato).Jalea / Pyth, 15 bytes
El software SE destruye las no imprimibles, así que aquí hay un hexdump:
Ejecutar con
jelly f file
ypyth file
respectivamente.Explicación
Primero viene la parte Pyth.
.V
ejecuta un bucle infinito sobre la secuencia incremental a partir de su entrada, que está aquí1
. Luego_
revertimos (`
) el índice de bucle stringified ( ) (b
) y lo sacamos implícitamente. El;
está allí para finalizar el ciclo, y"
es necesario para tratar el resto del programa como un literal de cadena para que el analizador no se atragante.La parte de Jelly se explicará traduciendo primero el resto del programa desde la página de códigos de Jelly:
El
¶
actúa como un avance de línea, haciendo caso omiso de manera efectiva la primera parte del programa por lo que es un vínculo que nunca se llama. Luego comenzamos en1
y ejecutamos un bucle while (¿
) que usaṄṄ$
(imprimir dos veces) como su condición, e incrementa (‘
) el valor como el cuerpo del bucle.Por cierto, en sustitución de la parte Pyth con
1[DR,>]
sería crear una presentación jalea / 05AB1E válido en 14 bytes, pero el interpeter actual contiene un error que impide esto.fuente
Perl / JavaScript, 87 bytes
Perl
Un mecanismo que he usado mucho en políglotas JS / Perl es abusar del hecho de que la sustitución puede aceptar casi cualquier delimitador, el uso de
=
medios puedo utilizar las sustituciones insustanciales iniciales (primera sustitución0;print
conconsole.log;m
una bandera de/s
en$_
, que se encuentra actualmenteundef
) , a continuación, establecer$_
para el resultado de reemplazars
cons
en modo multilínea (/m
), que es0
. Ahora$_
es0
y comienzo elwhile
ciclo, esto luego se incrementa$_
. A continuación, llamoprint
, pasando una expresión regular que coincide (debido al||
final que coincide con una cadena vacía) y uso el&&
operador para luego enviar el reverso de$_
concatenado con una nueva línea ($/
está preinicializado a"\n"
). Esto cuenta hasta el infinito al revés.JavaScript
Muchas asignaciones variables aquí, enmascaradas en las
s///
llamadas de Perl . He definido las variabless
ym
que0
, aliasconsole.log
aprint
, corro alguna división sin sentido, conjunto$_
a0
e iniciar elwhile
bucle de incremento$_
, la llamadaprint
pasa en0
(m/s
, esto comienza la llamada am
en Perl, pero es tratada como la división estándar en JS) y nuestra cadena de destino ($_+"\n"+$_
) a través del operador de coma, que devuelve el último elemento de la lista. Evito la última parte del código Perl (&&reverse.$/
) porque$_+"\n"+$_
será veraz y, por lo tanto, puedo usar||
para producir unRegExp
objeto que contenga el final del código Perl que nunca se evalúa.Probado con Perl 5 y Nodo 6.
fuente
Nodejs / PHP,
131106 bytes-25 bytes gracias a @Titus
Usar NodeJS en lugar del navegador JS para un mejor formato de salida y un mejor manejo de bucle infinito
Pruebe el JavaScript en línea
Pruebe el PHP en línea
Tenga en cuenta que la salida TIO se corta después de 128 KB.
fuente
<!--←printf=(_,i)=>process.stdout.write(i),strrev=i=i>>1//--><?←for($i=0;;)printf("%s ",strrev($i++));
. 84 bytes (pero no la mitad de su enfoque):<!--←for(i=1;;)process.stdout.write(i+" "+i+++" ")//--><?for(;;)echo strrev(++$i),_;
o<!--←for(i=1;;)process.stdout.write((++i>>1)++" ")//--><?for(;;)echo strrev(++$i),_;
.i>>1
para repetir el número, pero tuve que cambiar elwrite(i)
para incluir un espacio, y porquewrite()
no acepta un número. Y tenía un error tipográfico (strrev=i=i>>1
->strrev=i=>i>>1
) que agregaba otro byte. Terminó siendo más corto de hacerwrite(i+i)
ystrrev=i=>i+" "
.V / Brain-flak Classic ,
27, 26 bytesHexdump:
Pruébalo en línea! en V (modificado ligeramente para que termine de modo que pueda ver la salida. En TIO, V solo sale si el programa termina)
Pruébalo en línea! en Brain-flak Classic
Este no es el más interesante de los políglotas, ya que el código V no tiene ningún efecto en el clásico Brain-Flak, y viceversa, sin embargo, es muy divertido usar mis dos idiomas en un desafío, y las dos soluciones son bastante interesantes. en su propia.
V Explicación:
Explicación de BFC:
fuente
Retina / Python 2, 61 bytes
Retina | Python 2
fuente
str()
con ``, pero aparentemente alteré el código Retina. No se por questr
, de lo contrario, obtendráL
los resultados. Pero en realidad lo hace el trabajo en la retina. Debes haber cambiado más de lo que dijiste que hiciste, como mover algo a una línea diferente.R / Octava ,
83807871 bytes-3 bytes gracias a Luis Mendo
#{ }#
es un comentario de bloque de octava y#
resulta ser el comentario de R. El intérprete R solo ve la siguiente línea como el cuerpo delwhile
bucle, y el intérprete de octava salta directamente al código de octavaLa parte R imprime pares de números que comienzan en 1, y la parte de octava imprime los números hacia atrás que comienzan en 0.
Espero ser superado (incluso por la misma combinación de idiomas); Acabo de escribir tanto código Matlab y R recientemente que pensé en intentarlo.
Pruébalo en línea! - Enlace de octava
fuente
i=i+1
?+=
no funciona en R, así que sí, tiene que ser así.end
necesario?while(1)
), podría guardar esos bytes.Ruby / Python2:
6864 bytesPerspectiva de rubí
inicio simple de variable:
"#{}"
es la sintaxis para la interpolación de cadenas. Lo uso para exec expresión en su lugar.p
es una abreviatura deputs
.loop
crea un bucle infinito.Luego está la
exec
cosa, pero nunca se evalúa, ya que el bucle infinito es infinito por definición.exec
No es necesario que produzca un error de sintaxis con el código Python.Perspectiva Python
Desde la perspectiva de Python, hay un común
i=0
. A continuación, Python tiene una sintaxis diferente para la interpolación de cadenas, por lo que esta línea simplemente se descarta. A continuación hay un bucle infinito similar a lo que otros publicaron.fuente
Bash / Check ,
5028 bytesGracias a @Doorknob por guardar un montón de bytes al cambiar de Python a Bash
Para golpear:
Estos son solo algunos comentarios, que se ignoran.
Comience una secuencia que va del 1 al infinito, luego canalice el resultado a
rev
.Verificar, checar, comprobar:
Esto cambia inmediatamente al modo 2D, yendo hacia la derecha.
>
dirige el derecho de propiedad intelectual, que no tiene ningún efecto. Se ajusta al comienzo de la línea y golpea#
vuelve a , lo que cambia del modo 2D. Luego golpea>
en modo 1D, que empuja 0 a la pila. Debido a que está en modo 1D, la IP pasa a la siguiente línea.#
cambia la IP al modo 2D nuevamente yv
dirige hacia abajo.El primero
#
vuelve al modo 1D nuevamente.p
genera el TOS como un número (pero no lo muestra) y luego<
imprime una nueva línea. Esto se hace dos veces, y luego el número se incrementa con)
.#
cambia al modo 2D nuevamente, por lo que la IP se ajusta al comienzo de la línea, pulsa#
para cambiar al modo 1D, etc.fuente
#
para comentarios y pueden realizar la tarea "números invertidos" muy fácilmente:seq 1 inf|rev
.i=1;loop{puts i.to_s.reverse;i+=1}
es un byte más cortoCJam /> <>,
2723 bytesA CJam:
Pruébalo en línea! - tenga en cuenta que tiene que esperar hasta el límite de 60 segundos para ver la salida, pero funciona sin conexión.
Esto define un literal de cadena de varias líneas que nunca se usa.
La segunda línea es así:
Para> <>:
Comienza una cadena literal.
Contenido de la cadena literal. Cada uno de los códigos de caracteres se empuja individualmente a la pila.
La IP se ajusta para alcanzar
"
nuevamente, lo que finaliza el modo de cadena.l
toma la longitud de la pila,a
empuja 10 y,
divide. Esto nos da la longitud de la pila / 10.:
duplica,n
imprime como un número,a
empuja 10 eo
imprime como un código de caracteres (una nueva línea).La misma cosa. Imprima el número seguido de una nueva línea. La pila ahora tiene una longitud 10 nuevamente (el contenido del literal de cadena original está en la pila).
La IP luego se envuelve
"
nuevamente, lo que lleva a 10 elementos más para ser empujados. La próxima vez,l
devuelve 20, por lo que se imprime 2, etc.La segunda línea nunca es tocada por la IP.
fuente
Röda / C (gcc) , 90 bytes
Röda: ¡Pruébalo en línea!
C: ¡Pruébelo en línea!
Explicación
Esto abusa del hecho de que
//
es una división interna en Röda pero un comentario de línea en C.En ambos idiomas,
main(){}
denota el programa principal, y ambos llaman a la funciónf
con un argumento ficticio de0
.En Röda,
a=1//1
hace la división int y asigna el resultado1
aa
. C vea=1
y hace lo mismo, pero todo después de esa tarea es un comentario para C. A partir de ahí, los dos idiomas se ramifican.Röda
Tenemos un bucle infinito con
while[]
( una condición vacía es verdadera ). Dentro de eso,` $a`
convierte el enteroa
en una cadena (con un espacio inicial) después de lo cual lo[::-1]
invierte (y sale con un espacio final). Entonces el valor dea
se incrementa en uno.Fuera del ciclo while, comienza un comentario multilínea
/*
y termina justo antes del final de la función.C
Después de haber ignorado el resto de la línea, el programa pasa a la segunda línea. Comenzamos con un punto y coma porque la
a=1
declaración debe terminarse. Después de eso, encontramos un bucle for simple que imprime la variable iterativa,a
, dos veces en cada iteración.Fuera del ciclo for,
/*
está ahí para ignorar el*/
comentario final de Röda .fuente
QBIC / QBasic 4.5 , 58 bytes
Esto abusa mucho del hecho de que todas las letras minúsculas son vistas como código QBasic literal por el intérprete QBIC y, por lo tanto, simplemente se pasan a la capa QBasic de QBIC. Cómo ambos idiomas ven este código, uno al lado del otro:
fuente
laserLANG / > <> , 163 bytes
Golf por primera vez, por lo que es un poco más grande de lo que probablemente podría ser. Quería usar> <>, pero dado que algunas personas ya lo usaban para crear la segunda secuencia, decidí que quería dar la oportunidad de crear la primera secuencia.
Prueba> <> en línea!
Para laserLANG, se necesita un intérprete fuera de línea para probarlo. Se puede encontrar aquí. .
laserLANG
comienza la ejecución en la
!
que se ignora por completo. luego alcanza el\
y comienza a viajar más allá de varios personajes que ignora por completo. Finalmente llega a otro\
y comienza la diversión. Básicamente tomé la idea detrás del "¡Hola Mundo!" bucle y condensó lo mejor que pude. Fue un poco difícil lidiar con el hecho de que laserLANG solo está a punto de disminuir / incrementar el contador de memoria cuando el contador del programa va hacia la izquierda / derecha respectivamente. Siento que la mayoría de los bytes podrían guardarse aquí haciendo algunos trucos en los que no he pensado.> <>
La ejecución comienza en lo
!
que hace que omita el\
. Luego continúa como si el código laserLANG no estuviera allí. No me di cuenta de que> <> solo tenía soporte para la división de flotación, por lo que un truncamiento corto y simple fue un poco confuso al principio.fuente
Befunge-98 / > <> , 32 bytes
Escribí esto antes de ver cuántas
><>
respuestas había. Algunos antecedentes:\
es un operador de cambio de dirección en> <>, en este caso empujándolo hacia abajo, mientras que en Befunge intercambia los dos primeros elementos de la pila. El código Befunge se ve así:Pruébalo en línea!
Imprime los números hacia atrás separados por nuevas líneas. Befunge imprime un espacio automáticamente después de cada número, por lo que cada dígito está separado por espacios. Repetidamente obtiene el último dígito, lo imprime y divide el número por 10 hasta que sea 0. Luego incremente y repita.
El código> <> baja inmediatamente a la segunda línea.
Pruébalo en línea!
Y es bastante simple. Obtenga la longitud de la pila, imprima dos veces con líneas nuevas y deje una copia de la longitud en la pila para el siguiente ciclo.
fuente
Rubí / Apilado , 37 bytes
Pruébalo en línea!
Esto imprime
1 1 2 2
... en Ruby y1 2 3 ... 01 11 21...
en Stacked.Explicación
En rubí:
Después de eliminar el comentario, esto se convierte en:
La única línea relevante aquí es la última.
p
devuelve su argumento, por lo quep p
imprime su argumento dos veces.$.
comienza en0
, por lo tanto$.+=1
incrementos$.
, devolviendo el valor incrementado. Por lo tanto, esto imprime cada número de1
dos veces.En apilado:
Esto es equivalente a los siguientes tokens:
Los dos primeros no son relevantes (básicamente, se transforman
0
en una reducción de la función). Luego,0
se empuja a la pila. Después, la función[1+:tostr rev out]
se empuja a la pila.loop
abre esta función y la ejecuta infinitamente.El interior de la función incrementa la parte superior de la pila (
1+
), la duplica (:
), la convierte en una cadena (tostr
), la invierte (rev
) y la genera (out
). Este proceso se repite infinitamente. Como el ciclo es infinito, el intérprete ignora todo lo que viene después de ese token.fuente
> <> / Jelly , 37 bytes (25 en la página de códigos de Jelly)
Prueba> <> en línea!
¡Prueba Jelly en línea!
> <> imprime la secuencia al infinito dos veces, Jelly cuenta hacia atrás.
> <> solo se refiere a la línea superior:
Y gracias a @ Challenger5 por guardar algunos bytes aquí en el salto de línea
Jelly ejecuta su código de abajo hacia arriba. Solo las últimas 2 líneas son relevantes.
fuente
><>
código tienen puntos de código ASCII que se corresponden con la página de códigos Jelly. No sé demasiado sobre este negocio de página de códigos, pero creo que esto daría como resultado los mismos bytes utilizados para representar el código. Los caracteres en las líneas inferiores son ignorados por><>
lo que no importa si son exactamente iguales entre las páginas de códigos. El recuento de bytes se tomó del><>
enlace TIO.","
simplemente empuja el valor ASCII,
a la pila, por lo que puede usarloa
en su lugar para un separador de nueva línea.C (gcc) / PHP ,
1028680 bytesEmite la secuencia doble en C y la secuencia inversa en PHP.
Pruébalo en C!
Pruébalo en PHP!
Explicaciones
C
En C, las
#
formas preprocesador de cosas. Realmente no sé mucho sobre C, pero no se queja cuando hay una línea vacía para estas cosas. El//
forma un comentario de línea. UNA\
al final de una línea está esencialmente "escapando" de la nueva línea y haciendo que las dos líneas sean tratadas como una. Esto también funciona para comentarios de línea, por lo que la segunda línea se ve como un comentario en C. La tercera línea hace el trabajo de generar los números con un bucle for simple. Después, simplemente hay un comentario.PHP
En PHP,
#
forma un comentario de línea, por lo que la primera línea se ignora por completo. La segunda línea imprime los números invertidos con un bucle for, y los separa con\nint main(i){for(;;i++)printf("%d %d ",i,i);}//
(el código C envuelto en una cadena).fuente