In tất cả các số từ -100 đến 100 có chứa một chữ số cho trước


38

Được cung cấp một chữ số từ 0 đến 9 (đã bao gồm), hàm / chương trình con của bạn sẽ in tất cả các số từ -100 đến 100 (đã bao gồm) có chứa chữ số đã cho.

Ví dụ:

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

Quy tắc:

  • Bạn không thể sử dụng các chuỗi (theo bất kỳ cách nào chúng được thể hiện bằng ngôn ngữ bạn đã chọn) hoặc mảng char. (Ngoại trừ việc in câu trả lời lên bàn điều khiển.)
  • Bạn không thể sử dụng mảng.

Ghi điểm:

Điểm = độ dài của chương trình con / hàm (khoảng trắng sẽ không được tính)

Câu trả lời với số điểm thấp nhất sẽ thắng.

Khoảng trắng sẽ KHÔNG được tính. Vui lòng định dạng mã của bạn đúng cách!

Một số câu trả lời đang sử dụng các biểu thức chính quy, có thể vi phạm quy tắc không có chuỗi, như được chỉ ra bởi một số thành viên. Những câu trả lời sẽ không được chấp nhận.

Vui lòng kiểm tra mã của bạn 0trước khi đăng.


2
Đầu ra đã cho là sai hoặc không rõ ràng. -98 ... -91 và 91 ... 98 ở đâu?
Oberon

27
Câu trả lời của Whitespace sẽ được điểm 0. Bạn có chắc chắn muốn làm điều đó không?
ace_HongKongInependence

3
Được sử dụng regex được phép? Làm việc với regex có nghĩa là làm việc với các chuỗi. Tương tự làm việc với danh sách / bộ sưu tập (và các cấu trúc tương tự) giống như làm việc với mảng. Câu trả lời từ @wallywest ở đây sử dụng regex. Đây là điều mà tôi không thích về các câu hỏi khi họ cố gắng cấm sử dụng chuỗi và / hoặc mảng. Mọi người tìm cách thay thế sử dụng chúng. Và nếu bất kỳ câu trả lời nào thực sự thực hiện chính xác, nó sẽ không nhận được nhiều phiếu bầu như vậy chỉ vì nó có vẻ phức tạp.
microbian

2
"Khoảng trắng sẽ KHÔNG được tính. Vui lòng định dạng mã của bạn đúng cách!" không phải là một cách tuyệt vời để làm điều này, vì khoảng trắng trong các ngôn ngữ khác nhau có ý nghĩa khác nhau. Thường xuyên hơn, đó chỉ là "đăng một phiên bản không đọc được / quá dễ đọc".
Bob

2
@ace Tôi đã tạo một câu trả lời trong khoảng trắng (cần 4 giờ làm việc chăm chỉ với điều này). tôi nghĩ rằng nó được điểm 0, phải không?
Victor Stafusa

Câu trả lời:


75

Khoảng trắng, 834 ký tự (0 nếu bạn trừ khoảng trắng)

Đã sử dụng trình thông dịch này để kiểm tra nó.

Điều này khiến tôi mất 4 giờ làm việc chăm chỉ và gỡ lỗi khủng khiếp để tạo ra. Nhưng đã xong!

   	    	 
   	    	 
	
	    	    	 
			   		    
	  			    	    		
  			   		
		    	     	
   
		    	    	 
			
	  	  	 		
   	    	 
			   	
	  	
	  	  	 		

   	   	  
   	    		
			 
    		  	  
	  	
	  	   	 	
 
   		
	  

		 	   			
  		
	  

   	   			
 
    	    	 
			
	  	  	   
   	 	 
	 	    	    	 
				  	
	  	  	  	

   	  	   
   	 	 
	 		   	    	 
				  	
	  	  	  	

 
 	  	 	 

   	  	  	
   	     	
			
	  	   		 
   	     
	
  
   	   		 
   	     	
   	
		    	    		
				
 	
   	  	 	 
   	    		
   	    		
			   	
	   		 
 
 	   	  

   	   	 	
   	    	 
			
	  	  		  
   	    	 
			   	
	  	
	  	  		  




   	  	 		
  			  	  
	
 	   	     
	
  
 
 	   	  

   	  		  
   	     
	
     		  	  
	
 	


EDIT : Văn bản có thể lựa chọn được cung cấp với các thủ thuật HTML. Nếu bạn sao chép và dán nó từ đây đến một nơi khác, vui lòng kiểm tra xem bạn có chính xác [space][tab][linefeed][linefeed][linefeed]ở cuối với 100 hoặc 101 dòng hay không (tùy thuộc vào trình soạn thảo của bạn có tính hay không một dòng mới nếu dòng cuối cùng kết thúc bằng một nguồn cấp dữ liệu).

Trong trường hợp bạn không thể sử dụng nó theo cách này, hãy xem xét không gian như S, cho ăn theo dòng Lvà tab như T, và ngắt dòng sau L's, đây 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
Khai thác +1 "0 nếu bạn trừ khoảng trắng"
Jwosty

12
Haha, tôi đã học được một bài học. : P
duci9y

2
@Cruncher Ngôn ngữ được xác định rõ và hoàn toàn không rõ ràng . Đối với câu hỏi cụ thể của bạn: một số là một chuỗi các khoảng trắng và tab, thể hiện số đó ở dạng nhị phân (dấu cách = 0, tab = 1, định dạng nhị phân lớn cuối) và bị chấm dứt bởi một dòng mới. Vì vậy, bạn biết một số kết thúc khi bạn đạt đến một dòng mới.
Tim S.

1
Tôi đã học Whitespace ngày hôm nay. codegolf.stackexchange.com/a/23216/17886
duci9y

7
Tôi giải thích "Khoảng trắng sẽ KHÔNG được tính." có nghĩa là câu trả lời này không hợp lệ. ;) +1
Tim Seguine

24

Bash + dụng cụ - 20

seq -100 100|grep 9

Hoặc 21 byte nếu trong tập lệnh

seq -100 100|grep $1

Để chạy tập lệnh:

sh myscript 9

4
grepkhông bashhay sh. Đó là một tiện ích khác!
devnull

tôi phải đồng ý, nó không phải là vỏ / bash thuần túy :)
Nik O'Lai

1
Xem câu hỏi. Làm cho câu trả lời trong tâm trí. Nhìn thấy câu trả lời chính xác đã được đăng. Chết tiệt! +1
Chàng trai với chiếc mũ

6
Tôi nghĩ rằng đây là sử dụng chuỗi.
David Conrad

1
@DavidConrad Nếu bạn nhìn theo cách đó, mọi thứ đều sử dụng chuỗi. Nguồn chương trình là một chuỗi. Thiết bị đầu cuối sử dụng chuỗi. V.v.
Đại tá Ba mươi Hai

9

JavaScript 133 - 1 = 132

Chắc chắn bây giờ không thể có bất cứ điều gì sai với phiên bản này ...?

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
Thậm chí ngắn hơn một chút : for(i=-100,r=prompt();101>i;i++)(i+'').match(r)&&console.log(i).
VisioN

2
Tôi thích câu trả lời này (+1), nhưng nó không hoàn toàn sử dụng chuỗi?
Không phải Charles

2
điều này không sử dụng chuyển đổi chuỗi ngầm định
Claudiu

1
Trên thực tế, các lỗi, không, nó không ... alert(RegExp(9).test(99))chỉ dựa trên các con số, cũng trả về truedo hệ thống gõ dựa trên lỏng lẻo của JavaScript. Các hàm hoạt động với các số như thể chúng là các chuỗi nhưng vẫn là các số ... Nếu bạn thay đổi mã để đọc r=RegExp(x=+prompt());for(i=-100;101>i;i++)r.test(i)&&console.log(i);console.log(typeof(x));console.log(typeof(i))và thực thi nó, phản hồi kiểu cuối cùng sẽ hiển thị xilà số ... Ergo, tôi không sử dụng chuỗi ...
WallyWest

2
In @VoronoiPotato cũng là một chuỗi op. Nhưng rõ ràng chúng tôi bắt buộc phải làm điều đó.
Tim Seguine


6

Ruby: 92 ký tự

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

Phiên bản dễ đọc:

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

Chạy mẫu:

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

Chạy thử nghiệm:

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

Thất bại trong 0bài kiểm tra.
duci9y

Rất tiếc. Bạn nói đúng, @ duci9y. Đã sửa.
manatwork

6

K - 45 char

Không giành được bất kỳ giải thưởng nào, nhưng K golfing là không đúng. K không nhận được bất kỳ cái nào đẹp hơn với khoảng cách thích hợp, vì vậy tôi sẽ để nguyên như vậy, bởi vì K rất kén chọn khoảng trắng nào là quan trọng và cái nào không.

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

Giải thích:

  • a:100-!201- Lập danh sách từ 0 đến 200, bao gồm trừ 100. Bây giờ chúng tôi có các số từ -100 đến 100, nhưng ngược lại với thông số kỹ thuật của câu hỏi. Chúng tôi luôn có thể khắc phục điều đó sau, vì vậy bây giờ chúng tôi sẽ chỉ định việc này cho a.
  • _ _abs- Lấy giá trị tuyệt đối của các số này, vì bất kỳ lý do gì K nghĩ rằng _abssẽ cho kết quả dấu phẩy động. Rất may, sàn chúng biến chúng trở lại thành số nguyên.
  • 10_vs'- Mở rộng mỗi 'số nguyên ( ) dưới dạng số 10 cơ sở ( _vsviết tắt của "vectơ từ vô hướng"). Lưu ý rằng chúng tôi không phải sử dụng toán tử Mỗi 'cho các chức năng trên vì chúng hoạt động trên các nguyên tử.
  • @[...;100;0,]- Sửa đổi mục trong danh sách của chúng tôi tại chỉ mục 100 (danh sách trống, là kết quả của việc mở rộng 0 thành cơ sở 10) theo chức năng 0,, trước đó là số 0 ở phía trước. Nếu không có hiệu chỉnh này, chức năng này sẽ thất bại ở đầu vào 0.
  • &x in'- Bây giờ, trả về các chỉ số ( &) trong đó xmột chữ số trong ( _in) mỗi ( ') của các mở rộng mà chúng tôi đã xây dựng rất cẩn thận ở trên.
  • |a@- Cuối cùng, sử dụng các chỉ số này để lập chỉ mục avà đảo ngược danh sách theo đúng thứ tự.

Cách sử dụng là hiển nhiên, mặc dù may mắn có được thông dịch viên K. (Có một triển khai mã nguồn mở tại Github mà bạn có thể biên dịch.)

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

Tôi tự hỏi nếu các ngôn ngữ như K có sử dụng hiệu quả ngoài các tình huống như câu hỏi này. Họ có làm không?
duci9y

2
@ duci9y Trên thực tế, K nói riêng đã tìm thấy một thị trường thích hợp trên Phố Wall xử lý các giao dịch tốc độ cao, khối lượng lớn, sử dụng phần mềm cơ sở dữ liệu gốc KDB. Họ hàng gần J cũng tìm thấy việc sử dụng, mặc dù nhiều hơn trong bối cảnh doanh nghiệp và học tập.
thuật toán

Thật tuyệt! Tôi tin rằng các ngôn ngữ bí truyền chỉ để cho vui. Thật tốt khi thấy điều đó không đúng.
duci9y

Không phải mô tả nói "Bạn không thể sử dụng mảng"?
Omar

6

bash 55 49 ký tự:

(không tính khoảng trắng xung quanh &&)

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

Thực hiện nó bằng cách nói:

bash filename 9

sẽ sản xuất:

-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

Bạn có thể thay thế "&&" bằng "&&" để có thêm hai điểm. Ngoài ra tôi đếm một char ít hơn nếu tôi bỏ dòng mới.
Chấn thương kỹ thuật số

1
Cào đó - Tôi vừa thấy quy tắc mới: "EDIT: Khoảng trắng sẽ KHÔNG được tính. Vui lòng định dạng mã của bạn đúng cách!" . Vì vậy, tôi đoán bạn chỉ cần đếm tất cả các ký tự không phải khoảng trắng?
Chấn thương kỹ thuật số

Sau đó, bạn có thể chuyển đổi ;s thành dòng mới và lưu 2 điểm.
joeytwiddle

4

PHP 67 byte:

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

Vâng, có một cuộc gọi 'strpose', nhưng tôi chỉ sử dụng các số!

Đây là phiên bản 'vô dụng':

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

Để làm việc này, bạn có thể kiểm tra nó ở đây: http://writecodeonline.com/php/

Chỉ cần nhớ để thêm $_GET[n]='<number>';vào đầu mã.

Hoặc, trên máy chủ đèn hoặc xampp, bạn có thể tạo một trang và sau đó truy cập nó trên trình duyệt, với tham số ?n=<number>sau tên tệp.


1
Điều này trông giống như chuyển đổi chuỗi ngầm định, vi phạm quy tắc không có chuỗi.
VoronoiPotato

Không phải lỗi của tôi. Tôi đã không tạo ra ngôn ngữ. Tôi đã sử dụng những gì tôi có. Bên cạnh đó, việc chuyển đổi được thực hiện trong nội bộ. Không có gì trong mã xử lý các chuỗi (ngoại trừ đầu ra).
Ismael Miguel

Cách tôi đọc quy tắc, bạn phải đối phó với các con số một cách hợp lý. Đối xử với họ như các chuỗi, cho dù bởi bạn hoặc bởi ngôn ngữ hoặc thư viện, là vượt quá giới hạn. Nhưng hầu như tất cả những người khác đang bỏ qua quy tắc theo cách tương tự.
David Conrad

Vâng, mọi người đều muốn làm cho nó được thực hiện theo cách nhỏ nhất. Và nhỏ nhất là coi các số là chuỗi (bên trong mà không chuyển đổi ngầm định thành chuỗi trong mã).
Ismael Miguel

4

Toán học 28

Xin lỗi, tôi không thể cưỡng lại.

:)

Các hướng dẫn là: "Được cung cấp một chữ số từ 0 đến 9 (đã bao gồm), hàm / chương trình con của bạn sẽ in tất cả các số từ -100 đến 100 (đã bao gồm) có chứa chữ số đã cho."


Sau đây in tất cả các số như vậy theo thứ tự.

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

Là một phần thưởng đặc biệt, nó in những số đó trong cùng phạm vi không chứa chữ số đã cho. :)


Nhưng điều này không sử dụng n làm bộ lọc
Murta

@Marta, Có, tôi đã lật đổ ý định của câu đố (đó là lý do tại sao tôi nói "Xin lỗi"), trong khi về mặt kỹ thuật cung cấp một câu trả lời thích hợp.
DavidC

4

Nỗ lực đầu tiên của tôi ở đây, vì vậy có lẽ tôi đang làm một số điều sai, xin vui lòng xin lỗi;)
Vì vậy, tôi không chắc chắn nếu tôi phải thêm cả lớp hay chỉ là logic bên trong.

Java - 199 ký tự

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

Đây là một hình thức dễ đọc hơn:

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

}

Tôi đoán ý tưởng cơ bản không tệ đến thế, nhưng cần quá nhiều ngoại lệ, để cuối cùng giải quyết mọi trường hợp ...: /


Xin lỗi, không hoạt động với 0:(
duci9y

Aw, chắc chắn, lần bổ sung cuối cùng tôi đã làm cho nó rối tung lên. Mã cập nhật, vì vậy tôi giảm xuống 199 bây giờ. Cảm ơn đã chỉ ra rằng!
Jochen Reinschlüssel

Tôi đã không nhận ra rằng: D Quá nhiều mã hóa bằng ngôn ngữ bản địa trong những ngày qua tôi đoán vậy;)
Jochen Reinschlüssel

Bạn đã xóa từng khoảng trống trong phiên bản rút gọn của mình ... điều đó có gây ra lỗi không? Ví dụ: 4 ký tự đầu tiên của bạn: intx... không nên là : int x?
SirPython

4

C - 104 107 114 ký tự - 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;}}

Ung dung:

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

Tốt đẹp. Bạn cũng có thể đăng một phiên bản không có bản quyền với khoảng trắng thích hợp không?
duci9y

@ duci9y Đã thêm nó.
Oberon

Điều này sẽ không đưa ra kết quả ngoài trật tự? (Thông số kỹ thuật đã được cập nhật để nêu rõ vấn đề đặt hàng.)
Gaffi

@Gaffi Vậy thì tốt. Tôi sẽ chỉnh sửa mã.
Oberon

4
Thất bại trong thông báo 0có chứa 0.
ugoren

3

R 87 93

Đây là một cải tiến:

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

(Có khả năng) Dễ đọc hơn, có ghi chú:

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

Tại sao không có khoảng trắng?
duci9y

@ duci9y Vì không cần thiết. Tôi sẽ định dạng để dễ đọc hơn và thêm vào đó, chỉ là biện pháp tốt.
Gaffi

Không làm việc với 0.
duci9y

@ duci9y Nó không thất bại. Tôi đã thực hiện một thay đổi nhỏ từ bài đăng gốc (+2 ký tự), vì bài đăng gốc DID không thành công 0. Bạn đã thử với phiên bản mới nhất này? Tôi đang sử dụng R 3.0.1.
Gaffi

@ duci9y Để rõ ràng, ý tôi là bạn đã sử dụng cái này trên phiên bản mới nhất của tôi . Phiên bản R của tôi phải đủ gần với phiên bản mới nhất để không quan trọng. Tuy nhiên, tôi đã không kiểm tra tất cả trên bất kỳ phiên bản 2. * nào.
Gaffi

3

Lời khuyên: 75

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

Làm thế nào để bạn gọi điều này? Tôi đã lưu nó trong một test.pltập tin, bắt đầu swipl, nhập consult('test')và sau đó nhập f(9). Nhưng nó chỉ trở về false.
Martin Thoma

3

Câu trả lời C trong 98 ký tự

Đây là một trong những điều quyến rũ nhất tôi từng được mã hóa

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

Phiên bản cũ hơn, với 104 ký tự không phải khoảng trắng:

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

"Hoạt động cho tôi" bằng GCC và CLANG.


Tuyệt vời! Chào mừng bạn đến với Code Golf.
duci9y

2

GNU coreutils (44)

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

nơi trđược sử dụng để chuyển đổi dòng mới thành không gian và echocung cấp một dòng mới cuối cùng.

$ 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

Điều này không khác nhiều so với câu trả lời hiện có .
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 ký tự

Tất cả các khoảng trắng có thể tháo rời an toàn, có nghĩa là 27 ký tự. Số âm ở đầu ra sẽ có _dấu âm: đây chỉ là cách J viết số âm của nó.

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

Giải thích:

  • V & (i: 100)- Bind ( &) tập hợp các số từ -100 đến 100 inclusive ( i:100) là đối số đúng của động từ chính ( V). Đối số duy nhất của toàn bộ động từ được dẫn vào bên trái.
  • (U"0 # ])- Sử dụng kết quả của động từ Utrên mỗi số từ đối số bên phải ( "0) để chọn ( #) các mục từ đối số bên phải ( ]).
  • (e. 10 #.^:_1 |)- Đưa ra chữ số để kiểm tra làm đối số bên trái và số để kiểm tra là đối số bên phải, mở rộng trong cơ sở 10 ( 10 #.^:_1) giá trị tuyệt đối của số ( |) và kiểm tra xem chữ số có phải là một phần tử của khai triển đó không ( e.).

Sử dụng:

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

Quy ước gạch dưới cho âm trong J luôn làm phiền tôi - sẽ không tệ lắm nếu nó sử dụng biểu tượng dấu trừ ở đầu ra (mà không làm rối động từ định dạng).
Desty

Gạch dưới là cách rõ ràng của J (và, tôi sẽ tranh luận, thanh lịch và APLish) để phân biệt các dấu hiệu tiêu cực từ động từ -Negate / Minus. K cho phép bạn sử dụng dấu âm "một cách tự nhiên" bằng số và tình cờ K xuất hiện một cụm cú pháp phức tạp. Nếu nó thực sự irking bạn, làm việc trong lựa chọn của bạn ;8!:1, '4.0'8!:2hoặc '-'I.@:=&'_'}":, trị giá 7, 11, và 16 ký tự tương ứng để làm cho chương trình dẫn đến một chức năng thay vì một biểu thức, bằng cách đếm của tôi.
thuật toán

Tôi biết nó là gì, nhưng nó hơi khó chịu giống nhau khi nói đến I / O. Sẽ tốt hơn nếu nó tạo ra các dấu trừ theo mặc định khi in số, thay vì in dấu gạch dưới có lẽ trong trường hợp ai đó muốn loại bỏ chuỗi kết quả.
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
            }

Không có chuỗi (ngoại trừ đầu ra khoảng trắng giữa các số), không có mảng char hoặc mảng khác, không có biểu thức chính quy. Đã kiểm tra với 0. Đầu ra:

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


1
Và tôi phát hiện ra một ngôn ngữ mới ngày hôm nay. :)
duci9y

2

Javascript - 108

Không chắc chắn nếu câu trả lời javascript hiện tại sẽ được xem xét bởi vì nó sử dụng regex, vì vậy tôi đã tạo một câu trả lời mà không có nó:

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)

Cũng có thể rút ngắn xuống 101 nếu biến x được đặt trực tiếp, như:

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)

Về cơ bản, nó kiểm tra xem các giá trị tuyệt đối của các phép toán div hoặc mod có bằng chữ số không (cũng hoạt động với 100).


Nếu x=1, điều này không thể in -100hoặc 100.
DocMax

Nên sửa ngay bây giờ
Damir Kasipovic

1hoạt động độc đáo, nhưng bây giờ 0in 1, 2, 3... Xin lỗi là một rối ở đây.
DocMax

Vâng, nếu bạn đặt x = 0; nó hoạt động tốt, vấn đề là prompt()trả về chuỗi, vì vậy tôi đã thêm * 1 và hy vọng nó sẽ ổn ngay bây giờ.
Cảm ơn

1
parseInt(j/10)có thể được thay thế bằng (0|j/10)cả hai ngắn hơn và tránh các chuỗi ẩn. Chuyển đổi chuỗi thành số (không thể tránh khỏi) prompt()*1không thể rút ngắn thành +prompt(). (Hoặc ngắn hơn, thay đổi chức năng để bắt đầu for(x=+prompt(i=-100);....
DocMax

2

GW Basic: 107 ký tự không bao gồm khoảng trắng

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

Sử dụng một chữ số cho các số dòng giúp và tước bỏ khoảng trắng có nghĩa là thực sự không cần phải có nhiều câu lệnh trên một dòng nhiều lần để giữ cho số đạt tới 10.


2

LỚN, 71

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

println f(0)
println f(9)

Kết quả trong

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

Sử dụng bitwise hoặc:

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 với các khoảng trắng cần thiết)

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

Ung dung:

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

Nếu bạn sử dụng một định nghĩa hai phù hợp với mô hình kết hợp, ví dụ a 0=[-100....a d=[b|b<-....bạn có thể thoát khỏi sự if then elsevà tiết kiệm một vài byte.
nimi

1

Python - 172 ký tự

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)

Để kiểm tra trong Python:

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

1

VBA 121

(không tính khoảng trắng hoặc Subđịnh nghĩa):

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

Điều này có làm việc với 0?
duci9y

@ duci9y Vâng. Cụ thể vì:IIf(d = 0, IIf(d = n Mod 10, " " & n, "")
Gaffi

1

perl, 117 với các ký tự khoảng trắng không có ý nghĩa được loại bỏ

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như thế này. Đọc từ stdin, xuất ra một dòng trên mỗi trận đấu. Không có biểu thức chính, mảng (hoặc bộ hoặc băm hoặc bất cứ thứ gì khác là một mảng dưới bìa) hoặc chuỗi, ẩn hoặc cách khác, ngoại trừ các chuỗi được truyền để in:

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"

ví dụ:

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

đã thêm 5 ký tự vì 0 không được xử lý chính xác. (Tất cả các giá trị chữ số sẽ được trả về.)


1

Đây là lần đầu tiên tôi chơi golf mã. Điều này có vẻ khá thú vị. Tôi không thể thắng, nhưng tôi đã cố gắng và muốn thể hiện những gì tôi có thể làm.

Python: 104 (89 nếu tôi có thể nhập dữ liệu nhập) - nếu kết quả phải được in chính xác như trong ví dụ

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 - nếu đầu ra có thể được thực hiện bên ngoài chức năng và hạn chế duy nhất cho đầu ra là không có số vi phạm nào được in

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

Mã JavaScript 125

Xin lỗi vì một số chỉnh sửa tôi đã gặp sự cố khi thực hiện việc này từ điện thoại của mình :)

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 ký tự không phải khoảng trắng

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

Giống như giải pháp Python của tôi, chỉ cần chuyển đổi thành dogelang .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.