あみだくじ
どう書くorgに簡単に解けそうな問題があった.
splitが思うように動作してくれず,結局s///置換をして,m/./gで一文字ずつ取得した.
他人の解答を見て,読み込みながらswapする問題ということに今更気づく.
というわけで阿呆コード誕生.
実行結果: % perl amida.pl data.txt A B C D E | | |-| | |-| | |-| | |-| |-| |-| |-| | |-| | | | B D C A E
そーすこーど
#!/usr/bin/perl use strict; use warnings; die "Input data file\n" if (@ARGV < 1); open IN, '<', $ARGV[0] or die "Cannot open $ARGV[0]\n"; ## Load input file my $first_line = <IN>; chomp $first_line; ## Global variables my $debug = 0; ## obtain first line my @input_list = split / /, $first_line; my @amida_list; ## obtain connection information while(my $line = <IN>){ chomp $line; $line =~ s/\|//g; my @connection_list = ($line =~ /./g); push @amida_list, \@connection_list; } close(IN); ## print information print "@input_list\n"; foreach my $line (@amida_list) { foreach my $connection (@{ $line }) { print '|' . $connection; } print "|\n"; } ## main my @answer_list = (); for(my $i = 0; $i < @input_list; $i++){ my $position = $i; for(my $j = @amida_list - 1; $j >= 0; $j--){ # check right side if ($position < @input_list - 1 && $amida_list[$j]->[$position] eq '-'){ $position++; }elsif ($position > 0 && $amida_list[$j]->[$position - 1] eq '-'){ $position--; } } $answer_list[$i] = $input_list[$position]; } print "@answer_list\n";