Kodtävling Nr 2. Snyggast kod. Minst antal rader. Roligast lösning och språk.

Permalänk
Medlem

Hrm, befunge..
Man måste dock mata in det baklänges (lätt att fixxa iofs)
Och den tar bara ett ord i taget (jobbigt somfan att fixxa)

Kanske gör den bättre sen..

0 ~~~~~~~~~~~~~~ 0v p1 p01+1:g01 < >:"y"-| >:"u"-| >:"o"-| >v >:"i"-| >:"e"-| >\:|> :"a"-| $ > v $\< < < < < < , |:< 1 0 g # v_"yaw" v " y a " v < 1 0 g : v_ $ > > v >v , 1 |:< - @ 1 g >10g:1-10p$^

Edit-
Det andra tecknet (mellan 0 och ~ har asciivärde 0, forumet verkar inte klara det, så om någonvill testa så får dom fixxa det med en hex-editor eller något)

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Medlem

Har också variant av fungus pågång, kan ta ett tag till då ögonlocken börjar kännas tung

Visa signatur

"Sleep is one of those funny things about being a human being" - Marshall Brain
"Mike broke the hubble, Mike broke the hubble" - Mystery Science Theater 3000
"Det finns inget som kan kallas skrot!" säger Mulle Meck, "bara gamla saker som går att använda på nya sätt. Rulla ut och rulla på."

Permalänk
Medlem

Jo, man tröttnar på det när man har fått ner grunden, det är därför jag postade nu och inte orka göra klart.

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Glömsk

def piglatin(str): phrase = "" vowels = "aeiouyAEIOUY" words = str.split(" ") for w in words: wcopy = w # special characters such as .!,; lchar = "" if w[-1:] not in string.ascii_letters: lchar,w = w[-1:],w[:-1] # actual conversion if w[0] in vowels: w += "way" else: index = [w.find(i) for i in vowels if w.find(i) != -1] if len(index) > 0: w = w[index[0]:] + w[:index[0]] + "ay" # append if wcopy[:1] in string.ascii_uppercase: w = w.lower() w = w.capitalize() phrase += w + lchar + " " return phrase

Går att göra snyggare.

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk

One-liner (med radbrytningar) i Perl:

print join" ",map{join"",map{shift(@c)?uc:$_}split //} map{s/^([^a-z]*)(y?(?:qu|[^aeiouy])*)(.*?)([^a-z]*)$/"$1$3".do{$2||'w'}."ay$4"/e;$_} map{lc join"",grep{push @c,/[A-Z]/?1:0;1}split //}split /\s/,<STDIN>

Kortast hittills?

[EDIT] Nu klarar den yellow och style, dock ej quiet.
[EDIT 2] Quiet fungerar nu.

Permalänk
Medlem

En som min vän Tant102 gjorde
http://www.aspsidan.se/code/default.asp?c=3744

Funkar jävligt bra.
I VBS.

Är nog snabbast hitills
Det är ju funktionen ni skall kolla på.

KODEN NEDAN ÄR GJORD AV TANT102.
Han är inte så aktiv här, men hittar han hit editerar jag mitt inlägg.

<% ' Copyright (C) 2005 Simon Svensson ' ' This program is free software; you can redistribute it and/or ' modify it under the terms of the GNU General Public License ' as published by the Free Software Foundation; either version 2 ' of the License, or (at your option) any later version. ' ' This program is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY; without even the implied warranty of ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ' GNU General Public License for more details. ' ' You should have received a copy of the GNU General Public License ' along with this program; if not, write to the Free Software ' Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ' ' Note: License can be found at http://www.gnu.org/licenses/gpl.txt ' Piglatin Rules: ' Words starting with vowel: ' Append "way". ' Words starting with other character: ' Move all consonants before first vowel to end, and append "ay" ' Example: fun > unfay ' Must handle upper- and lower-case characters. ' http://www.snowcrest.net/donnelly/piglatin.html Option Explicit Function PigLatin(ByVal strIn) Dim strOut, strWord strOut="" Do While Len(strIn)>0 strOut=strOut & GetData(strIn, false) If Len(strIn)=0 Then Exit Do strOut=strOut & ChangeWord(GetData(strIn, true)) Loop PigLatin=strOut End Function Function IsWovel(ByVal strChar) strChar=LCase(strChar) Select Case strChar Case "a", "e", "i", "o", "u" : IsWovel=True Case Else : IsWovel=False End Select End Function Function GetData(ByRef strString, bolWord) Dim RE, objMatches, objMatch, strData Set RE=New RegExp Re.IgnoreCase=True If bolWord Then RE.Pattern="^([a-z]*)" Else RE.Pattern="^([^a-z]*)" End If Set objMatches=Re.Execute(strString) strData=objMatches(0) GetData=strData If Len(strData)=Len(strString) Then strString="" Else strString=Mid(strString, Len(strData)+1) End If End Function Function ChangeWord(ByVal strWord) Dim bolWholeUCase, intI bolWholeUCase=True For intI=1 To Len(strWord) bolWholeUCase=bolWholeUCase And Mid(strWord, intI, 1)=UCase(Mid(strWord, intI, 1)) Next bolWholeUCase=bolWholeUCase And Len(strWord)>1 If IsWovel(Mid(strWord, 1, 1)) Then strWord=strWord & "way" Else Dim bolStartUCase, strPrefix bolStartUCase=Mid(strWord, 1, 1)=UCase(Mid(strWord, 1, 1)) strPrefix="" Do While Len(strWord)>0 And IsWovel(Mid(strWord, 1, 1))=False strPrefix=strPrefix & Mid(strWord, 1, 1) strWord=Mid(strWord, 2) Loop strWord=strWord & strPrefix & "ay" If bolStartUCase Then strWord=UCase(Mid(strWord, 1, 1)) & LCase(Mid(strWord, 2)) Else strWord=LCase(strWord) End If End If If bolWholeUCase Then strWord=UCase(strWord) ChangeWord=strWord End Function Dim strPhrase Response.Write "<pre>" Response.Write "<i>""Should be""</i> comes from http://www.snowcrest.net/donnelly/piglatin.html" & vbCrLf & vbCrLf strPhrase="Hello world, extra fun!" Response.Write "In: " & strPhrase & vbCrLf Response.Write "Out: " & piglatin(strPhrase) & vbCrLf Response.Write "Should be: Ellohay orldway, extraway unfay!" & vbCrLf Response.Write vbCrLf strPhrase="Push me, and then just touch me, 'til I can get my satisfaction." Response.Write "In: " & strPhrase & vbCrLf Response.Write "Out: " & piglatin(strPhrase) & vbCrLf Response.Write "Should be: Ushpay emay, andway enthay ustjay ouchtay emay, 'iltay Iway ancay etgay ymay atisfactionsay." & vbCrLf Response.Write vbCrLf %>

Kommer kanske senare med en egen lösning i VBS.
Inte lika snygg men mindre kanske

Visa signatur

Jag gjorde ett forum en gång. Det var i ASP. Nu kodar jag mest PHP. Men jag har en sajt som heter Clanhost.se också!!!11 ONEONE

Permalänk
Medlem

Hej,

här kommer mitt och Yarricks förslag
"programmet" är skrivigt i editorn vim och körs i editorn
För er som inte vet vad vim är så kan jag berätta att det är en väldigt kraftfull text-editor till UNIX.
I vim finns det två lägen ett där man kan skriva in text ungefär som i en vanlig editor och ett läge där alla
knappar betyder olika kommandon och det är detta läge som programmet använder sig av.
Programmet är testat i vim 6.3 men borde funka i alla 6.x vertionerna (tror jag) vet dock inte om det funkar i vi

För att kör koden skriver man förs in den text man vill förendra på första raden innan pilen (<--) och ser till att
det finns en space mellan sista tecknet och pilen. Sen går man till sista raden med t.ex. G och kopierar in
denna i register q med "qyy och kör sedan porgrammet med @q

Hello world, extra fun! <-- skriv din text här och kör sen med GY@" bcdfghjklmnpqrstvwxyz y BCDFGHJKLMNPQRSTVWXYZ p aeiuoåäöAEIOUÅÄÖ u < o `a"sP W"sxma@q hhxW"sxma`kv$h"ty@q way `y^v$h"ry@r `ae"sp`a"sxma`jv$h"ty@q `agUle"spgul`a"sxma`jv$h"ty@q `a"sPe"hp@t `l/H w"zyl `glx"zP^v$h"ey@e `df/ld$"sp^vj$h"wy@w ^kmf2kmdkmukmpkmykmgkv$h"hykmjkmkkmokmlgg^"sxma`f^v$h"qy@q

efter körningn har texten på första raden ändrats.

Programmet klarar stroa bokstäver nästan enligt reglerna

Har inte årkat optimera koden än så det kanske kommer en kortare lösnign sen.

Iden att skriva program i vim på detta sätt är tagen från lft www.df.lth.se/~lft

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av dime
Hej,

här kommer mitt och Yarricks förslag
....

så du fick den att funka tillslut kalas!

Visa signatur

4 datorer: 9 cpuer (plats för 4 till), 10scsi+1satadisk, 7.75gb ram, bara Linux
http://isitfika.net http://code.kryo.se

Permalänk
Medlem

Shit vad häftigt!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Zn4rK
En som min vän Tant102 gjorde
http://www.aspsidan.se/code/default.asp?c=3744

Funkar jävligt bra.
I VBS.

Är nog snabbast hitills
Det är ju funktionen ni skall kolla på.

KODEN NEDAN ÄR GJORD AV TANT102.
Han är inte så aktiv här, men hittar han hit editerar jag mitt inlägg.

kod

Kommer kanske senare med en egen lösning i VBS.
Inte lika snygg men mindre kanske

Jag tror inte att det är den snabbaste hittils. Vb använder väl fulformat på strängar istället för char-arrayer, sedan anropar han len-funktion för varje iteration osv.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Isbjörnen Igor
One-liner (med radbrytningar) i Perl:

print join" ",map{join"",map{shift(@c)?uc:$_}split //} map{s/^([^a-z]*)(y?(?:qu|[^aeiouy])*)(.*?)([^a-z]*)$/"$1$3".do{$2||'w'}."ay$4"/e;$_} map{lc join"",grep{push @c,/[A-Z]/?1:0;1}split //}split /\s/,<STDIN>

Kortast hittills?

[EDIT] Nu klarar den yellow och style, dock ej quiet.
[EDIT 2] Quiet fungerar nu.

Den gör fel på "yellow".
Den klarar inte heller "hEllo" (men det kanske inte var meningen heller?)

Permalänk
Medlem

_root.onLoad = function() { trace(toPigLatin("Hello world, extra fun!")); trace(toPigLatin("A quiet, yellow style.")); }; function toPigLatin(input) { wovels = "aoueiAOUEI"; punctuation = ".,!?;:"; textArray = input.split(" "); for (i=0; i<textArray.length; i++) { punct = ""; big = false; if (punctuation.indexOf(textArray[i].substr(textArray[i].length-1)) != -1) { punct = textArray[i].substr(textArray[i].length-1); textArray[i] = textArray[i].substr(0, textArray[i].length-1); } if (textArray[i].substr(0, 1) == textArray[i].substr(0, 1).toUpperCase()) { big = true; } textArray[i] = textArray[i].toLowerCase(); if (wovels.indexOf(textArray[i].substr(0, 1)) != -1) { textArray[i] += "way"; } else { buffer = ""; prebuff = ""; while (wovels.indexOf((textArray[i]).substr(0, 1)) == -1) { if (buffer != "" and "yY".indexOf((textArray[i]).substr(0, 1)) != -1) { break; } if ((textArray[i]).substr(0, 1)>-1) { prebuff += textArray[i].substr(0, 1); textArray[i] = textArray[i].substr(1); } else if ((textArray[i]).substr(0, 2).toLowerCase() == "qu") { buffer += textArray[i].substr(0, 2); textArray[i] = textArray[i].substr(2); } else { buffer += textArray[i].substr(0, 1); textArray[i] = textArray[i].substr(1); } } textArray[i] = prebuff+textArray[i]+buffer+"ay"; } if (big) { textArray[i] = textArray[i].substr(0, 1).toUpperCase()+textArray[i].substr(1); } textArray[i] += punct; } return textArray.join(" "); }

Actionscript.

Permalänk
Citat:

Ursprungligen inskrivet av vb
Den gör fel på "yellow".
Den klarar inte heller "hEllo" (men det kanske inte var meningen heller?)

Den klarar visst yellow. Som jag uppfattade det skall yellow bli ellowyay, och det tycker även översättaren på referenssidan.

Angående hEllo, jag läste inte reglerna för versaler och gemener innan jag skrev detta. Mitt skript gör på så vis att om en bokstav med en viss position är versal blir bokstaven på samma position i sluttexten också versal. Hello -> Ellohay, hEllo -> eLlohay.

Permalänk
Medlem

Gjorde ett försök att implementera det funktionellt i LISP. Jag har inte tagit hänsyn till stora och små bokstäver fullt ut än, och inte heller all gramatik, men det kanske kommer. Det är åtminstone 100% rekursivt.
Observera att inga tilldelningar sker förutom konstanterna "vokaler" och "special", och att inga loopar används!

(setq vokaler "aoåueiyäö") (setq special ".,;:!?") (defun konvertera-vokal (ord) (concatenate 'string ord "way")) (defun konvertera-konsonant (ord slut början) (let ((ay (if (= (length ord) 1) "ay" ""))) (cond ((tom? ord) (concatenate 'string början slut)) ((find (första ord) special) (konvertera-konsonant (str-resten ord) (concatenate 'string slut "ay" (str-första ord)) början)) ((or (find (första ord) vokaler) (> (length början) 0)) (konvertera-konsonant (str-resten ord) (concatenate 'string slut ay) (concatenate 'string början (str-första ord)))) (t (konvertera-konsonant (str-resten ord) (concatenate 'string slut (str-första ord) ay) början))))) (defun dela-upp-i-ord (mening) (cond ((tom? mening) '()) (t (multiple-value-bind (ord resten) (hitta-ord-och-rest mening '()) (cons ord (dela-upp-i-ord resten)))))) (defun hitta-ord-och-rest (mening ord) (cond ((tom? mening) ord) ((char= (första mening) #\Space) (values ord (str-resten mening))) (t (hitta-ord-och-rest (str-resten mening) (concatenate 'string ord (str-första mening)))))) (defun översätt (lista) (if (endp lista) '() (let ((nytt-ord (if (find (första (first lista)) vokaler) (konvertera-vokal (first lista)) (konvertera-konsonant (first lista) "" "")))) (cons nytt-ord (översätt (rest lista)))))) (defun pig-latin (mening) (let ((ny-mening (slå-ihop (översätt (dela-upp-i-ord mening))))) (stor-bokstav (string-downcase (subseq ny-mening 0 (- (length ny-mening) 1)))))) (defun tom? (str) (eq (length str) 0)) (defun första (str) (char str 0)) (defun str-första (str) (string (char str 0))) (defun str-resten (str) (subseq str 1 (length str))) (defun stor-bokstav (str) (concatenate 'string (string-upcase (str-första str)) (str-resten str))) (defun slå-ihop (lista) (if (endp lista) '() (concatenate 'string (first lista) " " (slå-ihop (rest lista)))))

Permalänk
Medlem

Här kommer den första PHP-bidraget som fungerar rätt med stora/små bokstäver. Blev rätt kort faktiskt.

function piglatin($text) { $vokaler = array('a','o','u','e','i','y'); $ord = preg_split('/[^a-zA-Z]/', $text, -1, PREG_SPLIT_NO_EMPTY); foreach ($ord as $o) { for ($i=(strtolower($o[0])=='y' ? 1 : 0); (!in_array(strtolower($o[$i]), $vokaler) || substr($o, $i-1, 2)=='qu') && $i<strlen($o); $i++); $nytt = substr($o, $i).substr($o, 0, $i).($i==0 ? 'w' : '').'ay'; if ($o == ucfirst($o)) { $nytt = ucfirst($nytt); $nytt[strlen($o)-$i] = strtolower($nytt[strlen($o)-$i]); } $oversatt[$o] = $nytt; } return strtr($text, $oversatt); }

edit: Fixade till lite missar.

Permalänk
Medlem

Ett bidrag i mirc-script också, tycker det funkar bra men jättesnygg lösning blev det inte, iaf inte på stora bokstäver/specialtecken :). Orkade inte göra det som en identifier, blir jobbigt med kommatecken då.

alias piglatin { var %t = $strip($1-), %x1 = 1, %m1 = $numtok(%t,32) while (%x1 <= %m1) { var %t2 = $gettok(%t,%x1,32) if ($right(%t2,1) !isalpha) var %l = $v1, %t2 = $left(%t2,-1) if ($left(%t2,1) isletter aAeEiIoOuU) var %t2 = %t2 $+ way else { var %x3 = 1, %m3 = $len(%t2) while (%x3 <= %m3) { if ($left(%t2,1) !isletter aAeEiIoOuU) %t2 = $right(%t2,-1) $+ $v1 inc %x3 } var %t2 = %t2 $+ ay } if (%l) { %t2 = %t2 $+ $v1 | unset %l } if (%t2 !islower) %t2 = $upper($left(%t2,1)) $+ $lower($right(%t2,-1)) var %r = $addtok(%r,%t2,32) inc %x1 } echo -a %r }

Edit: Upptäckte att den gör fel ibland, tror inte jag orkar fixa det.

Permalänk
Citat:

Ursprungligen inskrivet av Isbjörnen Igor
One-liner (med radbrytningar) i Perl:

print join" ",map{join"",map{shift(@c)?uc:$_}split //} map{s/^([^a-z]*)(y?(?:qu|[^aeiouy])*)(.*?)([^a-z]*)$/"$1$3".do{$2||'w'}."ay$4"/e;$_} map{lc join"",grep{push @c,/[A-Z]/?1:0;1}split //}split /\s/,<STDIN>

Kortast hittills?

Hmm, går det inte att göra den mer läsbar?

Ok mitt försök i Python, då jag är lat klarar den inga undantag eller sånt, men den ser iaf till att ord med stor bokstav alltid får storbokstav först.

import re reVoc = re.compile(r"(\\b[aeiouAEIOU])([a-zA-Z]*)\\b") reCons = re.compile(r"(\\b[^aeiouyAEIOUY-])([a-zA-Z]*)\\b") def toPigLatin(text): return " ".join([wordToPig(word) for word in text.split()]) def wordToPig(word): result = reVoc.sub(r"\\1\\2way", word) result = result==word and reCons.sub(r"\\2\\1ay", word) or result return result.islower() and result or result.capitalize()

Imputen: "Hello world, index(extra yellow fun). With-Spaces! AAnd_Capitals"
Ger resultatet: "Ellohay orldway, indexway(extraway yellow unfay). Ithway-pacessay! Aand_capitals"
Inte perfekt som sagt, men den har iaf lite småfyndigheter för sig. (mao bör den vara lite svårläst för en som inte kan Python)

Visa signatur

Python-IRC på svenska: #python.se

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Isbjörnen Igor
Den klarar visst yellow. Som jag uppfattade det skall yellow bli ellowyay, och det tycker även översättaren på referenssidan.

Angående hEllo, jag läste inte reglerna för versaler och gemener innan jag skrev detta. Mitt skript gör på så vis att om en bokstav med en viss position är versal blir bokstaven på samma position i sluttexten också versal. Hello -> Ellohay, hEllo -> eLlohay.

Ja du har rätt, sorry
Testade med yellow innan jag skrev inlägget o då blev det yellowway, men nu blir det såklart rätt.. Verkar som om man inte får sudda när man skriver sin text för perl, antar att jag råkade göra det.

Permalänk

Sebastianj: Självklart går den att göra mer läsbar, men jag siktade på att få den så liten som möjligt.
vb: Det stämmer, skriptet hanterar inte backspace eftersom det skulle tagit mycket mer kod för att få det att fungera.

Permalänk
Citat:

Ursprungligen inskrivet av Isbjörnen Igor
Sebastianj: Självklart går den att göra mer läsbar, men jag siktade på att få den så liten som möjligt.

Som diskuterats tidigare så är det ju egentligen inte antalet tecken som räknas, det som är intressant är ju snarare antalet element. Det vore kul att se en läsbar version med lite mer whitespace och tydligare variablenamn.

Visa signatur

Python-IRC på svenska: #python.se

Permalänk

print( join(" ", map{ join("", map{ shift(@case) ? uc : $_; } split //); } map{ s/^([^a-z]*)(y?(?:qu|[^aeiouy])*)(.*?)([^a-z]*)$/ "$1$3".do{$2||'w'}."ay$4"/e; $_; } map{ lc(join "", grep{ push @case, (/[A-Z]/?1:0); 1; }split //); } split /\s/, <STDIN>));

Detta borde fungera.

Permalänk
Medlem

http://www.cadenhead.org/book/homepage24/kvikkalkul/ Här är ett fint språk som man skulle kunna använda... Är hemligt och enbart avsett för militärt bruk egentligen.

Visa signatur

“Our enemies are innovative and resourceful, and so are we. They never stop thinking about new ways to harm our country and our people, and neither do we.” - President Bush - August 5, 2004

Permalänk
Glömsk
Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem

Underbart att se denna lilla tävling och alla varierande svar. Var inne på sed/awk men efterson perl redan använts känns det meningslöst. Istället bifogar jag en lösning i mitt personliga favoritspråk, ocaml.

Lösningen går alldeles säkert att göras kortare, jag är lite rostig. Den går att kompilera och köra rakt av om man vill. Skall se om jag kan fila till den lite snyggare senare, men det var ett snabbt försök att bidra med nåt .

Kommentarer inom (* *).

(* * PigLatin.ml * Pig Latin in Objective ML (ocaml) * (c) Jens Olsson 2005 * * Ocaml can be downloaded freely from http://www.ocaml.net * * Usage: * piglatin translates each argument to Pig Latin, separated by newlines. * To translate sentances, enclose the sentances within citationmarls ("") * * Compiles with: * Windows: ocamlc -o piglatin.exe str.cma piglatin.ml * Unix: ocamlc -o piglatin str.cma PigLatin.ml * * To use with top level system, start it by typing: * ocaml * Then load the Str library before loading the actual file * #load "Str.cma";; * #use "PigLatin.ml";; *) (* Constants for matching *) let wovels = "aeiuoåäöAEIUOÅÄÖ";; let consonants = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";; let delims = " \t,.!?";; (* [translateWord s] translates s into Pig Latin. Assumes s is a word with letters only and not uppercase (capitalized is ok though) *) let translateWord s = (* Special case: check if first letter is uppercase *) let c = String.contains (String.uppercase(wovels ^ consonants)) s.[0] in (* Check if first letter is a wovel and adjust accordingly *) let s = if String.contains wovels s.[0] then "w" ^ s else s in (* Determine where to split word. Splitpoint stored internally, obtained with match_end() *) let _ = Str.search_forward (Str.regexp("^["^consonants^"]+")) s 0 in (* Switch places between first and last part of word and add piglatin extension *) let w = String.sub s (Str.match_end()) (String.length s - Str.match_end()) ^ String.sub s 0 (Str.match_end()) ^ "ay" in (* Adjust for special case if nescessary, ie make first letter uppercase if needed *) if c then String.capitalize(String.lowercase w) else w ;; (* [translate s] translates s inte Pig Latin. Delimeters and nonwords are left untouched, words are translated *) let translate s = match s with Str.Text word -> (try translateWord word with Not_found -> word) | Str.Delim delim -> delim;; (* [pigLatin s] translates a sentance into Pig Latin. Capitalized words are handled but not uppercase words example: "This is a test" is handled correct, "THIS IS A TEST" is not. *) let pigLatin s = List.fold_left (fun s1 s2 -> s1 ^ (translate s2)) "" (Str.full_split (Str.regexp("[" ^ delims ^ "]+")) s);; (* Mainloop. Run program with arguments *) Array.iter (fun s -> print_string((pigLatin s) ^ "\n")) (Array.sub Sys.argv 1 (Array.length(Sys.argv)-1));;

edit: Inte kortast, men väl 12 rader ex kommentarer. Om det är nåt nytt min lösning bidrar med så är det förutom ett nytt språk en kommenterad lösning

edit2: tack cure ocaml är en bra kompromiss mellan funktionalitet, läsbarhet och prestanda. Faktum är att det inte är en kompromiss på prestanda, det är otrligt snabbt.

edit3: tog bort lite onödigt krafs och insåg att det finns en bug: ord som börjar med svenska åäö hanteras inkorrekt (eller åtminstone inte fullt ut). Faktum är att det beror på ocamls sätt att hantera svenska tecken. Det går att programmera runt men det känns som overkill att kompensera för språkets brister.

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av Enzo
Underbart att se denna lilla tävling och alla varierande svar. Var inne på sed/awk men efterson perl redan använts känns det meningslöst. Istället bifogar jag en lösning i mitt personliga favoritspråk, ocaml.

Lösningen går alldeles säkert att göras kortare, jag är lite rostig. Den går att kompilera och köra rakt av om man vill. Skall se om jag kan fila till den lite snyggare senare, men det var ett snabbt försök att bidra med nåt .

Kommentarer inom (* *).

----

edit: Inte kortast, men väl 12 rader ex kommentarer. Om det är nåt nytt min lösning bidrar med så är det förutom ett nytt språk en kommenterad lösning

Jävligt snygg lösning.

Permalänk
Medlem

Cure: Blir det ngnt mer problem snart lr? (Gärna ett som inte går ut på att tyda en halvbra skriven beskrivning + javascript )

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av vb
Cure: Blir det ngnt mer problem snart lr? (Gärna ett som inte går ut på att tyda en halvbra skriven beskrivning + javascript )

Yeah. Funderar på det. Något med betydligt trevligare och tydligare regler, fast i samma svårighetsgrad hade nog varit bäst.

Num2Roman gick ju snabbt ner till 2-3 rader, sen var det stopp. Denna verkar nå gränsen vid ~10-20 rader. Ganska lagom.

Edit: Bara att slänga fram förslag via PM (så slipper vi få för mycket OT)

Permalänk
Medlem

Att räkna rader är fortfarande inte relevant då man kan skriva allt på samma rad. Och att räkna antal tecken är inte heller relevant då man kan använda variabelnamn på ett tecken osv. Tycker inte det är meningsfullt... Men visst det verkar vara många som tycker att det är otroooooligt meningsfullt så varför inte...

Visa signatur

“Our enemies are innovative and resourceful, and so are we. They never stop thinking about new ways to harm our country and our people, and neither do we.” - President Bush - August 5, 2004

Permalänk
Medlem

Jag ser gärna att det inte blir ett till "översätt den här strängen till den här strängen med dom här reglerna" utan nåt annorlunda.

Visa signatur

Min hemsida: http://www.srekel.net
Pocket Task Force: http://ptf.srekel.net
Kaka e gott! http://kaka.srekel.net

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av SamiRaj
Att räkna rader är fortfarande inte relevant då man kan skriva allt på samma rad. Och att räkna antal tecken är inte heller relevant då man kan använda variabelnamn på ett tecken osv. Tycker inte det är meningsfullt... Men visst det verkar vara många som tycker att det är otroooooligt meningsfullt så varför inte...

Du har absolut en poäng. Antal rader och tecken är mycket en fråga om längd på raderna respektive variabelnamn. Men... i övrigt håller jag nog inte med:

Till att börja med, meningsfullt är inte detsamma som roligt. Det är roligt att lösa programmeringsproblem på olika sätt. Om inte genom att göra snabba lösningar, så genom att korta eller oläsbara lösningar. Har ni inte kikat på International Obfuscated C Code Contest (IOCCC) så gör det!

Vidare, antal rader har helt klart relevants i praktiken. Läsbarhet. Att ha en 2427 tecken lång rad är inte läsbart så underförstått är att raderna håller rimliga längder. Förut brukade 80 tecken vara ett riktmått vet inte hur det är nu men en tumregel är väl att får det plats på en "normal" skärm utan att man behöver skrolla i sidled för att se hela raden.

Läsbarhet betyder mycket. Många mjukvaruprojekt i dag är stora och med stor mängd kod som skall underhållas av många under lång tid så är det av största vikt att kodmassan är så överblickbar och lättförståelig som möjligt. Det är mycket som påverkar detta, kommentering och kodstandarder är några exempel. Antal rader ett annat. En annan riktlinje är att en funktion/procedur inte bör vara mer än "en sida" lång, blir den längre bör man dela upp i flera mindre funktioner/procedurer. Vidare bör en fil inte vara för lång heller.

Det finns givetvis inga regler för detta och det är upp till var och en att bedöma vad som är rimligt, men antal rader kod är i allra högsta grad meningsfullt.

Vad som gör antal rader kod extra intressant är när man jämför olika språk. Jag brukar mässa om att olika språk är bra på olika saker. Att ta ett programmeringsproblem och låta folk lösa det i olika språk är inte bara underhållande utan man får en liten inblick i hur de olika språken är lämpade för att lösa olika problem. Givetvis får man också se hur olika folk tänker...

Jag tycker detta visas på ett ypperligt sätt här! Därför håller jag också med föregående talare, nu har vi sett strängmanipuleringsproblem, och hur olika språk stödjer det. Vore kul med nåt annat. Jag skall ta mig en funderare och peppra Cure med förslag. Sådant här tycker jag nämligen är sjukt kul