Knacken Sie den Code zum Zahlenschloss

22

Bei einem Standard-Zahlenschloss wie auf dem Bild. Zum Entsperren richten Sie die 4 Zahlen im Code in der Kombinationszeile aus. Nach Jahren des treuen Dienstes wurden Sie aus der Schlossfabrik entlassen und haben sich entschlossen, Rache zu üben, indem Sie die Schlösser nicht durcheinandergebracht haben, bevor Sie sie abschicken, und so jedes Schloss mit der Kombination belassen, um sie auf der Kombinationslinie zu entsperren.

Kombinationsschloss

Sie wissen auch, dass Sie anhand der Reihenfolge der Zahlen in den anderen Zeilen herausfinden können, welche Zahlen in der Kombinationszeile enthalten sein müssen (und daher die Kombination, mit der sie entsperrt werden soll).

Wenn jeder Zeile des Schlosses eine Nummer zugewiesen wird, die von Zeile 0 für die Kombinationszeile (die Zeile, die das Schloss entsperrt) bis Zeile 9 beginnt. Wenn beispielsweise die Nummern in Zeile 4 lauten 5336, ist dies die zu entsperrende Kombination 1992.

Leider wurden die Schlösser bereits verpackt und Ihre Sicht auf jedes Schloss ist verdeckt, sodass Sie nur Zahlen in verschiedenen Schlosszeilen sehen können.

Die Herausforderung

Bei 4 Ziffernpaaren, wobei die erste Ziffer der Ganzzahl die Zeilennummer und die zweite Ziffer die in dieser Zeile erscheinende Zahl darstellt, muss die Zahlenkombination für das Schloss ermittelt werden. Zum Beispiel, wenn Sie Folgendes eingeben:

57 23 99 45

Dann sollte es ausgeben:

2101

Oder

25 78 63 15

und

3174

Angenommen, die Eingabe besteht immer aus 4 positiven ganzen Zahlen in der Form `25 64 72 18.

Dies ist , also gewinnt das kürzeste Programm in der Anzahl der Bytes.

Auch dies ist meine erste Frage, daher ist jedes Feedback willkommen.

Rory McPerlroy
quelle
Ich denke, Sie müssen die Eingabe klären. Sie sagen " 4 Paare von ganzen Zahlen gegeben " und geben dann ein Beispiel 57 23 99 45. Das sind nicht vier Paare von ganzen Zahlen, sondern vier ganze Zahlen. Bei einigen Antworten wird davon ausgegangen, dass es sich um eine Zeichenfolge handelt, bei anderen wird davon ausgegangen, dass die Zeichenfolge als 4-Zoll-Zeichenfolge verarbeitet wurde.
Peter Taylor
Ich bin nicht einverstanden, die Tatsache , dass es die vier Paare von ganzen Zahlen sind das Format der Eingabe deutlich gemacht, die ganze Zahl 57 ist Paar 5 und 7, nicht die ganze Zahl 57. Meine erste Vermutung war , dass die Linie betrug 57 und die Kombination war 23
Qwerty01
1
Wie wäre es mit "Ziffernpaaren"? Das wäre viel klarer und präziser (und funktioniert auch mit führenden 0s).
flauschiger
Technisch wäre der richtige Begriff Permutationssperre . Die meisten "Zahlenschlösser" sind Permutationsschlösser, da die Reihenfolge der Ziffern einen Unterschied macht.
Nyuszika7h
Technisch ist es ja richtig, aber ich denke nicht, dass das für einen eingängigen Titel sorgt.
Rory McPerlroy

Antworten:

32

CJam, 9 8 Bytes

ea9fbAf%

Liest die Ziffernpaare als Befehlszeilenargumente. Um den Code online auszuprobieren , wechseln Sie eazu " lS/Aus simuliertem STDIN lesen".

Beispiellauf

$ cjam <(echo ea9fbAf%) 57 23 99 45; echo
2101
$ cjam <(echo ea9fbAf%) 25 78 63 15; echo
3174

Wie es funktioniert

Der Zeichencode der Ziffer d ist 48 + d . Betrachtet man also die zweistellige Zeichenkette xy, ergibt eine Zahl zur Basis 9 9 * (48 + x) + (48 + y) = 10 * (48 + x) + y - x ≡ y - x (mod 10) .

ea       " Push the array of command-line arguments.                                      ";
  9fb    " Mapped base 9 conversion; replace each string 'xy' with (9 * ord(x) + ord(y)). ";
     Af% " Take the results modulo 10.                                                    ";
Dennis
quelle
Verdammt, Sie können niemanden gewinnen lassen, nein? : P
Optimizer
Ich glaube nicht, dass wir eine bessere CJam-Antwort als diese bekommen werden
Rory McPerlroy,
1
Was ist da gerade passiert?
Krieg
1
@ DigitalTrauma: Sicher, mach weiter. Die Zeichenfolge "99"wird tatsächlich als Array interpretiert [57 57]durch b; "xy"9bist implementiert als 9 * ord(x) + ord(y). Das sollte ich zu meiner Antwort hinzufügen.
Dennis
4
10.000 deckt kaum alle 2-Zeichen-Programme ab, wenn wir mögliche Lösungen auf druckbares ASCII beschränken.
Dennis
13

CJam, 13 12 11 Zeichen

Dank user23013 sind es jetzt nur noch 11 Zeichen :)

4{Ar:--A%}*

Erklärungen:

4{       }*     "Run the code block 4 times";
   r            "Read the next input token (whitespace separated)";
    :-          "Subtract 2nd number from the first treating r as a 2 numbered string";
  A   -         "Subtract the result of above from 10";
       A%       "Take modulus of 10 and store it on stack";

Probieren Sie es online aus

Ich weiß, dass man mehr Golf spielen kann. Aber dies ist mein erster wirklicher Versuch bei CJam und ich bin durch Erfahrung eingeschränkt :)


Alternativ die anderen Methoden, um dasselbe in einem zusätzlichen Zeichen zu tun:

l~]{_A/-A%}/     // My previous solution

oder

4{ri_A/-A%}*     // As pointed out by Ingo

oder

ea{i_A/-A%}/     // If input is passed through command line
Optimierer
quelle
Ich habe darauf gewartet. Nun, nächste Woche ...
Soham Chowdhury
Die ersten drei Zeichen könnten alternativ sein l~]. Ich habe das Gefühl, dass das Parsen der Eingabe mit weniger als drei möglich sein sollte, aber ich habe noch nie CJam verwendet: /
Ingo Bürk
4{ri_A/-A%}*ist ein Byte kürzer.
Ingo Bürk
1
Ah, oder was Sie aus meinem früheren Kommentar gemacht haben. Nun gibt es zwei 12-Byte-Lösungen! :)
Ingo Bürk
3
Oder 4{Ar:--A%}*.
Jimmy23013
6

Golfscript (14 13 )

Probieren Sie es hier online aus

Es ist so ziemlich das Gleiche wie die Lösung von Optimizer , jedoch in einer anderen Sprache. Eine andere Herangehensweise ist schwierig, da das Problem recht einfach ist. Die Entscheidung liegt also definitiv bei Optimizer, dessen Eintrag ohnehin früher war.

~]{.10:^/-^%}/

Für die gleiche Anzahl von Bytes können Sie tun

~]{.10/- 10%}/
Ingo Bürk
quelle
Keine vordefinierte Variable mit dem Wert 10 in Golfscript?
Optimierer
@Optimizer Leider nein. Schade, denn die Eingabe auf dem Stack wäre schon der Vorteil gegenüber CJam.
Ingo Bürk
Ja, es können 10 Zeichen in CJam (mit Eingabe auf Stapel) oder 11 in Golfscript (mit vordefinierter Variable) sein
Optimierer
Ich könnte auch 12 in Golfscript haben, wenn ich den Raum nicht verlassen müsste - 10.
Ingo Bürk
1
heh, auch die kürzeste von Sprachen haben ihre kurzen comings: P
Optimizer
6

GNU DC , 14 Bytes

Borrowing @ Dennis 'cleverer Base 9-Trick :

9i[?A%nd]dxxxx

Eingabe-Ganzzahlen, die aus STDIN gelesen werden, eine pro Zeile.

Erläuterung:

9i                # Set input radix to 9
  [     ]         # push a macro, defined thus:
   ?              #   read number from STDIN and push
    A             #   push literal 10
     %            #   calculate number mod 10
      n           #   print, with no newline
       d          #   duplicate macro
         d        # duplicate macro
          xxxx    # execute the macro 4 times    

Ausgabe:

$ for i in 57 23 99 45; do echo $i; done | dc ./combolock.dc
2101$ 
$ for i in 25 78 63 15; do echo $i; done | dc ./combolock.dc
3174$ 
$ 

Vorherige Antwort, 18 Bytes:

Weil ich dachte, ich könnte mich damit den "Golf" -Sprachen nähern (tat es aber nicht):

[A?A~--A%n]dddxxxx
Digitales Trauma
quelle
1
Sie können ein Byte speichern:9i[?A%nd]dxxxx
Dennis
@ Tennis - Fantastisch! Jetzt bin ich Kopf an Kopf mit Golfscript und APL!
Digital Trauma
6

C 64 63 56 oder 61

Wenn die Eingabe aus der Datei weitergeleitet werden kann

main(a){while(scanf("%d",&a)>0)putchar(48+(a-a/10)%10);}

Wenn die Eingabe auf stdin geschrieben werden soll

i;main(a){for(;i++-4;putchar(48+(a-a/10)%10))scanf("%d",&a);}

Liest die vier Zahlen in einer Schleife und verarbeitet sie dann, indem die erste Ziffer vom Wert subtrahiert und das Ergebnis Modulo 10 gedruckt wird.

Einsparungen durch verschiedene Kommentare unten und die Verwendung von Putchar anstelle von printf

Alchymist
quelle
Cool. Sie können ein Komma speichern, indem Sie das scanfÄußere for()wie folgt setzena,i;main(){for(;i++-4;printf("%d",(a-a/10)%10))scanf("%d",&a);}
Level River St
Sie können auch 2 Bytes sparen, indem Sie a*.9anstelle vona-a/10
rev
@steveverrill Gefällt mir. Ich habe mich so darauf konzentriert, alles in die for-Schleife zu setzen, dass ich das verpasst habe
Alchymist,
1
@AcidShout Entschuldigung - es funktioniert nicht. Zum Beispiel 78 * .9 = 70.2, während 78 - 78/10 = 71. Auch mit .9 wird das Argument zu einem Double, so dass ich den Mod nicht nehmen kann.
Alchymist
Sie könnten ein paar Bytes sparen, indem Sie eine whileSchleife verwenden und aals Argument deklarieren main:main(a){while(scanf("%d",&a)>0)printf("%d",(a-a/10)%10);}
Dennis
5

Python 3, 64

Einfach.

print(''.join([(i-i//10)%10 for i in map(int,input().split())]))

Es kann kürzer sein, wenn ich [2, 1, 0, 1]stattdessen drucken darf ( 46 ):

print([i%10-i//10 for i in map(int,input().split())])
Soham Chowdhury
quelle
Sie können etwas sparen, indem Sie str((i-i//10)%10)direkt anstelle einer Sekunde nehmen map(). Ich habe auch mit Generatoren angefangen, aber festgestellt, dass eine tatsächliche forSchleife kürzer geworden ist.
DLosc
Yup, danke dafür!
Soham Chowdhury
Warum benutzt du Listenverständnisse? Verwenden Sie genexps 2 Zeichen zu speichern: print(''.join((i-i//10)%10for i in map(int,input().split()))). Auch wenn Räume in der Ausgabe allowd sind , können Sie vermeiden , joinund die Verwendung Tupel-Auspacken: print(*((i-i//10)%10for i in map(int,input().split()))).
Bakuriu
Ich glaube du hast recht.
Soham Chowdhury
4

C 92

#define a(n) ,(10+v[n][1]-*v[n])%10
main(int c,char**v){printf("%d%d%d%d"a(1)a(2)a(3)a(4));}

Eingabe von der Kommandozeile. Subtrahiert den ersten ASCII-Code jedes Arguments vom zweiten, addiert 10 und nimmt modulo 10.

Ich denke, dies ist das erste Mal, dass ich ein printfmit vier %s und ohne Komma geschrieben habe (das Komma ist in der #define.)

Level River St
quelle
#define f scanf("%c%c ",&a,&b);putchar(48+(9*a+b)%10)gefolgt von a,b;main(){f;f;f;f;}wäre 18 Bytes kürzer.
Dennis
@Dennis, das ist eine große Verbesserung, aber es ist im Grunde ein völlig anderes Programm. Ich denke, wenn jemand etwas schreibt, dann solltest du es sein, nicht ich. Ich bin mir nicht sicher, ob der Platz in scanfnotwendig ist, da scanfLeerzeichen nur als Trennzeichen verwendet werden sollen. Alchymist hat in C eine noch bessere Idee. Aber es sieht so aus, als hätten Sie sie bereits mit Ihrer Cjam-Antwort gewonnen.
Level River St
Ja, ich habe angefangen zu bemerken, dass das Leerzeichen danach a(n)weggelassen werden kann, dann habe ich bemerkt, dass das Umstellen printf("%d%,...)Ihres Makros ein paar Bytes einsparen würde und schließlich wurde ich ein wenig mitgerissen ... - Das Leerzeichen wird benötigt, da %cein beliebiges Zeichen gelesen wird Zeichen, so würde es im zweiten Lauf 32 in speichern a. - Das Schlagen von CJam mit C sollte sich als schwierig erweisen. printf()ist schon so lange meine Antwort ...
Dennis
4

Java - 203 Bytes

Nur weil es hat ein Java - Eintrag sein, sah ich eine schöne Gelegenheit , diesen Code eine Chance zu geben (erste Vorlage überhaupt) Golf spielen.

class M{public static void main(String[] a){String r="";for(int i=0;i<4;i++){int l=Byte.valueOf(a[i].substring(1));int f=Byte.valueOf(a[i].substring(0,1));r+=(l-f<0)?l-f+10:l-f;}System.out.print(r);}}

Wenn es Raum für Verbesserungen gibt, würde ich mich freuen, davon zu erfahren ;-)

Sander
quelle
Sie können [Tipps] suchen und verschiedene Tipps zum Golfen erhalten, um loszulegen :)
Optimizer
Cool, danke! Das Auschecken einiger Tipps hat mir geholfen, 13 Bytes zu sparen :)
Sander
3

Lua - 46 Zeichen

while''do a,b=io.read(1,1,1)print((b-a)%10)end

Liest drei Zeichen gleichzeitig (gib mir die kleine Gnade, am Ende ein Leerzeichen einzugeben), und obwohl a und b string-y sind ... ba erlaubt MAGICALY ihnen, eine gesunde Baby-Ganzzahl zu empfangen. Prüft der Wrap-Around während des Druckvorgangs.

Wie ich es betreibe:

AndoDaan
quelle
1
Können Sie ein Beispiel für die Dateneingabe / -ausgabe angeben
Rory McPerlroy,
@ Harry12345 Ah, das tut mir leid. Anarchy Golf überlegt, wie ich Standardeingaben implementiere. Ich könnte es wahrscheinlich besser codieren, aber meh, lua ist schrecklich. Ich habe ein Beispiel gepostet, in dem ich das Programm ausgeführt habe.
AndoDaan
3

JavaScript ES6 - 53 43 Bytes

f=n=>n.replace(/.. ?/g,a=>(1+a[1]-a[0])%10)

Ziemlich einfache Funktion, verwendet Regex, um die Zahlen zu erhalten. Probieren Sie es unter http://jsfiddle.net/efc93986/1/ aus . Wenn Funktionen nicht zulässig sind, ein eigenständiges Programm mit 52 Byte:

alert(prompt().replace(/.. ?/g,a=>(1+a[1]-a[0])%10))

Da ES6 derzeit nur unter Firefox funktioniert, funktioniert der folgende Code mit 70 Byte in jedem modernen Browser:

alert(prompt().replace(/.. ?/g,function(a){return(1+a[1]-a[0])%10}))
NinjaBearMonkey
quelle
Ich liebe deine 1+.
Neil
1
Die Frage besagt, dass gültige Eingaben angenommen werden sollen, sodass Sie ...?anstelle von verwenden können /\d+ ?. Der Raum nach der Rückkehr kann weggelassen werden. Da keine spezifischen E / A angegeben wurden, sollten Sie in der Lage sein, eine Funktion zu verwenden.
Dennis
1
a-a[0]statt 1+a[1]-a[0]sollte auch funktionieren.
Dennis
2

Python 2 - 33 Bytes

for i in input():print(i-i/10)%10

Akzeptiert durch Kommas getrennte Benutzereingaben. ZB Eingabe:

29,26, 31, 88

Ausgabe:

7
4
8
0

Wenn die Ausgabe genau mit dem Beispiel übereinstimmen muss, ist sie viel länger. 47 Bytes:

print"%d"*4%tuple((i-i/10)%10 for i in input())
Feersum
quelle
input()funktioniert nicht in meinem Python 2-Interpreter.
Soham Chowdhury
@SohamChowdhury hast du Kommas verwendet?
Feersum
2
Oh nein, habe ich nicht. Es funktioniert jetzt. Ich denke, Sie müssen eine durch Leerzeichen getrennte Eingabe gemäß der Spezifikation vornehmen.
Soham Chowdhury
3
Ich bin damit einverstanden, die Eingabe sollte Speicherplatz begrenzt sein
Rory McPerlroy
2

APL, 14

10|{--/⍎¨⍕⍵}¨⎕

Die Erklärung
erfolgt über den Bildschirm. Durch Leerzeichen getrennte Werte werden als Array analysiert.
{...}¨Geben Sie für jede Nummer die Funktion ein.
⍎¨⍕⍵Nimmt das Argument, erstellen Sie ein Array mit seinen Ziffern.
--/berechnet Einheiten minus zehn.
10|mod 10.

TwiNight
quelle
1
Dies können 14 Zeichen sein, aber es sind 24 Bytes .
Ingo Bürk
Für Code-Golf zählen wir jedoch UTF-8, keinen speziellen Zeichensatz. Das wäre nur eine Lücke und könnte sehr leicht missbraucht werden.
Ingo Bürk
1
@ IngoBürk Gemäß meta.codegolf.stackexchange.com/a/961/6972 können Antworten in einer beliebigen Codierung codiert werden, sofern das OP nichts anderes angibt. Es gibt in der Tat eine IBM-Codepage für APL-Zeichen, bei der es sich um eine Einzelbytezuordnung handelt, die genau das ist, was Dyalog vor Unicode 3.0 verwendet hat. Was, wenn Sie auf Unicode bestehen, wenn ich eine neue Sprache erfinde, die Nicht-Unicode-Zeichen verwendet? Wie würden Sie Bytes dafür zählen?
TwiNight
Ich hätte schwören können, dass die Standardeinstellung UTF-8 war. 14 Bytes ist es dann.
Ingo Bürk
2

J - 20 15

Die non-verb Form (als Anweisung anstelle der Funktionsdefinition) ist 5 Zeichen kürzer:

10|-~/|:10#.inv

Die Verbform, die ein schöner Zug ist :

10|[:-~/[:|:10#.inv]

Dieses Verb wird für die Beispieleingaben verwendet:

   10|-~/|:10#.inv 57 23 99 45
2 1 0 1
   10|-~/|:10#.inv 25 78 63 15
3 1 7 4

rotd =: 10|[:-~/[:|:10#.inv] NB. verb form

   rotd 25 78 63 15
3 1 7 4
   rotd 57 23 99 45
2 1 0 1
jpjacobs
quelle
2

Haskell 60 58

main=interact$show.map((\x->mod(x-x`div`10)10).read).words

Ziffern mit einem Buchstaben, eine echte Nemesis im Golfsport von Haskell.

Zeta
quelle
2

Perl: 38 40

print abs($_-int$_/10)%10for split" ",<>

Ausgabe:

% perl code.pl
57 23 99 45
2101

25 78 63 15                                     
3174
Riymus
quelle
1
1. Unterstriche sind Abschriften, sodass Ihr Code ein wenig durcheinander gerät. Um dies zu verhindern, rücken Sie den Code mit vier Leerzeichen ein. 2. absist nicht notwendig; x - x/10kann nicht negativ sein. 3. Wenn Sie die Flags -040pe(normalerweise als 5 Byte gezählt) verwenden, um über durch Leerzeichen getrennte Eingaben zu iterieren, können Sie den Code auf kürzen $_=($_-int$_/10)%10. 4. Wenn Sie Befehlszeilenflags vermeiden möchten, können Sie dennoch einige Bytes sparen, $/=$;indem Sie den Aufruf von festlegen und entfernen split.
Dennis
1

Ruby, 35 Bytes

$*.map{|n|a,b=n.bytes;$><<(b-a)%10}

Erläuterung

Die Eingabe wird als Befehlszeilenargumente verwendet. String#bytesGibt ein Array von Ganzzahlen (ASCII-Zeichencodes) zurück. Nur der Unterschied zwischen dem letzten und dem ersten Zeichencode ist von Bedeutung, nicht die Ganzzahlen selbst.

britishtea
quelle
1

C # & LinqPad: 104

Util.ReadLine<string>("").Split(' ').Select(s =>(s[1]-s[0])).Aggregate("",(r,a)=>r+(a<0?10+a:a)).Dump();
EvilFonti
quelle
1

C ++ 118

int main()
{
int a,b,c;
for(int i=0; i<4; i++)
{
cin>>a;
b=a/10;
a=a%10;
c=a-b;
if(c<0)c+=10;
cout<<c;
}
}
Bacchusbeale
quelle
1. Nicht sicher über andere Compiler, aber GCC benötigt #include<iostream>und std::vor cinund cout. 2. Sie brauchen die Bedingung nicht, wenn Sie sie weglassen a=a%10. 3. Sie brauchen nicht die Variablen bund cdie Zeilenvorschübe und (mit einigen Änderungen) die Klammern um die for-Schleife.
Dennis
1
@ SeanD: Bitte genehmigen Sie keine Änderungen, die den Code ändern. In diesem speziellen Fall hat die Bearbeitung die Antwort ungültig gemacht. Es wurde auch die erste Zeile entfernt, die in allen Antworten vorhanden sein sollte.
Dennis
1
(CC @TeunPronk)
Dennis
@Dennis-Antworten auf dieser Website enthalten normalerweise keine Präprozessorzeilen. Ich ließ die Zeilen #include<iostream>undusing namespace std;
Bacchusbeale
Ich weiß, dass es normalerweise nicht in der Byteanzahl enthalten ist, aber ich denke, sie sollten in der Antwort vorhanden sein.
Dennis
1

PHP - 90 Zeichen

Ich dachte, ich würde Codegolf ausprobieren, also hier ist es, mein erster Versuch - kann wahrscheinlich mehr Golf gespielt werden.

<?php $a=array(57,23,99,45);foreach($a as$b){echo abs(substr($b,0,1)-substr($b,1,1)%10);}

58 Zeichen (mit freundlicher Genehmigung von Ismael Miguel)

for($i=0,$a=$_GET[n];$i<8;)echo abs($a[$i++]-$a[$i++]);

Greifen Sie mit auf die Datei zu

file.php?n=57239945
Rory McPerlroy
quelle
Versuchen Sie diesen Code: <? for($i=0;$i<4;)echo abs($_GET[n][$i]%10);der 44 Zeichen lang ist. Zugriff von einem Browser mit file.php?n[]=xx&n[]=yy&n[]=xy&n[]=yx. (ungetesteter Code)
Ismael Miguel
Gute Idee mit, $_GETaber es zeigt 57% 10 und ich brauche (5-7)% 10
Rory McPerlroy
Versuchen Sie dieses: <? for($i=0,$a=$_GET[n];$i<4;++$i)echo abs($a[$i][0]-$a[$i++][1]%10);. Leider ist es 65 Bytes lang. (habe das $iletzte Inkrement vergessen ) Oder Sie könnten versuchen , mit einer Länge von 61 Byte <? for($i=0;$i<8;)echo abs($_GET[n][$i++]-$_GET[n][$i++]%10);auf den Browser zuzugreifen file.php?n[]=x&n[]=y&n[]=x&n[]=y&n[]=x&n[]=y&n[]=x&n[]=y.
Ismael Miguel
Ja, der zweite funktioniert, muss das tun $_GET['n']. Habe meine Antwort bearbeitet.
Rory McPerlroy
Nun, das ist nicht erforderlich. Es wird lediglich eine Warnung ausgegeben. Das ist gut für diese Website. Aber versuchen Sie dieses: <? for($i=0,$a=$_GET[n];$i<8;)echo abs($a[$i++]-$a[$i++]);. Das %10ist nutzlos und das sieht einfach besser aus. Sie können auch mit darauf zugreifen file.php?n[]=xyxyxyxy. Diese Lösung ist 58 Byte lang.
Ismael Miguel
0

Python 3, 60

for x in input().split():print(-eval('-'.join(x))%10,end='')

Eingabe und Ausgabe genau wie angegeben, obwohl keine nachgestellte Zeile ausgegeben wird. Hier zwei interessante Tricks: 1) Ersetzen von zwei Anrufen int()durch einen Anruf eval()und 2) Verwenden von join(), um zu erhalten a-b, und Negieren nach b-aBedarf. Glücklicherweise gibt Pythons Modulo-Operator positive Werte aus, auch wenn das erste Argument negativ ist!

DLosc
quelle
Warum wurde das abgelehnt? Es funktioniert einwandfrei. (Übrigens, der eval('-'.join(x))Trick ist brillant.)
Flornquake
@flornquake Danke!
DLosc