I en avlägsen forntid hade vi ju ett par kodningsutmaningar här på UM; det var kul, även om det inte vart särskilt mycket vettigt producerat. Finns det intresse för att dra igång någonting sådant igen här?
För att mäta intresset kör vi ett litet test.
Utmaning till alla UM:s hobbykodare: skriv ett program som översätter svenska till rövarspråk. Om dagens ungdom inte känner till rövarspråket, så är det det språk som erhålls om man byter ut alla konsonanter k mot k + "o" + k; exempelvis blir papperskorg "popapoppoperorsoskokororgog."
Du får använda vilket språk du vill och skriva programmet på vilket sätt du vill. Det enda kravet är att programmet ska läsa svenska från standard input, och skriva rövarspråk till standardoutput. Vill du dessutom lägga till ett GUI-läge, frekvensanalys, fula ord-filter och andra extrapåhitt är det upp till dig.
Pluspoäng för kreativa lösningar och koncis, läsbar kod.
Gentlernen:
Finns det intresse för att dra igång någonting sådant igen här?
Definitivt! Väldigt roligt initiativ!
Här är mitt bidrag i Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
consonants = ["b","c","d","f","g","h","j","k","l","m","n","p","q","r",
"s","t","v","w","x","z", "B","C","D","F","G","H","J","K","L","M",
"N","P","Q","R","S","T","V","W","X","Z"]
instring = unicode(raw_input("Skriv fras att översätta:
"), "utf-8")
outstring = ""
for char in instring:
if char in consonants:
outstring += char+"o"+char.lower()
else:
outstring += char
print outstring
Och för att jag har fruktansvärt tråkigt, en variant som läser upp strängen åt dig:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess
consonants = ["b","c","d","f","g","h","j","k","l","m","n","p","q","r",
"s","t","v","w","x","z", "B","C","D","F","G","H","J","K","L","M",
"N","P","Q","R","S","T","V","W","X","Z"]
instring = unicode(raw_input("Skriv fras att översätta:
"), "utf-8")
outstring = ""
for char in instring:
if char in consonants:
outstring += char+"o"+char.lower()
else:
outstring += char
print outstring
try:
subprocess.Popen(['espeak', '-vsv', outstring ])
except:
pass
offtopic, men rövarspråket skulle vara en bra onödig funktion till um++
Gentlernen:
Finns det intresse för att dra igång någonting sådant igen här?
Japp, skulle vara roligt : )
Har mest strökodat på senare dagar och har ingen speciell koll på språkspecifika saker, så jag hade en väldans hard-time med att få svenska tecken att fungera för stdin. Så ni får leva utan programargument och skriva ordet i programmet som input om ni vill prova
Mitt bidrag i Haskell:
import System.Environment (getArgs)
import Data.List
isVokal :: Char -> Int
isVokal(c) = length (filter (== c) ['a', 'o', 'u', 'å', 'e', 'i', 'y', 'ä', 'ö', 'A', 'O', 'U', 'Å', 'E', 'I', 'Y', 'Ä', 'Ö'$
rovarsprak :: [Char] -> String
rovarsprak [] = []
rovarsprak (h:t) =
if isVokal(h) /= 0 then
h:rovarsprak(t)
else
h:('o'):h:rovarsprak(t)
main = do
putStrLn "Skriv in ett ord:"
args <- getLine
putStrLn (rovarsprak(args))
sylar:
import System.Environment (getArgs)
Varför importerar du getArgs när du aldrig använder det?
sylar:
Så ni får leva utan programargument och skriva ordet i programmet som input om ni vill prova
getLine läser ju från stdin.
Gentlernen:
Varför importerar du getArgs när du aldrig använder det?
Ah, jag glömde att ta bort import-raden. Använde getArgs först, fast tog bort det för att det inte fungerade att skriva åäö av någon anledning : /
Kortaste Haskellversionen jag kunde komma på:
main = interact $ concat . \s -> [if cons c then [c,'o',c] else [c] | c <- s]
where cons = (`elem` "qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM")
EDIT: tror det blir lite klarare om man behandlar elem som en operator än använder flip.
EDIT2: man kan ju behandla stora bokstäver också.
Gentlernen:
Kortaste Haskellversionen jag kunde komma på:
*inväntar att någon skriver en fullkomligt oläslig perl-version på 60 tecken*
Åtta:
*inväntar att någon skriver en fullkomligt oläslig perl-version på 60 tecken*
$_=<STDIN>;
s/([b-fghj-np-xyz])/\1o\1/gi;
print "$_
";
går säkert att korta ner yterligare
me whants moar utmaningar! borde göra detta till ett event som inträffar typ varje fredag, så att man har någe att syssla me dpå en fredagskväll.
om jag någonsin i mitt liv ens kunnat åtstadkomma något liknande så kan jag det i varje fall inte längre
ankzor:
me whants moar utmaningar!
Åtta:
me whants moar utmaningar!
ankzor:
göra detta till ett event som inträffar typ varje#insert random day#
Gentlernen:
ankzor:
Åtta: me whants moar utmaningar!
ankzor:
ankzor: göra detta till ett event som inträffar typ varje#insert random day#
(och ja Åtta, dubbelpost. sorry D:)
ankzor:
Åtta: me whants moar utmaningar!