指定された数字を含む-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はどこですか?
オベロン14年

27
ホワイトスペースの回答は0点です。本当に実行してもよろしいですか?
ace_HongKongIndependence 14年

3
正規表現の使用は許可されていますか?正規表現の使用は、文字列の使用を意味します。同様に、リスト/コレクション(および同様の構造)の操作は、配列の操作と同じです。ここの@wallywestからの答えは正規表現を使用しています。これは、文字列や配列の使用を禁止しようとするときの質問について私が嫌いなものです。人々はそれらを使用する別の方法を見つけます。そして、答えが実際に正しく実装されている場合、複雑に見えるからといって、必要な数の票を得られません。
ミクロ

2
「空白はカウントされません。コードを適切にフォーマットしてください!」異なる言語の空白には異なる意味があるため、これを行うのに最適な方法ではありません。より多くの場合、それは単に「未使用/読み取り可能なバージョンも投稿する」だけです。
ボブ14年

2
@aceホワイトスペースで回答を作成しました(これには4時間のハードワークが必要でした)。スコアはゼロだと思いますよね?
ビクターStafusa 14年

回答:


75

空白、834文字(空白を差し引くと0)

このインタープリターを使用してテストしました。

これには、作成に4時間の苦労と恐ろしいデバッグが必要でした。しかし、完了です!

   	    	 
   	    	 
	
	    	    	 
			   		    
	  			    	    		
  			   		
		    	     	
   
		    	    	 
			
	  	  	 		
   	    	 
			   	
	  	
	  	  	 		

   	   	  
   	    		
			 
    		  	  
	  	
	  	   	 	
 
   		
	  

		 	   			
  		
	  

   	   			
 
    	    	 
			
	  	  	   
   	 	 
	 	    	    	 
				  	
	  	  	  	

   	  	   
   	 	 
	 		   	    	 
				  	
	  	  	  	

 
 	  	 	 

   	  	  	
   	     	
			
	  	   		 
   	     
	
  
   	   		 
   	     	
   	
		    	    		
				
 	
   	  	 	 
   	    		
   	    		
			   	
	   		 
 
 	   	  

   	   	 	
   	    	 
			
	  	  		  
   	    	 
			   	
	  	
	  	  		  




   	  	 		
  			  	  
	
 	   	     
	
  
 
 	   	  

   	  		  
   	     
	
     		  	  
	
 	


編集:HTMLトリックで提供される選択可能なテキスト。ここから別の場所にコピーして貼り付ける場合は[space][tab][linefeed][linefeed][linefeed]、100行または101行で最後に来たかどうかを確認してください(最後の行が改行で終わっている場合、エディターがカウントするか新しい行ではないかによって異なります)。

あなたのようにスペースを考慮し、それをこのように使用することはできませんという場合Sとして改行、Lタブなど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
「空白を差し引くと0」を悪用する+1
Jwosty

12
ハハ、私は教訓を学びました。:P
duci9y 14年

2
@Cruncher言語は明確に定義されており、完全に明確です。あなたの特定の質問について:数字は一連のスペースとタブであり、数字をバイナリ(スペース= 0、タブ= 1、ビッグエンディアンバイナリ形式)で表し、改行で終了します。したがって、改行に到達すると数字が終了することがわかります。
ティムS. 14年

1
今日、ホワイトスペースを学びました。codegolf.stackexchange.com/a/23216/17886
duci9y

7
「ホワイトスペースはカウントされません」と解釈します。この答えが無効であることを意味します。;)+1
Tim Seguine 14年

24

Bash + utils-20

seq -100 100|grep 9

または、スクリプト内の場合は21バイト

seq -100 100|grep $1

スクリプトを実行するには:

sh myscript 9

4
grepbashまたはではありませんsh。別のユーティリティです!
-devnull

私は同意しなければなりません、それは純粋なシェル/バッシュではありません:)
ニックオライ14年

1
質問を見ます。 答えを念頭に置きます。 すでに投稿されたものとまったく同じ答えが表示されます。くそー!+1
帽子をかぶった男14

6
これは文字列を使用していると思います。
デビッドコンラッド14年

1
@DavidConradそのように見ると、すべてが文字列を使用します。プログラムソースは文字列です。端末は文字列を使用します。等
大佐三十二14年

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 14年

2
この回答(+1)は好きですが、暗黙的に文字列を使用していませんか?
チャールズチャールズ14年

2
これは、暗黙の文字列変換を使用しない
クラウディウ

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 14年

2
@VoronoiPotato印刷も文字列操作です。しかし、明らかにそうする必要があります。
ティムセギーン14年

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、200に0を含む配列作成
リース

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 14年

おっとっと。そうです、@ duci9y。修正しました。
マナトワーク14年

6

K-45文字

賞を受賞していませんが、Kゴルフは過小評価されています。Kは適切な間隔ではきれいにならないので、これをそのままにしておきます。Kが重要な空白とそうでない空白について非常にうるさいからです。

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

説明:

  • a:100-!201-0から200までのリストを作成し、100から減算します。これで、-100から100までの数値が得られますが、質問の仕様からは逆になります。後でいつでも修正できるので、今のところはこれをに割り当てますa
  • _ _abs-何らかの理由でKが_abs浮動小数点の結果を与えると考えるので、これらの数値の絶対値の下限を取ります。ありがたいことに、それらをフローリングすると整数に戻ります。
  • 10_vs'-各(')整数を基数10の数値として展開します(_vs「スカラーからのベクトル」の略)。'上記の関数はアトムを操作するため、各演算子を使用する必要がないことに注意してください。
  • @[...;100;0,]-リストの項目をインデックス100(0を基数10に展開した結果である空のリスト)で、関数0,を先頭にゼロを付加することにより修正します。この修正がないと、この関数は入力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 14年

2
@ duci9y実際、Kは特に、ネイティブデータベースソフトウェアKDBを使用して、高速で大量のトランザクションを処理するウォールストリートのニッチ市場を見つけました。近親者のJも使用されていますが、企業や学術の文脈で使用されています。
algorithmshark 14年

それは素晴らしいことです!私は、難解な言語はただの楽しみであると信じていました。そうではないのは良いことです。
duci9y 14年

説明には「配列は使用できません」と書かれていませんか?
オマー

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

2つの追加ポイントについて、「&&」を「&&」に置き換えることができます。また、末尾の改行をドロップすると、1文字少なくなります。
デジタル外傷14年

1
スクラッチ-新しいルールを見ました:「編集:空白はカウントされません。コードを適切にフォーマットしてください!」。だから私はあなたがすべての非空白文字を数えるようになると思いますか?
デジタル外傷14年

次に、;sを改行に変換し、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
これは暗黙の文字列変換のように見え、文字列なしのルールに違反します。
ボロノイポテト14年

私のせいじゃない。私は言語を作りませんでした。私が持っているものを使いました。また、変換は内部で行われます。文字列を処理するコードには何もありません(出力を除く)。
イスマエルミゲル14年

私がルールを読む方法では、数値を算術的に処理する必要があります。それらを文字列として扱うことは、あなた自身であろうと言語やライブラリであろうと、立ち入り禁止です。しかし、他のほとんどすべての人が同様の方法で規則を回避しています。
デビッドコンラッド14年

まあ、誰もが最小の方法でそれを成し遂げたいです。そして最小のものは、数値を文字列として扱うことです(コード内で暗黙的に文字列に変換することなく内部的に)。
イスマエルミゲル

4

Mathematica 28

申し訳ありませんが、抵抗できませんでした。

:)

指示は次のとおりです。「0〜9の数字(両端を含む)を指定すると、関数/サブルーチンは、指定された数字を含む-100〜100(両端を含む)のすべての数字を出力します。」


以下は、すべてのそのような番号を順番に印刷します。

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

特別なボーナスとして、指定された数字を含まない同じ範囲の数字を印刷します。:)


しかし、これは、フィルタとしてのnは使用しないでください
Murta

@Marta、はい、私はパズルの意図を覆しました(そのため、 "Sorry"と言いました)、技術的に適切な答えを提供しました。
DavidC 14年

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 14年

ああ、確かに、最後に追加したのはそれを台無しにしました。コードを更新したので、199になりました。それを指摘してくれてありがとう!
ヨッヘンラインシュリュッセル14年

気づかなかった:D過去数日は母国語でのコーディングが多すぎた;)
ヨッヘンラインシュリュッセル14年

圧縮バージョンのスペースをすべて削除しました...エラーが発生しませんか?例:最初の4文字:intx...はいけません:int x
SirPython

4

C - 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 14年

@ duci9yが追加しました。
オベロン14年

これは結果を順不同で出力しませんか?(仕様が更新され、注文が重要であると述べられています。)
ガフィ14年

@Gaffiそれでは。コードを編集します。
オベロン14年

4
0含まれて0いることに気付かない。
ウゴレン14年

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 14年

@ duci9y必要がないため。読みやすくするためにフォーマットし、同様に追加します。
ガフィ14年

では機能しません0
duci9y 14年

@ duci9y失敗しません。元の投稿DIDが失敗するので、元の投稿(+2文字)から少し変更しました0。この最新バージョンで試しましたか?R 3.0.1を使用しています。
ガフィ14年

@ duci9y明確にするために、私のコードの最新バージョンこれを使用したことを意味しました。Rの私のバージョンは、問題にならないように最新バージョンに十分近いはずです。ただし、2。*バージョンではまったくテストしませんでした。
ガフィ14年

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です。
マーティントーマ14年

3

98文字のC回答

これは私が今までコーディングした中で最もセクシーなものの一つです

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を使用した「Works for me」。


驚くばかり!コードゴルフへようこそ。
duci9y 14年

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

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までの数字のセット()をバインド()します。動詞全体の単一の引数は、左側にパイプされます。i:100V
  • (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

アンダースコアは、否定記号と動詞-ネゲート/マイナスを区別するJの明確な(そして、私が主張するように、エレガントでAPLな)方法です。Kを使用すると、負の記号を「自然に」数字で使用できます。また、偶然にも、Kは不可解な構文のクラスターファックになりました。お好みで、それは本当にあなたをirkingだ場合、仕事;8!:1'4.0'8!:2または'-'I.@:=&'_'}":、私の数によって、表現するのではなく、結果としてプログラムに機能させるために、それぞれ7、11、および16文字の原価計算。
algorithmshark 14年

私はそれが何であるかを知っていますが、I / Oに関しては少し面倒です。結果の文字列を評価したい場合に備えてアンダースコアを印刷するよりも、数字を印刷するときにデフォルトでマイナス記号を生成する方が良いでしょう。
Desty

2

グルービー、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-40-30-20-10 0 10 20 30 40 50 60 70 80 90100


1
そして今日、新しい言語を発見しました。:)
duci9y 14年

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、これは印刷-100またはに失敗します100
DocMax 14年

今すぐ修正する必要があります
ダミールカシポビッチ14年

1うまく動作しますが、今0プリントは123...申し訳ありませんが、ここでトラブルメーカーであることを。
DocMax 14年

x = 0とすると それは問題なく動作しprompt()ます、問題は文字列を返すことでしたので、私は* 1を追加し、うまくいけば今は問題ないでしょう。ご提案ありがとうございます
ダミールカシポビッチ14年

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

行番号に1桁の数字を使用すると、空白を取り除くことができ、番号が10に達するようにするために複数のステートメントを1行に複数回持つ必要はありません。


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]

パターンマッチングで2行の定義を使用する場合、つまり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 14年

@ duci9yはい。具体的な理由:IIf(d = 0, IIf(d = n Mod 10, " " & n, "")
ガフィ14年

1

perl、117、意味のない空白文字を削除

あなたはもっとこのようなものを探していたと思います。stdinから読み取り、一致ごとに1行を出力します。正規表現、配列(またはセットまたはハッシュ、またはカバーの下にある配列である他のもの)または文字列、暗黙的またはその他、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 ")

0が正しく処理されなかったため、5文字を追加しました。(1桁の値がすべて返されます。)


1

コードゴルフをするのはこれが初めてです。これはかなり面白そうです。私は勝つことができませんが、私ができることを見せようと試みました。

Python:104(インポートをマリガンできる場合は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);}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.