Drucken Sie alle Zahlen von -100 bis 100, die eine bestimmte Ziffer enthalten


38

Wenn Sie eine Ziffer zwischen 0 und 9 (einschließlich) eingeben, sollte Ihre Funktion / Subroutine alle Zahlen zwischen -100 und 100 (einschließlich) ausgeben, die die angegebene Ziffer enthalten.

Beispielsweise:

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

Regeln:

  • Sie können keine Zeichenfolgen (wie auch immer sie in der von Ihnen gewählten Sprache dargestellt werden) oder Zeichenfelder verwenden. (Außer die Antwort auf die Konsole zu drucken.)
  • Sie können keine Arrays verwenden.

Wertung:

Score = Länge des Unterprogramms / der Funktion (Leerzeichen werden nicht gezählt)

Die Antwort mit der niedrigsten Punktzahl gewinnt.

Leerzeichen werden NICHT gezählt. Bitte formatieren Sie Ihren Code richtig!

Einige Antworten verwenden reguläre Ausdrücke, die möglicherweise gegen die von einigen Mitgliedern festgelegte No-Strings-Regel verstoßen. Diese Antworten werden nicht akzeptiert.

Bitte testen Sie Ihren Code 0vor dem Posten mit.


2
Die angegebene Ausgabe ist entweder falsch oder unklar. Wo sind -98 ... -91 und 91 ... 98?
Oberon

27
Eine Whitespace-Antwort wird mit 0 bewertet. Möchten Sie das wirklich tun?
ace_HongKongIndependence

3
Ist die Verwendung von Regex erlaubt? Mit Regex zu arbeiten bedeutet, mit Strings zu arbeiten. Das Arbeiten mit Listen / Sammlungen (und ähnlichen Strukturen) entspricht dem Arbeiten mit Arrays. Die Antwort von @wallywest hier verwendet Regex. Dies ist das, was ich an Fragen nicht mag, wenn sie versuchen, die Verwendung von Zeichenfolgen und / oder Arrays zu verbieten. Die Menschen finden alternative Verwendungsmöglichkeiten. Und wenn eine Antwort wirklich richtig umgesetzt wird, erhält sie nicht so viele Stimmen, wie sie sollte, nur weil sie kompliziert aussieht.
Microbian

2
"Whitespace wird NICHT gezählt. Bitte formatieren Sie Ihren Code richtig!" Dies ist keine gute Möglichkeit, da Leerzeichen in verschiedenen Sprachen unterschiedliche Bedeutung haben. Meistens ist es nur "poste auch eine unbelegte / lesbare Version".
Bob

2
@ace Ich habe eine Antwort in Whitespace erstellt (benötigte 4 Stunden harte Arbeit damit). ich denke, dass es null punktet, oder?
Victor Stafusa

Antworten:


75

Leerzeichen, 834 Zeichen (0, wenn Sie Leerzeichen subtrahieren)

Benutzt diesen Interpreter um es zu testen.

Dafür habe ich 4 Stunden harte Arbeit und schreckliches Debuggen benötigt. Aber es ist geschafft!

   	    	 
   	    	 
	
	    	    	 
			   		    
	  			    	    		
  			   		
		    	     	
   
		    	    	 
			
	  	  	 		
   	    	 
			   	
	  	
	  	  	 		

   	   	  
   	    		
			 
    		  	  
	  	
	  	   	 	
 
   		
	  

		 	   			
  		
	  

   	   			
 
    	    	 
			
	  	  	   
   	 	 
	 	    	    	 
				  	
	  	  	  	

   	  	   
   	 	 
	 		   	    	 
				  	
	  	  	  	

 
 	  	 	 

   	  	  	
   	     	
			
	  	   		 
   	     
	
  
   	   		 
   	     	
   	
		    	    		
				
 	
   	  	 	 
   	    		
   	    		
			   	
	   		 
 
 	   	  

   	   	 	
   	    	 
			
	  	  		  
   	    	 
			   	
	  	
	  	  		  




   	  	 		
  			  	  
	
 	   	     
	
  
 
 	   	  

   	  		  
   	     
	
     		  	  
	
 	


BEARBEITEN : Auswählbarer Text mit HTML-Tricks. Wenn Sie es von hier an eine andere Stelle kopieren und einfügen, überprüfen Sie bitte, ob Sie [space][tab][linefeed][linefeed][linefeed]mit 100 oder 101 Zeilen genau am Ende angekommen sind (je nachdem, ob Ihr Editor eine neue Zeile zählt oder nicht, wenn die letzte mit einem Zeilenvorschub endet).

Für den Fall, dass Sie es nicht auf diese Weise verwenden können, wenn Sie Leerzeichen als S, Zeilenvorschub als Lund Tabulator als betrachten Tund Zeilen nach dem L's brechen , ist dies hier:

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 Ausnutzung "0, wenn Sie Leerzeichen subtrahieren"
Jwosty

12
Haha, ich habe eine Lektion gelernt. : P
duci9y

2
@Cruncher Die Sprache ist gut definiert und völlig eindeutig . Für Ihre spezielle Frage: Eine Zahl ist eine Reihe von Leerzeichen und Tabulatoren, die die Zahl im Binärformat (Leerzeichen = 0, Tabulatoren = 1, Big-Endian-Binärformat) darstellen und mit einem Zeilenumbruch abgeschlossen werden. Sie wissen also, dass eine Nummer endet, wenn Sie eine neue Zeile erreichen.
Tim S.

1
Ich habe heute Whitespace gelernt. codegolf.stackexchange.com/a/23216/17886
duci9y

7
Ich interpretiere "Whitespace wird NICHT gezählt." Das heißt, diese Antwort ist ungültig. ;) +1
Tim Seguine

24

Bash + Utensilien - 20

seq -100 100|grep 9

Oder 21 Bytes, wenn in einem Skript

seq -100 100|grep $1

So führen Sie das Skript aus:

sh myscript 9

4
grepist nicht bashoder sh. Es ist ein weiteres Dienstprogramm!
Devnull

Ich muss zustimmen, es ist nicht reine Shell / Bash :)
Nik O'Lai

1
Sieht Frage. Erinnert an die Antwort. Sieht genau die gleiche Antwort bereits gebucht. Verdammt! +1
Der Kerl mit dem Hut

6
Ich denke, dass dies Zeichenfolgen verwendet.
David Conrad

1
@DavidConrad Wenn du es so betrachtest, verwendet alles Zeichenketten. Die Programmquelle ist eine Zeichenfolge. Das Terminal verwendet Strings. Etc.
Colonel Zweiunddreißig

9

JavaScript 133 - 1 = 132

An dieser Version konnte doch jetzt nichts mehr falsch sein ...?

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
Auch biss ein kürzeres: for(i=-100,r=prompt();101>i;i++)(i+'').match(r)&&console.log(i).
VisioN

2
Ich mag diese Antwort (+1), aber werden implizit keine Zeichenfolgen verwendet?
Nicht dass Charles

2
Dies verwendet implizite String-Konvertierung
Claudiu

1
Eigentlich Chaps, nein, nicht ... alert(RegExp(9).test(99))was nur auf Zahlen basiert, kehrt auch trueaufgrund des locker basierenden Schreibsystems von JavaScript zurück. Die Funktionen arbeiten mit den Zahlen, als wären sie Zeichenfolgen, sind aber immer noch Zahlen ... Wenn Sie den Code so ändern, dass er gelesen r=RegExp(x=+prompt());for(i=-100;101>i;i++)r.test(i)&&console.log(i);console.log(typeof(x));console.log(typeof(i))und ausgeführt wird, wird die endgültige Art der Antwort angezeigt xund ials Zahlen ... Also, ich verwende keine Zeichenfolgen ...
WallyWest

2
@VoronoiPotato Drucken ist auch eine Zeichenfolge op. Aber das müssen wir natürlich tun.
Tim Seguine


6

Ruby: 92 Zeichen

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

Lesbare Version:

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

Probelauf:

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

Testlauf:

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

Schlägt den 0Test fehl .
Duci9y

Hoppla. Du hast recht, @ duci9y. Korrigiert
Manatwork

6

K - 45 Zeichen

Keine Auszeichnungen, aber K Golf ist unterrepräsentiert. K wird mit dem richtigen Abstand nicht hübscher, also lasse ich das einfach so, wie es ist, weil K sehr wählerisch wird, welches Leerzeichen wichtig ist und welches nicht.

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

Erklärt:

  • a:100-!201- Machen Sie eine Liste von 0 bis einschließlich 200 und subtrahieren Sie sie dann von 100. Jetzt haben wir die Zahlen von -100 bis einschließlich 100, aber rückwärts von den Angaben der Frage. Wir können das später immer wieder beheben, daher weisen wir dies vorerst nur zu a.
  • _ _abs- Berechnen Sie den absoluten Wert dieser Zahlen, denn aus welchem ​​Grund auch immer K der Meinung ist, _absdass dies Gleitkommaergebnisse liefern sollte. Zum Glück wandelt der Bodenbelag sie wieder in ganze Zahlen um.
  • 10_vs'- Erweitern Sie jede 'Ganzzahl ( ) als Zahl zur Basis 10 ( _vssteht für "Vektor aus Skalar"). Beachten Sie, dass wir den Each-Operator 'für die obigen Funktionen nicht verwenden mussten, da sie auf Atomen arbeiten.
  • @[...;100;0,]- Ändern Sie das Element in unserer Liste mit dem Index 100 (eine leere Liste, die das Ergebnis der Erweiterung von 0 auf Basis 10 ist) um die Funktion 0,, die der Vorderseite eine Null voranstellt. Ohne diese Korrektur schlägt diese Funktion am Eingang 0 fehl.
  • &x in'- Geben Sie nun die Indizes ( &) zurück, bei denen xin ( _in) jeder ( ') der oben so sorgfältig konstruierten Erweiterungen eine Ziffer steht .
  • |a@- Verwenden Sie schließlich diese Indizes a, um die Liste zu indizieren und in die richtige Reihenfolge umzukehren.

Die Verwendung ist offensichtlich, obwohl Sie viel Glück haben, einen K-Interpreter in die Hände zu bekommen. (Auf Github gibt es eine Open-Source-Implementierung , die Sie kompilieren können.)

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

Ich frage mich, ob Sprachen wie K außerhalb von Szenarien wie dieser Frage produktiv eingesetzt werden können. Tun sie?
Donnerstag,

2
@ duci9y Tatsächlich hat sich insbesondere K an der Wall Street mit seiner nativen Datenbanksoftware KDB einen Nischenmarkt für die Abwicklung von Transaktionen mit hoher Geschwindigkeit und hohem Volumen erarbeitet. Der nahe Verwandte J findet ebenfalls Verwendung, allerdings eher im unternehmerischen und akademischen Kontext.
Algorithmushai

Das ist großartig! Ich war der Überzeugung, dass esoterische Sprachen nur zum Spaß sind. Gut zu sehen, dass das nicht der Fall ist.
duci9y

Sagt die Beschreibung nicht "Sie können keine Arrays verwenden"?
Omar

6

Bash 55 49 Zeichen:

(ohne Leerzeichen &&)

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

Ausführen mit den Worten:

bash filename 9

würde produzieren:

-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

Sie können "&&" durch "&&" für zwei zusätzliche Punkte ersetzen. Außerdem zähle ich ein Zeichen weniger, wenn ich die abschließende Newline fallen lasse.
Digital Trauma

1
Scratch that - Ich habe gerade die neue Regel gesehen: "EDIT: Whitespace wird NICHT gezählt. Bitte formatieren Sie Ihren Code richtig!" . Also darfst du wohl alle Nicht-Leerzeichen zählen?
Digital Trauma

Dann können Sie das ;s in Zeilenumbrüche konvertieren und 2 Punkte speichern.
Joeytwiddle

4

PHP 67 Bytes:

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

Ja, es gibt einen Strpos-Anruf, aber ich verwende nur Nummern!

Hier ist eine 'ungolfed' Version:

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

Damit dies funktioniert, können Sie es hier testen: http://writecodeonline.com/php/

Denken Sie daran, $_GET[n]='<number>';am Anfang des Codes einzufügen.

Oder Sie können auf einem Lampen- oder XAMPP-Server eine Seite erstellen und dann im Browser mit dem Parameter darauf zugreifen ?n=<number> nach dem Dateinamen .


1
Dies sieht aus wie eine implizite String-Konvertierung, die gegen die No-Strings-Regel verstößt.
VoronoiPotato

Ist nicht meine Schuld. Ich habe die Sprache nicht gemacht. Ich habe verwendet, was ich habe. Die Umstellung erfolgt dabei intern. Der Code enthält nichts, was sich mit Zeichenfolgen befasst (außer der Ausgabe).
Ismael Miguel

So wie ich die Regel lese, muss man mit den Zahlen rechnerisch umgehen. Sie als Zeichenfolgen zu behandeln, sei es durch Sie oder durch die Sprache oder Bibliothek, ist verboten. Aber fast alle anderen umgehen die Regel auf ähnliche Weise.
David Conrad

Nun, jeder möchte es auf kleinstem Raum schaffen. Und die kleinste behandelt die Zahlen als Zeichenfolgen (intern ohne implizite Konvertierung in Zeichenfolgen im Code).
Ismael Miguel

4

Mathematica 28

Entschuldigung, ich konnte einfach nicht widerstehen.

:)

Die Anweisungen lauten: "Wenn Sie eine Ziffer zwischen 0 und 9 (einschließlich) eingeben, sollte Ihre Funktion / Subroutine alle Zahlen zwischen -100 und 100 (einschließlich) ausgeben, die die angegebene Ziffer enthalten."


Im Folgenden werden alle diese Nummern der Reihe nach gedruckt.

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

Als besonderen Bonus werden die Nummern im selben Bereich gedruckt, die die angegebene Ziffer nicht enthalten. :)


Aber dies nicht n als Filter verwenden
Murta

@Marta, Ja, ich habe die Absicht des Puzzles (weshalb ich "Entschuldigung" sagte) unterlaufen und technisch eine angemessene Antwort geliefert.
DavidC

4

Mein erster Versuch hier, also mache ich vielleicht ein paar Dinge falsch, bitte entschuldige das;)
Also war ich mir nicht sicher, ob ich die ganze Klasse oder nur die Logik hinzufügen musste.

Java - 199 Zeichen

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

Hier eine besser lesbare 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);

}

Ich denke, die Grundidee war nicht so schlecht, brauchte aber zu viele Ausnahmen, um endlich für alle Fälle zu klären ...: /


Entschuldigung, funktioniert nicht mit 0:(
duci9y

Aw, klar, die letzte Zugabe, die ich gemacht habe, hat das durcheinander gebracht. Code aktualisiert, daher bin ich jetzt 199. Vielen Dank für den Hinweis!
Jochen Reinschlüssel

Das habe ich nicht
gemerkt

Sie haben jeden einzelnen Speicherplatz in Ihrer komprimierten Version entfernt ... würde das keinen Fehler verursachen? Beispiel: Ihre ersten 4 Zeichen: intx... sollte es nicht sein int x:?
SirPython

4

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

Nett. Könnten Sie bitte auch eine ungolfed Version mit korrektem Whitespace posten?
Duci9y

@ duci9y Hinzugefügt.
Oberon

Werden die Ergebnisse dadurch nicht in falscher Reihenfolge ausgegeben? (Die Spezifikation wurde aktualisiert, um
anzugeben,

@Gaffi Na dann. Ich werde den Code bearbeiten.
Oberon

4
Kann nicht feststellen, dass 0enthält 0.
Ugoren

3

R 87 93

Hier ist eine Verbesserung:

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

(Möglicherweise) besser lesbar, mit Anmerkungen:

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

Warum kein Leerzeichen?
duci9y

@duci9y Da ist keiner nötig. Ich formatiere, um besser lesbar zu sein, und füge das auch hinzu, nur aus gutem Grund.
Gaffi

Funktioniert nicht mit 0.
Duci9y

@ duci9y Es scheitert nicht. Ich habe eine kleine Änderung gegenüber dem ursprünglichen Beitrag (+2 Zeichen) vorgenommen, da der ursprüngliche Beitrag DID fehlgeschlagen ist 0. Hast du es mit dieser neuesten Version versucht? Ich benutze R 3.0.1.
Gaffi

@ duci9y Um klar zu sein, ich meinte, Sie haben dies auf der neuesten Version meines Codes verwendet . Meine Version von R sollte nah genug an der neuesten Version sein, um keine Rolle zu spielen. Allerdings habe ich überhaupt keine 2. * -Versionen getestet.
Gaffi

3

Prolog: 75

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

Wie nennt man das? Ich habe es in einer test.plDatei gespeichert, gestartet swipl, eingegeben consult('test')und dann eingegeben f(9). Aber es kehrte nur zurück false.
Martin Thoma

3

C Antwort in 98 Zeichen

Dies ist eines der sexiesten Dinge, die ich jemals codiert habe

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

Die ältere Version mit 104 Zeichen ohne Leerzeichen:

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

"Funktioniert für mich" mit GCC und CLANG.


Genial! Willkommen bei Code Golf.
duci9y

2

GNU coreutils (44)

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

Mit where trwerden Zeilenumbrüche in Leerzeichen konvertiert, und es echowird ein abschließender Zeilenumbruch angegeben.

$ 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

Dies unterscheidet sich nicht wesentlich von einer vorhandenen Antwort .
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 Zeichen

Alle Leerzeichen sind sicher entfernbar, dh 27 Zeichen. Negative Zahlen in der Ausgabe haben _ein negatives Vorzeichen: Dies ist genau die Art, wie J seine negativen Zahlen schreibt.

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

Erklärt:

  • V & (i: 100)- Bind ( &) die Zahlenmenge von -100 bis einschließlich 100 ( i:100) als rechtes Argument des Hauptverbs (V ). Das einzelne Argument des gesamten Verbs wird in die linke Seite geleitet.
  • (U"0 # ])- Verwenden Sie das Ergebnis des Verbs Uüber jeder Zahl aus dem rechten Argument ( "0), um ( #) Elemente aus dem rechten Argument ( ]) auszuwählen .
  • (e. 10 #.^:_1 |)- Geben Sie die zu prüfende Ziffer als linkes Argument und die zu prüfende Zahl als rechtes Argument an, erweitern Sie in Basis 10 ( 10 #.^:_1) den absoluten Wert der Zahl ( |) und prüfen Sie, ob die Ziffer ein Element dieser Erweiterung ist ( e.).

Verwendung:

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

Der Unterstrich für das Negative in J hat mich immer gestört - es wäre nicht so schlimm, wenn in der Ausgabe ein Minuszeichen verwendet würde (ohne das Formatverb zu verfälschen).
Desty

Der Unterstrich ist Js eindeutige (und ich würde argumentieren, elegante und APLish) Art, negative Vorzeichen vom Verb -Negate / Minus zu unterscheiden. Mit K können Sie das negative Vorzeichen "natürlich" in Zahlen verwenden, und nebenbei kam K zu einem arkanen syntaktischen Clusterfick. Wenn es wirklich Sie irking, Arbeit in Ihrer Wahl ;8!:1, '4.0'8!:2oder '-'I.@:=&'_'}":, kostet 7, 11 und 16 Zeichen bzw. das daraus resultierende Programm , um eine Funktion statt einem Ausdruck, nach meiner Schätzung.
Algorithmushai

Ich weiß, was es ist, aber es ist ein bisschen lästig, wenn es um I / O geht. Es wäre schöner, wenn beim Drucken von Zahlen standardmäßig Minuszeichen erzeugt würden, anstatt Unterstriche zu drucken, vermutlich für den Fall, dass jemand die resultierende Zeichenfolge auswerten möchte.
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
            }

Keine Zeichenfolgen (außer zum Ausgeben der Leerzeichen zwischen den Zahlen), keine Zeichen-Arrays oder anderen Arrays, keine regulären Ausdrücke. Getestet mit 0. Ausgabe:

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


1
Und ich habe heute eine neue Sprache entdeckt. :)
duci9y

2

Javascript - 108

Ich bin mir nicht sicher, ob die vorhandene JavaScript-Antwort berücksichtigt wird, da sie Regex verwendet. Daher habe ich eine Antwort ohne Regex erstellt:

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)

Kann auch auf 101 gekürzt werden, wenn die Variable x direkt gesetzt wird, wie:

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)

Grundsätzlich wird geprüft, ob die absoluten Werte von div- oder mod-Operationen der Ziffer entsprechen (was auch für 100 funktioniert).


Wenn x=1dies nicht möglich ist, drucken Sie -100oder 100.
DocMax

Sollte jetzt behoben sein
Damir Kasipovic

1funktioniert gut, aber jetzt 0druckt 1, 2, 3... Sorry ein Querulant , hier zu sein.
DocMax

Nun, wenn Sie x = 0 setzen; es funktioniert ok, das problem war, dass prompt()string zurückgegeben wird, also habe ich * 1 hinzugefügt und es sollte hoffentlich jetzt ok sein. Vielen Dank für Ihre Vorschläge
Damir Kasipovic

1
parseInt(j/10)ersetzt werden kann, (0|j/10)was sowohl kürzer ist als auch die impliziten Zeichenfolgen vermeidet. Die (unvermeidliche) Umwandlung von Zeichenfolge in Zahl prompt()*1kann nicht wie folgt gekürzt werden +prompt(). (Oder noch kürzer, ändern Sie die Funktion zu starten for(x=+prompt(i=-100);....
DocMax

2

GW Basic: 107 Zeichen ohne Leerzeichen

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

Die Verwendung einzelner Ziffern für die Zeilennummern hilft und das Entfernen der Leerzeichen bedeutet, dass es nicht wirklich erforderlich ist, mehrere Anweisungen in einer Zeile mehr als einmal zu haben, um die Zeilennummern auf 10 zu halten.


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)

Ergebnisse in

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

Verwenden Sie bitweise oder:

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 mit notwendigen Leerzeichen)

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]

Wenn Sie eine zweizeilige Definition mit Pattern Matching verwenden, dh a 0=[-100....und a d=[b|b<-....Sie können das loswerden if then elseund ein paar Bytes sparen.
nimi

1

Python - 172 Zeichen

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)

So testen Sie in Python:

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

1

VBA 121

(ohne Leerzeichen oder SubDefinition):

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

Funktioniert das mit 0?
Duci9y

@ Duci9y Ja. Insbesondere, weil:IIf(d = 0, IIf(d = n Mod 10, " " & n, "")
Gaffi

1

Perl, 117, ohne bedeutungslose Leerzeichen

Ich glaube, Sie haben nach etwas Ähnlichem gesucht. Liest von stdin, gibt eine Zeile pro Übereinstimmung aus. Keine regulären Ausdrücke, Arrays (oder Mengen oder Hashes oder irgendetwas anderes, das ein Array unter dem Deckmantel ist) oder Zeichenfolgen, implizit oder anderweitig, außer den Zeichenfolgen, die an print übergeben werden:

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"

z.B:

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 Zeichen hinzugefügt, da 0 nicht korrekt behandelt wurde. (Alle einstelligen Werte werden zurückgegeben.)


1

Dies ist mein erstes Mal, dass ich Codegolf spiele. Das sieht ziemlich interessant aus. Ich kann nicht gewinnen, aber ich habe versucht und wollte zeigen, was ich kann.

Python: 104 (89, wenn ich den Import abwickeln kann) - wenn die Ergebnisse genau wie im Beispiel gedruckt werden müssen

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 - Wenn die Ausgabe außerhalb der Funktion erfolgen kann und die einzige Einschränkung für die Ausgabe darin besteht, dass keine verletzenden Zahlen gedruckt werden

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 Zeichen

Entschuldigung für die vielen Änderungen, die ich von meinem Handy aus gemacht habe :)

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.