Rosetta Code/List authors of task descriptions: Difference between revisions

m
→‎{{header|Perl 6}}: Tweak code a bit. Just leave a short sample output with task. Separate and update full list
m (→‎{{header|Perl 6}}: Restore broken task links)
m (→‎{{header|Perl 6}}: Tweak code a bit. Just leave a short sample output with task. Separate and update full list)
Line 21:
Please '''DO NOT''' add a full output for ''each'' programming language; just show a representative sample. One full list is useful. Multiple full lists just use space and bandwidth.
 
<div style="height:80ex;overflow:scroll;border-style:ridge;">
=={{header|Perl 6}}==
<table border="1" cellpadding="4"><tr><th colspan="2">As of 2017-09-10 | Total: 1064 / Tasks: 858 / Draft Tasks: 206<tr><th>User</th><th>Authored</th></tr>
{{works with|Rakudo|2017.08}}
 
The pseudocode above is no longer really useful as the page format has changed. Rather than checking '''every''' edit to see if it was a change to the task description, we'll just assume the user that created the page is the task author. This isn't 100% accurate; a very few pages got renamed and recreated by someone other than the original author without preserving the history, so they are misreported (15 Puzzle Game for instance,) but is as good as it is likely to get without extensive manual intervention. Any further edits to the task description are not credited. As it is, we must still make ''thousands'' of requests and pound the server pretty hard. Checking '''every''' edit would make the task several of orders of magnitude more abusive of the server (and my internet connection.)
 
Each stage of the scraping process is saved to local files so it can be restarted without losing all your progress in the event of a timeout or error. If that happens though, you need to manually adjust where to restart the process.
 
<lang perl6>use HTTP::UserAgent;
use Gumbo;
use Sort::Naturally;
 
my $ua = HTTP::UserAgent.new;
 
for 'Programming_Tasks', 'Draft_Programming_Tasks' -> $category
{ # Get lists of Tasks & Draft Tasks
# last; # Uncomment to skip this step
my $page = "http://rosettacode.org/wiki/Category:$category";
my $html = $ua.get($page).content;
my $xmldoc = parse-html($html, :TAG<div>, :id<mw-pages>);
my @tasks = parse-html($xmldoc[0].Str, :TAG<li>).Str.comb( /'/wiki/' <-["]>+ / )>>.substr(6); #"
my $f = open("./RC_{$category}.txt", :w) or die "$!\n";
$f.print( @tasks.join("\n") );
$f.close;
}
 
for 'Programming_Tasks', 'Draft_Programming_Tasks' -> $category
{ # Scrape info from each page.
# last; # Uncomment to skip this step
my @tasks = "./RC_{$category}.txt".IO.slurp.lines;
 
for @tasks -> $title {
 
my $ua = HTTP::UserAgent.new;
# Get the earliest edit
my $addr = "http://rosettacode.org/mw/index.php?title={$title}&dir=prev&limit=1&action=history";
 
my $html = $ua.get: $addr;
 
$html.content ~~ m|'<li><span class="mw-history-histlinks">' (.+?) '</ul>' |;
 
my $line = $0.lines.tail;
# Parse out the User name
$line ~~ m| 'title="User:' <-[>]>+? '>' (.+?) '</a>' |;
 
my $auth = $0;
# Oops, no user name, must be anonymous, get IP address instead
unless $auth {
$line ~~ m| '"mw-userlink mw-anonuserlink">' (.+?) '</a>' |;
$auth = $0;
}
 
# Parse out human readable title
$line ~~ m| '<a href="/mw/index.php?title=' $title '&amp;' .+? 'title="'(.+?)'">cur</a>' |;
 
my $decoded = $0;
# report progress
say "$decoded: $auth";
 
# save it to a file
my $f = open("./RC_Authors.txt", :a) or die "$!\n";
$f.say( "[[$title|$decoded]]\t$category\t$auth" );
$f.close;
 
sleep 3; # Don't pound the server
}
sleep 300; # Wait between batches, seems to disconnect after 1000 requests without pause
}
 
my %authors;
 
# Generate an HTML table from the results.
my ($cnt, $draftcnt, $taskcnt);
"./RC_Authors.txt".IO.slurp.lines.map: {
my ($task, $cat, $auth) = $_.split("\t");
$cnt++;
if $cat.contains('Draft') {
$cat = 'Draft:';
$draftcnt++;
} else {
$cat = 'Task: ';
$taskcnt++;
}
%authors{$auth}.push: "$cat $task";
};
 
# Dump an HTML table to STDOUT, capture it for display
say '<table border="1"><tr><th colspan="2">As of ', Date.today, ' | Total: ',
$cnt, ' / Tasks: ', $taskcnt, ' / Draft Tasks: ', $draftcnt,
'<tr><th>User</th><th>Authored</th></tr>';
for %authors.sort(*.key.&naturally) -> $a {
print '<tr><td>', $a.key, '</td><td><ol><li>';
print $a.value.sort( *.substr(7) ).join('</li><li>');
say '</ol></td></tr>';
}
say '</table>';</lang>
{{out}}
 
<div style="height:60ex;overflow:scroll;"><table border="1"><tr><th colspan="2">As of 2017-09-04 | Total: 1059 / Tasks: 854 / Draft Tasks: 205<tr><th>User</th><th>Authored</th></tr>
<tr><td>2Powers</td><td><ol><li>Draft: [[Names_to_numbers|Names to numbers]]</li><li>Draft: [[Solving_coin_problems|Solving coin problems]]</ol></td></tr>
<tr><td>12.175.32.19</td><td><ol><li>Task: [[Soundex|Soundex]]</ol></td></tr>
Line 165 ⟶ 68:
<tr><td>Alegend</td><td><ol><li>Task: [[Evaluate_binomial_coefficients|Evaluate binomial coefficients]]</ol></td></tr>
<tr><td>AlexLehm</td><td><ol><li>Task: [[Langton%27s_ant|Langton's ant]]</ol></td></tr>
<tr><td>Aloisdg</td><td><ol><li>Draft: [[Diversity_prediction_theorem|Diversity prediction theorem]]</li><li>Draft: [[Munchausen_numbers|Munchausen numbers]]</li><li>Draft: [[Sattolo_cycle|Sattolo cycle]]</li><li>Draft: [[Two_Sum|Two Sum]]</ol></td></tr>
<tr><td>AnatolV</td><td><ol><li>Task: [[Kronecker_product_based_fractals|Kronecker product based fractals]]</li><li>Task: [[Kronecker_product|Kronecker product]]</ol></td></tr>
<tr><td>Avi</td><td><ol><li>Task: [[Cholesky_decomposition|Cholesky decomposition]]</li><li>Task: [[Element-wise_operations|Element-wise operations]]</li><li>Task: [[Euler_method|Euler method]]</li><li>Task: [[LU_decomposition|LU decomposition]]</li><li>Task: [[Numerical_integration/Gauss-Legendre_Quadrature|Numerical integration/Gauss-Legendre Quadrature]]</li><li>Task: [[QR_decomposition|QR decomposition]]</li><li>Task: [[UTF-8_encode_and_decode|UTF-8 encode and decode]]</ol></td></tr>
Line 200 ⟶ 103:
<tr><td>Davgot</td><td><ol><li>Task: [[Chinese_remainder_theorem|Chinese remainder theorem]]</ol></td></tr>
<tr><td>DavidMcCabe</td><td><ol><li>Task: [[Send_an_unknown_method_call|Send an unknown method call]]</ol></td></tr>
<tr><td>Daxim</td><td><ol><li>Task: [[100_doors|100 doors]]</li><li>Task: [[100_doors|100 doors]]</li><li>Task: [[FizzBuzz|FizzBuzz]]</li><li>Task: [[HTTPS/Authenticated|HTTPS/Authenticated]]</li><li>Task: [[OpenGL|OpenGL]]</ol></td></tr>
<tr><td>Dbohdan</td><td><ol><li>Task: [[2048|2048]]</li><li>Task: [[FTP|FTP]]</li><li>Task: [[Retrieve_and_search_chat_history|Retrieve and search chat history]]</ol></td></tr>
<tr><td>Dgamey</td><td><ol><li>Task: [[Deepcopy|Deepcopy]]</li><li>Task: [[Galton_box_animation|Galton box animation]]</li><li>Task: [[Longest_string_challenge|Longest string challenge]]</li><li>Task: [[MD5/Implementation|MD5/Implementation]]</li><li>Task: [[Sierpinski_triangle/Graphical|Sierpinski triangle/Graphical]]</li><li>Task: [[State_name_puzzle|State name puzzle]]</ol></td></tr>
Line 224 ⟶ 127:
<tr><td>Farter</td><td><ol><li>Draft: [[Tetris|Tetris]]</ol></td></tr>
<tr><td>Francogrex</td><td><ol><li>Task: [[Hash_join|Hash join]]</li><li>Task: [[Machine_code|Machine code]]</ol></td></tr>
<tr><td>Fwend</td><td><ol><li>Task: [[Archimedean_spiral|Archimedean spiral]]</li><li>Task: [[Barnsley_fern|Barnsley fern]]</li><li>Task: [[Best_shuffle|Best shuffle]]</li><li>Task: [[Chaos_game|Chaos game]]</li><li>Task: [[Julia_set|Julia set]]</li><li>Task: [[Magic_squares_of_doubly_even_order|Magic squares of doubly even order]]</li><li>Task: [[Magic_squares_of_singly_even_order|Magic squares of singly even order]]</li><li>Draft: [[Penrose_tiling|Penrose tiling]]</li><li>Task: [[Pentagram|Pentagram]]</li><li>Draft: [[Pentomino_tiling|Pentomino tiling]]</li><li>Draft: [[Perceptron|Perceptron]]</li><li>Task: [[Plasma_effect|Plasma effect]]</li><li>Task: [[Polyspiral|Polyspiral]]</li><li>Task: [[Semordnilap|Semordnilap]]</li><li>Task: [[Set_puzzle|Set puzzle]]</li><li>Task: [[Sierpinski_pentagon|Sierpinski pentagon]]</li><li>Task: [[Superellipse|Superellipse]]</li><li>Task: [[Temperature_conversion|Temperature conversion]]</li><li>Task: [[Vampire_number|Vampire number]]</li><li>DraftTask: [[Word_search|Word search]]</ol></td></tr>
<tr><td>G.Brougnard</td><td><ol><li>Draft: [[Addition_chains|Addition chains]]</li><li>Draft: [[Cipolla%27s_algorithm|Cipolla's algorithm]]</li><li>Draft: [[Prime_conspiracy|Prime conspiracy]]</li><li>Draft: [[Railway_circuit|Railway circuit]]</li><li>Draft: [[Simulated_annealing|Simulated annealing]]</li><li>Draft: [[Tonelli-Shanks_algorithm|Tonelli-Shanks algorithm]]</ol></td></tr>
<tr><td>Geka Sua</td><td><ol><li>Task: [[Compare_sorting_algorithms%27_performance|Compare sorting algorithms' performance]]</li><li>Task: [[Plot_coordinate_pairs|Plot coordinate pairs]]</li><li>Task: [[Polynomial_regression|Polynomial regression]]</li><li>Task: [[Time_a_function|Time a function]]</li><li>Task: [[Write_float_arrays_to_a_text_file|Write float arrays to a text file]]</ol></td></tr>
<tr><td>Geoffhacker</td><td><ol><li>Draft: [[Longest_Common_Substring|Longest Common Substring]]</ol></td></tr>
<tr><td>Georg Peter</td><td><ol><li>Task: [[Integer_overflow|Integer overflow]]</ol></td></tr>
<tr><td>Gerard Schildberger</td><td><ol><li>Task: [[4-rings_or_4-squares_puzzle|4-rings or 4-squares puzzle]]</li><li>Task: [[Bernoulli_numbers|Bernoulli numbers]]</li><li>Task: [[Commatizing_numbers|Commatizing numbers]]</li><li>Draft: [[Egyptian_fractions|Egyptian fractions]]</li><li>Task: [[Emirp_primes|Emirp primes]]</li><li>Task: [[Exponentiation_order|Exponentiation order]]</li><li>Task: [[Farey_sequence|Farey sequence]]</li><li>Task: [[Find_palindromic_numbers_in_both_binary_and_ternary_bases|Find palindromic numbers in both binary and ternary bases]]</li><li>Draft: [[Idiomatically_determine_all_the_characters_that_can_be_used_for_symbols|Idiomatically determine all the characters that can be used for symbols]]</li><li>Draft: [[Idiomatically_determine_all_the_lowercase_and_uppercase_letters|Idiomatically determine all the lowercase and uppercase letters]]</li><li>Draft: [[Knuth%27s_power_tree|Knuth's power tree]]</li><li>Task: [[Left_factorials|Left factorials]]</li><li>Draft: [[Leonardo_numbers|Leonardo numbers]]</li><li>Draft: [[Lucky_and_even_lucky_numbers|Lucky and even lucky numbers]]</li><li>Task: [[Magic_squares_of_odd_order|Magic squares of odd order]]</li><li>Task: [[Partition_an_integer_X_into_N_primes|Partition an integer X into N primes]]</li><li>Task: [[Pernicious_numbers|Pernicious numbers]]</li><li>Task: [[Population_count|Population count]]</li><li>Task: [[Primorial_numbers|Primorial numbers]]</li><li>Task: [[Pythagorean_quadruples|Pythagorean quadruples]]</li><li>Task: [[Reverse_words_in_a_string|Reverse words in a string]]</li><li>Task: [[Sort_three_variables|Sort three variables]]</li><li>Draft: [[Spelling_of_ordinal_numbers|Spelling of ordinal numbers]]</li><li>Task: [[Split_a_character_string_based_on_change_of_character|Split a character string based on change of character]]</li><li>Task: [[Sum_to_100|Sum to 100]]</li><li>Task: [[Taxicab_numbers|Taxicab numbers]]</li><li>Task: [[Ulam_spiral_(for_primes)|Ulam spiral (for primes)]]</li><li>Task: [[Zero_to_the_zero_power|Zero to the zero power]]</ol></td></tr>
<tr><td>Gfannes</td><td><ol><li>Task: [[Apply_a_callback_to_an_array|Apply a callback to an array]]</li><li>Task: [[Filter|Filter]]</li><li>Task: [[Hash_from_two_arrays|Hash from two arrays]]</li><li>Task: [[Remove_duplicate_elements|Remove duplicate elements]]</li><li>Task: [[XML/XPath|XML/XPath]]</ol></td></tr>
<tr><td>Glennj</td><td><ol><li>Task: [[Boolean_values|Boolean values]]</li><li>Task: [[Date_manipulation|Date manipulation]]</li><li>Task: [[Doubly-linked_list/Traversal|Doubly-linked list/Traversal]]</li><li>Task: [[Loop_over_multiple_arrays_simultaneously|Loop over multiple arrays simultaneously]]</li><li>Task: [[Loops/For_with_a_specified_step|Loops/For with a specified step]]</li><li>Task: [[Repeat_a_string|Repeat a string]]</ol></td></tr>
Line 239 ⟶ 142:
<tr><td>Grondilu</td><td><ol><li>Task: [[Bitcoin/address_validation|Bitcoin/address validation]]</li><li>Task: [[Bitcoin/public_point_to_address|Bitcoin/public point to address]]</li><li>Draft: [[Display_a_linear_combination|Display a linear combination]]</li><li>Draft: [[Elementary_cellular_automaton/Infinite_length|Elementary cellular automaton/Infinite length]]</li><li>Draft: [[Elementary_cellular_automaton/Random_Number_Generator|Elementary cellular automaton/Random Number Generator]]</li><li>Task: [[Elementary_cellular_automaton|Elementary cellular automaton]]</li><li>Draft: [[Elliptic_curve_arithmetic|Elliptic curve arithmetic]]</li><li>Draft: [[Entropy/Narcissist|Entropy/Narcissist]]</li><li>Task: [[FASTA_format|FASTA format]]</li><li>Task: [[Generate_Chess960_starting_position|Generate Chess960 starting position]]</li><li>Draft: [[Generate_random_chess_position|Generate random chess position]]</li><li>Draft: [[Geometric_algebra|Geometric algebra]]</li><li>Draft: [[Index_finite_lists_of_positive_integers|Index finite lists of positive integers]]</li><li>Draft: [[Levenshtein_distance/Alignment|Levenshtein distance/Alignment]]</li><li>Draft: [[Modular_arithmetic|Modular arithmetic]]</li><li>Task: [[Modular_inverse|Modular inverse]]</li><li>Draft: [[Orbital_elements|Orbital elements]]</li><li>Draft: [[Perlin_noise|Perlin noise]]</li><li>Task: [[SHA-256|SHA-256]]</li><li>Draft: [[Shortest_common_supersequence|Shortest common supersequence]]</li><li>Draft: [[Suffix_tree|Suffix tree]]</li><li>Task: [[Test_integerness|Test integerness]]</li><li>Task: [[Topic_variable|Topic variable]]</ol></td></tr>
<tr><td>Guga360</td><td><ol><li>Task: [[Arrays|Arrays]]</li><li>Task: [[Execute_HQ9%2B|Execute HQ9+]]</li><li>Task: [[Image_noise|Image noise]]</li><li>Task: [[Rosetta_Code/Fix_code_tags|Rosetta Code/Fix code tags]]</li><li>Task: [[Rosetta_Code/Rank_languages_by_popularity|Rosetta Code/Rank languages by popularity]]</li><li>Task: [[Yahoo!_search_interface|Yahoo! search interface]]</ol></td></tr>
<tr><td>Hailholyghost</td><td><ol><li>Draft: [[Calculate_P-Value|Calculate P-Value]]</ol></td></tr>
<tr><td>Hajo</td><td><ol><li>Draft: [[One-time_pad|One-time pad]]</ol></td></tr>
<tr><td>Hamstar</td><td><ol><li>Task: [[Active_Directory/Connect|Active Directory/Connect]]</li><li>Task: [[Active_Directory/Search_for_a_user|Active Directory/Search for a user]]</ol></td></tr>
Line 303 ⟶ 207:
<tr><td>Pelci</td><td><ol><li>Task: [[Combinations_with_repetitions|Combinations with repetitions]]</li><li>Task: [[Knapsack_problem/0-1|Knapsack problem/0-1]]</li><li>Task: [[Knapsack_problem/Bounded|Knapsack problem/Bounded]]</li><li>Task: [[Knapsack_problem/Continuous|Knapsack problem/Continuous]]</li><li>Task: [[Permutations|Permutations]]</ol></td></tr>
<tr><td>Pirho</td><td><ol><li>Task: [[Gaussian_elimination|Gaussian elimination]]</ol></td></tr>
<tr><td>Pistacchio</td><td><ol><li>DraftTask: [[Hunt_The_Wumpus|Hunt The Wumpus]]</ol></td></tr>
<tr><td>Proton</td><td><ol><li>Draft: [[External_sort|External sort]]</ol></td></tr>
<tr><td>Rainb</td><td><ol><li>Draft: [[Base64_encode_data|Base64 encode data]]</ol></td></tr>
Line 363 ⟶ 267:
<tr><td>Zzo38</td><td><ol><li>Task: [[Thue-Morse|Thue-Morse]]</ol></td></tr>
<tr><td>Русский</td><td><ol><li>Task: [[Main_step_of_GOST_28147-89|Main step of GOST 28147-89]]</li><li>Draft: [[Old_Russian_measure_of_length|Old Russian measure of length]]</li><li>Draft: [[Transportation_problem|Transportation problem]]</ol></td></tr>
</table></div>
</div>
 
=={{header|Perl 6}}==
{{works with|Rakudo|2017.08}}
 
The pseudocode above is no longer really useful as the page format has changed. Rather than checking '''every''' edit to see if it was a change to the task description, we'll just assume the user that created the page is the task author. This isn't 100% accurate; a very few pages got renamed and recreated by someone other than the original author without preserving the history, so they are misreported (15 Puzzle Game for instance,) but is as good as it is likely to get without extensive manual intervention. Any further edits to the task description are not credited. As it is, we must still make ''thousands'' of requests and pound the server pretty hard. Checking '''every''' edit would make the task several of orders of magnitude more abusive of the server (and my internet connection.)
 
Each stage of the scraping process is saved to local files so it can be restarted without losing all your progress in the event of a timeout or error. If that happens though, you need to manually adjust where to restart the process.
 
<lang perl6>use HTTP::UserAgent;
use Gumbo;
use Sort::Naturally;
 
my $ua = HTTP::UserAgent.new;
 
for 'Programming_Tasks', 'Draft_Programming_Tasks' -> $category
{ # Get lists of Tasks & Draft Tasks
# last; # Uncomment to skip this step
my $page = "http://rosettacode.org/wiki/Category:$category";
my $html = $ua.get($page).content;
my $xmldoc = parse-html($html, :TAG<div>, :id<mw-pages>);
my @tasks = parse-html($xmldoc[0].Str, :TAG<li>).Str.comb( /'/wiki/' <-["]>+ / )>>.substr(6); #'"
my $f = open("./RC_{$category}.txt", :w) or die "$!\n";
$f.print( @tasks.join("\n") );
$f.close;
}
 
for 'Programming_Tasks', 'Draft_Programming_Tasks' -> $category
{ # Scrape info from each page.
# last; # Uncomment to skip this step
my @tasks = "./RC_{$category}.txt".IO.slurp.lines;
 
for @tasks -> $title {
 
my $ua = HTTP::UserAgent.new;
# Get the earliest edit
my $addr = "http://rosettacode.org/mw/index.php?title={$title}&dir=prev&limit=1&action=history";
 
my $html = $ua.get: $addr;
 
$html.content ~~ m|'<li><span class="mw-history-histlinks">' (.+?) '</ul>' |;
 
my $line = $0.lines.tail;
# Parse out the User name
$line ~~ m| 'title="User:' <-[>]>+? '>' (.+?) '</a>' |;
 
my $auth = $0;
# Oops, no user name, must be anonymous, get IP address instead
unless $auth {
$line ~~ m| '"mw-userlink mw-anonuserlink">' (.+?) '</a>' |;
$auth = $0;
}
 
# Parse out human readable title
$line ~~ m| '<a href="/mw/index.php?title=' $title '&amp;' .+? 'title="'(<-["]>+)'"' |; #"'
 
my $decoded = $0;
 
# report progress
say "$decoded: $auth";
 
# save it to a file
my $f = open("./RC_Authors.txt", :a) or die "$!\n";
$f.say( "[[$title|$decoded]]\t$category\t$auth" );
$f.close;
 
sleep 3; # Don't pound the server
}
}
 
# Read in saved author info
my %authors;
my ($cnt, $draftcnt, $taskcnt);
"./RC_Authors.txt".IO.slurp.lines.map: {
my ($task, $cat, $auth) = $_.split("\t");
$cnt++;
if $cat.contains('Draft') {
$cat = 'Draft:';
$draftcnt++;
} else {
$cat = 'Task: ';
$taskcnt++;
}
%authors{$auth}.push: "$cat $task";
};
 
# Dump an HTML table to a file
my $out = open("./RC_Authors.html", :w) or die "$!\n";
 
$out.say( '<table border="1" cellpadding="4"><tr><th colspan="2">As of ', Date.today, ' | Total: ',
$cnt, ' / Tasks: ', $taskcnt, ' / Draft Tasks: ', $draftcnt,
'<tr><th>User</th><th>Authored</th></tr>' );
for %authors.sort(*.key.&naturally) -> $a {
$out.print( '<tr><td>', $a.key, '</td><td><ol><li>' );
$out.print( $a.value.sort( *.substr(7) ).join('</li><li>') );
$out.say( '</ol></td></tr>' );
}
$out.say( '</table>' );
$out.close;</lang>
 
;Sample output
 
<table border="1"><tr><th colspan="2">As of 2017-09-04 | Total: 1059 / Tasks: 854 / Draft Tasks: 205<tr><th>User</th><th>Authored</th></tr>
<tr><td>2Powers</td><td><ol><li>Draft: [[Names_to_numbers|Names to numbers]]</li><li>Draft: [[Solving_coin_problems|Solving coin problems]]</ol></td></tr>
<tr><td>12.175.32.19</td><td><ol><li>Task: [[Soundex|Soundex]]</ol></td></tr>
<tr><td>12Me21</td><td><ol><li>Task: [[Draw_a_rotating_cube|Draw a rotating cube]]</ol></td></tr>
 
<tr><td colspan='2'><br/> Many rows omitted... <br/></td></tr>
 
<tr><td>Zorro1024</td><td><ol><li>Task: [[Perfect_shuffle|Perfect shuffle]]</li><li>Draft: [[Vector|Vector]]</ol></td></tr>
<tr><td>Zzo38</td><td><ol><li>Task: [[Thue-Morse|Thue-Morse]]</ol></td></tr>
<tr><td>Русский</td><td><ol><li>Task: [[Main_step_of_GOST_28147-89|Main step of GOST 28147-89]]</li><li>Draft: [[Old_Russian_measure_of_length|Old Russian measure of length]]</li><li>Draft: [[Transportation_problem|Transportation problem]]</ol></td></tr>
</table>
10,333

edits