Codegolf: Difference between revisions

From NoName e.V.
Jump to navigation Jump to search
(urs hat noch eine Lösung in Haskell)
No edit summary
 
(34 intermediate revisions by 9 users not shown)
Line 1: Line 1:
=== Challenge #1 ===
Es gelten die [[Codegolf/Generische_Regeln|generischen Regeln]] und STALLMANCATs Ratschläge:
<SdK> gibts wörter, die nach rot13 n anderes existierendes wort ergeben?


Testdatei: http://qu.cx/~mxf/web2.gz == /usr/share/dict/web2
[[image:stallmancatdont128610053697188637.jpg]]
Gepiped durch wc -l sollte 154 rausfallen, da einige Wörter doppelt vorkommen.
Falls Duplikate gefiltert werden, sollten es 132 sein.
Ausgabe in Form von "iraq->vend\n"


==== mxf: Perl ====
=== Challenge #5: RGB2Rv10 ===
Fuer 154 Zeilen:
"Interpretiere einen esoterischen 2D Taschenrechner"
perl -nle'$w{$r=$_=lc}++;y&a-z&n-za-m&;$w{$_}&&print"$r->$_"' /usr/share/dict/web2
50+2 Zeichen<br/><br/>
Fuer 132 Zeilen:
perl -nle'$w{$r=$_=lc}=1;y&a-z&n-za-m&;$w{$_}-->0&&print"$r->$_"' /usr/share/dict/web2
54+2 Zeichen


Das ganze in PHP
[[Codegolf/RGB2Rv10|klick mich]]
  php -r'foreach(file($argv[1],2)as$k){$f[$k=strtolower($k)]=0;if(isset($f[$r=str_rot13($k)]))echo$r."->$k\n";}' /usr/share/dict/web2


154 Zeilen/102 Zeichen
=== Challenge #4: WPA-Passphrase generieren ===
==== urs: Perl ====
"Generiere einen 63 Zeichen-String gleichverteilt aus printable ASCII"
perl -nle'($$_=$_=lc)=~y^a-z^n-za-m^;print"$_->$$_"if$$$_' /usr/share/dict/web2
47+2 Zeichen. Gibt 154 Zeilen output.


==== [[User:PhilFry|PhilFry]]: Ruby ====
[[Codegolf/wpa|klick mich]]
ruby -nle'y||={};$_.downcase!;y[$_]=0;r=$_.tr("a-z","n-za-m");y[r]&&(p $_+"->"+r)' < /usr/share/dict/web2


71 Zeichen
=== Challenge #3: Wochentagberechnung ===
"Wie ist der Wochentag eines bestimmten Datums?"


==== Ch3ka: php ====
[[Codegolf/3|klick mich]]
<?$f=file($argv[1]);while($a[]=strtolower(next($f))){}while($b[]=str_rot13(next($a))){$c=end($b);if(in_array($c,$a))echo$c;}?>
122 Chrs


==== watz: PHP ====
aktiv? NEIN - In der Auswertung
<?require "File.php";foreach(explode("\n",strtolower(File::readAll($argv[1]))) as $f)$i[$f]=str_rot13($f);foreach($i as $a=>$b){if(array_key_exists($b,$i)){unset($i[$a]);echo"$a->$b\n";}}?>
190 Zeichen .. dafür schneller als Ch3ka .. Sortiert doppelte Worte auch raus --> 132 Zeilen+1 (1 Zeile leer weil eine Leerzeile im Dictionary)
Man kann aber noch ein paar Zeichen rauskürzen und evlt. das mit dem File einlesen schöner machen.


Obige Zeile als PHP-Skript speichern und Aufruf mit '''php <php-skript> <dict>'''
Höchstens haltbar bis/hoogstens houdbaar tot: 27.07.2008 00:00 CEST


Alternativ 186 Zeichen mit Aufruf:  
=== Challenge #2: Unlambda ===
php -r 'require "File.php";foreach(explode("\n",strtolower(File::readAll($argv[1]))) as $f)$i[$f]=str_rot13($f);foreach($i as $a=>$b){if(array_key_exists($b,$i)){unset($i[$a]);echo"$a->$b\n";}}' <dict>
Ein [http://www.madore.org/~david/programs/unlambda/ Unlambda] Interpreter. Genauere Zielvorgaben gibt es bald.


==== [[User:Kungi|Kungi]]: Python ====
Na, dieses Loch war dann doch einwenig zu umfangreich?
import sys
e=dict([(a,0)for a in open(sys.argv[1]).read().lower().split()])
for w in e:
  b=w.encode('rot13')
  if b in e:
  print w+" -> "+b


kungi@BeerBook: wc golf.py                                                                                                                 
aktiv? NEIN
      6      19    140 golf.py


==== k-zed: common lisp ====
=== Challenge #1: aka. wie alles anfing ===


(with-open-file (s "/usr/share/dict/web2")
<SdK> gibts wörter, die nach rot13 n anderes existierendes wort ergeben?
  (let ((d (make-hash-table :test #'equal)))
    (loop for l = (read-line s nil) until (not l)
          do (setf (gethash (string-downcase l) d) t))
    (maphash
      (lambda (k v)
        (let ((p (map 'string (lambda (c) (code-char (+ (mod (- (char-code c) 84) 26) 97))) k)))
          (when (gethash p d) (format t "~A -> ~A~%" k p)))) d)))
 
==== CentronX: eicar & ein Inder ====
 
Man lasse einen Inder das ganze in eicar eintippen und dann vergleichen.
 
==== Sack-C-ment: C natürlich ====
#include <stdio.h>
#include <stdlib.h>
#include <search.h>
int main() {
FILE *fd = fopen("/tmp/web2", "r"); char *b = malloc(234937 * 26); int c = 0; ENTRY e,*d; hcreate(234937);
while (fgets(b+(26*c++), 26, fd)) { char *r=strdup(b+(26*(c-1))); e.key=r; while (*(++r) != '\0' && *r != '\n') *r = (*r+13 > 'z' ? *r-13 : *r+13); e.data = b+(26*(c-1)); hsearch(e, ENTER); }
for (c = 0; c < 234937; c++) { e.key = b+(26*c); if (d=hsearch(e, FIND)) printf("print it! %s / %s\n", d->data, d->key); }
}
Compile / Setup:
sort /usr/share/dict/web2 /tmp/web2
gcc -o golf golf.c && ./golf
Exakt 500 Zeichen


==== urs: Haskell ====
die Antworten sind [[Codegolf/1|hier]]
(Nein, eigentlich nicht auf länge optimiert. Aber wenn wir schon seltsame Programmiersprachen nehmen...)


import qualified Data.Set as Set
aktiv? NEIN
import Data.Char
rot13 = map (\x->chr(ord 'a'+((ord x-ord 'a'+13)`mod`26)))
foo [] w = ""
foo (x:xs) w | x `Set.member` w = x ++ "->" ++ r ++ "\n" ++ foo xs w
              | otherwise        = foo xs (Set.insert r w)
              where r = rot13 x
main = do
    cts <- getContents
    putStr $ foo (map (map toLower) $ words cts) Set.empty
351 Zeichen. 154 Zeilen Ausgabe.


[[Category:Projekte]]
[[Category:Projekte]]

Latest revision as of 21:09, 3 October 2013

Es gelten die generischen Regeln und STALLMANCATs Ratschläge:

Stallmancatdont128610053697188637.jpg

Challenge #5: RGB2Rv10

"Interpretiere einen esoterischen 2D Taschenrechner"

klick mich

Challenge #4: WPA-Passphrase generieren

"Generiere einen 63 Zeichen-String gleichverteilt aus printable ASCII"

klick mich

Challenge #3: Wochentagberechnung

"Wie ist der Wochentag eines bestimmten Datums?"

klick mich

aktiv? NEIN - In der Auswertung

Höchstens haltbar bis/hoogstens houdbaar tot: 27.07.2008 00:00 CEST

Challenge #2: Unlambda

Ein Unlambda Interpreter. Genauere Zielvorgaben gibt es bald.

Na, dieses Loch war dann doch einwenig zu umfangreich?

aktiv? NEIN

Challenge #1: aka. wie alles anfing

<SdK> gibts wörter, die nach rot13 n anderes existierendes wort ergeben?

die Antworten sind hier

aktiv? NEIN