Aviseringar
Rensa alla

Programmeringsutmaning mini: rövarspråket


Ämnesstartare

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.


   
Citera
Åtta

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

   
SvaraCitera
Åtta

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

   
SvaraCitera

offtopic, men rövarspråket skulle vara en bra onödig funktion till um++


   
SvaraCitera

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 [rolleyes]

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))

   
SvaraCitera
Ämnesstartare

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 [rolleyes]

getLine läser ju från stdin.


   
SvaraCitera

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 : /


   
SvaraCitera
Ämnesstartare

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å.


   
SvaraCitera
Åtta

Gentlernen:

Kortaste Haskellversionen jag kunde komma på:

*inväntar att någon skriver en fullkomligt oläslig perl-version på 60 tecken*


   
SvaraCitera

Å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


   
SvaraCitera

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.


   
SvaraCitera

om jag någonsin i mitt liv ens kunnat åtstadkomma något liknande så kan jag det i varje fall inte längre


   
SvaraCitera
Åtta

ankzor:

me whants moar utmaningar!


   
SvaraCitera

Åtta:

me whants moar utmaningar!

ankzor:

göra detta till ett event som inträffar typ varje#insert random day#

- - - - - - - - - - - - - - - - - Sammanslagning 1 - - - - - - - - - - - - - - - - -

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:)


   
SvaraCitera

ankzor:

Åtta: me whants moar utmaningar!


   
SvaraCitera