RGB2Rv6/Codegolf: Difference between revisions

From NoName e.V.
Jump to navigation Jump to search
 
(12 intermediate revisions by 4 users not shown)
Line 1: Line 1:
= Codegolf auf der RGB2Rv6 =
= Codegolf auf der RGB2Rv6 =


Die Aufgabe findet sich unter https://www.noname-ev.de/w/File:Rgb2rv6-codegolf.pdf
Die Aufgabe findet sich unter https://www.noname-ev.de/w/File:Rgb2rv6-codegolf.pdf
= Sieger =
* Platz 1: urs in Perl mit 146 Bytes
* Platz 2: blubberdiblub in unerweitertem C64-BASIC mit 176 Glyphen (und 155 Bytes)
* Platz 3: martl in Java mit 350 Bytes
Originellste Lösung: blubberdiblub in C64-BASIC
= Leider nicht gewonnen =
* Moredread in Python (249 Zeichen)


= nichtbestätigte Scores =
= nichtbestätigte Scores =
* (wird nicht bewertet da Jury) sECuRE in C mit 218 Glyphs (und 218 Bytes)
* (wird nicht bewertet da Jury) sECuRE in C mit 218 Glyphs (und 218 Bytes)
* blubberdiblub in unerweitertem C64-BASIC mit 216 Glyphs (und 155 Bytes)
 
= Lösungen =
 
== urs (Perl) ==
$c{" "}=2;$#[19]=$#[23]=1;map{map{$c{$_}=(abs($.-3)+1+$#[$.+$?*4])*(5,4,3,(2)x4,3,4,5)[$?++]}
split" ",<>;`-`}1..4;$/=\1;map{$?+=$c{$_}}<>;print$?
 
== blubberdiblub (c64-basic) ==
[[Image:RGB2R-codegolf-Commodore.jpg|600px]]
 
== martl (Java) ==
import java.util.*;class M{public static void main(String[]z){String a="",t="";Scanner
S=new Scanner(System.in);while(S.hasNext()){a+=t;t=S.nextLine();}int s=0;for(char
c:t.toCharArray()){s+=2;s+=c==' '?0:new int[]{13,10,7,4,4,4,4,7,10,13,8,6,4,2,2,2,2,4,6,8,3,2,1,
0,2,2,0,1,2,8,6,4,2,2,2,2}[a.replaceAll(" ","").indexOf(c)];}System.out.println(s);}}
 
 
== Moredread (Python) ==
import sys
i,u,O,t,v,x=0,sys.stdin.read().split('\n'),lambda O:O[::-1]+O,[4,2,3,4,5],[4,4,6,8,10],[6,6,8,12,15]
p=O(x),O(v),O(t),O(v)
for c in u[4]:
  if c is " ":
  i+=2
  continue
  for g in 0,1,2,3:
  L=u[g].find(c)/2
  if L!=-1:i+=p[g][L]
print i
 
== sECuRE (C) ==
main(){char i[4096];read(0,i,4096);char*p="pcmajagagagagajamapakaiagaeaeaeaeagaiakafaeadacaeaeacadaeafakaiagaeaeaeaeagaiaka",
*n=strchr(i+58,10),*c,*s=0;*n++=0;for(c=n;*c!=0;c++)s+=p[strchr(i,*c)-i]-97;printf("%d",s);}
 
== Zählscript (phil_fry) ==
require "open3"
include Open3
require 'optparse'
options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} [options]"
  opts.on("-f", "--file FILE", "file with test lines") do |v|
    $fn = v
  end
  opts.on("-s", "--solution PROGRAM", "the program") do |v|
    $exec = v
  end
end.parse!
module Golf
  def self.check(program, keymap, text)
    puts "testing with keymap"
    puts keymap
    puts "test text: >>#{text}<<"
    expected = get_val("./reference", keymap, text)
    puts "reference C: #{expected}"
    expected = get_val("../moredread/moredread2.py", keymap, text)
    puts "moredread: #{expected}"
    expected = get_val("../martl/run.sh", keymap, text)
    puts "martl: #{expected}"
    solution = get_val(program, keymap, text)
    if (solution.to_i == expected)
      puts 'success'
      true
    else
      "fail, got #{solution}"
      false
    end
  end
  def self.get_val(program, keymap, text)
    solution = nil
    puts "executing #{program}"
    `echo "#{keymap}\n#{text}" > /tmp/tmp.keys`
    solution = `cat /tmp/tmp.keys | #{program}`
    puts "gots #{solution}"
    return solution.to_i
  end
  class Keymap
    QWERTY = Keymap.new
    def initialize(keys = "1234567890qwertyuiopasdfghjklzxcvbnm")
      #@keys=((?a..?z).to_a + (?0..?9).to_a).map{|c| c.chr}
      @keys = []
      keys.each_char {|c| @keys << c}
    end
    def shuffle!
      @keys.shuffle!
      self
    end
    def to_s
      [@keys[0..9].join(' '), @keys[10..19].join(' '), @keys[20..28].join(' '), @keys[29..36].join(' ')].join("\n")
    end
  end
end
$success = true
lines = IO.readlines($fn).each do |line|
  next if line.chomp! == ""
  res = Golf.check($exec, Golf::Keymap.new, line)
  $success = $success && res
  puts '-' * 70
  3.times do
    res = Golf.check($exec, Golf::Keymap.new.shuffle!, line)
    $success = $success && res
    puts '-' * 70
  end
end
if $success
  puts "all tests succeeded"
else
  puts "some or all tests failed"
  exit 1
end
 
= Post Mortem =
== mxf (Perl/104) ==
@_{$",<>=~/\S/g}=map$_*(abs($.-2)+1),1,5,4,3,2,2..2?(4,4):(2,2),2..5for+1..4;$\+=$_{$_}for<>=~/./g;print
96:
for$=(3,2,1,2){@_{$",<>=~/\S/g}=map$_*$=,1,5,4,3,2,(2..2?4:2)x2,2..5}$\+=$_{$_}for<>=~/./g;print

Latest revision as of 17:23, 3 November 2009

Codegolf auf der RGB2Rv6

Die Aufgabe findet sich unter https://www.noname-ev.de/w/File:Rgb2rv6-codegolf.pdf

Sieger

  • Platz 1: urs in Perl mit 146 Bytes
  • Platz 2: blubberdiblub in unerweitertem C64-BASIC mit 176 Glyphen (und 155 Bytes)
  • Platz 3: martl in Java mit 350 Bytes

Originellste Lösung: blubberdiblub in C64-BASIC

Leider nicht gewonnen

  • Moredread in Python (249 Zeichen)

nichtbestätigte Scores

  • (wird nicht bewertet da Jury) sECuRE in C mit 218 Glyphs (und 218 Bytes)

Lösungen

urs (Perl)

$c{" "}=2;$#[19]=$#[23]=1;map{map{$c{$_}=(abs($.-3)+1+$#[$.+$?*4])*(5,4,3,(2)x4,3,4,5)[$?++]}
split" ",<>;`-`}1..4;$/=\1;map{$?+=$c{$_}}<>;print$?

blubberdiblub (c64-basic)

RGB2R-codegolf-Commodore.jpg

martl (Java)

import java.util.*;class M{public static void main(String[]z){String a="",t="";Scanner 
S=new Scanner(System.in);while(S.hasNext()){a+=t;t=S.nextLine();}int s=0;for(char 
c:t.toCharArray()){s+=2;s+=c==' '?0:new int[]{13,10,7,4,4,4,4,7,10,13,8,6,4,2,2,2,2,4,6,8,3,2,1,
0,2,2,0,1,2,8,6,4,2,2,2,2}[a.replaceAll(" ","").indexOf(c)];}System.out.println(s);}}


Moredread (Python)

import sys
i,u,O,t,v,x=0,sys.stdin.read().split('\n'),lambda O:O[::-1]+O,[4,2,3,4,5],[4,4,6,8,10],[6,6,8,12,15]
p=O(x),O(v),O(t),O(v)
for c in u[4]:
 if c is " ":
  i+=2
  continue
 for g in 0,1,2,3:
  L=u[g].find(c)/2
  if L!=-1:i+=p[g][L]
print i

sECuRE (C)

main(){char i[4096];read(0,i,4096);char*p="pcmajagagagagajamapakaiagaeaeaeaeagaiakafaeadacaeaeacadaeafakaiagaeaeaeaeagaiaka",
*n=strchr(i+58,10),*c,*s=0;*n++=0;for(c=n;*c!=0;c++)s+=p[strchr(i,*c)-i]-97;printf("%d",s);}

Zählscript (phil_fry)

require "open3"
include Open3
require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} [options]"

  opts.on("-f", "--file FILE", "file with test lines") do |v|
    $fn = v
  end

  opts.on("-s", "--solution PROGRAM", "the program") do |v|
    $exec = v
  end
end.parse!

module Golf
  def self.check(program, keymap, text)
    puts "testing with keymap"
    puts keymap
    puts "test text: >>#{text}<<"
    expected = get_val("./reference", keymap, text)
    puts "reference C: #{expected}"
    expected = get_val("../moredread/moredread2.py", keymap, text)
    puts "moredread: #{expected}"

    expected = get_val("../martl/run.sh", keymap, text)
    puts "martl: #{expected}"


    solution = get_val(program, keymap, text)
    if (solution.to_i == expected)
      puts 'success'
      true
    else
      "fail, got #{solution}"
      false
    end
  end

  def self.get_val(program, keymap, text)
    solution = nil
    puts "executing #{program}"
    `echo "#{keymap}\n#{text}" > /tmp/tmp.keys`
    solution = `cat /tmp/tmp.keys | #{program}`
    puts "gots #{solution}"
    return solution.to_i
  end

  class Keymap
    QWERTY = Keymap.new

    def initialize(keys = "1234567890qwertyuiopasdfghjklzxcvbnm")
      #@keys=((?a..?z).to_a + (?0..?9).to_a).map{|c| c.chr}
      @keys = []
      keys.each_char {|c| @keys << c}
    end

    def shuffle!
      @keys.shuffle!
      self
    end

    def to_s
      [@keys[0..9].join(' '), @keys[10..19].join(' '), @keys[20..28].join(' '), @keys[29..36].join(' ')].join("\n")
    end
  end
end

$success = true
lines = IO.readlines($fn).each do |line|
  next if line.chomp! == ""
  res = Golf.check($exec, Golf::Keymap.new, line)
  $success = $success && res
  puts '-' * 70
  3.times do
    res = Golf.check($exec, Golf::Keymap.new.shuffle!, line)
    $success = $success && res
    puts '-' * 70
  end
end

if $success
  puts "all tests succeeded"
else
  puts "some or all tests failed"
  exit 1
end

Post Mortem

mxf (Perl/104)

@_{$",<>=~/\S/g}=map$_*(abs($.-2)+1),1,5,4,3,2,2..2?(4,4):(2,2),2..5for+1..4;$\+=$_{$_}for<>=~/./g;print

96:

for$=(3,2,1,2){@_{$",<>=~/\S/g}=map$_*$=,1,5,4,3,2,(2..2?4:2)x2,2..5}$\+=$_{$_}for<>=~/./g;print