Sida 2 av 2

Re: Golfande golfare?

Postat: 16 feb 2010, 12:49
av dmz
Jo... jag tänker som så att enbart använda sig av 'core' utav perl, python etc, och enbart coreutils vad gäller bash. Detta förenklar också för andra att testa det man skrivit, då de icke behöver dra in massa konstiga, externa prylar.

Re: Golfande golfare?

Postat: 16 feb 2010, 12:58
av Hans Linde
Ursäkta att jag som entusiast "kravlar in" ....................men om ni skulle få till en "bågskytte-version" också..............ja då finns det en risk att jag börjar med datorspel. ;D

Re: Golfande golfare?

Postat: 16 feb 2010, 13:06
av Ulsak
Konservburk rules ( utan att för den skull ta heder och ära av dmz, katt och ni andra überkodare)

Re: Golfande golfare?

Postat: 16 feb 2010, 16:20
av Konservburk
dmz skrev:Hur skall vi förhålla oss till externa moduler/applikationer? Jag noterar att t.ex bc inte tillhör coreutils; är inte detta ansett som fusk, eller skall vi enbart köra på kortast möjliga kod? Om jag skulle begagna mig av en extern modul så borde ju nästan denna modulen, eller åtminstonde koden för den aktuella funktionen, även räknas? :p
dmz skrev:Jo... jag tänker som så att enbart använda sig av 'core' utav perl, python etc, och enbart coreutils vad gäller bash. Detta förenklar också för andra att testa det man skrivit, då de icke behöver dra in massa konstiga, externa prylar.
Kallar du bc för en "extern applikation" så kan du lika gärna kalla även perl, python, ruby, mfl för externa applikationer. Alla dessa är programmeringsspråk och bc fanns faktiskt med redan på 70-talet i unix v7 och är dessutom (till skillnad från perl) med i posix-standarden, dvs den standard som talar om vad som ska finnas med i ett komplett unix-system.

http://en.wikipedia.org/wiki/Bc_programming_language
http://minnie.tuhs.org/UnixTree/V7/usr/ ... /bc.1.html
http://www.opengroup.org/onlinepubs/969 ... es/bc.html

Men du har trots allt en poäng. Det finns ju programmeringsspråk där t.ex. fakulteten av ett tal kan skrivas ut med bara tal! och inte ett tecken mer än så. Och att komma med någon konstig modul som gör hela jobbet kan jag hålla med om är fusk. Så var drar vi gränsen isf?

Mitt förslag är att man alltid får använda allting som finns med från början i en vanlig standardinstallation av ubuntu-9.10. Om man vill använda ett programmeringsspråk som inte finns med från början så måste man hålla sig till en standardinstallation av detta språk från standardförråden,
t.ex. sudo apt-get install ruby eller motsvarande.

Re: Golfande golfare?

Postat: 16 feb 2010, 16:32
av dmz
Jag jämför coreutils med core av valfritt programmeringsspråk, och då är bc i högsta grad en extern applikation. Jag är dock medveten om att bc är standard i flera distributioner, och det var inte bc som sig jag syftade på, utan frågan om man skall få använda externa applikationer. Fair enough.

Re: Golfande golfare?

Postat: 16 feb 2010, 16:54
av Konservburk
dmz skrev:Jag jämför coreutils med core av valfritt programmeringsspråk, och då är bc i högsta grad en extern applikation.
Och isf är även perl i ännu högre grad en "extern applikation" ;)

Jag skulle nog inte kalla coreutils för standard. Det finns en del där som inte är med i posix och därför inte kan förväntas finnas med i t.ex. icke-gnu-baserade system som bsd och liknande.

Mitt förslag är som sagt standardinstallation av ubuntu och standardintallation av det programmeringsspråk man vill använda.

Re: Golfande golfare?

Postat: 18 feb 2010, 11:22
av Katt
Verkar som du vunnit den här omgången dmz, så kör på ett nytt problem.

Re: Golfande golfare?

Postat: 18 feb 2010, 14:46
av dmz
Problem 3: Skapa en interaktiv kalkylator i stil med bc som klarar åtminstonde de fyra räknesätten.

Applikationen skall kunna avslutas genom att ange 'exit', 'quit', eller önskad sträng.
Det måste vara enkelt att skilja på input och output, t.ex:

Kod: Markera allt

In> 100/3*3
Out> 100
Att bara skriva 'bc' räknas inte. :p

Re: Golfande golfare?

Postat: 20 feb 2010, 07:53
av dmz
Känns väldans tråkigt att golfa ensam pojkar. Var det för simpelt måntro? :(
Perl, 37 chars:

Kod: Markera allt

while(<>){die if/q/;print'='.eval,"\n"}
Visst känns det äckligt härligt att koda så fult och strunta i allt vad god sed heter...

Re: Golfande golfare?

Postat: 20 feb 2010, 14:53
av Katt
Tänkte först fuska till det med :

Kod: Markera allt

echo "calc $1"
Men det är inte coreutils :P
Jag får se när jag pillar ihop ett nytt script, har lite annat att göra just nu :)

Re: Golfande golfare?

Postat: 24 feb 2010, 12:53
av Konservburk
dmz skrev:Känns väldans tråkigt att golfa ensam pojkar. Var det för simpelt måntro? :(
Jag har varit upptagen i en vecka, men fortsätter gärna nu.
dmz skrev:Problem 3: Skapa en interaktiv kalkylator i stil med bc som klarar åtminstonde de fyra räknesätten.

Applikationen skall kunna avslutas genom att ange 'exit', 'quit', eller önskad sträng.
Det måste vara enkelt att skilja på input och output, t.ex:

Kod: Markera allt

In> 100/3*3
Out> 100
Att bara skriva 'bc' räknas inte. :p
Jag tänker vara riktigt ful och utnyttja alla kryphål jag kan hitta. >:D
dmz skrev:Visst känns det äckligt härligt att koda så fult och strunta i allt vad god sed heter...
Du ska få se på äckligt härliga grejer...

Försök 1 (25 tecken):

Kod: Markera allt

!#/bin/bash
while read i;do $[i];done
In och ut skiljer sig faktiskt och det går till och med att avsluta genom att ange önskad sträng. Provkörning:

Kod: Markera allt

bash$ while read i;do $[i];done
2-3
bash: -1: command not found
2+3
bash: 5: command not found
önskad sträng
bash: önskad sträng: syntax error in expression (error token is "sträng")
bash$
Input skiljer sig från output genom att input står på en egen rad medan output bakas in i strängen "bash: output: command not found". Allting avslutas med ett mindre vackert felmeddelande när man anger just "önskad sträng" ordagrant.

Men jag vill förstås göra det lite snyggare, om än längre...

Försök 2 (36 tecken):

Kod: Markera allt

#!/bin/bash
while read i;do echo =$[i];done 2>&-
Input är fortfarande ensamt på raden. Output-raden börjar alltid med = precis som facit. Och det går fortfarande att avsluta genom att skriva "önskad sträng" ordagrant, den här gången utan något felmeddelande.

Kod: Markera allt

bash$ while read i;do echo =$[i];done 2>&-
2-3
=-1
2+3
=5
önskad sträng
bash$

Re: Golfande golfare?

Postat: 24 feb 2010, 13:00
av Ulsak
varför ger 3^3 output =0 ?

Re: Golfande golfare?

Postat: 24 feb 2010, 13:12
av dmz
Haha, så snyggt med just 'önskad sträng'. Grattis.

Re: Golfande golfare?

Postat: 24 feb 2010, 13:15
av Konservburk
Ulsak skrev:varför ger 3^3 output =0 ?
Därför att ^ i det här fallet betyder bitvis xor. Vill du räkna ut upphöjt till så du måste skriva 3**3 istället.

Re: Golfande golfare?

Postat: 24 feb 2010, 13:23
av Konservburk
dmz skrev:Haha, så snyggt med just 'önskad sträng'. Grattis.
Jag älskar kryphål ;D

Vi kör ett nytt problem direkt:

Problem 4: Byt ut första tecknet i en fil med det sista tecknet i samma fil.

* Programmet ska startas med program filnamn
* Om filen innehåller 2 eller flera tecken så ska programmet flytta det första tecknet så att det hamnar sist och samtidigt flytta det (tidigare) sista tecknet så att det istället hamnar först.
* Om filen innehåller färre än 2 tecken så ska den inte ändras alls.


Exempelvis så ska en fil som innehåller strängen abcde ändras av programmet så att den i fortsättningen innehåller strängen ebcda istället.

Re: Golfande golfare?

Postat: 24 feb 2010, 14:46
av Konservburk
Jag kom just på hur man kan korta ner förra problemet ytterligare...

Fulversionen (14 tecken):

Kod: Markera allt

#!/bin/bash
read i;$[i];$0
Finversionen (24 tecken):

Kod: Markera allt

#!/bin/bash
read i;echo =$[i];2>&-$0
Båda varianterna måste sparas i en körbar fil och startas med skriptnamn.sh för att det ska fungera (eftersom de anropar sig själva med $0). Tänka sig att den nya finversionen till och med blev kortare än den gamla fulversionen!

Re: Golfande golfare?

Postat: 25 feb 2010, 06:56
av dmz
Konservburk skrev:Jag kom just på hur man kan korta ner förra problemet ytterligare...
... Samma här, 17 chars. :p

Kod: Markera allt

warn eval while<>

Kod: Markera allt

» perl test.pl 
1-2
-1 at test.pl line 21, <> line 1.
(4*4)/2
8 at test.pl line 21, <> line 2.

Re: Golfande golfare?

Postat: 25 feb 2010, 06:58
av dmz
Bara för att vara på det klara, angående problem 4, skall ändringen enbart skrivas till stdout eller till filen ifråga?

Re: Golfande golfare?

Postat: 25 feb 2010, 11:21
av Konservburk
dmz skrev:Bara för att vara på det klara, angående problem 4, skall ändringen enbart skrivas till stdout eller till filen ifråga?
Jag tänkte mig att ändringen ska skrivas till filen... om det även skrivs något till stdout eller inte spelar mindre roll.

Re: Golfande golfare?

Postat: 01 mar 2010, 13:09
av Alleinsora
Här kommer mitt försök på 27 tecken

Kod: Markera allt

#!/bin/bash
a=$(cat $1);echo $a|rev>$1
testkörning:

Kod: Markera allt

$ cat test
sumabib ogre
$ ./upg4.sh test
$ cat test
ergo bibamus