Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| efinf:blc2016:loesungen-2016-12-13 [2016/12/20 13:05] – luca_naef | efinf:blc2016:loesungen-2016-12-13 [2016/12/21 20:46] (current) – [Lösungen] patrick_lehn | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | {{backlinks> | ||
| + | ===== String, RegEx: Drei Chinesen mit dem Kontrabass ===== | ||
| + | * Aufgabenstellung: | ||
| + | ==== Lösungen ==== | ||
| + | === Simon === | ||
| + | <code ruby regexaufg.rb> | ||
| + | # coding: utf-8 | ||
| + | # Diese Funktion muss ergänzt werden | ||
| + | |||
| + | def ersetzen(text, | ||
| + | text = String.new(text) # Kopie vom String | ||
| + | text.gsub!(/ | ||
| + | text.gsub!(/# | ||
| + | return text | ||
| + | end | ||
| + | |||
| + | |||
| + | text = "Drei Chinesen mit dem Kontrabass | ||
| + | saßen auf der Strasse und erzählten sich was. | ||
| + | Da kam die Polizei, fragt: \"Was ist denn das?\" | ||
| + | Drei Chinesen mit dem Kontrabass. | ||
| + | " | ||
| + | a=1 | ||
| + | v = [" | ||
| + | |||
| + | while (true) | ||
| + | puts " | ||
| + | print "Vokal oder Diphthong: " | ||
| + | vokal = gets.chomp | ||
| + | |||
| + | if v.include? | ||
| + | then puts " | ||
| + | else break | ||
| + | end | ||
| + | |||
| + | end | ||
| + | </ | ||
| + | |||
| + | ===== Datensalat: Schraubensack ===== | ||
| + | Aufgabenstellung: | ||
| + | |||
| + | [[efinf: | ||
| + | ==== Lösungen ==== | ||
| + | === Simon === | ||
| + | <code ruby datensalat.rb> | ||
| + | file = File.read(" | ||
| + | for i in 1..60 | ||
| + | s = file.scan(/ | ||
| + | m = file.scan(/ | ||
| + | if (s!=0 and m!=0) then | ||
| + | a = [s,m] | ||
| + | n = a.min | ||
| + | puts "# | ||
| + | end | ||
| + | end | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Luca === | ||
| + | <code ruby datensalat.rb> | ||
| + | def min(*values) | ||
| + | | ||
| + | end | ||
| + | |||
| + | def max(*values) | ||
| + | | ||
| + | end | ||
| + | |||
| + | liste = File.open(" | ||
| + | |||
| + | muttern = Array.new(150, | ||
| + | schrauben = Array.new(150, | ||
| + | |||
| + | liste.each{|e| if e[0]==" | ||
| + | |||
| + | for e in 0..149 do | ||
| + | minimum = min(muttern[e], | ||
| + | puts "# | ||
| + | end | ||
| + | </ | ||
| + | |||
| + | === Noel === | ||
| + | <code php> | ||
| + | <?php | ||
| + | |||
| + | /* Sry, wegen PHP...*/ | ||
| + | |||
| + | $m = []; | ||
| + | $s = []; | ||
| + | |||
| + | $lines = preg_split('/ | ||
| + | |||
| + | foreach($lines as $line) { | ||
| + | $v = explode(" | ||
| + | | ||
| + | if($v[0] == " | ||
| + | if(isset($m[$v[1]])) { | ||
| + | $m[$v[1]] += 1; | ||
| + | } else { | ||
| + | $m += [$v[1] => 1]; | ||
| + | } | ||
| + | } else { | ||
| + | if(isset($s[$v[1]])) { | ||
| + | $s[$v[1]] += 1; | ||
| + | } else { | ||
| + | $s += [$v[1] => 1]; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | ?> | ||
| + | </ | ||
| + | |||
| + | ===Patrick=== | ||
| + | <code ruby schrauben.rb> | ||
| + | liste = File.readlines(" | ||
| + | |||
| + | liste.sort!{|a, | ||
| + | if a[1]==b[1] | ||
| + | a[0]< | ||
| + | | ||
| + | a[1]< | ||
| + | end | ||
| + | } | ||
| + | |||
| + | a=0 # a & g stehen für die Indizes der Unterarrays | ||
| + | g=1 | ||
| + | schrauben = 0 | ||
| + | muttern = 0 | ||
| + | last_size=liste[a][1] | ||
| + | puts # | ||
| + | |||
| + | while a!=liste.size | ||
| + | if liste[a][1]==last_size | ||
| + | while liste[a]==liste[g] | ||
| + | | ||
| + | end | ||
| + | | ||
| + | if liste[a][0]==" | ||
| + | | ||
| + | elsif liste[a][0]==" | ||
| + | | ||
| + | end | ||
| + | a=g # a wird aktualisiert | ||
| + | else | ||
| + | if muttern == 0 or schrauben == 0 # damit kein Auswurf entsteht wenn es keine Paare gibt | ||
| + | nil | ||
| + | elsif muttern > schrauben | ||
| + | puts "# | ||
| + | elsif muttern < schrauben | ||
| + | puts "# | ||
| + | elsif | ||
| + | puts "# | ||
| + | end | ||
| + | | ||
| + | | ||
| + | | ||
| + | end | ||
| + | end | ||
| + | puts # leicht hübschere Ausgabe | ||
| + | # gesamt Aufwand ist O(nlog(n)) | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Arrays: Es lebe der König, Josephus-Problem ===== | ||
| + | Es lebe der König: https:// | ||
| + | |||
| + | Josephus-Problem: | ||
| + | |||
| + | ==== Lösungen "Es lebe der König" | ||
| + | === Peterli === | ||
| + | <code ruby koenig-peterli.rb> | ||
| + | # No comment | ||
| + | </ | ||
| + | |||
| + | === Mathematiker === | ||
| + | Es lohnt sich in diesem Fall, gar nichts zu programmieren. Beim ersten Teil der Aufgabe ist es schnell einleuchtend, | ||
| + | |||
| + | Der zweite Teil ist interessanter, | ||
| + | $$n=p_1^{n_1}\cdot p_2^{n_2} \cdot \ldots \cdot p_m^{n_m}$$ | ||
| + | Ein Teiler von $n$ erhält man, indem man von jedem Primfaktor $p_i$ eine beliebige Anzahl zwischen $0$ und $n_i$ wählt. D.h. die Anzahl Teiler ist $(n_1+1)\cdot (n_2+1)\cdot \ldots \cdot (n_m+1)$. Dieses Produkt ist genau dann ungerade, wenn **alle** $n_i$ gerade sind. Sind alle Exponenten gerade, ist die Zahl eine Quadratzahl, | ||
| + | |||
| + | ==== Lösungen " | ||
| + | === Peterli === | ||
| + | <code ruby koenig-peterli.rb> | ||
| + | # No comment | ||
| + | </ | ||
| + | |||
| + | ===== Algorithmik: | ||
| + | Aufgabenstellung: | ||
| + | === Käthi === | ||
| + | <code ruby numberriddle-A1-kaethi.rb> | ||
| + | # No comment | ||
| + | </ | ||
| + | |||
| + | ===== Teile und herrsche: Maler Malcom ===== | ||
| + | Aufgabenstellung: | ||
| + | |||
| + | === Lösungen === | ||
| + | <code ruby malcom-brute-force-urs.rb> | ||
| + | # No comment | ||
| + | </ | ||
| + | |||
| + | |||