Golfande golfare?

Här diskuteras programmering och utveckling
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Golfande golfare?

Inlägg av dmz »

Har vi några golfare bland medlemmarna här måntro? Vilket språk begagnar ni er av? Vore intressant med en golftävling tycker jag. Givetvis skall även tekniker diskuteras; bygger ni först upp ett fungerande program för att sedan, när det gör vad det skall, krympa det? Alla vägar mot framgång är bra, utom de dåliga.

För de icke ännu insatta så går codegolf ut på att lösa ett givet problem med så få tecken som möjligt. Normalt så behöver man icke begagna sig av ekvivalenter till 'use strict;', 'use warnings' i det språk man föredrar, ust på grund av att det innefattar en himla massa extra tecken - det kan dock vara en fördel under applikationens uppbyggnad.
Mer läsning och en del problem här: http://codegolf.com/

mvh / perl -pe '$_=`perldoc -qjaph`=>s`.+"(.+)".+`$1\n`s=>s`\b([^a])`\u$1`g=>print;'
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
Katt
AVREGISTRERAD
Inlägg: 625
Blev medlem: 19 nov 2009, 11:04
OS: Arch Linux
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Bohuslän
Kontakt:

Re: Golfande golfare?

Inlägg av Katt »

Såg du postade en liknande tråd på arclinux.org. Hade faktiskt vart riktigt skoj att köra en liten tråd om det här med (självklart med annorlunda problem), framförallt om vi också tillåter bash.
Väldigt lärorikt om inte annat. 8)
Det är inte lätt när det är svårt!
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Golfande golfare?

Inlägg av dmz »

Då får du i uppdrag att skapa det första problemet. :)
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
Katt
AVREGISTRERAD
Inlägg: 625
Blev medlem: 19 nov 2009, 11:04
OS: Arch Linux
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Bohuslän
Kontakt:

Re: Golfande golfare?

Inlägg av Katt »

Antagligen ett simpelt problem, men vi måste börja någonstanns.

Problem 1: Skriv ett program som tar ett valfritt tal som argument och beräknar fakulteten av detta.

* Fakulteten av 5 skrivs 5! och beräknas 5x4x3x2x1=120
* koden skall kunna köras som program "argument" där argument är en valfri siffra.
* koden skall enbart ge summan av fakulteten, dvs 120 vid 5!
* Vinnaren får komma på nästa problem
Det är inte lätt när det är svårt!
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Golfande golfare?

Inlägg av dmz »

Kod: Markera allt

sub f{return$_--*&f if$_>1||return 1}print f($_=$ARGV[0]);

Kod: Markera allt

perl -pe '$c="sub f{return$_--*&f if$_>1||return 1}print f($_=$ARGV[0]);";print length($c);'
47

Beroende på skal så kan en "\n" vara rätt fin (dock inte nödvändig!) också - jag kör dock zsh. :p
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Golfande golfare?

Inlägg av Konservburk »

dmz skrev:

Kod: Markera allt

sub f{return$_--*&f if$_>1||return 1}print f($_=$ARGV[0]);
Hur tänkte du att man ska köra det där? Det går ju att stoppa in det i en fil enligt:

Kod: Markera allt

#!/usr/bin/perl
sub f{return$_--*&f if$_>1||return 1}print f($_=$ARGV[0]);
...och sedan köra ./filen.pl tal för att få det på den eftersträvade formen "program argument". Eller tänkte du dig något annat sätt?
dmz skrev:

Kod: Markera allt

perl -pe '$c="sub f{return$_--*&f if$_>1||return 1}print f($_=$ARGV[0]);";print length($c);'
Kan du förklara (för oss som inte är speciellt bevandrade i perl) var någonstans man ska stoppa in argumentet?
dmz skrev:47
Ska det där talet föreställa antalet tecken i kodstycket? Exakt vad bortser du isf ifrån?

...

Eftersom jag inte är något vidare på perl så gör jag mitt försök i ett annat språk...

Kod: Markera allt

-()(dc<<<$1'[d1-l-x*]s<[d1<<]ds-xp');- 52
Körs direkt ifrån skalet (bash eller zsh) och ska räkna ut fakulteten av 52 och dessutom visa precis alla siffror i resultatet oavsett hur många det än är.
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Golfande golfare?

Inlägg av dmz »

Konservburk skrev: Hur tänkte du att man ska köra det där? Det går ju att stoppa in det i en fil enligt:

Kod: Markera allt

#!/usr/bin/perl
sub f{return$_--*&f if$_>1||return 1}print f($_=$ARGV[0]);
...och sedan köra ./filen.pl tal för att få det på den eftersträvade formen "program argument". Eller tänkte du dig något annat sätt?
Precis så. Raden med shebang utelämnas dock, och skriptet invokas istället med perl direkt, perl fil 5
Konservburk skrev: Kan du förklara (för oss som inte är speciellt bevandrade i perl) var någonstans man ska stoppa in argumentet?
$_ (http://www.wellho.net/mouth/969_Perl-and-.html) får värdet av $ARGV[0], dvs det första argument som ges, t.ex 5.
Konservburk skrev: Ska det där talet föreställa antalet tecken i kodstycket? Exakt vad bortser du isf ifrån?
Ja, vad menar du med bortser från?
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
jens.tinfors
Inlägg: 49
Blev medlem: 18 dec 2009, 17:09
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm
Kontakt:

Re: Golfande golfare?

Inlägg av jens.tinfors »

En version i Ruby.

Kod: Markera allt

#!/usr/bin/ruby
s=1;(1..ARGV[0].to_i).each {|x|s=x*s};puts s
Användarvisningsbild
Katt
AVREGISTRERAD
Inlägg: 625
Blev medlem: 19 nov 2009, 11:04
OS: Arch Linux
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Bohuslän
Kontakt:

Re: Golfande golfare?

Inlägg av Katt »

I bash, 51 tecken inklusive mellanrum, 45 utan:

Kod: Markera allt

e=1;for i in $(seq $1);do let e=$i*$e;done;echo $e
Det är inte lätt när det är svårt!
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Golfande golfare?

Inlägg av Konservburk »

dmz skrev:
Konservburk skrev: Kan du förklara (för oss som inte är speciellt bevandrade i perl) var någonstans man ska stoppa in argumentet?
$_ (http://www.wellho.net/mouth/969_Perl-and-.html) får värdet av $ARGV[0], dvs det första argument som ges, t.ex 5.
Det är jag med på. Vad jag däremot inte är med på är var man anger det första argument (var ska jag skriva t.ex. 5 någonstans?) om man kör koden direkt med perl -pe osv, dvs som du skrev i din andra kodruta.
dmz skrev:
Konservburk skrev: Ska det där talet föreställa antalet tecken i kodstycket? Exakt vad bortser du isf ifrån?
Ja, vad menar du med bortser från?
När jag klistrade in din kod (från din första kodruta) i en fil så blev den 58 tecken stor (innan jag la till shebangen). Hur får du det då till 47? Jag är bara lite nyfiken på hur man ska räkna.
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Golfande golfare?

Inlägg av dmz »

Konservburk skrev: Det är jag med på. Vad jag däremot inte är med på är var man anger det första argument (var ska jag skriva t.ex. 5 någonstans?) om man kör koden direkt med perl -pe osv, dvs som du skrev i din andra kodruta.
Nu är jag med; det var en bra fråga faktiskt, hm...
Konservburk skrev: När jag klistrade in din kod (från din första kodruta) i en fil så blev den 58 tecken stor (innan jag la till shebangen). Hur får du det då till 47? Jag är bara lite nyfiken på hur man ska räkna.
Något gick uppenbarligen snett, givetvis är det 58 tecken, ajaj.
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Golfande golfare?

Inlägg av Konservburk »

Katt skrev:

Kod: Markera allt

e=1;for i in $(seq $1);do let e=$i*$e;done;echo $e
Det där med seq gav mig en ny ide...

Kod: Markera allt

#!/bin/sh
seq -s\* $1|bc
14 tecken om man bortser från shebangen 8)
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Golfande golfare?

Inlägg av dmz »

Skall vi utse Konservburk till vinnare efter dessa tre bidrag? Detta verkar inte vara någon tråd som drar till sig folk och jag är sugen på en ny uppgift. :p
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Golfande golfare?

Inlägg av Konservburk »

Problem 2: Skapa ett program som skriver ut ett slumpmässigt argument av alla de argument som skickas med.

* program A B C ska slumpmässigt skriva ut antingen A eller B eller C
* program A ska alltid skriva ut A
* program (utan argument) ska inte skriva ut någonting alls
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Golfande golfare?

Inlägg av dmz »

Kod: Markera allt

use List::Util qw(shuffle);print$c=shuffle(@ARGV)
Vinner nog inga priser med det inte...
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
Katt
AVREGISTRERAD
Inlägg: 625
Blev medlem: 19 nov 2009, 11:04
OS: Arch Linux
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Bohuslän
Kontakt:

Re: Golfande golfare?

Inlägg av Katt »

Konservburk skrev:
Katt skrev:

Kod: Markera allt

e=1;for i in $(seq $1);do let e=$i*$e;done;echo $e
Det där med seq gav mig en ny ide...

Kod: Markera allt

#!/bin/sh
seq -s\* $1|bc
14 tecken om man bortser från shebangen 8)
Du är en ond kodare ;) den där bc måste jag spana in.
Det är inte lätt när det är svårt!
Alleinsora
Inlägg: 378
Blev medlem: 24 maj 2007, 01:53
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Kalmar/Luleå
Kontakt:

Re: Golfande golfare?

Inlägg av Alleinsora »

Får till en med 41 tecken utan shebang.

Kod: Markera allt

A=("$@");b=$RANDOM%${#A[@]};echo ${A[$b]}
Hur jag än gör så slutar det alltid med E17 på netbooken....
Användarvisningsbild
Katt
AVREGISTRERAD
Inlägg: 625
Blev medlem: 19 nov 2009, 11:04
OS: Arch Linux
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Bohuslän
Kontakt:

Re: Golfande golfare?

Inlägg av Katt »

Redigerade din kod något och kollade efter argument så att den inte ger någon output om inga ges. 55tecken med mellanslag, 49 utan.

Kod: Markera allt

if [ -n "$1" ];then A=("$@");echo ${A["$RANDOM%$#"]};fi
Det är inte lätt när det är svårt!
Användarvisningsbild
dmz
Inlägg: 3292
Blev medlem: 29 jul 2008, 19:42
OS: Arch Linux

Re: Golfande golfare?

Inlägg av dmz »

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
ǁ A: Because it obfuscates the reading.
ǁ Q: Why is top posting so bad?
Användarvisningsbild
Katt
AVREGISTRERAD
Inlägg: 625
Blev medlem: 19 nov 2009, 11:04
OS: Arch Linux
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Bohuslän
Kontakt:

Re: Golfande golfare?

Inlägg av Katt »

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
Det ligger en poäng i detta. Vi skulle kunna räkna varje extra program som +10 utöver det vanliga tecknena?
O andra sidan så är det trevligt att se vad som kan ådstakommas även med externa bibliotek och applikationer. Fast det blir surt om det redan finns program som fyller funktionen vi söker.
Det är inte lätt när det är svårt!
Skriv svar

Återgå till "Programmering och webbdesign"