พิมพ์ตัวเลขทั้งหมดจาก -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

กฎ:

  • คุณไม่สามารถใช้สตริงได้ (ไม่ว่าจะด้วยวิธีการใดในการเลือกภาษา) หรือถ่านอาร์เรย์ (ยกเว้นพิมพ์คำตอบไปยังคอนโซล)
  • คุณไม่สามารถใช้อาร์เรย์

เกณฑ์การให้คะแนน:

คะแนน = ความยาวของรูทีนย่อย / ฟังก์ชัน (ช่องว่างจะไม่ถูกนับ)

คำตอบที่มีคะแนนต่ำสุดชนะ

ช่องว่างจะไม่ถูกนับ กรุณาจัดรูปแบบรหัสของคุณอย่างถูกต้อง!

คำตอบบางคำใช้นิพจน์ทั่วไปซึ่งอาจละเมิดกฎสตริงไม่ดังที่สมาชิกบางคนชี้ให้เห็น คำตอบเหล่านี้จะไม่ได้รับการยอมรับ

กรุณาทดสอบรหัสของคุณด้วย0ก่อนโพสต์


2
เอาต์พุตที่ระบุนั้นผิดหรือไม่ชัดเจน -98 ... -91 และ 91 ... 98 อยู่ที่ไหน
Oberon

27
คำตอบของ Whitespace จะได้คะแนน 0 คุณแน่ใจหรือไม่ว่าต้องการทำเช่นนั้น?
ace_HongKongIndependence

3
อนุญาตให้ใช้ regex หรือไม่ การทำงานกับ regex หมายถึงการทำงานกับสตริง การทำงานกับรายการ / คอลเลกชัน (และโครงสร้างที่คล้ายกัน) ในทำนองเดียวกันก็เหมือนกับการทำงานกับอาร์เรย์ คำตอบจาก @wallywest ที่นี่ใช้ regex นี่คือสิ่งที่ฉันไม่ชอบเกี่ยวกับคำถามเมื่อพวกเขาพยายามที่จะห้ามจากการใช้สตริงและ / หรืออาร์เรย์ ผู้คนค้นหาวิธีอื่น ๆ ในการใช้พวกเขา และถ้าคำตอบใด ๆ ใช้อย่างถูกต้องจริง ๆ ก็ไม่ได้รับคะแนนเสียงมากเท่าที่ควรเพราะมันดูซับซ้อน
microbian

2
"จะไม่นับพื้นที่ว่างโปรดจัดรูปแบบรหัสของคุณให้ถูกต้อง!" ไม่ใช่วิธีที่ดีในการทำเช่นนี้เพราะช่องว่างในภาษาต่าง ๆ มีความสำคัญแตกต่างกัน บ่อยครั้งที่มันเป็นเพียง "โพสต์เวอร์ชันที่ไม่น่ารังเกียจ / อ่านได้เช่นกัน"
Bob

2
@ace ฉันสร้างคำตอบในช่องว่าง (ต้องการ 4 ชั่วโมงของการทำงานอย่างหนักกับสิ่งนี้) ฉันคิดว่ามันเป็นศูนย์ใช่มั้ย
Victor Stafusa

คำตอบ:


75

ช่องว่าง 834 ตัวอักษร (0 ถ้าคุณลบช่องว่าง)

ใช้ล่ามนี้เพื่อทดสอบ

ฉันใช้เวลาทำงานหนักประมาณ 4 ชั่วโมงและการดีบักที่น่ากลัวในการสร้าง แต่มันจะทำ!

   	    	 
   	    	 
	
	    	    	 
			   		    
	  			    	    		
  			   		
		    	     	
   
		    	    	 
			
	  	  	 		
   	    	 
			   	
	  	
	  	  	 		

   	   	  
   	    		
			 
    		  	  
	  	
	  	   	 	
 
   		
	  

		 	   			
  		
	  

   	   			
 
    	    	 
			
	  	  	   
   	 	 
	 	    	    	 
				  	
	  	  	  	

   	  	   
   	 	 
	 		   	    	 
				  	
	  	  	  	

 
 	  	 	 

   	  	  	
   	     	
			
	  	   		 
   	     
	
  
   	   		 
   	     	
   	
		    	    		
				
 	
   	  	 	 
   	    		
   	    		
			   	
	   		 
 
 	   	  

   	   	 	
   	    	 
			
	  	  		  
   	    	 
			   	
	  	
	  	  		  




   	  	 		
  			  	  
	
 	   	     
	
  
 
 	   	  

   	  		  
   	     
	
     		  	  
	
 	


แก้ไข : ข้อความที่เลือกได้ที่มาพร้อมกับเทคนิค HTML หากคุณคัดลอกและวางจากที่นี่ไปยังที่อื่นโปรดตรวจสอบว่าคุณได้รับ[space][tab][linefeed][linefeed][linefeed]ที่ท้ายด้วย 100 หรือ 101 บรรทัด (ขึ้นอยู่กับว่าบรรณาธิการของคุณนับหรือไม่ขึ้นบรรทัดใหม่หากบรรทัดสุดท้ายลงท้ายด้วย linefeed)

ในกรณีที่คุณไม่สามารถใช้วิธีนี้ได้ให้พิจารณาพื้นที่เป็นSlinefeed 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
+1 ใช้ประโยชน์จาก "0 ถ้าคุณลบ whitespaces"
Jwosty

12
ฮ่าฮ่าฉันเรียนรู้บทเรียน : P
duci9y

2
@Cruncher ภาษาถูกกำหนดไว้อย่างดีและโปร่งใสโดยสิ้นเชิง สำหรับคำถามเฉพาะของคุณ: ตัวเลขคือชุดของช่องว่างและแท็บซึ่งแสดงถึงตัวเลขในรูปแบบไบนารี่ (ช่องว่าง = 0, แท็บ = 1, รูปแบบไบนารีบิ๊ก - เอนเดียน) และถูกยกเลิกด้วยการขึ้นบรรทัดใหม่ ดังนั้นคุณจะรู้ว่าตัวเลขจะเสร็จสิ้นเมื่อคุณไปถึงบรรทัดใหม่
ทิมเอส.

1
ฉันเรียน Whitespace วันนี้ codegolf.stackexchange.com/a/23216/17886
duci9y

7
ฉันแปลว่า "ช่องว่างจะไม่ถูกนับ" เพื่อหมายความว่าคำตอบนี้ไม่ถูกต้อง ;) +1
Tim Seguine

24

Bash + utils - 20

seq -100 100|grep 9

หรือ 21 ไบต์หากอยู่ในสคริปต์

seq -100 100|grep $1

วิธีรันสคริปต์:

sh myscript 9

4
grepไม่ได้หรือbash shมันเป็นยูทิลิตี้อื่น!
devnull

ฉันต้องยอมรับมันไม่บริสุทธิ์เปลือก / ทุบตี :)
Nik O'Lai

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

2
ฉันชอบคำตอบนี้ (+1) แต่มันไม่ใช้สตริ?
ไม่ใช่ว่า Charles

2
สิ่งนี้ใช้การแปลงสตริงโดยนัย
Claudiu

1
อันที่จริง chaps ไม่มันไม่ได้ ... alert(RegExp(9).test(99))ซึ่งขึ้นอยู่กับตัวเลขเท่านั้นเช่นกันกลับtrueมาเนื่องจากระบบการพิมพ์ที่ใช้จาวาสคริปต์อย่างอิสระ ฟังก์ชั่นใช้งานได้กับตัวเลขราวกับว่ามันเป็นสตริง แต่ก็ยังเป็นตัวเลข ... หากคุณเปลี่ยนรหัสเพื่ออ่าน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 สุดท้ายจะแสดงxและiเป็นตัวเลข ... Ergo ฉันไม่ได้ใช้สตริง ...
WallyWest

2
การพิมพ์ @VoronoiPotato ยังเป็นตัวเลือกสตริง แต่เราจำเป็นต้องทำอย่างชัดเจน
Tim Seguine

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

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


นี้ใช้สตริงแม้ว่า
Claudiu

นอกจากนี้ยังใช้อาร์เรย์: 201 สร้างอาร์เรย์ที่มี 0 ถึง 200
Rees

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 การแก้ไข
จัดการ

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ย่อมาจาก "vector from scalar") โปรดทราบว่าเราไม่จำเป็นต้องใช้ตัวดำเนินการแต่ละตัว'ในฟังก์ชั่นด้านบนเพราะทำงานกับอะตอม
  • @[...;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

2
@ duci9y ที่จริงแล้วK โดยเฉพาะได้พบว่าตัวเองเป็นตลาดเฉพาะบนวอลล์สตรีทในการจัดการธุรกรรมความเร็วสูงและปริมาณมากโดยใช้ซอฟต์แวร์ฐานข้อมูลดั้งเดิม KDB ญาติสนิท Jยังพบการใช้งานแม้ว่าจะมีมากขึ้นในบริบทขององค์กรและการศึกษา
algorithmshark

เยี่ยมมาก! ฉันมีความเชื่อว่าภาษาลึกลับเป็นเพียงเพื่อความสนุกสนาน ดีที่เห็นว่าไม่ใช่กรณี
duci9y

คำอธิบายไม่ได้พูดว่า "คุณไม่สามารถใช้อาร์เรย์" ได้หรือไม่?
โอมาร์

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

คุณสามารถแทนที่ "&&" ด้วย "&&" เป็นสองคะแนนพิเศษ นอกจากนี้ฉันนับถ่านน้อยลงหนึ่งถ้าฉันวางขึ้นบรรทัดใหม่
บาดเจ็บทางระบบดิจิตอล

1
เกาว่า - ฉันเพิ่งเห็นกฎใหม่: "แก้ไข: ช่องว่างจะไม่ถูกนับโปรดจัดรูปแบบรหัสของคุณอย่างถูกต้อง!" . ดังนั้นฉันเดาว่าคุณแค่นับตัวละครที่ไม่ใช่ช่องว่างทั้งหมด?
Digital Trauma

จากนั้นคุณสามารถแปลง;s เป็นบรรทัดใหม่และบันทึก 2 คะแนน
joeytwiddle

4

PHP 67 ไบต์:

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

ใช่มีการโทร 'strpos' แต่ฉันใช้เฉพาะตัวเลข!

นี่คือรุ่น 'ungolfed':

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

ไม่ใช่ความผิดของฉัน. ฉันไม่ได้ทำภาษา ฉันใช้สิ่งที่ฉันมี นอกจากนี้การแปลงจะทำภายใน ไม่มีสิ่งใดในรหัสที่เกี่ยวข้องกับสตริง (ยกเว้นผลลัพธ์)
Ismael Miguel

วิธีที่ฉันอ่านกฎคุณต้องจัดการกับตัวเลขทางคณิตศาสตร์ การถือว่าเป็นสตริงไม่ว่าจะโดยคุณหรือโดยภาษาหรือไลบรารีจะถูก จำกัด แต่เกือบทุกคนอื่นรอบกฎในลักษณะที่คล้ายกัน
David Conrad

ทุกคนต้องการทำให้มันเป็นวิธีที่เล็กที่สุด และที่เล็กที่สุดคือการรักษาตัวเลขเป็นสตริง (ภายในโดยไม่ต้องแปลงเป็นสตริงในรหัสโดยนัย)
Ismael Miguel

4

Mathematica 28

ขอโทษฉันไม่สามารถต้านทานได้

:)

คำแนะนำคือ: "ให้ตัวเลขระหว่าง 0 ถึง 9 (รวม) ฟังก์ชั่น / รูทีนย่อยของคุณควรพิมพ์ตัวเลขทั้งหมดระหว่าง -100 ถึง 100 (รวม) ที่มีตัวเลขที่กำหนด"


ต่อไปนี้จะพิมพ์หมายเลขดังกล่าวทั้งหมดตามลำดับ

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

เป็นโบนัสพิเศษมันพิมพ์ตัวเลขเหล่านั้นในช่วงเดียวกันที่ไม่มีตัวเลขที่กำหนด :)


แต่นี่ไม่ได้ใช้ n เป็นตัวกรอง
Murta

@Marta, Yes, I subverted เจตนาของปริศนา (ซึ่งเป็นเหตุผลที่ฉันพูดว่า "ขออภัย") ในขณะที่ทางเทคนิคให้คำตอบที่เหมาะสม
DavidC

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

อ๊ะแน่นอนว่านอกจากนี้ฉันยังทำสิ่งนั้นไม่ดี อัปเดตรหัสแล้วดังนั้นตอนนี้ฉันถึง 199 ขอบคุณสำหรับการชี้ให้เห็น!
Jochen Reinschlüssel

ไม่ทราบว่าหนึ่ง: D มากเกินไปเขียนโปรแกรมในภาษาพื้นเมืองในวันที่ผ่านมาผมคิดว่า;)
เช็นReinschlüssel

คุณลบทุกช่องว่างในเวอร์ชันบีบอัดของคุณ ... นั่นจะไม่ทำให้เกิดข้อผิดพลาดหรือไม่? ตัวอย่าง: อักขระ 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;}}

Ungolfed:

#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

@ duci9y เพิ่มแล้ว
Oberon

ผลลัพธ์นี้จะไม่ออกมาตามคำสั่ง? (ข้อมูลจำเพาะได้รับการอัปเดตเพื่อระบุว่ามีความสำคัญ)
Gaffi

@Gaffi ดีแล้ว ฉันจะแก้ไขรหัส
Oberon

4
ล้มเหลวที่จะแจ้งให้ทราบว่ามี0 0
ugoren

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 เพราะไม่จำเป็น ฉันจะจัดรูปแบบให้อ่านได้ง่ายขึ้นและเพิ่มเข้าไปเช่นกันเพื่อการวัดที่ดี
Gaffi

0ไม่ได้ทำงานกับ
duci9y

@ duci9y มันไม่ได้ล้มเหลว ฉันทำการเปลี่ยนแปลงเล็ก ๆ แห่งหนึ่งจากการโพสต์ต้นฉบับ (+2 ตัวอักษร) เช่นโพสต์ต้นฉบับ DID 0ล้มเหลวใน คุณลองกับเวอร์ชันล่าสุดนี้หรือไม่? ฉันใช้ R 3.0.1
Gaffi

@ duci9y เพื่อความชัดเจนฉันหมายถึงคุณใช้สิ่งนี้กับรหัสรุ่นล่าสุดของฉันหรือไม่ เวอร์ชัน R ของฉันควรใกล้เคียงกับเวอร์ชันล่าสุดไม่สำคัญ อย่างไรก็ตามฉันไม่ได้ทดสอบเลยในรุ่น 2. * ใด ๆ
Gaffi

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
Martin Thoma

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

2

coreutils ของ GNU (44)

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

ที่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

J - 27 ตัวอักษร

ช่องว่างทั้งหมดสามารถถอดออกได้อย่างปลอดภัยหมายถึง 27 ตัวอักษร จำนวนลบในเอาต์พุตจะมี_เครื่องหมายลบ: นี่เป็นเพียงวิธีที่ J เขียนตัวเลขลบ

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

อธิบาย:

  • V & (i: 100)- Bind ( &) ชุดตัวเลขตั้งแต่ -100 ถึง 100 inclusive ( 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

ขีดเส้นใต้เป็นวิธีที่ไม่คลุมเครือของ J (และฉันจะโต้แย้งวิธีที่สง่างามและ APLish) ของการแยกสัญญาณเชิงลบจากคำกริยา-Negate / Minus K ช่วยให้คุณใช้เครื่องหมายลบ "ตามธรรมชาติ" เป็นตัวเลขและบังเอิญว่า K ออกมาเป็นกลุ่ม syntax เชิงอาร์เคน ถ้ามันจริงๆ irking คุณทำงานในตัวเลือกของคุณ;8!:1, '4.0'8!:2หรือ'-'I.@:=&'_'}":ต้นทุนที่ 7, 11, และ 16 ตามลำดับตัวอักษรเพื่อให้เกิดโปรแกรมฟังก์ชั่นแทนการแสดงออกโดยการนับของฉัน
algorithmshark

ฉันรู้ว่ามันคืออะไร แต่มันก็น่ารำคาญนิดหน่อยเมื่อพูดถึง I / O มันจะดีกว่าถ้ามันสร้างเครื่องหมายลบโดยค่าเริ่มต้นเมื่อพิมพ์ตัวเลขแทนที่จะพิมพ์ขีดล่างสันนิษฐานว่าในกรณีที่มีคนต้องการประเมินสตริงผลลัพธ์
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
            }

ไม่มีสตริง (ยกเว้นเพื่อเว้นช่องว่างระหว่างตัวเลข), ไม่มีอาร์เรย์ถ่านหรืออาร์เรย์อื่น ๆ ไม่มี regexes ทดสอบด้วย 0. ผลลัพธ์:

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


1
และฉันค้นพบภาษาใหม่วันนี้ :)
duci9y

2

Javascript - 108

ไม่แน่ใจว่าคำตอบจาวาสคริปต์ที่มีอยู่จะถูกนำมาพิจารณาด้วยหรือไม่เพราะใช้ regex ดังนั้นฉันจึงสร้างขึ้นมาโดยไม่มีมัน:

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)

ยังสามารถย่อให้เหลือ 101 หากตัวแปร x ถูกวางโดยตรงเช่น:

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

ควรได้รับการแก้ไขแล้ว
Damir Kasipovic

1ใช้งานได้ดี แต่ตอนนี้0พิมพ์1ออก2มา3... ขออภัยที่เป็นผู้สร้างปัญหาที่นี่
DocMax

ถ้าคุณใส่ x = 0; มันใช้งานได้โอเคปัญหาคือprompt()สตริงที่ส่งคืนดังนั้นฉันจึงเพิ่ม * 1 และหวังว่าจะโอเคตอนนี้ ขอขอบคุณสำหรับคำแนะนำของคุณ
Damir Kasipovic

1
parseInt(j/10)สามารถถูกแทนที่ด้วย(0|j/10)ซึ่งทั้งสั้นและหลีกเลี่ยงสายโดยนัย (ที่หลีกเลี่ยงไม่ได้) การแปลงสตริงกับจำนวนในการไม่สามารถจะสั้นลงเป็นprompt()*1 +prompt()(หรือสั้นยังคงเปลี่ยนฟังก์ชั่นที่จะเริ่มต้นfor(x=+prompt(i=-100);....
DocMax

2

GW พื้นฐาน: 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

GROOVY, 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

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]

Ungolfed:

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

@ duci9y ใช่ โดยเฉพาะเนื่องจาก:IIf(d = 0, IIf(d = n Mod 10, " " & n, "")
Gaffi

1

Perl 117 กับการลบช่องว่างที่ไม่มีความหมายออก

ฉันคิดว่าคุณกำลังมองหาอะไรแบบนี้มากกว่านี้ อ่านจาก stdin เอาต์พุตหนึ่งบรรทัดต่อการแข่งขัน ไม่มี regexps, arrays (หรือ set หรือ hash หรือสิ่งอื่นใดที่เป็น array ภายใต้หน้ากาก) หรือสตริงโดยปริยายหรืออย่างอื่นยกเว้นสตริงที่ส่งผ่านเพื่อพิมพ์:

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

จาวาสคริปต์ 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

เช่นเดียวกับการแก้ปัญหาหลามของฉันเพียงแค่แปลงdogelang

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.