Belirli bir rakam içeren -100 ile 100 arasındaki tüm sayıları yazdır


38

0 ile 9 (dahil) arasında bir rakam verilirse, işlev / alt rutininiz verilen rakamı içeren -100 ile 100 (dahil) arasında tüm sayıları yazdırmalıdır.

Örneğin:

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

Kurallar:

  • Dizeleri (seçtiğiniz dilde hangi şekilde temsil edilirse gösterilsin) veya karakter dizilerini kullanamazsınız. (Cevabı konsola yazdırmak hariç.)
  • Dizileri kullanamazsınız.

puanlama:

Puan = alt rutin / işlevin uzunluğu (boşluk sayılmaz)

En düşük puana sahip cevap kazanır.

Boşluk sayılmaz. Lütfen kodunuzu doğru şekilde biçimlendirin!

Bazı cevaplar, bazı üyeler tarafından belirtildiği gibi, hiçbir kural dizisi kuralına aykırı olabilecek düzenli ifadeler kullanıyor. Bu cevaplar kabul edilmeyecektir.

Lütfen 0göndermeden önce kodunuzu ile test edin .


2
Verilen çıktı yanlış veya belirsiz. -98 ... -91 ve 91 ... 98 nerede?
Oberon

27
Bir Boşluk Cevabı 0 puan alır. Bunu yapmak istediğinize emin misiniz?
ace_HongKongIndependence

3
Regex kullanımına izin verilir mi? Regex ile çalışmak dizelerle çalışmak demektir. Benzer şekilde listeler / koleksiyonlarla (ve benzer yapılarla) çalışmak dizilerle çalışmakla aynıdır. Burada @wallywest tarafından verilen yanıt regex kullanıyor. Dize ve / veya dizileri kullanmaktan yasaklamaya çalıştıklarında sorulardan hoşlanmadığım şey budur. İnsanlar bunları kullanmanın alternatif yollarını bulur. Ve herhangi bir cevap gerçekten doğru bir şekilde uygulanırsa, sadece karmaşık göründüğü için gerektiği kadar oy almaz.
microbian

2
"Boşluk sayılmaz. Lütfen kodunuzu doğru şekilde biçimlendirin!" Farklı dillerdeki boşlukların farklı bir önemi olduğu için bunu yapmanın harika bir yolu değildir. Daha sık, sadece "çok eski ve okunabilir bir sürüm yayınla".
Bob

2
@ace Boşlukta bir cevap yarattım (bununla 4 saat çalışmanız gerekiyordu). Bence sıfır puan, değil mi?
Victor Stafusa,

Yanıtlar:


75

Boşluk, 834 karakter (boşlukları çıkarırsanız 0)

Kullanılan bu tercüman bunu test etmek.

Bu bana biraz 4 saatlik zorlu çalışma ve korkunç hata ayıklama yarattı. Ama bitti!

   	    	 
   	    	 
	
	    	    	 
			   		    
	  			    	    		
  			   		
		    	     	
   
		    	    	 
			
	  	  	 		
   	    	 
			   	
	  	
	  	  	 		

   	   	  
   	    		
			 
    		  	  
	  	
	  	   	 	
 
   		
	  

		 	   			
  		
	  

   	   			
 
    	    	 
			
	  	  	   
   	 	 
	 	    	    	 
				  	
	  	  	  	

   	  	   
   	 	 
	 		   	    	 
				  	
	  	  	  	

 
 	  	 	 

   	  	  	
   	     	
			
	  	   		 
   	     
	
  
   	   		 
   	     	
   	
		    	    		
				
 	
   	  	 	 
   	    		
   	    		
			   	
	   		 
 
 	   	  

   	   	 	
   	    	 
			
	  	  		  
   	    	 
			   	
	  	
	  	  		  




   	  	 		
  			  	  
	
 	   	     
	
  
 
 	   	  

   	  		  
   	     
	
     		  	  
	
 	


EDIT : HTML püf noktaları ile sağlanan seçilebilir metin. Buradan buradan başka bir yere kopyalayıp yapıştırırsanız, lütfen [space][tab][linefeed][linefeed][linefeed]sonunun 100 veya 101 satırla bitip bitmediğini kontrol edin (sonuncusu bir satır besleme ile bitiyorsa editörünüzün yeni bir satır sayıp saymadığına bağlı olarak).

Bu şekilde kullanamamanız durumunda, alanı olduğu gibi S, satır başı Lve sekmesi gibi Tve ardından da satırları keserken L, burada:

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

12
Haha, bir ders öğrendim. : P
duci9y

2
@Cruncher Dil iyi tanımlanmış ve tamamen açık . Sorunuz için: sayı, ikili sayıyı temsil eden (space = 0, tab = 1, big-endian ikili formatı) bir dizi boşluk ve sekmedir ve yeni bir satırla sonlandırılır. Yani bir yeni hatta ulaştığınızda bir sayının bittiğini biliyorsunuz.
Tim S.

1
Bugün Whitespace'i öğrendim. codegolf.stackexchange.com/a/23216/17886
duci9y

7
"Boşluk sayılmayacak" diye yorumluyorum. demek ki bu cevap geçersiz. ;) +1
Tim Seguine

24

Bash + utils - 20

seq -100 100|grep 9

Bir komut dosyasında ise 21 bayt

seq -100 100|grep $1

Komut dosyasını çalıştırmak için:

sh myscript 9

4
grepdeğil bashya sh. Başka bir yardımcı program!
devnull

Katılıyorum, saf kabuk / bash değil :)
Nik O'Lai

1
Soru görür. Akılda cevap yapar. Daha önce yayınlanmış aynı cevabı görüyor. Kahretsin! +1
Şapkalı Adam

6
Bunun dizeleri kullandığını düşünüyorum.
David Conrad,

1
@DavidConrad Bu şekilde bakarsanız, her şey dizeleri kullanır. Program kaynağı bir dizedir. Terminal dizeleri kullanır. Vb
Albay Otuz İki

9

JavaScript 133 - 1 = 132

Elbette bu sürümle ilgili şu anda yanlış bir şey olamazdı ...?

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
Hatta daha kısa ısırdı: for(i=-100,r=prompt();101>i;i++)(i+'').match(r)&&console.log(i).
Mart'ta

2
Bu yanıtı (+1) beğendim, ancak dolaylı olarak dizeleri kullanmıyor mu?
Değil Charles

2
Bu örtük dize dönüşüm kullanır
Claudiu

1
Aslında ahlaksız, hayır ... alert(RegExp(9).test(99))sadece rakamlara dayanır, ayrıca trueJavaScript'in gevşek tabanlı yazma sistemi nedeniyle de döner . İşlevler sayılarla dizilermiş gibi çalışırlar, ancak yine de sayılardırlar ... Kodu okumak r=RegExp(x=+prompt());for(i=-100;101>i;i++)r.test(i)&&console.log(i);console.log(typeof(x));console.log(typeof(i))ve yürütmek için değiştirirseniz, yanıtın son halini xve isayıları gösterirsiniz ... Ergo, dizeleri kullanmıyorum ...
WallyWest

2
@ VoronoiPotato baskı da bir dize op. Ama bunu yapmamız gerektiği açık.
Tim Seguine


6

Yakut: 92 karakter

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

Okunabilir sürüm:

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

Örnek çalışma:

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

Test sürüşü:

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

0Test başarısız .
duci9y

Hata. Haklısın, @ duci9y. Düzeltildi.
Manat çalışması

6

K - 45 karakter

Herhangi bir ödül kazanmamakla birlikte, K golfü yeterince temsil edilmemektedir. K uygun boşluklarla daha güzel olamaz, bu yüzden bunu olduğu gibi bırakacağım, çünkü K hangi boşlukların önemli olduğu ve hangilerinin olmadığı konusunda çok seçici davranıyor.

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

Açıklaması:

  • a:100-!201- 0'dan 200'e kadar bir liste yapın, sonra 100'den çıkarın. Şimdi -100'den 100'e kadar olan rakamlara sahibiz, ancak sorunun özelliklerinden geriye doğru. Bunu daha sonra her zaman düzeltebiliriz, bu yüzden şimdilik bunu sadece ona atayacağız a.
  • _ _abs- Bu sayıların mutlak değerinin zeminini alın, çünkü herhangi bir nedenle K _abs, kayan nokta sonuçları vermesi gerektiğini düşünüyor . Neyse ki, onları döşeme onları tekrar tam sayılara dönüştürür.
  • 10_vs'- Her ( ') tamsayıyı taban 10 sayı olarak genişletin ( _vs"skalerden vektör" anlamına gelir). Her bir operatörü 'yukarıdaki fonksiyonlarda kullanmak zorunda olmadığımızı unutmayın, çünkü bunlar atomlarda çalışıyor.
  • @[...;100;0,]- Listemizdeki maddeyi, 100'lük 0,bir sıfıra (sıfıra sıfırlayan fonksiyon) , sıfıra sıfır yapan işlev ile değiştirin. Bu düzeltme olmadan, bu işlev 0 girişinde başarısız olur.
  • &x in'- Şimdi, yukarıda çok dikkatli bir şekilde oluşturduğumuz açılımların her birinde ( ) bir basamak olan endeksleri ( &) döndürün .x_in'
  • |a@- Son olarak, bu indeksleri indekslemek için kullanın ave listeyi doğru sıraya alın.

Kullanımı açıktır, ancak bir K yorumlayıcısında ellerinizi alma şansınız iyi. ( Github'da derleyebileceğiniz açık bir uygulama var .)

  {|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 gibi dillerin bu soru gibi senaryoların dışında verimli kullanımları olup olmadığını merak ediyorum. Onlar mı?
duci9y

2
@ duci9y Aslında K özellikle Wall Street'te kendi yerel veritabanı yazılımı KDB'yi kullanarak yüksek hızlı, yüksek hacimli işlemleri gerçekleştiren bir niş pazar bulmuştur. Yakın akraba J ayrıca kurumsal ve akademik bağlamda daha çok kullanım bulur.
algoritmshark

Bu harika! Ezoterik dillerin sadece eğlence amaçlı olduğuna inanıyordum. Durum böyle olmadığını görmek güzel.
duci9y

Açıklamada "Dizileri kullanamazsınız" yazmıyor mu?
Omar

6

darbe 55 49 karakter:

(etrafındaki boşluk sayılmaz &&)

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

Şunu söyleyerek yürütmek:

bash filename 9

üretirdi:

-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

İki ekstra puan için "&&" yerine "&&" yazabilirsiniz. Sondaki yeni çizgiyi düşürürsem, bir daha az karakter sayırım.
Dijital Travma,

1
Kazıyın - yeni kuralı yeni gördüm: "EDIT: Boşluk sayılmayacak. Lütfen kodunuzu doğru şekilde biçimlendirin!" . Öyleyse, boşluk olmayan tüm karakterleri sayman yeterli mi?
Dijital Travma

Daha sonra ;s'yi yeni satırlara dönüştürebilir ve 2 puan kazanabilirsiniz .
joeytwiddle

4

PHP 67 bayt:

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

Evet, 'strpos' çağrısı var, ancak yalnızca rakamları kullanıyorum!

İşte bir 'ungolfed' versiyonu:

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

Bunun çalışması için, burada test edebilirsiniz: http://writecodeonline.com/php/

Sadece $_GET[n]='<number>';kodun başına eklemeyi unutmayın .

Veya, bir lamba veya xampp sunucusunda, bir dosya oluşturabilir ve daha ?n=<number>sonra dosya adından sonraki parametreyle tarayıcıda erişebilirsiniz .


1
Bu, dizge yok kuralını ihlal eden, örtük dize dönüşümüne benziyor.
VoronoiPotato

Benim hatam değil. Dili ben yapmadım. Sahip olduğum şeyi kullandım. Ayrıca, dönüşüm dahili olarak yapılır. Kodda dizelerle ilgili hiçbir şey yoktur (çıktı hariç).
Ismael Miguel

Kuralı okuduğum şekilde, sayıları aritmetik olarak değerlendirmelisin. Siz veya dil veya kütüphane tarafından, dizeleri olarak işlemek sınırsızdır. Ancak hemen hemen herkes aynı şekilde kuralı süpürüyor.
David Conrad

Herkes en küçük şekilde yapılmasını istiyor. Ve en küçük sayı, sayı dizeleri olarak ele alınır (dahili olarak koddaki dizgeye dolaylı dönüşüm olmadan).
Ismael Miguel

4

Mathematica 28

Üzgünüm, direnemedim.

:)

Talimatlar: "0 ile 9 arasında bir rakam verilirse (dahil), işlev / alt rutininiz verilen rakamı içeren -100 ile 100 (dahil) arasında tüm sayıları yazdırmalıdır."


Aşağıdaki tüm bu numaraları sırayla yazdırır.

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

Özel bir bonus olarak, bu sayıları verilen sayıyı içermeyen aynı aralıkta yazdırır. :)


Ama bu n'i filtre olarak kullanmaz
Murta

@Marta, Evet, teknik olarak uygun bir cevap sunarken bulmacanın amacını ("Özür dilerim" dedim).
DavidC

4

Buradaki ilk denemem, belki de bazı şeyleri yanlış yapıyorum, lütfen affedersiniz;)
Yani, tüm sınıfı mı yoksa sadece içindeki mantığı mı eklemek istediğimden emin değildim.

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

İşte daha okunabilir bir form:

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

}

Sanırım temel fikir o kadar da kötü değildi, ama nihayet tüm vakalarda çalışabilmek için çok fazla istisnaya ihtiyaç vardı ...: /


Üzgünüz, işe yaramadı 0:(
duci9y

Ah, elbette, son eklenenler bunu mahvetti. Kod güncellendi, bu yüzden 199’a düştüm. Bunu işaret ettiğin için teşekkürler!
Jochen Reinschlüssel

Bunu farketmedim mi: D Geçtiğimiz günlerde ana dilinde çok fazla kodlama var;)
Jochen Reinschlüssel 7:14

Sıkıştırılmış sürümünüzdeki her boşluğu kaldırdınız ... bu bir hataya neden olmaz mı? Örnek: İlk 4 karakter: intx... olmamalı: 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;}}

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

Güzel. Lütfen uygun beyaz boşluklu, ungolfed bir versiyonunu gönderir misiniz?
duci9y

@ duci9y Eklendi.
Oberon

Bu sonuç sıra dışı çıktı olmaz mı? (Spec, siparişin önemli olduğunu belirtmek üzere güncellendi.)
Gaffi

@Gaffi Peki o zaman. Kodu düzenleyeceğim.
Oberon

4
0İçerdiğini fark edemez 0.
ugoren

3

R 87 93

İşte bir gelişme:

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

(Potansiyel olarak) Notlarla birlikte daha okunur:

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

Neden boşluk yok?
duci9y

@ duci9y Çünkü hiçbiri gerekli değil. Daha iyi okunabilmesi için formatlayacağım ve sadece iyi bir önlem için de ekleyeceğim.
Gaffi

İle çalışmıyor 0.
duci9y

@ duci9y Başarısız değil. Orijinal yazı DID'si başarısız olduğu için orijinal yazıdan (+2 karakter) küçük bir değişiklik yaptım 0. Bu en son sürümle denediniz mi? R 3.0.1 kullanıyorum.
Gaffi

@ duci9y Açık olmak gerekirse, bunu kodumun en son sürümünde kullandınız mı demek istedim . Benim R sürümüm önemli olmayan en son sürüme yeterince yakın olmalıdır. Ancak, 2. sürümlerde hiç test etmedim.
Gaffi

3

Prolog: 75

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

Buna nasıl seslenirsiniz? Bir test.pldosyaya kaydettim , başladım swipl, girdim consult('test')ve sonra girdim f(9). Ama sadece geri döndü false.
Martin Thoma

3

98 karakterde C cevabı

Bu kodladığım en seksi şeylerden biri

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'ün beyaz olmayan karakteri ile eski sürümü:

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 ve CLANG kullanarak "Benim için çalışıyor".


Müthiş! Code Golf'a hoş geldiniz.
duci9y

2

GNU çekirdeği (44)

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

burada trboşluk için yeni satır dönüştürmek için kullanılır ve echoson bir yeni satır sağlar.

$ 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

Bu mevcut bir cevaptan çok farklı değil .
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

Tüm boşluklar güvenle çıkarılabilir, yani 27 karakter. Çıktıdaki negatif sayılar, _negatif bir işarete sahip olacaktır : bu, J'nin negatif sayıları yazdığı yoldur.

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

Açıklaması:

  • V & (i: 100)- ( &) i:100ana fiili ( V) doğru argüman olarak -100 ile 100 dahil ( ) arasında sayılar kümesi bağlayın . Tüm fiilin tek argümanı sol tarafa gönderilir.
  • (U"0 # ])- USağ argümandaki "0( #) maddeleri seçmek için sağ argümandaki ( ) her sayının üzerindeki fiili kullanın ].
  • (e. 10 #.^:_1 |)- Sol argüman olarak test edilecek rakam ve doğru argüman olarak kontrol edilecek sayı göz önüne alındığında, 10 ( 10 #.^:_1) tabanındaki ( ) sayısının mutlak değerini genişletin |ve hanenin bu genişlemenin bir öğesi olup olmadığını kontrol edin ( e.).

Kullanımı:

   ((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’deki negatif-negatif kongre, beni her zaman rahatsız etti - çıktıda eksi bir sembol kullanırsa (fiil biçimiyle uğraşmadan) çok kötü olmazdı.
6'14

Alt çizgi, J'nin belirsiz (ve tartışmalı, zarif ve APLish) negatif işaretlerini Negate -/ Minus fiilinden ayırt etmenin bir yoludur . K, negatif işareti "doğal" sayılarla kullanmanıza izin verir ve tesadüfen de K, bir arcane sözdizimsel küme çıkardı. Tercihi konusunda gerçekten sizi irking geçtiyse, iş ;8!:1, '4.0'8!:2veya '-'I.@:=&'_'}":, saatime göre bir ifadenin yerine çıkan programı bir işlev yapmaya sırasıyla 7, 11 ve 16 karakter maliyet.
algoritmshark

Ne olduğunu biliyorum, ama G / Ç söz konusu olduğunda bu biraz rahatsız edici. Sayıları yazdırırken varsayılan olarak eksi işaretleri oluşturması daha iyi olurdu, birisinin sonuçta elde edilen dizgiyi değerlendirmek istemesi durumunda alt çizgi yazdırmak yerine.
6'14

2

Harika, 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
            }

Dizge yok (sayılar arasındaki boşlukların çıkması dışında), karakter dizileri veya diğer diziler yok, regex yok. 0 ile test edildi. Çıkış:

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


1
Ve bugün yeni bir dil keşfettim. :)
duci9y

2

Javascript - 108

Varsa, javascript cevabının regex kullandığından dikkate alınacağından emin değilim, bu yüzden onsuz bir tane yarattım:

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)

Eğer x değişkeni doğrudan yerleştirilirse 101'e kısaltılabilir:

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)

Temel olarak, div veya mod işlemlerinin mutlak değerlerinin haneye eşit olup olmadığını kontrol eder (aynı zamanda 100 için de çalışır).


Eğer x=1, bu -100veya yazdırmaz 100.
DocMax

Şimdi düzeltilmeli
Damir Kasipovic

1güzel çalışır, ancak şimdi 0baskılar 1, 2, 3... Maalesef burada sorun yaratan.
DocMax

Peki x = 0 koyarsanız; Tamam çalışıyor, sorun bu prompt()dize döndürdü, bu yüzden * 1 ekledim ve umarım şimdi iyi olmalı. Önerileriniz için teşekkür ederim
Damir Kasipovic

1
parseInt(j/10)ile değiştirilebilir (0|j/10)olan hem kısadır ve örtük dizeleri önler. (Kaçınılmaz) dize - sayıya dönüştürme, prompt()*1olarak kısaltılamaz +prompt(). (Veya daha kısa for(x=+prompt(i=-100);...
süreliğine

2

GW Basic: Boşluk hariç 107 karakter

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

Satır sayıları için tek basamak kullanmak, boşlukları sıyırmaya ve soymaya yardımcı olur; sayıları 10'a ulaşmak için bir satırda birden fazla ifadeye gerçekten ihtiyaç duyulmadığı anlamına gelir.


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)

Sonuçları

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

Bit yönünde veya:

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 gerekli boşluklarla)

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]

Desen eşleştirme ile iki satırlı bir tanım kullanırsanız, yani a 0=[-100....ve a d=[b|b<-....ondan kurtulup if then elsebirkaç bayttan tasarruf edebilirsiniz.
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)

Python içinde test etmek için:

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

1

VBA 121

(boşluk veya Subtanım sayılmaz):

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

Bu işe yarıyor 0mu?
duci9y

@ duci9y Evet. Özellikle çünkü:IIf(d = 0, IIf(d = n Mod 10, " " & n, "")
Gaffi

1

perl, 117 anlamlı olmayan boşluk karakterleri kaldırıldı

Bence daha fazla böyle bir şey arıyordun. Stdin'den okur, maç başına bir satır çıkar. Regexps, diziler (veya kümeler veya kareler veya kapakların altında bir dizi olan herhangi bir şey) veya dizilen veya yazdırılan dizeler dışında, dizeler:

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"

Örneğin:

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 doğru işlenmediği için 5 karakter eklendi. (Tek basamaklı değerlerin tümü döndürülür.)


1

Bu benim ilk kez golf kodunu oynuyor. Bu oldukça ilginç görünüyor. Kazanamam, ama ne yapabileceğimi göstermek istedim ve istedim.

Python: 104 (89, içe aktarmayı düzenleyebiliyorsam) - sonuçların örnekte gösterildiği gibi yazdırılması gerekiyorsa

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 - çıktı fonksiyonun dışında yapılabiliyorsa ve çıktı için tek kısıtlama ihlal numarası basılmamasıdır.

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 karakter

Birkaç düzenleme için üzgünüm, telefonumdan bunu yaparken sorun yaşıyorum :)

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.