1
2
3
4
5
6
7
8
9
10
11
my $number = 2017;
my $factor = 2;
my $result;
while (1){
$result = $number * $factor;
last if $result =~ /^[01]+$/;
$factor++;
}
print $result;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/usr/bin/perl use strict; use warnings; use 5.010; my $i = 1; while (1) { my $test = sprintf("%b",$i); say $test; last unless $test%2017; $i++; }
2017-06-25T13:43:55 murphyEs ist nach einer Dezimaldarstellung gefragt, die nur die Ziffern 0 und 1 enthält, nicht nach einer Binärdarstellung
QuoteSie müssen auch nicht unbedingt eine konkrete Zahl nennen, die durch 2017 teilbar ist. Es würde auch reichen, wenn Sie einen Lösungsweg finden, der mit Sicherheit zu einer Zahl mit den gewünschten Eigenschaften führt.
2017-06-25T15:40:13 hlubenow2017-06-25T13:43:55 murphyEs ist nach einer Dezimaldarstellung gefragt, die nur die Ziffern 0 und 1 enthält, nicht nach einer Binärdarstellung
Hat er oben: 4963317353 * 2017 ist 10011011101001.
[...]
Quote[...]
Trotzdem war das eigentlich keine Computeraufgabe:
QuoteSie müssen auch nicht unbedingt eine konkrete Zahl nennen, die durch 2017 teilbar ist. Es würde auch reichen, wenn Sie einen Lösungsweg finden, der mit Sicherheit zu einer Zahl mit den gewünschten Eigenschaften führt.
[...]
2017-06-25T15:40:13 hlubenowTrotzdem war das eigentlich keine Computeraufgabe:
spiegel.deDas Rätsel der vergangenen Woche war ein sehr dickes Brett. Gesucht war eine durch 2017 teilbaren Zahl, die ausschließlich aus Einsen und Nullen besteht. Manche haben sich ein kleines Programm geschrieben, um die Aufgabe zu lösen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/usr/bin/perl use warnings; use strict; use bignum; my $num = 2017; for my $i (1 .. 65535) { my $d = sprintf("%b", $i); if ($d % $num == 0) { print "$d\t\t". ($d / $num) . "\n"; } }
Guest JigsawWeiß zwar noch nicht so genau, wieso diese Lösung funktioniert
2017-06-25T22:48:25 hlubenowDie Zahlen von 1 bis 65535 werden in Binärstrings umgewandelt, also nach "110101001", usw.. Dadurch erhält man automatisch alle Kombinationen von 0 und 1.
1 2 3 4 5 6 7 8
my $number = 2017 * 2; while (1){ last if $number !~ /[^01]/; $number += 2017; } print $result;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
my $number = 2017 * 2; while (1){ my @num_array = reverse split(//, $number); # reverse, weil ich wills nach Potenz sortiert for (my $idx = $#num_array; $idx >= 0; $idx--) { # alle Stellen durchgucken if ($num_array[$idx] > 1) { # eine > 1? $num_array[$idx + 1]++; # nächst "höhere" Stelle um eins höher for (my $idx_new = 0; $idx_new <= $idx; $idx_new++) { # der Rest drunter wird 0 $num_array[$idx_new] = 0; } $number = join("", reverse @num_array); #while ($number % 2017 > 0) { # wieder Teilbar durch 2017 suchen # $number ++; #} # edit: geht jetzt schneller if ($number % 2017 > 0) { $number += 2017 - ($number % 2017) } last; } } if ($number !~ /[^01]/) { say $number; exit; } $number += 2017; }