打印从-100到100的所有包含给定数字的数字


38

如果提供的数字介于0到9(含)之间,则您的函数/子例程应打印包含给定数字的-100到100(含)之间的所有数字。

例如:

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

规则:

  • 您不能使用字符串(以您选择的语言表示的任何方式)或char数组。(除了将答案打印到控制台上。)
  • 您不能使用数组。

得分:

分数=子例程/函数的长度(不计空格)

得分最低的答案将获胜。

空格将不计算在内。请正确格式化您的代码!

一些成员使用正则表达式回答某些规则,这可能违反了无字符串规则。这些答案将不被接受。

0发布前,请先测试您的代码。


2
给定的输出错误或不清楚。-98 ... -91和91 ... 98在哪里?
Oberon 2014年

27
空白答案的得分为0。确定要这样做吗?
ace_HongKong独立2014年

3
可以使用正则表达式吗?使用正则表达式意味着使用字符串。类似地,使用列表/集合(和类似的结构)与使用数组相同。@wallywest的答案在这里使用正则表达式。当他们试图禁止使用字符串和/或数组时,我不喜欢这些问题。人们找到了使用它们的替代方法。而且,如果有任何答案确实能够正确实施,它就不会因为它看起来很复杂而获得应有的投票数。
microbian

2
“空格将不计算在内。请正确格式化代码!” 这并不是一个好方法,因为不同语言中的空格具有不同的意义。更常见的是,它只是“也发布了非高尔夫版本/可读版本”。
鲍勃

2
@ace我在空白处创建了一个答案(需要4个小时的努力工作)。我认为它的得分为零,对不对?
维克多·斯塔夫萨

Answers:


75

空格,834个字符(如果减去空格,则为0)

使用此解释器对其进行测试。

这花了我4个小时的辛苦工作和恐怖的调试工作。但这完成了!

   	    	 
   	    	 
	
	    	    	 
			   		    
	  			    	    		
  			   		
		    	     	
   
		    	    	 
			
	  	  	 		
   	    	 
			   	
	  	
	  	  	 		

   	   	  
   	    		
			 
    		  	  
	  	
	  	   	 	
 
   		
	  

		 	   			
  		
	  

   	   			
 
    	    	 
			
	  	  	   
   	 	 
	 	    	    	 
				  	
	  	  	  	

   	  	   
   	 	 
	 		   	    	 
				  	
	  	  	  	

 
 	  	 	 

   	  	  	
   	     	
			
	  	   		 
   	     
	
  
   	   		 
   	     	
   	
		    	    		
				
 	
   	  	 	 
   	    		
   	    		
			   	
	   		 
 
 	   	  

   	   	 	
   	    	 
			
	  	  		  
   	    	 
			   	
	  	
	  	  		  




   	  	 		
  			  	  
	
 	   	     
	
  
 
 	   	  

   	  		  
   	     
	
     		  	  
	
 	


编辑:HTML技巧提供的可选文本。如果您将其从此处复制并粘贴到其他位置,请检查您是否恰好[space][tab][linefeed][linefeed][linefeed]以100或101行结尾(取决于您的编辑器是否计数(如果最后一行以换行符结尾)是否为新行)。

如果您无法以这种方式使用它,请将space视为S,将linefeed视为L并将tab视为T,并在的后面将其换行L,这是:

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

32
+1利用“如果减去空白
则为

12
哈哈,我学到了教训。:P
duci9y 2014年

2
@Cruncher语言定义明确,完全明确。对于您的特定问题:数字是一系列空格和制表符,以二进制形式表示数字(空格= 0,制表符= 1,大端数字二进制格式),并以换行符结尾。因此,当您到达换行符时,您便知道数字已完成。
Tim S.


7
我的解释是“空格将不计算在内”。表示此答案无效。;)+1
Tim Seguine 2014年

24

Bash + utils-20

seq -100 100|grep 9

或21个字节(如果在脚本中)

seq -100 100|grep $1

要运行脚本:

sh myscript 9

4
grep不是bashsh。这是另一个实用程序!
devnull 2014年

我必须同意,这不是纯粹的shell / bash :)
Nik O'Lai 2014年

1
看到问题。 牢记答案。 看到已经发布的完全相同的答案。该死!+1
帽子的家伙

6
我认为这是使用字符串。
David Conrad

1
@DavidConrad如果以这种方式查看,那么所有内容都将使用字符串。程序源是一个字符串。终端使用字符串。等
三十二上校

9

JavaScript 133-1 = 132

当然,此版本现在可能没有任何问题...?

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

1
甚至有点短:for(i=-100,r=prompt();101>i;i++)(i+'').match(r)&&console.log(i)
VisioN 2014年

2
我喜欢这个答案(+1),但是它不是隐式地使用字符串吗?
不是查尔斯(Charles)

2
这确实使用了隐式字符串转换
Claudiu 2014年

1
实际上,最糟糕的是,不,不是…… alert(RegExp(9).test(99))仅基于数字,true由于JavaScript的基于松散的键入系统而返回。该功能与数字的工作,虽然他们是字符串,但仍号码...如果你更改代码读取r=RegExp(x=+prompt());for(i=-100;101>i;i++)r.test(i)&&console.log(i);console.log(typeof(x));console.log(typeof(i))并执行它,最后的typeof响应会显示xi为数字...人机工程学,我没有使用字符串...
WallyWest 2014年

2
@VoronoiPotato打印也是一个字符串操作。但是显然我们必须这样做。
Tim Seguine 2014年

8

GolfScript [24字节]

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

描述:

`: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

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


这个使用字符串,虽然
克劳迪乌

它还使用数组:201,创建包含0至200的阵列
里斯

6

Ruby:92个字符

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

可读版本:

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

样品运行:

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

测试运行:

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

0测试失败。
duci9y

哎呀。您说得对,@ duci9y。已更正。
manatwork 2014年

6

K-45个字符

没有赢得任何奖项,但K打高尔夫球的人数不足。K不会以适当的间隔保留任何漂亮的外观,因此我将保持原样,因为K会非常挑剔哪个空白很重要,哪些不重要。

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

解释:

  • a:100-!201-列出从0到200(含)之间的列表,然后从100减去100。我们以后总是可以解决此问题,因此现在我们将其分配给a
  • _ _abs-以这些数字的绝对值为底,因为无论出于什么原因,K都认为_abs应该给出浮点结果。值得庆幸的是,对它们进行铺底会将它们重新变成整数。
  • 10_vs'-将每个(')整数扩展为以10为底的数字(_vs代表“标量向量”)。注意,我们不必'在上面的函数上使用Each运算符,因为它们对原子进行运算。
  • @[...;100;0,]-通过函数0,,在列表的索引100处修改项目(一个空列表,这是将0扩展到以10为底的结果),该函数在前面加上零。如果不进行此更正,此功能将在输入0上失败。
  • &x in'-现在,返回索引(&),其中()是我们在上面精心构建的扩展的每个()中的x数字。_in'
  • |a@-最后,使用这些索引为索引建立索引a,并将列表按正确的顺序反转。

用法很明显,尽管很幸运您可以使用K解释器。(在Github上有一个开源的实现可以编译。)

  {|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

我想知道像K之类的语言在这种问题之外是否有任何生产用途。有吗
duci9y

2
@ duci9y实际上,特别是K,已经使用其本机数据库软件KDB在华尔街找到了一个处理高速,大批量交易的利基市场。亲戚J也可以找到用处,尽管更多地用于公司和学术场合。
algorithmhark

那很棒!我相信深奥的语言只是为了娱乐。很高兴看到事实并非如此。
duci9y

描述中是否说“您不能使用数组”?
Omar

6

重击 55 49个字符:

(不计算周围的空格&&

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

通过说来执行:

bash filename 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

您可以将“ &&”替换为“ &&”,以获得额外的两点。另外,如果我删除尾随的换行符,我的字符数也减少了一个。
Digital Trauma 2014年

1
从头开始-我刚刚看到一条新规则:“编辑:将不计入空格。请正确格式化代码!” 。所以我想您只需要计算所有非空白字符?
Digital Trauma 2014年

然后,您可以将转换;为换行符,并保存2点。
joeytwiddle

4

PHP 67字节:

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

是的,有一个“ strpos”电话,但我只使用数字!

这是一个“解包”版本:

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

为此,您可以在这里进行测试:http : //writecodeonline.com/php/

只要记住要添加$_GET[n]='<number>';到代码的开头即可。

或者,在灯泡或xampp服务器上,您可以创建一个页面,然后在浏览器中使用?n=<number>文件名后面的参数来访问它。


1
这看起来像隐式字符串转换,违反了无字符串规则。
VoronoiPotato 2014年

不是我的错。我没有讲语言。我用我所拥有的。此外,转换是在内部进行的。代码中没有任何处理字符串的内容(输出除外)。
Ismael Miguel

我阅读规则的方式,您必须对数字进行算术处理。无论是由您还是由语言或库将它们都视为字符串是不可行的。但是几乎其他所有人都以类似的方式规避规则。
David Conrad 2014年

好吧,每个人都希望以最小的方式完成它。最小的是将数字视为字符串(内部无需在代码中隐式转换为字符串)。
Ismael Miguel

4

Mathematica 28

抱歉,我无法抗拒。

:)

这些说明是:“提供0到9(含)之间的数字,您的函数/子例程应打印包含给定数字的-100到100(含)之间的所有数字。”


下面按顺序打印所有此类数字。

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

作为一项特别的奖励,它会在相同范围内打印不包含给定数字的数字。:)


但这不使用n作为过滤器
Murta 2014年

@Marta,是的,我颠覆了难题的意图(这就是为什么我说“对不起”),同时从技术上提供了适当的答案。
DavidC 2014年

4

我的第一次尝试,所以也许我做错了什么,请原谅;)
因此,我不确定是否必须添加整个类或仅添加其中的逻辑。

Java-199个字符

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);}

这是一种更具可读性的形式:

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);

}

我想基本思想不是那么糟糕,但是需要太多的例外才能最终在所有情况下都可以解决...:/


抱歉,无法使用0:(
duci9y 2014年

噢,当然,我最近做的一堆弄乱了。更新了代码,所以我现在降至199。感谢您指出了这一点!
JochenReinschlüssel2014年

我没意识到那一个:D我猜在过去几天里用母语编码太多了;)
JochenReinschlüssel2014年

您删除了压缩版本中的每个空格...这不会导致错误吗?示例:您的前4个字符:intx...不应该是:int x吗?
SirPython

4

Ç - 104 107 114个字符- 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;}}

取消高尔夫:

#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;
    }
}

真好 您还可以发布带有适当空格的非高尔夫版本吗?
duci9y 2014年

@ duci9y添加了它。
Oberon 2014年

这会不会输出结果混乱?(规范已更新,表明该订单很重要。)
加菲2014年

@Gaffi好吧。我将编辑代码。
Oberon 2014年

4
无法注意到其中0包含0
ugoren 2014年

3

R 87 93

这是一个改进:

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

(可能)更具可读性,并带有注释:

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

为什么没有空格?
duci9y

@ duci9y因为没有必要。我将设置格式以使其更具可读性,并同时添加它,以保持良好的效果。
加菲2014年

不适用于0
duci9y

@ duci9y它不会失败。我对原始帖子(+2个字符)做了一个小改动,因为原始帖子DID失败0。您尝试使用此最新版本吗?我正在使用R 3.0.1。
加菲2014年

@ duci9y要清楚,我的意思是您在我的代码的最新版本使用了此功能。我的R版本应该与最新版本足够接近,不要紧。但是,我根本没有在任何2. *版本上进行测试。
加菲2014年

3

前言:75

f(D) :-
  between(-100,100,N) ,
  number_chars(N,Ds) ,
  member(D,Ds) ,
  writeln(N) ,
  fail
  .

你怎么称呼它?我将其保存在test.pl文件中,开始swipl,输入consult('test')然后输入f(9)。但它只回来了false
马丁·托马

3

C答案为98个字符

这是我编码过的最性感的东西之一

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  );
}

较旧的版本,具有104个非空白字符:

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));
    }
}

使用GCC和CLANG“为我工作”。


太棒了!欢迎来到Code Golf。
duci9y 2014年

2

GNU coreutils(44)

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

where tr用于将换行符转换为空格,并echo提供一个最终换行符。

$ 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

这与现有答案没有太大区别。
devnull 2014年

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)

        }
        }

2

J-27个字符

所有空格都可以安全删除,表示27个字符。输出_中的负数将带有负号:这只是J写入其负数的方式。

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

解释:

  • V & (i: 100)-将(&-100)范围从-100到100(含i:100)的数字集绑定为主要动词(V)的正确参数。整个动词的单个参数通过管道传递到左侧。
  • (U"0 # ])-使用U右侧参数("0)上每个数字的动词结果,从右侧参数()中选择(#)项目]
  • (e. 10 #.^:_1 |)-给定要测试的数字作为左参数,将数字检查作为右参数,以10为底扩展(10 #.^:_1)数字的绝对值(|),并检查该数字是否是该扩展的元素(e.)。

用法:

   ((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

J语言中的负号惯例总是让我感到困扰-如果在输出中使用减号(不会弄乱格式动词),那也不会太糟。
Desty 2014年

下划线是J区分歧义符号和动词-Negate / Minus 的明确方法(我认为是优雅而实用)。K让您“自然”地使用负号,而K偶然出现了一个语法错误的clusterfuck。如果确实让您感到不舒服,请按我的选择;8!:1,分别选择7,11 和16个字符的'4.0'8!:2,或'-'I.@:=&'_'}":,以使结果程序成为函数而不是表达式。
algorithmhark

我知道这是什么,但是在I / O方面却有点麻烦。如果在打印数字时默认情况下产生负号会更好,而不是在有人想评估结果字符串的情况下打印下划线,那就更好了。
Desty 2014年

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
            }

没有字符串(除了输出数字之间的空格),没有char数组或其他数组,没有正则表达式。经过0测试。输出:

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


1
我今天发现了一种新语言。:)
duci9y 2014年

2

Javascript-108

不知道是否会考虑现有的javascript答案,因为它使用了正则表达式,因此我创建了一个没有它的答案:

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)

如果直接放置x变量,也可以缩短为101,例如:

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)

它基本上检查div或mod操作的绝对值是否等于该数字(也适用于100)。


如果是x=1,则无法打印-100100
DocMax 2014年

应该立即修复
Damir Kasipovic 2014年

1工作得很好,但现在0版画123...对不起,这里是一个麻烦制造者。
DocMax 2014年

好吧,如果你把x = 0;它可以正常工作,问题是prompt()返回字符串,所以我加了* 1,希望现在应该可以。感谢您的建议
Damir Kasipovic 2014年

1
parseInt(j/10)可以替换(0|j/10)为既较短又避免隐式字符串的字符串。的(不可避免的)字符串到数字的转换prompt()*1不能缩短为+prompt()。(或更短的是,改变功能启动for(x=+prompt(i=-100);...
DocMax

2

GW Basic:107个字符(不包含空格)

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

对于行号使用单个数字会有所帮助,并且去除空格意味着实际上并不需要在一行上多次声明多个语句以使数字保持10。


2

古洛维,71

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

println f(0)
println f(9)

结果是

[-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]

2

Javascript 96

使用按位或:

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)

2

Haskell,86 75(78,必要的空格)

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

取消高尔夫:

f dig =
  if dig == 0
    then [-100, 90 .. 100]
    else [num | num <- [-100 .. 100], abs (num `quot` 10) == d || abs (num `rem` 10) == d]

如果您使用带有模式匹配的两行定义,即a 0=[-100....a d=[b|b<-....您可以摆脱if then else和保存一些字节。
nimi

1

Python-172个字符

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)

要在Python中测试:

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

1

VBA 121

(不Sub计空格或定义):

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

这可以用0吗?
duci9y 2014年

@ duci9y是的。特别是因为:IIf(d = 0, IIf(d = n Mod 10, " " & n, "")
加菲2014年

1

perl,117,除去了无意义的空白字符

我认为您正在寻找更多类似的东西。从标准输入读取,每次匹配输出一行。除了传递给print的字符串外,没有正则表达式,数组(或集(或集)或哈希或任何其他在底层的数组)或隐式或其他形式的字符串:

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"

例如:

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 

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 ")

添加了5个字符,因为0处理不正确。(将全部返回一位数字值。)


1

这是我第一次打代码高尔夫。这看起来很有趣。我赢不了,但我尝试并想展示我能做什么。

Python:104(如果可以mulligan导入,则为89)-如果必须完全按照示例中所示打印结果

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-如果输出可以在函数之外完成,并且输出的唯一限制是不打印任何违规数字

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)]

1

JavaScript 125个字符

抱歉,我在通过手机进行此操作时遇到了一些麻烦:)

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);}

1

Dogelang,42个非空白字符

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

与我的Python解决方案相同,只是转换为dogelang

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.