Imprima todos los números del -100 al 100 que contengan un dígito dado

38

Si se proporciona un dígito entre 0 y 9 (inclusive), su función / subrutina debe imprimir todos los números entre -100 y 100 (inclusive) que contengan el dígito dado.

Por ejemplo:

Input: 9
Output: -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -79 -69 -59 -49 -39 -29 -19 -9 9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99

Reglas:

  • No puede usar cadenas (de cualquier forma que estén representadas en el idioma elegido) o matrices de caracteres. (Excepto para imprimir la respuesta en la consola).
  • No puedes usar matrices.

Tanteo:

Puntuación = longitud de la subrutina / función (no se contará el espacio en blanco)

La respuesta con la puntuación más baja gana.

Los espacios en blanco NO serán contados. ¡Formatee su código correctamente!

Algunas respuestas están utilizando expresiones regulares, que pueden violar la regla de sin cadenas, como señalan algunos miembros. Estas respuestas no serán aceptadas.

Por favor, pruebe su código 0antes de publicar.

duci9y
fuente
2
El resultado dado es incorrecto o no está claro. ¿Dónde están -98 ... -91 y 91 ... 98?
Oberon
27
Una respuesta de espacio en blanco puntuará 0. ¿Estás seguro de que quieres hacer eso?
pastebin.com slash 0mr8spkT
3
¿Se permite el uso de expresiones regulares? Trabajar con expresiones regulares significa trabajar con cadenas. Del mismo modo, trabajar con listas / colecciones (y estructuras similares) es lo mismo que trabajar con matrices. La respuesta de @wallywest aquí usa expresiones regulares. Esto es lo que no me gusta de las preguntas cuando intentan prohibir el uso de cadenas y / o matrices. Las personas encuentran formas alternativas de usarlos. Y si alguna respuesta realmente se implementa correctamente, no obtiene tantos votos como debería solo porque parece complicada.
microbio
2
"El espacio en blanco NO se contará. ¡Formatee su código correctamente!" No es una buena forma de hacerlo, ya que los espacios en blanco en diferentes idiomas tienen un significado diferente. Más a menudo, es simplemente "publicar una versión no legible / legible también".
Bob
2
@ace Creé una respuesta en espacios en blanco (necesitaba 4 horas de trabajo duro con esto). Creo que marca cero, ¿verdad?
Victor Stafusa

Respuestas:

75

Espacio en blanco, 834 caracteres (0 si resta espacios en blanco)

Usé este intérprete para probarlo.

Esto me llevó unas 4 horas de trabajo duro y una depuración horrible para crear. Pero ya está hecho!

   	    	 
   	    	 
	
	    	    	 
			   		    
	  			    	    		
  			   		
		    	     	
   
		    	    	 
			
	  	  	 		
   	    	 
			   	
	  	
	  	  	 		

   	   	  
   	    		
			 
    		  	  
	  	
	  	   	 	
 
   		
	  

		 	   			
  		
	  

   	   			
 
    	    	 
			
	  	  	   
   	 	 
	 	    	    	 
				  	
	  	  	  	

   	  	   
   	 	 
	 		   	    	 
				  	
	  	  	  	

 
 	  	 	 

   	  	  	
   	     	
			
	  	   		 
   	     
	
  
   	   		 
   	     	
   	
		    	    		
				
 	
   	  	 	 
   	    		
   	    		
			   	
	   		 
 
 	   	  

   	   	 	
   	    	 
			
	  	  		  
   	    	 
			   	
	  	
	  	  		  




   	  	 		
  			  	  
	
 	   	     
	
  
 
 	   	  

   	  		  
   	     
	
     		  	  
	
 	


EDITAR : Texto seleccionable provisto con trucos HTML. Si lo copia y pega desde aquí en otro lugar, verifique si obtuvo exactamente [space][tab][linefeed][linefeed][linefeed]al final con 100 o 101 líneas (dependiendo de si su editor cuenta o no una nueva línea si la última termina con un salto de línea).

En el caso de que no pueda usarlo de esta manera, considerando el espacio como S, el salto de línea como Ly la pestaña como T, y separando las líneas después del L's, aquí está:

SSSTSSSSTSL
SSSTSSSSTSL
TL
TSSSSTSSSSTSL
TTTSSSTTSSSSL
TSSTTTSSSSTSSSSTTL
SSTTTSSSTTL
TTSSSSTSSSSSTL
SSSL
TTSSSSTSSSSTSL
TTTL
TSSTSSTSTTL
SSSTSSSSTSL
TTTSSSTL
TSSTL
TSSTSSTSTTL
L
SSSTSSSTSSL
SSSTSSSSTTL
TTTSL
SSSSTTSSTSSL
TSSTL
TSSTSSSTSTL
SL
SSSTTL
TSSL
L
TTSTSSSTTTL
SSTTL
TSSL
L
SSSTSSSTTTL
SL
SSSSTSSSSTSL
TTTL
TSSTSSTSSSL
SSSTSTSL
TSTSSSSTSSSSTSL
TTTTSSTL
TSSTSSTSSTL
L
SSSTSSTSSSL
SSSTSTSL
TSTTSSSTSSSSTSL
TTTTSSTL
TSSTSSTSSTL
L
SL
STSSTSTSL
L
SSSTSSTSSTL
SSSTSSSSSTL
TTTL
TSSTSSSTTSL
SSSTSSSSSL
TL
SSL
SSSTSSSTTSL
SSSTSSSSSTL
SSSTL
TTSSSSTSSSSTTL
TTTTL
STL
SSSTSSTSTSL
SSSTSSSSTTL
SSSTSSSSTTL
TTTSSSTL
TSSSTTSL
SL
STSSSTSSL
L
SSSTSSSTSTL
SSSTSSSSTSL
TTTL
TSSTSSTTSSL
SSSTSSSSTSL
TTTSSSTL
TSSTL
TSSTSSTTSSL
L
L
L
L
SSSTSSTSTTL
SSTTTSSTSSL
TL
STSSSTSSSSSL
TL
SSL
SL
STSSSTSSL
L
SSSTSSTTSSL
SSSTSSSSSL
TL
SSSSSTTSSTSSL
TL
STL
L
L
Victor Stafusa
fuente
32
+1 explotando "0 si resta espacios en blanco"
Jwosty
12
Jaja, aprendí una lección. : P
duci9y
2
@Cruncher El lenguaje está bien definido y es completamente inequívoco . Para su pregunta particular: un número es una serie de espacios y pestañas, que representan el número en binario (espacio = 0, tab = 1, formato binario big-endian) y se termina con una nueva línea. Entonces sabe que un número termina cuando llega a una nueva línea.
Tim S.
1
Aprendí Whitespace hoy. codegolf.stackexchange.com/a/23216/17886
duci9y
77
Interpreto "NO se contará el espacio en blanco". significa que esta respuesta no es válida. ;) +1
Tim Seguine
24

Bash + utils - 20

seq -100 100|grep 9

O 21 bytes si en un script

seq -100 100|grep $1

Para ejecutar el script:

sh myscript 9
Nik O'Lai
fuente
44
grepno es basho sh. ¡Es otra utilidad!
devnull
Tengo que estar de acuerdo, no es puro shell / bash :)
Nik O'Lai
1
Ve la pregunta Hace la respuesta en mente. Ve exactamente la misma respuesta ya publicada. ¡Maldito! +1
El chico con el sombrero
66
Creo que esto está usando cadenas.
David Conrad
1
@DavidConrad Si lo miras de esa manera, todo usa cadenas. La fuente del programa es una cadena. El terminal usa cadenas. Etc.
Coronel Treinta y dos
9

JavaScript 133-1 = 132

¿Seguramente no podría haber nada malo con esta versión ahora ...?

for(k=prompt(),c=console,j=-100;100>=j;j++)if(i=j,0==j&j==k)c.log(0);else for(;i;)if(h=i%10,h=0>h?-h:h,i=i/10|0,h==k){c.log(j);break}

PROMPT: 2
CONSOLE.LOG:
-92
-82
-72
-62
-52
-42
-32
-29
-28
-27
-26
-25
-24
-23
-22
-21
-20
-12
-2
 2
 12
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 32
 42
 52
 62
 72
 82
 92

CONTROL, using zero
PROMPT: 0
CONSOLE.LOG:
    -100
    -90
    -80
    -70
    -60
    -50
    -40
    -30
    -20
    -10
      0
     10
     20
     30
     40
     50
     60
     70
     80
     90
    100
WallyWest
fuente
1
Incluso un poco más corto: for(i=-100,r=prompt();101>i;i++)(i+'').match(r)&&console.log(i).
VisioN
2
Me gusta esta respuesta (+1), pero ¿no utiliza implícitamente cadenas?
No es que Charles
2
esto usa conversión de cadena implícita
Claudiu
1
En realidad, chaps, no, no ... lo alert(RegExp(9).test(99))que se basa solo en números, también regresa truedebido al sistema de tipeo basado en JavaScript. Las funciones funcionan con los números como si fueran cadenas pero siguen siendo números ... Si cambia el código para leerlo r=RegExp(x=+prompt());for(i=-100;101>i;i++)r.test(i)&&console.log(i);console.log(typeof(x));console.log(typeof(i))y ejecutarlo, el tipo final de respuesta se mostrará xy icomo números ... Ergo, no estoy usando cadenas ...
WallyWest
2
La impresión @VoronoiPotato también es una operación de cadena. Pero obviamente estamos obligados a hacer eso.
Tim Seguine
8

GolfScript [24 bytes]

`:x;201,{100-}%{`x?-1>},

Descripción:

`:x;             - save input value to variable 'x' and remove from the stack
201,{100-}%      - create range from -100 to 100
{`x?-1>},        - filter the range by "index-of" condition

DEMO: http://golfscript.apphb.com/?c=MwoKYDp4OzIwMSx7MTAwLX0le2B4Py0xPn0sYA%3D%3D

Visión
fuente
sin embargo, esto usa cadenas
Claudiu
También utiliza matrices: 201, crea una matriz que contiene de 0 a 200.
Rees
6

Ruby: 92 caracteres

s=gets.to_i
$><<(-100..100).select{|n|a=n.abs;loop{break""if a%10==s;break if 0==a/=10}}*" "

Versión legible:

searchfor = gets.to_i
$><< (-100..100).select { |number|
  absnumber = number.abs
  loop {
    break "" if absnumber % 10 ==s
    break if 0 == absnumber /= 10
  }
} * " "

Ejecución de muestra:

bash-4.2$ ruby -e 's=gets.to_i;$><<(-100..100).select{|n|a=n.abs;loop{break""if a%10==s;break if 0==a/=10}}*" "' <<< 9
-99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -79 -69 -59 -49 -39 -29 -19 -9 9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99

Prueba de funcionamiento:

bash-4.2$ for i in {0..9}; do diff -w <(ruby -e 's=gets.to_i;$><<(-100..100).select{|n|a=n.abs;loop{break""if a%10==s;break if 0==a/=10}}*" "' <<< $i) <(seq -100 100|grep $i|tr \\n \ ) > /dev/null; echo "$i : $?"; done
0 : 0
1 : 0
2 : 0
3 : 0
4 : 0
5 : 0
6 : 0
7 : 0
8 : 0
9 : 0
hombre trabajando
fuente
No pasa la 0prueba.
duci9y
Ups Tienes razón, @ duci9y. Corregido
manatwork
6

K - 45 char

No gana ningún premio, pero K golf está subrepresentado. K no se pone más bonito con el espacio adecuado, así que lo dejaré como está, porque K se pone muy exigente sobre qué espacio en blanco es importante y cuál no.

{|a@&x _in'@[10_vs'_ _abs a:100-!201;100;0,]}

Explicado:

  • a:100-!201- Haga una lista de 0 a 200 inclusive, luego reste de 100. Ahora tenemos los números de -100 a 100 inclusive, pero al revés de las especificaciones de la pregunta. Siempre podemos arreglar eso más tarde, así que por ahora solo asignaremos esto a a.
  • _ _abs- Tome el piso del valor absoluto de estos números, porque, por alguna razón, K piensa que _absdebería dar resultados en coma flotante. Afortunadamente, colocarlos en el suelo los convierte de nuevo en enteros.
  • 10_vs'- Expanda cada 'entero ( ) como un número base 10 ( _vssignifica "vector de escalar"). Tenga en cuenta que no tuvimos que usar el operador Each 'en las funciones anteriores porque operan en átomos.
  • @[...;100;0,]- Modifique el elemento en nuestra lista en el índice 100 (una lista vacía, que es el resultado de expandir 0 en la base 10) por la función 0,, que antepone un cero al frente. Sin esta corrección, esta función fallará en la entrada 0.
  • &x in'- Ahora, devuelve los índices ( &) donde xhay un dígito en ( _in) cada ( ') de las expansiones que construimos con tanto cuidado anteriormente.
  • |a@- Finalmente, use estos índices para indexar ae invertir la lista en el orden correcto.

El uso es obvio, aunque la buena suerte es tener un intérprete de K. (Hay una implementación de código abierto en Github que puede compilar).

  {|a@&x _in'@[10_vs'_ _abs a:100-!201;100;0,]} 0
-100 -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100
  {|a@&x _in'@[10_vs'_ _abs a:100-!201;100;0,]} 5
-95 -85 -75 -65 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -45 -35 -25 -15 -5 5 15 25 35 45 50 51 52 53 54 55 56 57 58 59 65 75 85 95
Algoritmo de tiburón
fuente
Me pregunto si los idiomas como K tienen algún uso productivo fuera de escenarios como esta pregunta. ¿Ellos?
duci9y
2
@ duci9y En realidad, K en particular se ha encontrado un nicho de mercado en Wall Street que maneja transacciones de alta velocidad y gran volumen, utilizando su software de base de datos nativo KDB. El pariente cercano J también encuentra uso, aunque más en contextos corporativos y académicos.
algormshark
¡Eso es genial! Yo creía que los lenguajes esotéricos son solo por diversión. Es bueno ver que ese no es el caso.
duci9y
¿No dice la descripción "No puedes usar matrices"?
Omar
6

golpetazo 55 49 caracteres:

(sin contar espacios en blanco &&)

for i in {-100..100}
do
  [[ $i =~ $1 ]] && echo $i
done

Ejecutándolo diciendo:

bash filename 9

produciría:

-99
-98
-97
-96
-95
-94
-93
-92
-91
-90
-89
-79
-69
-59
-49
-39
-29
-19
-9
9
19
29
39
49
59
69
79
89
90
91
92
93
94
95
96
97
98
99
devnull
fuente
Puede reemplazar "&&" con "&&" por dos puntos extra. También cuento un char menos si dejo caer la nueva línea final.
Digital Trauma
1
Tacha eso: acabo de ver la nueva regla: "EDITAR: los espacios en blanco NO se contarán. ¡Formatee su código correctamente!" . ¿Entonces supongo que solo puedes contar todos los caracteres que no sean espacios en blanco?
Digital Trauma
Luego, puede convertir los ;s en líneas nuevas y ahorrar 2 puntos.
joeytwiddle
4

PHP 67 bytes:

for($i=-100;$i<101;++$i)if(strpos($i,$_GET[n])!==!1)echo$i,PHP_EOL;

Sí, hay una llamada 'strpos', ¡pero estoy usando solo números!

Aquí hay una versión 'no golfista':

for($i=-100;$i<101;++$i)
{
    if(strpos($i,$_GET[n])!==false)
    {
        echo $i,PHP_EOL;
    }
}

Para que esto funcione, puede probarlo aquí: http://writecodeonline.com/php/

Solo recuerde agregar $_GET[n]='<number>';al comienzo del código.

O, en una lámpara o servidor xampp, puede crear una página y luego acceder a ella en el navegador, con el parámetro ?n=<number>después del nombre del archivo.

Ismael Miguel
fuente
1
Esto parece una conversión de cadena implícita, violando la regla de sin cadenas.
VoronoiPotato
No es mi culpa. No hice el idioma. Usé lo que tengo. Además, la conversión se realiza internamente. No hay nada en el código que trate con cadenas (excepto la salida).
Ismael Miguel
La forma en que leo la regla, tienes que lidiar con los números aritméticamente. Tratarlos como cadenas, ya sea por usted o por el idioma o la biblioteca, está prohibido. Pero casi todos los demás eluden la regla de manera similar.
David Conrad
Bueno, todos quieren hacerlo de la manera más pequeña. Y el más pequeño es tratar los números como cadenas (internamente sin conversión implícita a cadena en el código).
Ismael Miguel
4

Mathematica 28

Lo siento, no pude resistirme.

:)

Las instrucciones son: "Siempre que haya un dígito entre 0 y 9 (inclusive), su función / subrutina debe imprimir todos los números entre -100 y 100 (inclusive) que contengan el dígito dado".


Lo siguiente imprime todos esos números en orden.

f@n_ :=Print/@Range[-100,100]

Como un bono especial, imprime esos números en el mismo rango que no contienen el dígito dado. :)

DavidC
fuente
Pero esto no usa n como filtro
Murta
@Marta, sí, subvirtí la intención del rompecabezas (es por eso que dije "Lo siento"), mientras que técnicamente proporcioné una respuesta adecuada.
DavidC
4

Mi primer intento aquí, así que tal vez estoy haciendo algo mal, disculpe;)
Entonces, no estaba seguro de si tenía que agregar toda la clase o solo la lógica interna.

Java - 199 caracteres

intx=System.in.read()-48;for(inti=-100;i<101;i++){if((i<10&&i==-x)||(i>-10&&i==x)||(i<-9&&((i/100==x&&i<-99)||i%10==-x||i/10==-x))||(i>9&&((i/100==x&&i>99)||i%10==x||i/10==x)))System.out.println(i);}

Aquí una forma más legible:

int x = System.in.read() - 48;
for(int i = -100; i < 101; i++) {

    if((i < 10 && i == -x) || (i > -10 && i == x)
        || (i < -9 && ((i / 100 == x && i < -99 ) || i % 10 == -x || i / 10 == -x))
        || (i > 9 && ((i / 100 == x && i > 99) || i % 10 == x || i / 10 == x)))

        System.out.println(i);

}

Supongo que la idea básica no era tan mala, pero necesitaba demasiadas excepciones, para finalmente resolver todos los casos ...: /

Jochen Reinschlüssel
fuente
Lo sentimos, no funciona con 0:(
duci9y
Aw, claro, la última adición que hice lo estropeó. Código actualizado, así que ahora tengo 199. ¡Gracias por señalar eso!
Jochen Reinschlüssel
No me di cuenta de eso: D Demasiada codificación en idioma nativo en los últimos días, supongo;)
Jochen Reinschlüssel
Eliminaste todos los espacios de tu versión compacta ... ¿eso no causaría un error? Ejemplo: Sus primeros 4 caracteres: intx... ¿no debería ser int x:?
SirPython
4

C - 104 107 114 caracteres - 0 = 104 107 114

a,b;main(i){i=getchar()-48;for(a=-100;a<101;a++){for(b=a;a&&abs(a%10)!=i;a/=10);if(a|!i&!b)printf("%i ",b);a=b;}}

Sin golf:

#include <stdio.h>

int a, b;

int main(int i) {
    i = getchar() - '0';
    for( a = -100 ; a < 101 ; a++ ) {
        for( b = a ; a && abs(a % 10) != i ; a /= 10 );
        if( a | !i & !b )
            printf("%i ", b);
        a = b;
    }
}
Oberon
fuente
Agradable. ¿Podrías también publicar una versión sin golf con el espacio en blanco adecuado, por favor?
duci9y
@ duci9y lo agregó.
Oberon
¿Esto no generará resultados fuera de servicio? (La especificación se ha actualizado para indicar que el orden es importante)
Gaffi
@ Gaffi Bueno, entonces. Editaré el código.
Oberon
44
No se da cuenta de que 0contiene 0.
Ugoren
3

R 87 93

Aquí hay una mejora:

a=scan();r=-100:100;s=abs(r);r[(!a&!r%%10)|a&(a==s%%10|a==floor(s/10)|a==floor(s/100))]

(Potencialmente) Más legible, con notas:

a=scan() # take user input of selected digit
r=-100:100 # define our scanning range
s=abs(r) # copy the range as the absolute value for proper floor() calculation
#r[<criteria>] is functionally the same as subset(r,<criteria>)
r[ # when any of the criteria below are met, use that value from the range
    (!a & !r%%10) # case when input is 0, !a is evaluated as "a when a<>0 == true"
    | a & # all other digits below
    a==s%%10
    |
    a==floor(s/10)
    |
    a==floor(s/100)
    ] # R does not require a print command, so this as-is will display the corresponding values
Gaffi
fuente
¿Por qué no hay espacios en blanco?
duci9y
@ duci9y Porque ninguno es necesario. Voy a formatear para que sea más legible y lo agregaré también, solo por si acaso.
Gaffi
No funciona con 0.
duci9y
@ duci9y No falla. Hice un pequeño cambio desde la publicación original (+2 caracteres), ya que la publicación original no se activó 0. ¿Intentaste con esta versión más reciente? Estoy usando R 3.0.1.
Gaffi
@ duci9y Para ser claros, quise decir que usaste esto en la versión más reciente de mi código . Mi versión de R debe estar lo suficientemente cerca de la versión más reciente para que no importe. Sin embargo, no probé en absoluto en ninguna versión 2. *.
Gaffi
3

Prólogo: 75

f(D) :-
  between(-100,100,N) ,
  number_chars(N,Ds) ,
  member(D,Ds) ,
  writeln(N) ,
  fail
  .
Nicholas Carey
fuente
¿Cómo se llama esto? Lo guardé en un test.plarchivo, comencé swipl, ingresé consult('test')y luego ingresé f(9). Pero solo regresó false.
Martin Thoma
3

C respuesta en 98 caracteres

Esta es una de las cosas más sexys que he codificado

main()
{
    int t=getchar()-48,i=100,j=-i;
    while ((i=t-i%10?i/10:!printf("%d\n",j)) || (i=++j<0?-j:j)<101  );
}

La versión anterior, con 104 caracteres que no son espacios en blanco:

int main()
{
    int t=getchar()-48,i,j=-101;
    while(++j<101)
    {
        i=j<0?-j:j;
        while(i = t-i%10?i/10:!printf("%d\n",j));
    }
}

"Funciona para mí" usando GCC y CLANG.

asr
fuente
¡Increíble! Bienvenido a Code Golf.
duci9y
2

GNU coreutils (44)

read N
seq -100 100 | grep $N | tr '\n' ' '
echo

donde trse utiliza para convertir nuevas líneas en espacios, y echoproporciona una nueva línea final.

$ bash ./script
9
-99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -79 -69 -59 -49 -39 -29 -19 -9 9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99
joeytwiddle
fuente
Esto no es muy diferente de una respuesta existente .
devnull
2

Javascript 116

   a = 0
        for(i=-100;101>i;i++){
        m=Math
        f=m.floor
        j = m.abs(i)
        if((j>10&&f(j/10)==a)||j-f(j/10)*10==a||j/100==a){

             console.log(i)

        }
        }
VoronoiPatata
fuente
2

J - 27 caracteres

Todo el espacio en blanco se puede quitar de forma segura, lo que significa 27 caracteres. Los números negativos en la salida tendrán _un signo negativo: esta es la forma en que J escribe sus números negativos.

((e. 10 #.^:_1 |)"0 # ]) & (i: 100)

Explicado:

  • V & (i: 100) - Bind (& ) el conjunto de números de -100 a 100 inclusive ( i:100) como el argumento correcto del verbo principal ( V). El argumento único del verbo completo se canaliza hacia el lado izquierdo.
  • (U"0 # ])- Use el resultado del verbo Usobre cada número del argumento correcto ("0 ) para seleccionar ( #) elementos del argumento correcto ( ]).
  • (e. 10 #.^:_1 |)- Dado el dígito para probar como argumento izquierdo y el número para verificar como argumento derecho, expanda en la base 10 ( 10 #.^:_1) el valor absoluto del número (| ) y verifique si el dígito es un elemento de esa expansión ( e.).

Uso:

   ((e. 10 #.^:_1 |)"0 # ]) & (i: 100) 0
_100 _90 _80 _70 _60 _50 _40 _30 _20 _10 0 10 20 30 40 50 60 70 80 90 100
   ((e. 10 #.^:_1 |)"0 # ]) & (i: 100) 5
_95 _85 _75 _65 _59 _58 _57 _56 _55 _54 _53 _52 _51 _50 _45 _35 _25 _15 _5 5 15 25 35 45 50 51 52 53 54 55 56 57 58 59 65 75 85 95
Algoritmo de tiburón
fuente
La convención de subrayado para negativo en J siempre me molestó: no sería tan malo si usara un símbolo menos en la salida (sin alterar el verbo de formato).
Desty
El subrayado es la forma inequívoca de J (y, diría, elegante y APLish) de diferenciar los signos negativos del verbo -Negate / Minus. K le permite usar el signo negativo "naturalmente" en los números, y por cierto K salió un clusterfuck sintáctico arcano. Si realmente te molesta, trabaja en tu elección de ;8!:1, '4.0'8!:2o '-'I.@:=&'_'}":, costando 7, 11 y 16 caracteres respectivamente para hacer que el programa resultante sea una función en lugar de una expresión, según mi recuento.
algormshark
Sé lo que es, pero de todos modos es un poco molesto cuando se trata de E / S. Sería mejor si produjera signos menos por defecto al imprimir números, en lugar de imprimir guiones bajos presumiblemente en caso de que alguien quisiera evaluar la cadena resultante.
Desty
2

Groovy, 127

def x = args[0].toInteger()
for (k in -100..100)
    if (k == x)
        print " ${k}"
    else
        for (n = Math.abs(k); n > 0; n = (int) n / 10)
            if (n % 10 == x) {
                print " ${k}"
                break
            }

Sin cadenas (excepto para generar espacios entre los números), sin matrices de caracteres u otras matrices, sin expresiones regulares. Probado con 0. Salida:

-100-90-80-70-60-50-40-30-30-10 0 10 20 30 40 50 60 70 80 90100

David Conrad
fuente
1
Y descubrí un nuevo idioma hoy. :)
duci9y
2

Javascript - 108

No estoy seguro de si la respuesta de JavaScript existente se tendrá en cuenta porque usa expresiones regulares, así que creé una sin ella:

for(x=+prompt(i=-100);i<101;i++)if((j=i<0?-i:i)&&j%10==x||((j/100==x||(0|j/10)==x)&&x)||j==x)console.log(i)

También se puede acortar a 101 si la variable x se coloca directamente, como:

for(x=5,i=-100;i<101;i++)if((j=i<0?-i:i)&&j%10==x||((j/100==x||(0|j/10)==x)&&x)||j==x)console.log(i)

Básicamente verifica si los valores absolutos de las operaciones div o mod son iguales al dígito (que también funciona para 100).

Damir Kasipovic
fuente
Si x=1, esto no se imprime -100o 100.
DocMax
Debería arreglarse ahora
Damir Kasipovic
1funciona muy bien, pero ahora 0las impresiones 1, 2, 3... Siento ser un alborotador aquí.
DocMax
Bueno, si pones x = 0; funciona bien, el problema fue que prompt()devuelve una cadena, así que agregué * 1 y espero que ahora esté bien. Gracias por sus sugerencias
Damir Kasipovic
1
parseInt(j/10)se puede reemplazar con el (0|j/10)que es más corto y evita las cadenas implícitas. La conversión (inevitable) de cadena a número prompt()*1no se puede acortar como +prompt(). (O aún más corto, cambie la función para comenzar for(x=+prompt(i=-100);....
DocMax
2

GW Basic: 107 caracteres excluyendo espacios en blanco

1 input n
2 for i=-100 to 100
3 j=abs(i):a=j mod 10
4 if a=n then 8
5 b=j\10
6 if (b=n) and b then 8
7 if (b<10) or n<>1 then 9
8 print i
9 next

El uso de un solo dígito para los números de línea ayuda y eliminar el espacio en blanco significa que no es realmente necesario tener múltiples declaraciones en una línea más de una vez para mantener los números llegando a 10.

Steven Don
fuente
2

MARAVILLOSO, 71

f={z->
  _=10
  (-_*_.._*_).grep {
    a=it.abs()
    b=a%_==z
    a<_?b:b||(int)(a/_)%_==z
  }
}

println f(0)
println f(9)

Resultados en

[-100, -90, -80, -70, -60, -50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
[-99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -79, -69, -59, -49, -39, -29, -19, -9, 9, 19, 29, 39, 49, 59, 69, 79, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
nacido en el aire
fuente
2

Javascript 96

Usando bitwise o:

b=Math.abs;
a=prompt();
for(i=-100;i<101;)
    if(!(b(i++/10)^a && b(i%10)^a)||b(i)/a==100)  console.log(i)
TheBlitz
fuente
2

Haskell, 86 75 (78 con espacios en blanco necesarios)

f 0=[-100,-90..100]
f d=[b|b<-[-100..100],abs(b`quot`10)==d||abs(b`rem`10)==d]

Sin golf:

f dig =
  if dig == 0
    then [-100, 90 .. 100]
    else [num | num <- [-100 .. 100], abs (num `quot` 10) == d || abs (num `rem` 10) == d]
bcsb1001
fuente
Si utiliza una definición de dos líneas con coincidencia de patrones, es decir, a 0=[-100....y a d=[b|b<-....usted puede deshacerse de la if then elsey ahorrar unos pocos bytes.
nimi
1

Python - 172 caracteres

def f(x,y,z):
    if x%10==y or (x>9 and x/10==y) or (x==100 and y==1):
        print z
def g(x,y):
    f(abs(x),y,x)
    if x<100:
        g(x+1,y)
def h(y):
    g(-100,y)

Para probar dentro de Python:

>>> h(4)
-94
-84
-74
...
-49
-48
...
intx13
fuente
1

VBA 121

(sin espacios en blanco o Subdefinición contada):

Sub t(d)
For n = -100 To 100
m = Abs(n)
o = o & IIf(d = 0, IIf(d = n Mod 10, " " & n, ""), IIf(d = n Or d = m Mod 10 Or d = Int(m / 10) Or d = Int(m / 100), " " & n, ""))
Next
MsgBox o
End Sub
Gaffi
fuente
¿Funciona esto con 0?
duci9y
@ duci9y Sí. Específicamente porque:IIf(d = 0, IIf(d = n Mod 10, " " & n, "")
Gaffi
1

perl, 117 con caracteres de espacio en blanco no significativos eliminados

Creo que estabas buscando algo más como esto. Lee desde stdin, genera una línea por partido. Sin expresiones regulares, matrices (o conjuntos o hashes o cualquier otra cosa que sea una matriz debajo de las cubiertas) o cadenas, implícitas o de otro tipo, excepto las cadenas pasadas a imprimir:

chomp($x=<>); for($y=-100;$y<101;++$y) { $a=abs $y; print "$y " if $a % 10 == $x || $a > 9 && int( $a/10 ) == $x || $a==100 && $x==1}; print "\n"

p.ej:

ski@anito:~$ echo 0 | perl -e 'chomp($x=<>); for($y=-100;$y<101;++$y) { $a=abs $y; print "$y " if $a % 10 == $x || $a > 9 && int( $a/10 ) == $x || $a==100 && $x==1}; print "\n"'
-100 -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 

ski@anito:~$ echo 1 | perl -e 'chomp($x=<>); for($y=-100;$y<101;++$y) { $a=abs $y; print "$y " if $a % 10 == $x || $a > 9 && int( $a/10 ) == $x || $a==100 && $x==1}; print "\n"'
-100 -91 -81 -71 -61 -51 -41 -31 -21 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -1 1 10 11 12 13 14 15 16 17 18 19 21 31 41 51 61 71 81 91 100 

ski@anito:~$ echo 2 | perl -e 'chomp($x=<>); for($y=-100;$y<101;++$y) { $a=abs $y; print "$y " if $a % 10 == $x || $a > 9 && int( $a/10 ) == $x || $a==100 && $x==1}; print "\n"'
-92 -82 -72 -62 -52 -42 -32 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -12 -2 2 12 20 21 22 23 24 25 26 27 28 29 32 42 52 62 72 82 92 
skibrianski
fuente
1

F # 87 92 - 7

let f n = {-100..100}
|>Seq.filter(fun x->abs x%10=n||abs x/10=n&&n>0)
|>Seq.iter(printf"%d ")

agregó 5 caracteres porque 0 no se manejó correctamente. (Se devolverían todos los valores de un dígito).

Rik
fuente
1

Esta es la primera vez que juego código golf. Esto se ve bastante interesante. No puedo ganar, pero intenté y quería mostrar lo que podía hacer.

Python: 104 (89 si puedo hacer la importación) - si los resultados deben imprimirse exactamente como se muestra en el ejemplo

from math import *

def g(x):
    t = 10
    p = lambda i: x == i % t or i >= t and p(i / t)
    for i in range(-100, 101):
        if p(abs(i)):
            print i,
    print
# g(0)
# -100 -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100

Python: 71 - si la salida se puede hacer fuera de la función y la única restricción para la salida es que no se imprimen números violadores

f = lambda x: [(-i, i) for i in range(101) for j in (10, 100) if i % j == x or i >= j and i / j == x]
# print f(0)
# [(0, 0), (0, 0), (-10, 10), (-20, 20), (-30, 30), (-40, 40), (-50, 50), (-60, 60), (-70, 70), (-80, 80), (-90, 90), (-100, 100), (-100, 100)]
sadakatsu
fuente
1

JavaScript 125 char

Perdón por las varias ediciones que he tenido problemas para hacer esto desde mi teléfono :)

function c(n,i){o=i||0;h=100;j=o-h;f=Math.abs(j);m=f/10|0;if((m==n&&m!=0)||n==f%10||f/h==n)console.log(j);if(o<h*2)c(n,o+1);}
IvanScript19
fuente
1

Dogelang, 42 caracteres que no son espacios en blanco

f=n->for i in(-100..101)=>if n in str i=>print i

Igual que mi solución Python, recién convertida a dogelang .

Claudiu
fuente