Schrift
[thread]6406[/thread]

RDW #2 - Rätsel der Woche Nr. 2 (Seite 9)

Tags: Ähnliche Threads

Leser: 1


<< |< 1 ... 6 7 8 9 10 11 12 ... 16 >| >> 156 Einträge, 16 Seiten
betterworld
 2004-07-19 14:32
#84461 #84461
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Ich habe denselben Algorithmus auch noch einmal in anderer Form (dieses Skript entstand vor dem Golf-Wettbewerb):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -l
use strict;
use warnings;

my $i = '0' x @ARGV;

do {
  print join ',', map {substr($i, $_, 1)?$ARGV[$_]:()} 0..$#ARGV;
} while ($i =~ s/0(1*)$/"1"."0"x length("Å©")/e);
\n\n

<!--EDIT|betterworld|1090233199-->
Ishka
 2004-07-19 14:44
#84462 #84462
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
schnief - meine Lösung wurde wohl vergessen:
Code: (dl )
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
use strict;
use warnings;
use Data::Dumper;

my %pot=();

$"=';';
for(@ARGV){if(m#$"#){$".=int rand 10;redo}}# Damit der Inhalt von $" in keinem Element vorkommt

sub add
{
$pot{"@_"}=\@_;
for my $n(0..$#_){
my @n=@_;
splice @n,$n,1;
add(@n) unless exists $pot{"@n"}}
}

add(@ARGV);
$"=', ';# Für die Ausgabe wollen wir das schöner joinen
print "P(@ARGV) = {";
my $i=0;
for(values %pot){
print ", " unless 0==$i++;
print "{@$_}"}
print "}\n";
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
betterworld
 2004-07-19 14:54
#84463 #84463
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
ptk: Welche Perl-Version hast Du fuer Deine Loesung verwendet? Bei mir gibt das nur Syntaxfehler. Und ich weiss auch nicht recht, was join,,@array bedeuten sol...
ptk
 2004-07-19 15:04
#84464 #84464
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Da wurde irgendwann irgendwas verschluckt.
Code: (dl )
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
34
35
36
37
38
#!/usr/bin/perl

use strict;

# Eingabe
my @array = (1..9);

my %res;
warn time;
oneless(@array);
warn time;

# Formatierung der Ausgabe
# Key als Array umschreiben
my @res;
while(my($k) = each %res) {
push @res, [split /,/, $k];
}
# Ergebnisarray schoener sortieren
@res = sort {
my $r = @$a <=> @$b;
if ($r == 0) {
join(",", @$a) cmp join(",", @$b);
} else {
$r;
}
} @res;
require Data::Dumper;
print Data::Dumper->new([\@res],['res'])->Indent(0)->Dump, "\n";

sub oneless {
my @array = @_;
$res{ join",",@array } = 1;
return if !@array;
for my $i (0 .. $#array) {
oneless(map { $array[$_] } 0 .. $i-1, $i+1 .. $#array);
}
}
betterworld
 2004-07-19 15:04
#84465 #84465
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Hier ist meine Golf-Loesung:
Code: (dl )
1
2
print"(@x[grep{$i&1<<$_}0..$#x])
"while$i++<2**(@x=@ARGV)

pq: Ich habe auch einen zweiten Versuch gemacht, in der Hoffnung, noch weniger Zeichen zu erreichen, und hatte dabei etwas, was genauso aussah wie Deines, nur, dass ich andere Bezeichnungen gewaehlt hatte
Taulmarill
 2004-07-19 15:18
#84466 #84466
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
also ein byte geht bei betterworlds script noch
Code: (dl )
1
2
print"(@x[grep{$i&1<<$_}0..@x])
"while$i++<2**(@x=@ARGV)'

aber ansonster siehts schon sehr nach ideallösung aus.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
DS
 2004-07-19 15:23
#84467 #84467
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
print"{@a[grep$a&2**$_,0..@a]}"while$a++<2**(@a=@ARGV)

betterworld's Lösung optimiert mit ein paar Sachen der meinen... 54 Zeichen... geht noch was?
betterworld
 2004-07-19 15:25
#84468 #84468
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=Taulmarill,19.07.2004, 13:18]also ein byte geht bei betterworlds script noch
Code: (dl )
1
2
print"(@x[grep{$i&1<<$_}0..@x])
"while$i++<2**(@x=@ARGV)'

aber ansonster siehts schon sehr nach ideallösung aus.[/quote]
Mann, bin ich blind... das haette ich sehen muessen :)
Danke, dass Du es durchgelesen hast!
betterworld
 2004-07-19 15:28
#84469 #84469
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=DS,19.07.2004, 13:23]
Code (perl): (dl )
print"{@a[grep$a&2**$_,0..@a]}"while$a++<2**(@a=@ARGV)

betterworld's Lösung optimiert mit ein paar Sachen der meinen... 54 Zeichen... geht noch was?[/quote]
Mit newline waeren es 55. Respekt... Da sitze ich Naechte lang und bastle es auf 57 runter, und Du schaffst es in 2 Minuten, noch 2 weitere Zeichen zu entfernen\n\n

<!--EDIT|betterworld|1090236629-->
Crian
 2004-07-19 15:30
#84470 #84470
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
[quote=Ishka,19.07.2004, 12:44]schnief - meine Lösung wurde wohl vergessen:[/quote]
Ups, kann sein, dass ich die nur zu Hause hab und vergessen habe auf den usb-Stick zu kopieren.

[quote=ptk,19.07.2004, 13:04]Da wurde irgendwann irgendwas verschluckt.[/quote]
Hab Dein Ergebnis bei mir auch upgedatet, das war schon in meiner Datei falsch, warum auch immer.

Tut mir leid, dass es noch etwas durcheinander geht. Ich werde versuchen das Verfahren irgendwie noch zu verbessern.\n\n

<!--EDIT|Crian|1090236939-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 ... 6 7 8 9 10 11 12 ... 16 >| >> 156 Einträge, 16 Seiten



View all threads created 2004-07-16 12:08.