Cetak semua angka dari -100 hingga 100 yang berisi angka tertentu


38

Asalkan digit antara 0 dan 9 (inklusif), fungsi / subrutin Anda harus mencetak semua angka antara -100 dan 100 (inklusif) yang berisi digit yang diberikan.

Sebagai contoh:

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

Aturan:

  • Anda tidak dapat menggunakan string (dengan cara apa pun mereka direpresentasikan dalam bahasa pilihan Anda) atau array char. (Kecuali untuk mencetak jawaban ke konsol.)
  • Anda tidak dapat menggunakan array.

Mencetak:

Nilai = panjang subrutin / fungsi (spasi tidak akan dihitung)

Jawaban dengan skor terendah menang.

Spasi TIDAK akan dihitung. Harap format kode Anda dengan benar!

Beberapa jawaban menggunakan ekspresi reguler, yang mungkin melanggar aturan no string, seperti yang ditunjukkan oleh beberapa anggota. Jawaban-jawaban ini tidak akan diterima.

Silakan uji kode Anda dengan 0sebelum memposting.


2
Output yang diberikan salah atau tidak jelas. Di mana -98 ... -91 dan 91 ... 98?
Oberon

27
Jawaban Whitespace akan memberi skor 0. Anda yakin ingin melakukan itu?
pastebin.com memangkas 0mr8spkT

3
Apakah penggunaan regex diizinkan? Bekerja dengan regex berarti bekerja dengan string. Demikian pula bekerja dengan daftar / koleksi (dan struktur serupa) sama dengan bekerja dengan array. Jawaban dari @wallywest di sini menggunakan regex. Ini adalah hal yang saya tidak suka tentang pertanyaan ketika mereka mencoba untuk melarang menggunakan string dan / atau array. Orang menemukan cara alternatif untuk menggunakannya. Dan jika ada jawaban yang benar-benar diterapkan dengan benar, itu tidak mendapatkan suara sebanyak yang seharusnya hanya karena terlihat rumit
microbian

2
"Ruang putih TIDAK akan dihitung. Harap format kode Anda dengan benar!" bukan cara yang bagus untuk melakukan ini, karena spasi putih dalam bahasa yang berbeda memiliki arti yang berbeda. Lebih sering, itu hanya "memposting versi tanpa tanda baca / juga dibaca".
Bob

2
@ace Saya membuat jawaban di spasi putih (diperlukan 4 jam kerja keras dengan ini). saya pikir skornya nol, kan?
Victor Stafusa

Jawaban:


75

Spasi, 834 karakter (0 jika Anda mengurangi spasi putih)

Gunakan penerjemah ini untuk mengujinya.

Ini membutuhkan waktu 4 jam kerja keras dan debugging yang mengerikan untuk dibuat. Tapi sudah selesai!

   	    	 
   	    	 
	
	    	    	 
			   		    
	  			    	    		
  			   		
		    	     	
   
		    	    	 
			
	  	  	 		
   	    	 
			   	
	  	
	  	  	 		

   	   	  
   	    		
			 
    		  	  
	  	
	  	   	 	
 
   		
	  

		 	   			
  		
	  

   	   			
 
    	    	 
			
	  	  	   
   	 	 
	 	    	    	 
				  	
	  	  	  	

   	  	   
   	 	 
	 		   	    	 
				  	
	  	  	  	

 
 	  	 	 

   	  	  	
   	     	
			
	  	   		 
   	     
	
  
   	   		 
   	     	
   	
		    	    		
				
 	
   	  	 	 
   	    		
   	    		
			   	
	   		 
 
 	   	  

   	   	 	
   	    	 
			
	  	  		  
   	    	 
			   	
	  	
	  	  		  




   	  	 		
  			  	  
	
 	   	     
	
  
 
 	   	  

   	  		  
   	     
	
     		  	  
	
 	


EDIT : Teks yang dapat dipilih disediakan dengan trik HTML. Jika Anda menyalin dan menempelkannya dari sini ke tempat lain, harap periksa apakah Anda mendapatkan tepat [space][tab][linefeed][linefeed][linefeed]di akhir dengan 100 atau 101 baris (tergantung apakah editor Anda menghitung atau tidak baris baru jika yang terakhir diakhiri dengan umpan baris).

Jika Anda tidak dapat menggunakannya dengan cara ini, dengan mempertimbangkan space as S, linefeed as Ldan tab as T, dan garis putus-putus setelah L's, di sini adalah:

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 mengeksploitasi "0 jika Anda mengurangi spasi putih"
Jwosty

12
Haha, saya mendapat pelajaran. : P
duci9y

2
@Cruncher Bahasa ini didefinisikan dengan baik dan sepenuhnya tidak ambigu . Untuk pertanyaan khusus Anda: angka adalah serangkaian spasi dan tab, mewakili angka dalam biner (spasi = 0, tab = 1, format biner big-endian) dan diakhiri dengan baris baru. Jadi, Anda tahu nomor selesai ketika Anda mencapai baris baru.
Tim S.

1
Saya belajar Whitespace hari ini. codegolf.stackexchange.com/a/23216/17886
duci9y

7
Saya menafsirkan "Spasi Putih TIDAK akan dihitung." berarti jawaban ini tidak valid. ;) +1
Tim Seguine

24

Bash + utils - 20

seq -100 100|grep 9

Atau 21 byte jika dalam skrip

seq -100 100|grep $1

Untuk menjalankan skrip:

sh myscript 9

4
grepbukan bashatau sh. Ini utilitas lain!
devnull

Saya harus setuju, ini bukan shell / bash murni :)
Nik O'Lai

1
Melihat pertanyaan. Menjadikan jawaban dalam pikiran. Melihat jawaban yang sama persis sudah diposting. Menisik! +1
The Guy with The Hat

6
Saya pikir ini menggunakan string.
David Conrad

1
@ Davidvidon Jika Anda melihatnya seperti itu, semuanya menggunakan string. Sumber program adalah string. Terminal menggunakan string. Dll
Kolonel Thirty Two

9

JavaScript 133 - 1 = 132

Tentunya tidak mungkin ada yang salah dengan versi ini sekarang ...?

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
Bahkan sedikit lebih pendek: for(i=-100,r=prompt();101>i;i++)(i+'').match(r)&&console.log(i).
VisioN

2
Saya suka jawaban ini (+1), tetapi bukankah secara implisit menggunakan string?
Bukan berarti Charles

2
ini menggunakan konversi string implisit
Claudiu

1
Sebenarnya chaps, tidak bukan ... alert(RegExp(9).test(99))yang hanya berdasarkan angka, juga kembali truekarena sistem pengetikan berbasis JavaScript yang longgar. Fungsi-fungsinya bekerja dengan angka-angka seolah-olah mereka adalah string tetapi masih angka ... Jika Anda mengubah kode untuk membaca r=RegExp(x=+prompt());for(i=-100;101>i;i++)r.test(i)&&console.log(i);console.log(typeof(x));console.log(typeof(i))dan mengeksekusi itu, tipe terakhir dari respons akan ditampilkan xdan isebagai angka ... Ergo, saya tidak menggunakan string ...
WallyWest

2
@VoronoiPotato printing juga merupakan op string. Tetapi kami jelas dituntut untuk melakukan itu.
Tim Seguine


6

Ruby: 92 karakter

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

Versi yang dapat dibaca:

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

Contoh dijalankan:

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

Uji coba:

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

Gagal 0ujian.
duci9y

Ups. Anda benar, @ duci9y. Dikoreksi.
manatwork

6

K - 45 char

Tidak memenangkan penghargaan apa pun, tetapi K golfing kurang terwakili. K tidak mendapatkan yang lebih cantik dengan jarak yang tepat, jadi saya akan membiarkannya apa adanya, karena K menjadi sangat pilih-pilih tentang ruang putih mana yang penting dan mana yang tidak.

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

Dijelaskan:

  • a:100-!201- Buat daftar dari 0 hingga 200 inklusif, lalu kurangi dari 100. Sekarang kita memiliki angka dari -100 hingga 100 inklusif, tetapi mundur dari spesifikasi pertanyaan. Kami selalu dapat memperbaikinya nanti, jadi untuk saat ini kami hanya akan menetapkan ini a.
  • _ _abs- Ambil dasar nilai absolut dari angka-angka ini, karena untuk alasan apa pun K berpikir bahwa itu _absakan memberikan hasil floating point. Untungnya, lantai mereka mengubahnya kembali menjadi bilangan bulat.
  • 10_vs'- Perluas setiap 'bilangan bulat ( ) sebagai nomor basis 10 ( _vssingkatan dari "vector from skalar"). Perhatikan bahwa kami tidak harus menggunakan masing-masing operator 'pada fungsi di atas karena mereka beroperasi pada atom.
  • @[...;100;0,]- Ubah item dalam daftar kami di indeks 100 (daftar kosong, yang merupakan hasil dari perluasan 0 ke basis 10) oleh fungsi 0,, yang menambahkan nol ke depan. Tanpa koreksi ini, fungsi ini akan gagal pada input 0.
  • &x in'- Sekarang, kembalikan indeks ( &) di mana xdigit dalam ( _in) masing-masing ( ') dari ekspansi yang kami buat dengan hati-hati di atas.
  • |a@- Akhirnya, gunakan indeks ini untuk mengindeks a, dan membalik daftar ke dalam urutan yang benar.

Penggunaannya jelas, meskipun semoga berhasil mendapatkan penerjemah K. (Ada implementasi open source di pada Github yang dapat Anda kompilasi.)

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

Saya ingin tahu apakah bahasa seperti K memiliki penggunaan produktif di luar skenario seperti pertanyaan ini. Apakah mereka?
duci9y

2
@ duci9y Sebenarnya, K secara khusus telah menemukan dirinya sebagai ceruk pasar di Wall Street yang menangani transaksi berkecepatan tinggi, bervolume tinggi, menggunakan perangkat lunak basis data asli KDB. Kerabat dekat J juga menemukan manfaat, meskipun lebih banyak dalam konteks perusahaan dan akademik.
algorithmshark

Itu keren! Saya meyakini bahwa bahasa esoterik hanya untuk bersenang-senang. Senang melihat bukan itu masalahnya.
duci9y

Bukankah deskripsi mengatakan "Anda tidak dapat menggunakan array"?
Omar

6

pesta 55 49 karakter:

(tidak termasuk spasi putih di sekitar &&)

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

Menjalankannya dengan mengatakan:

bash filename 9

akan menghasilkan:

-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

Anda dapat mengganti "&&" dengan "&&" untuk dua poin tambahan. Saya juga menghitung satu char kurang jika saya drop baris baru.
Digital Trauma

1
Gores itu - Saya baru saja melihat aturan baru: "EDIT: Whitespace TIDAK akan dihitung. Harap format kode Anda dengan benar!" . Jadi saya kira Anda hanya perlu menghitung semua karakter non-spasi?
Digital Trauma

Kemudian Anda dapat mengonversi ;s ke baris baru, dan menyimpan 2 poin.
joeytwiddle

4

PHP 67 byte:

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

Ya, ada panggilan 'tegar', tapi saya hanya menggunakan nomor!

Ini adalah versi 'ungolfed':

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

Agar ini berfungsi, Anda dapat mengujinya di sini: http://writecodeonline.com/php/

Ingatlah untuk menambahkan $_GET[n]='<number>';ke awal kode.

Atau, pada lampu atau server xampp, Anda dapat membuat halaman dan mengaksesnya di browser, dengan parameter ?n=<number>setelah nama file.


1
Ini terlihat seperti konversi string implisit, yang melanggar aturan no string.
VoronoiPotato

Bukan salahku. Saya tidak membuat bahasa. Saya menggunakan apa yang saya miliki. Selain itu, konversi dibuat secara internal. Tidak ada dalam kode yang berurusan dengan string (kecuali output).
Ismael Miguel

Cara saya membaca aturan, Anda harus berurusan dengan angka secara hitung. Memperlakukan mereka sebagai string, baik oleh Anda atau oleh bahasa atau perpustakaan, adalah terlarang. Tetapi hampir semua orang mengabaikan aturan dengan cara yang sama.
David Conrad

Yah, semua orang ingin menyelesaikannya dengan cara terkecil. Dan yang terkecil memperlakukan angka sebagai string (secara internal tanpa konversi implisit ke string dalam kode).
Ismael Miguel

4

Mathematica 28

Maaf, saya tidak bisa menolak.

:)

Petunjuknya adalah: "Asalkan digit antara 0 dan 9 (inklusif), fungsi / subrutin Anda harus mencetak semua angka antara -100 dan 100 (inklusif) yang berisi digit yang diberikan."


Berikut ini mencetak semua nomor tersebut secara berurutan.

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

Sebagai bonus khusus, ia mencetak angka-angka dalam kisaran yang sama yang tidak mengandung angka yang diberikan. :)


Tapi ini tidak menggunakan n sebagai filter
Murta

@Marta, Ya, saya menumbangkan maksud teka-teki (itulah sebabnya saya mengatakan "Maaf"), sementara secara teknis memberikan jawaban yang sesuai.
DavidC

4

Upaya pertama saya di sini, jadi mungkin saya melakukan beberapa hal yang salah, tolong permisi;)
Jadi, saya tidak yakin apakah saya harus menambahkan seluruh kelas atau hanya logika di dalamnya.

Java - 199 karakter

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

Di sini bentuk yang lebih mudah dibaca:

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

}

Saya kira ide dasarnya tidak terlalu buruk, tetapi membutuhkan terlalu banyak pengecualian, untuk akhirnya berhasil untuk semua kasus ...: /


Maaf, tidak berfungsi dengan 0:(
duci9y

Ah, tentu saja, tambahan terakhir yang saya buat kacau itu. Kode Diperbarui, jadi saya turun ke 199 sekarang. Terima kasih telah menunjukkan itu!
Jochen Reinschlüssel

Tidak menyadari bahwa satu: D Terlalu banyak pengkodean dalam bahasa asli dalam beberapa hari terakhir kurasa;)
Jochen Reinschlüssel

Anda menghapus setiap ruang dalam versi yang dipadatkan ... bukankah itu menyebabkan kesalahan? Contoh: pertama 4 karakter Anda: intx... tidak itu: int x?
SirPython

4

C - 104 107 114 karakter - 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;}}

Tidak Disatukan:

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

Bagus. Bisakah Anda juga memposting versi yang tidak serigala dengan spasi yang baik?
duci9y

@ duci9y Menambahkannya.
Oberon

Bukankah ini akan menampilkan hasil yang rusak? (Spec telah diperbarui untuk menyatakan bahwa pesanan penting.)
Gaffi

@ Gaffi Baiklah kalau begitu. Saya akan mengedit kode.
Oberon

4
Gagal memperhatikan yang 0berisi 0.
ugoren

3

R 87 93

Ini peningkatan:

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

(Berpotensi) Lebih mudah dibaca, dengan catatan:

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

Kenapa tidak ada spasi putih?
duci9y

@ duci9y Karena tidak ada yang perlu. Saya akan memformat agar lebih mudah dibaca dan menambahkannya juga, hanya untuk ukuran yang baik.
Gaffi

Tidak bekerja dengan 0.
duci9y

@ duci9y Tidak gagal. Saya membuat satu perubahan kecil dari pos asli (+2 karakter), karena pos asli DID gagal 0. Apakah Anda mencoba dengan versi terbaru ini? Saya menggunakan R 3.0.1.
Gaffi

@ duci9y Agar jelas, maksud saya apakah Anda menggunakan ini pada versi terbaru dari kode saya . Versi R saya harus cukup dekat dengan versi terbaru sehingga tidak masalah. Namun, saya tidak menguji sama sekali pada 2. versi *.
Gaffi

3

Prolog: 75

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

Bagaimana Anda menyebutnya? Saya menyimpannya dalam test.plfile, mulai swipl, dimasukkan consult('test')dan dimasukkan f(9). Tetapi itu hanya kembali false.
Martin Thoma

3

C menjawab dalam 98 karakter

Ini adalah salah satu hal terseksi yang pernah saya kodekan

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

Versi yang lebih lama, dengan 104 karakter non-spasi putih:

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

"Bekerja untukku" menggunakan GCC dan CLANG.


Luar biasa! Selamat datang di Golf Code.
duci9y

2

GNU coreutils (44)

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

di mana trdigunakan untuk mengonversi baris baru ke spasi, dan echomenyediakan satu baris baru akhir.

$ 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

Ini tidak jauh berbeda dari jawaban yang ada .
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 karakter

Semua spasi putih dapat dilepas dengan aman, artinya 27 karakter. Angka negatif dalam output akan memiliki _untuk tanda negatif: ini hanya cara J menulis angka negatifnya.

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

Dijelaskan:

  • V & (i: 100)- Bind ( &) himpunan angka dari -100 hingga 100 inklusif ( i:100) sebagai argumen yang tepat dari kata kerja utama ( V). Argumen tunggal dari seluruh kata kerja akan disalurkan ke sisi kiri.
  • (U"0 # ])- Gunakan hasil kata kerja di Uatas setiap angka dari argumen kanan ( "0) untuk memilih ( #) item dari argumen kanan ( ]).
  • (e. 10 #.^:_1 |)- Diberi angka yang akan diuji sebagai argumen kiri dan angka yang akan diperiksa sebagai argumen yang benar, perluas dalam basis 10 ( 10 #.^:_1) nilai absolut dari angka ( |), dan periksa apakah digit merupakan elemen dari ekspansi itu ( e.).

Pemakaian:

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

Konvensi garis bawah untuk negatif di J selalu mengganggu saya - tidak akan terlalu buruk jika menggunakan simbol minus dalam output (tanpa mengacaukan format kata kerja).
Desty

Garis bawah adalah cara J yang jelas (dan, saya berpendapat, anggun dan APLish) untuk membedakan tanda-tanda negatif dari kata kerja -Negate / Minus. K memungkinkan Anda menggunakan tanda negatif "secara alami" dalam angka, dan secara kebetulan K mengeluarkan sintaksis sintaksis yang misterius. Jika itu benar-benar menjengkelkan Anda, pekerjaan dalam pilihan Anda ;8!:1, '4.0'8!:2atau '-'I.@:=&'_'}":, biaya 7, 11, dan 16 karakter masing-masing untuk membuat program yang dihasilkan fungsi bukan sebuah ekspresi, menurut hitungan saya.
algorithmshark

Saya tahu apa itu, tapi agak merepotkan sama ketika saya / O. Akan lebih baik jika itu menghasilkan tanda minus secara default saat mencetak angka, daripada mencetak garis bawah mungkin jika seseorang ingin mengevaluasi string yang dihasilkan.
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
            }

Tanpa string (kecuali untuk menghasilkan spasi di antara angka-angka), tidak ada array char atau array lainnya, tidak ada regex. Diuji dengan 0. Output:

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


1
Dan saya menemukan bahasa baru hari ini. :)
duci9y

2

Javascript - 108

Tidak yakin apakah jawaban javascript yang ada akan dipertimbangkan karena menggunakan regex, jadi saya membuatnya tanpa itu:

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)

Dapat juga disingkat menjadi 101 jika variabel x dimasukkan langsung, seperti:

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)

Ini pada dasarnya memeriksa apakah nilai absolut operasi div atau mod sama dengan digit (yang juga berfungsi untuk 100).


Jika x=1, ini gagal untuk mencetak -100atau 100.
DocMax

Harus diperbaiki sekarang
Damir Kasipovic

1bekerja dengan baik, tapi sekarang 0cetakan 1, 2, 3... Maaf untuk menjadi pengacau di sini.
DocMax

Baiklah jika Anda memasukkan x = 0; berfungsi dengan baik, masalahnya adalah prompt()mengembalikan string, jadi saya menambahkan * 1 dan semoga saja ok sekarang. Terima kasih atas saran Anda
Damir Kasipovic

1
parseInt(j/10)dapat diganti dengan (0|j/10)yang lebih pendek dan menghindari string implisit. Konversi string-ke-angka (tidak dapat dihindari) di prompt()*1tidak dapat disingkat sebagai +prompt(). (Atau lebih singkat lagi, ubah fungsi untuk memulai for(x=+prompt(i=-100);....
DocMax

2

GW Basic: 107 karakter tidak termasuk spasi

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

Menggunakan satu digit untuk nomor garis membantu dan menghapus spasi berarti tidak ada kebutuhan untuk memiliki banyak pernyataan pada suatu garis lebih dari sekali untuk menjaga angka mencapai 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)

Hasil dalam

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

Menggunakan bitwise atau:

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 dengan spasi putih yang diperlukan)

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

Tidak Disatukan:

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

Jika Anda menggunakan definisi dua baris dengan pencocokan pola, yaitu a 0=[-100....dan a d=[b|b<-....Anda dapat menyingkirkan if then elsedan menyimpan beberapa byte.
nimi

1

Python - 172 karakter

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)

Untuk menguji dalam Python:

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

1

VBA 121

(tidak ada spasi atau Subdefinisi yang dihitung):

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

Apakah ini berhasil 0?
duci9y

@ duci9y Ya. Khususnya karena:IIf(d = 0, IIf(d = n Mod 10, " " & n, "")
Gaffi

1

perl, 117 dengan karakter spasi tidak berarti dihapus

Saya pikir Anda sedang mencari sesuatu yang lebih seperti ini. Membaca dari stdin, menghasilkan satu baris per pertandingan. Tidak ada regexps, array (atau set atau hashes atau apa pun yang merupakan array di bawah penutup) atau string, implisit atau sebaliknya, kecuali string yang diteruskan untuk dicetak:

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"

misalnya:

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

menambahkan 5 karakter karena 0 tidak ditangani dengan benar. (Nilai satu digit semua akan dikembalikan.)


1

Ini adalah pertama kalinya saya bermain golf kode. Ini terlihat cukup menarik. Saya tidak bisa menang, tetapi saya mencoba dan ingin menunjukkan apa yang bisa saya lakukan.

Python: 104 (89 jika saya bisa mulligan impor) - jika hasilnya harus dicetak persis seperti yang ditunjukkan pada contoh

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 - jika output dapat dilakukan di luar fungsi dan satu-satunya batasan untuk output adalah tidak ada angka yang melanggar dicetak

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 char

Maaf untuk beberapa pengeditan, saya mengalami kesulitan melakukan ini dari ponsel saya :)

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 karakter bukan spasi

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

Sama seperti solusi Python saya, baru saja dikonversi ke dogelang .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.