Défi 9 trous [fermé]

65

Le défi des 9 trous

  • 9 défis de golf de niveau de difficulté variable.
  • Pénalités pour l'utilisation du même langage plus d'une fois.
  • La question sera mise à jour avec les pairs, les champions de trous et les gagnants des trophées.

    Cela vient d’une compétition que j’ai avec des amis, ce n’est pas le format habituel, mais j’espère que certains d’entre vous apprécieront sa tournure différente. Défis, règles et trophées ci-dessous.

des trous

  1. Voie verte (24)

    f(c:string, n:integer)
    Imprime une ligne contenant des ninstances de c.

  2. Quelque part dans le rugueux (73)

    f(t:string, s:string, n:integer) -> i
    iest l'index de l' nthinstance de sdans t.

  3. Curry pour le dîner (6235)

    f(x:function, y: function) -> ggest une fonction qui appellera y, nfois; où nest la valeur de retour dex

  4. Spew (92)

    f(p:string) Écrit dans pet remplit un rectangle de taille aléatoire (ascii) de taille aléatoire.

  5. Chasse au trésor (75)

    f(p:string, c:char) -> (x, y) Lit le fichier pcontenant une grille de symboles et renvoie les coordonnées xet yde la première instance de ce symbole dans la grille, en supposant qu'il existe.

  6. Pont sur la rivière Kwai (179)

    f(l:list[int]) Imprime le diagramme des ponts de différence pour l. Par exemple pour[1,7,3,17,1]

     /+6\ /-4\ /+14\  /-16\
    1    7    3     17     1
    

    Assurez-vous que les espaces sont créés en fonction de la taille du nombre ci-dessus. Pour un numéro à 3 chiffres, vous aurez besoin de 4 espaces entre les chiffres de la ligne ci-dessous.

    Catch: Quelque part, votre code doit épeler un pantalon (doit avoir au moins 1 délimiteur non alphanumérique. Par exemple, tr(ou,se)(rs)

  7. Le temps passe vite quand vous jouez au golf (1157)

    f(p:string) -> [h, m] Lit le fichier pcontenant une représentation ASCII d'une horloge analogique, où l'aiguille des heures est représentée par une ligne et les minutes par deux. Produisez une liste contenant deux éléments: les heures et les minutes affichées sur l'horloge. Si une seule main est visible, supposez que les deux pointent vers cette position.

    Voici toutes les combinaisons possibles pour une main.

    \ | /
     \|/
    --o--
     /|\
    / | \
    

    Ces positions sont respectivement (12, 1, 3, 5, 6, 7, 9, 11). Supposons que les autres personnages du cadran sont des espaces.

  8. Charpente! ()

    f(p:string) -> b:boolean Où p est le chemin d'accès à un fichier contenant une construction ascii. Les blocs avec un espace blanc en dessous tomberont. (Sauf les barres obliques, qui restent en place s'il y a un bloc stable dans la direction opposée à la façon dont ils font face). Si le bâtiment est intégralement structurel, renvoyer vrai, sinon renvoyer faux. Tous les blocs non blancs sont comptés comme étant solides et autres que des barres obliques, ils tombent tous.

    Sécurité structurelle

    ____
    |/\|
    |  |
    

    Pas sécurisé

    |__
      | 
      |
    

    Version sécurisée

    |__
    \\| 
      |
    
  9. Slacker News (218)

    f(s:string, r:string, p:string) Obtient les titres des 20 meilleures histoires sur Hacker News et modifie toutes les instances de sen r, puis écrit les nouveaux titres dans un fichier html à poù chaque titre est contenu dans un élément h1.

    Le fichier en sortie devrait quelque chose comme ça

    <h1>Some title</h1></h1>Some other title</h1>...etc

    Prise :

    • Vous ne pouvez pas utiliser l'API HN.
    • Vous ne pouvez pas utiliser Regex.
    • Vous ne pouvez utiliser d’accolades angulaires nulle part dans votre code.

Notation

  • Le nombre de caractères est la longueur de la fonction qui sera compilée et exécutée correctement. Cependant, vous devez toujours soumettre le code complet, y compris les importations.
  • + 10% pour chaque langue répétée dans votre soumission. (Par exemple, si vous utilisez Ruby pour 3 solutions, votre score final sera multiplié par 1,2). Différentes versions du même nombre de langues comptent toujours comme la même langue.
  • Le par sera le score moyen pour chaque trou.
  • Soumettez vos solutions en une réponse.
  • Votre score global est le nombre de vos personnages + votre pénalité linguistique, puis arrondissez-le.

Trophées

  • Gold Jacket - ( @Sprigyig - 1290) Score global le plus bas
  • Shooter - ( @Sprigyig - 9) La plupart des langues utilisées
  • Bunker - Plus que le score normal de tous les trous
  • Serpents dans un avion - ( @AsksAnyway - 1727) Soumission de caractères python la plus élevée dans une solution unique
  • Good Parts - ( @AsksAnyway - 255) Nombre de caractères JS le plus élevé dans une solution unique
  • Shakey Steve - La solution la plus courte utilisant des interfaces
  • Vous n'êtes pas de là - bas - La solution linguistique la plus courte et unique possède la page wikipedia la plus courte.
  • Happy Gilmoore - ( @AsksAnyway - 31) La solution la plus courte qui comporte le mot "alligator" dans le code.
  • Magie des nains magiques - Les extensions par défaut de vos 9 fichiers sources de soumission sont une anagramme parfaite d'un mot du dictionnaire Oxford.

Vous n'êtes admissible à un trophée que lorsque vous avez terminé les 9 trous.


Les soumissions

  1. @Sprigyig 1290
  2. @ Firefly 1320
  3. @grc 1395
  4. @Trevor M 1465
  5. @C Gearhart 1654
  6. @Guy Sirton 1719
  7. @AsksAnyway 4651
Dan Prince
la source
2
@anorton <&>
Dan Prince
1
Une horloge analogique a 12 positions pour chaque main, mais vous ne nous en donnez que 8. Comment ça marche?
Kevin - Réintégrer Monica
1
@DanPrince Voulez-vous que le /poste fasse référence à 1 heure ou à 2 heures? (et pareillement pour le reste des diagonales)
apnorton
1
@anorton 1/5, 5/25, 7/35, 11/55
Dan Prince
2
Les différentes versions ou saveurs d'une langue seront-elles considérées comme "différentes" aux fins de la notation? par exemple, Python 2 vs Python 3? Visual Basic vs VB.Net vs VBScript? Qu'en est-il des supersets ou des quasi-supersets tels que C vs C ++? Désolé pour le pédantisme, mais c'est du code-golf! :-)
Darren Stone

Réponses:

11

Score: 4651

2907 + pénalité de 60%

1. GolfScript - 14 caractères

{*}:a;lligator

Utilisation: c n apar exemple "test" 3 a->testtesttest

étoile Happy Gilmoore

2. Python - 72 caractères

def f(t,s,n,p=-1):
 while n:p=t.find(s,p+1);n-=1 if p+1 else n
 return p

3. Javascript - 255 caractères

/*
Curry for Dinner

f(x:function, y: function) -> g Where g is a function that will call y, n times; where n is the return value of x
*/
function f(x, y) {
    var g = function() {
        var n = x();
        for (var i = 0; i < n; ++i) {
            y();
        }
    };
    return g;
}

étoileBunker étoileBonnes Pièces

4. Python - 132 caractères

from random import randrange as r
def f(p):l=range(r(9));open(p,'w').writelines([''.join([chr(r(94)+33)for _ in l])+'\n'for _ in l])

5. Python - 89 caractères

def f(p,c):
 for y,d in enumerate(open(p).readlines()):
  x=d.find(c)
  if x+1:return x,y

6. Python - 189 caractères

def f(l):
 for i in 0,1:
  for n,u in enumerate(l):
   o=l[n+1] if len(l)>n+1 else id 
   if i:print u,' '*4,
   elif o!=id:print' /'+('+' if o-u>0 else '')+str(o-u)+'sers'*0+'\\ ',
  print

7. Python - 1727 caractères

def f(p):
    lines = open(p).read().split('\n')

    # preprocess lines to ensure correct format
    if len(lines) < 5:
        for i, line in enumerate(list(lines)):
            if 'o' in line:
                if i == 0:
                    lines.insert(0, ' ' * 5)
                    lines.insert(0, ' ' * 5)
                elif i == 1:
                    lines.insert(0, ' ' * 5)
        while len(lines) < 5:
            lines.append(' ' * 5)

    # find characters that can only be the hour hand
    for i, line in enumerate(lines):
        if i == 0:
            if '\\' in line:
               hour = 11
            elif '|' in line:
                hour = 12
            elif '/' in line:
                hour = 1
        elif i == 2:
            if '--o' in line:
                hour = 9
            elif 'o--' in line:
                hour = 3
        elif i == 4:
            if '/' in line:
               hour = 7
            elif '|' in line:
                hour = 6
            elif '\\' in line:
                hour = 5

    # find characters that might represent the minute hand
    possible_minutes = []
    for i, line in enumerate(lines):
        if i == 1:
            if '\\' in line:
                possible_minutes.append(55)
            if '|' in line:
                possible_minutes.append(0)
            if '/' in line:
                possible_minutes.append(5)
        elif i == 2:
            if '-o' in line:
                possible_minutes.append(45)
            if 'o-' in line:
                possible_minutes.append(15)
        elif i == 3:
            if '/' in line:
                possible_minutes.append(35)
            if '|' in line:
                possible_minutes.append(30)
            if '\\' in line:
                possible_minutes.append(25)

    HOUR_MINUTES = {
        12: 0,
        1: 5,
        3: 15,
        5: 25,
        6: 30,
        7: 35,
        9: 45,
        11: 55,
    }

    # remove minute hand that is actually hour hand
    if len(possible_minutes) > 1:
        not_minute = HOUR_MINUTES[hour]
        if not_minute in possible_minutes:
            possible_minutes.remove(not_minute)

    assert(len(possible_minutes) == 1)
    minute = possible_minutes[0]

    h, m = hour, minute          
    return [h, m]

étoile Serpents dans un avion

8. Python - 226 caractères

def f(p):
 e=set;q,t=e(),True
 for l in open(p).readlines():
  r,b,q=e(q),e(),e()
  for i,c in enumerate(l):
   if c.strip():b.add(i);q.add(i-1 if c == '/' else i+1 if c == '\\' else i)
  if not r.issubset(b):t=False
 return t

9. Python - 203 caractères

import urllib
def f(s,r,p):f,l,g=open(p,'w'),'\74','\76';[f.write(l+'h1'+g+t.replace(s,r)+'h1'+g)for i,t in enumerate(urllib.urlopen('http://x.co/3WYln').read().split('title'+g))if(i in range(2,42))&i%2]
Demande de toute façon
la source
Qu'est-ce que le commentaire "#alligator" a à voir avec le code # 1? Il semble être inclus dans le compte de mots pour une raison quelconque.
Dhara
1
@Dhara C'est pour le trophée Happy Gilmoore: "La solution la plus courte qui comporte le mot" alligator "dans le code."
PhiNotPi
# 9 utilise des accolades angulaires ( i<i<42), ou sont-elles autorisées tant que vous ne les utilisez que comme opérateurs?
Christopher Creutzig
@ChristopherCreutzig Corrigé merci.
DemandeAnyway
7

Score: 1320

Il me reste beaucoup à faire pour améliorer ce score ... Ah bon, au moins, j'ai évité les pénalités à répétition. :-)

1. Python (21 caractères)

def f(c,n):print(c*n)

La solution "évidente".

2. ECMAScript 6 (47 caractères)

f=(t,s,n)=>t.split(s).slice(0,n).join(s).length

Trouve l'index de manière peu conventionnelle en comptant la longueur de la sous-chaîne qui le précède.

3. J (12 caractères)

f=:2 :'v^:u'

La conjonction ^:intégrée élève une fonction à une puissance (c'est-à-dire qu'elle répète une fonction un nombre de fois donné). C'est f^:3 y = f (f (f y))). Cependant, il est surchargé d’accepter des fonctions plutôt que des entiers, auquel cas il exécute la fonction sur l’entrée pour obtenir le nombre de répétitions. Malheureusement, nous devons retourner les opérandes pour la tâche, sinon nous aurions la réponse simple f=:^:.

4. C (95 caractères)

#include <stdio.h>
#include <stdlib.h>

f(char*p){FILE*f=fopen(p,"a");for(int n=rand(),y=n*n;y--;y%n||putc(10,f))putc(rand()%94+32,f);}

Cette tâche laisse un peu de place à l'interprétation et aux abus: est-il acceptable de simplement sortir un caractère ASCII imprimable au hasard et de dire que c'est un rectangle dimensionné de manière aléatoire avec les dimensions de l'ensemble {1}? Probablement pas. Quoi qu'il en soit, je suis allé en clair, rand()mais en réalité, vous voulez probablement ajouter %9quelque chose si vous voulez le tester. Sur ma machine Linux, je n'ai pas eu besoin de vider le fichier pour qu'il soit écrit (je suppose qu'il vole automatiquement à la sortie du programme), mais je suis sûr que vous devez le vider pour qu'il soit conforme aux normes, alors sentez-vous libre d'ajouter fflush(f);au compte ici.

5. Haskell (100 caractères)

import Control.Arrow
import Data.List
import Data.Tuple
import Control.Applicative

h p c=head.filter(p c.snd).zip[1..]
g c=swap.(id***fst.h(==)c).h elem c.lines
f p c=g c<$>readFile p

J'aime le motif répété entre la recherche de la ligne et de la colonne (résumé via h).

6. Lua (261 caractères)

function f(s,m,y,...)if s and m then for i,v in pairs(m)do
io.write(v,(" "):rep(#tostring(s[i])))end print()elseif s then
r=unpack f(s,{"",f(trouse,r(s))})f({f(nil,r(s))},s)elseif y then
return ("/%s%d\\"):format(m<y and"+"or"-",math.abs(m-y)),f(s,y,...)end end

Utilise plusieurs valeurs de retour et récursivité pour traiter les différences. Il m'a fallu quelques caractères pour reproduire exactement l'exemple de sortie (ajouter la bonne quantité d'espaces partout).

7. Go (307 caractères)

func f(p string)[]int{var l[]string
g,_:=os.Open(p)
H,M,s,m:=0,0,bufio.NewScanner(g),[][]int{{-1,-1,11},{-1,0,12},{-1,1,1},{0,-1,9},{0,1,3},{1,-1,7},{1,0,6},{1,1,5}}
for s.Scan(){l=append(l,s.Text())}
for _,a:=range m{if l[2+a[0]*2][2+a[1]*2]!=' '{M=a[2]}
if l[2+a[0]][2+a[1]]!=' '&&(H==0||M!=a[2]){H=a[2]}}
return[]int{H,M}}

Pourrait probablement être joué au golf beaucoup plus; Je sais à peine aller.

8. CoffeeScript (+ node.js) (223 caractères)

f=(p)->
 a=require('fs').readFileSync(p).toString().split "\n"
 U=(i,j)->a[i]?[j]and a[i][j]==' '
 for l,i in a
  for c,j in l
   m =
    "/":[i+1,j-1]
    "\\":[i+1,j+1]
    a:[i+1,j]
   return if U.apply(0,m[c]or m.a)
 1

Un peu un coup bas puisque j'ai déjà JS. Tant pis. Renvoie une valeur de fausseté (à savoir, undefined) ou une valeur de vérité (à savoir, 1) pour indiquer la réponse.

9. Bash (254 caractères)

f(){
curl https://news.ycombinator.com/rss|
awk -Ftitle '{OFS="h1\76\n\74h1";ORS="";print substr(OFS,4);print$2,$4,$6,$8,$10,$12,$14,$16,$18,$20,$22,$24,$26,$28,$30,$32,$34,$36,$38,$40;print substr(OFS,0,3)}'|
while read l;do echo ${l//$1/$2};done|
tee $3
}

(De nouvelles lignes après les tubes ont été ajoutées pour plus de lisibilité.) Il était amusant de contourner les restrictions avec le shell. Je me rends compte qu'il y a probablement une meilleure façon de faire $2,$4,$6,..., mais c'est ce que j'ai quand même proposé.

Luciole
la source
1
Y a-t-il une raison pour laquelle vous n'avez pas inclus les importations / les inclusions dans le nombre de caractères? Sinon, excellent travail!
grc
1
Oh oui, j'ai oublié de mentionner ça. Étant donné que la question souligne "qu'il suffit de soumettre la fonction", je pensais qu'il serait juste d'ignorer le coût de l'inclusion de bibliothèques standard.
FireFly
Pour le trou 1f=str.__mul__
Snakes and Coffee
@SnakesandCoffee qui ne l’imprime pas sur la sortie standard, malheureusement. :(
FireFly
5

Score: 1 394,4

996 caractères + 40% de pénalité

1. Voie verte - Haskell, 19 caractères

f c n=replicate n c

Usage:

> f "hello" 5
["hello","hello","hello","hello","hello"]

2. Rough - PHP, 72 caractères

<?
function f($t,$s,$n){for($i=-1;$n--;$i=strpos($t,$s,++$i));return$i;}

3. Curry - JavaScript 1.8, 45 caractères

f=function(x,y)function(){for(i=x();i--;)y()}

4. Spew - J, 43 caractères

f=:3 :'((33+?(1+?2#100)$1#93){a.)fwrites y'

Usage:

f 'file.txt'

5. Trésor - J, 64 caractères

f=:4 :0
a=.freads x
b=.1+a i.u:10
c=.a i.y
d=.<.c%b
e=.d,c-b*d
)

Usage:

'file.txt' f 'c'

6. Pont - Python, 166 caractères

def f(l):J=''.join;t=map;r=lambda n:' '*len(n);s=t(str,l);o=['/%+d\\'%(y-x)for x,y in zip(l,l[1:])];print J(t(J,zip(t(r,s),o)))+'\n'+J(t(J,zip(s,t(r,o)+['users'*0])))

7. Temps - Python, 205 caractères

def f(p):
 s=open(p).read();a=[s[:12],s[18:],s[11:15],s[15:18]];z=[0]*3
 for l in(0,1):
  for c in'/|\\':z[a[l].count(c)]=('|/'.find(c)+6*l)%12or 12
  z[a[2+l].count('-')]=3+6*l
 print[z[1]or z[2],z[2]*5%60]

Suppose que les lignes sont complétées par un espace de cinq caractères. Utilise les onglets pour le deuxième niveau d'indentation.

8. Bois - Python, 190 caractères

def f(p):g=open(p).readlines();C='\\/ ';return all(1-[x+2>len(g[y])or g[y][x+1]in C,x<1or g[y][x-1]in C,0,' '==g[y+1][x]][C.find(g[y][x])]for y in range(len(g)-1)for x in range(len(g[y])-1))

9. Slacker - Python, 192 caractères

import urllib
def f(s,r,p):F=open(p,'w');d=urllib.urlopen('http://x.co/3WYmQ').read()[37:];o,c='\x3c\x3e';exec"d=d[d.find(o+'t')+7:];F.write(o+'h1'+c+d[:d.find(o)].replace(s,r)+o+'/h1'+c);"*20

Merci à Tyzoid pour l’idée du raccourcisseur d’URL.

grc
la source
Très impressionné par votre Python, de nombreuses astuces pour apprendre.
DemandeAnyway
1
@AsksAnyway Merci. Assurez-vous de vérifier cela si vous ne l'avez pas déjà fait.
grc
1
Euh, sûrement que votre (1) est en J, non? Peut-être avez-vous oublié de mettre à jour l'en-tête / échantillon.
FireFly
@FireFly Ouais, mon erreur. J'ai mis à jour la notation et l'utilisation, mais j'ai oublié de changer la solution actuelle.
grc
4

Edit: Pense que je vais simplement soumettre ceci tel quel: 1290 au total, aucune langue ne se répète.

Voie verte, C # 53

void g(string s,int n){while(n-->0)Console.Write(s);}

J'ai décidé d'échanger les langues avec # 1 et # 9. Totalement 30 ici pour des centaines plus tard.

Quelque part dans le rugueux, Python 59

Je n'aurais vraiment pas dû utiliser un langage aussi bon pour un problème facile. De plus, en quoi cela ne fait-il pas partie de la famille de fonctions indexOf de toutes les langues? Il me semble avoir toujours besoin de ça ...

def f(t,s,n):return sum(map(len,t.split(s))[:n+1])+n*len(s)

Curry Pour Le Dîner, Lisp 61

Je n'ai pas touché le lisp depuis cette semaine au collège ...

(defun f (c g)(loop for i from 1 to(funcall c)do(funcall g)))

Spew, Bash / shell utils 102

Mon bash-foo n'a jamais été aussi bon. Je vais jouer avec celui-ci plus tard. Si vous voulez que cela se termine plus vite, passez à / dev / urandom.

f(){
c=$(($RANDOM%9+9))
for i in $(seq $c);do
echo `tr -cd [:print:]</dev/random|head -c$c`>>$1
done
}

Chasse au trésor, C 113

Probablement l'un des problèmes les plus conviviaux. J'ai interprété "renvoyer deux entiers" comme prendre un pointeur de tableau de retour comme un argument. Avertissements? Quels avertissements? Un int * est aussi bon qu'un FILE * = p.

void f(int*p,int c,int*r){int*f,t;*r=r[1]=0;f=fopen(p,"r");while(c-(t=fgetc(f))){*r=t-'\n'?*r+1:0;r[1]+=*r?0:1;}

Pont sur la rivière Kwai, Perl 207

J'ai commencé à apprendre le Perl en écrivant celui-ci. (Mieux vaut tard que jamais!) Je suis venu dans ce désir de faire héroïque regex, alors je forme la chaîne comme les deux couches du pont ensemble, puis j'utilise des regex avec des remplacements d'espaces pour former les deux lignes différentes.

sub f{@trouse=0..$#_-1;foreach $i(@trouse){$r.=sprintf("%d/%+d\\",$_[$i],$_[$i+1]-$_[$i])}$r.=$_[$#_]."\n";print$r=~s/(^|\\)(\d+)(\/|$)/$1.' 'x length($2).$3/egr;print$r=~s/(\/[+-]\d+\\)/' 'x length($1)/egr}

Le temps passe vite quand vous jouez au golf, Java 297

Vous ne pouvez faire que beaucoup pour rendre java laconique ... Cela suppose que l’horloge est remplie avec des espaces, de sorte que chaque ligne compte 5 espaces.

public boolean p(int r,int m,String s){int c[]={1,1,0,-1,-1,-1,0,1};return s.charAt(6*c[(r+6)%8]*m+14+c[(r)%8]*m)!=' ';}
public int[]time(String c){int h=9,m=0,t[]={3,5,6,7,9,11,12,1};for(int i=0;i<8;i++)if(p(i,1,c))if(p(i,2,c))m=i;else h=i;if(h==9)h=m;m=(t[m]*5)%60;h=t[h];return new int[]{h,m};}

Charpente! Javascript 201

Il fonctionne dans la console de chrome. Je ne donne aucune garantie ailleurs = p. Cela nécessite que les lignes soient complétées par un espace égal à la longueur de la plus longue ligne. J'ai l'impression que c'est une demande raisonnable de l'art ASCII.

function f(s) {s=s.split("\n")
d={};m={'/':-1,'\\':1};r=1
s.forEach(function(x){t={}
for(i=0;i<x.length;i++){if(x[i]!=' '){j=m[x[i]]?i+m[x[i]]:i
t[j]=1}}for(n in d){if(x[n]==' '){r=0}}d = t})
return r}

Slacker News, Ruby 197

def s(f,s,t)
l=60.chr
r=62.chr
IO.write(f,l+"h1"+r+URI.parse("https://news.ycombinator.com").read().split('mhead')[0,20].map{|x|x[0,x.length-19].split(r).last.sub(s,t)}.join(l+"/h1#{r+l}h1"+r))
end
Sprigyig
la source
Non seulement c'est une excellente réponse, mais c'est aussi une excellente lecture. Bon travail!
Dan Prince
Merci, j'imagine que c'est un peu moins intéressant maintenant que j'ai échangé ruby ​​et C #. Plus
besoin de parler de la
4

Je me suis amusé à toucher quelques langues pendant un petit moment ...

Nombre de caractères obtenus après suppression des espaces et des nouvelles lignes inutiles, mais la soumission reste en grande partie lisible. Puisque la question est un mélange de fonctions et de programmes, je n’ai inclus que le corps de la fonction, le cas échéant ... De plus, une certaine liberté a été prise avec la signification de "retour" ...

Total ~ 1719

1- Python (~ 20)

def f(c, n):
    print c*n

2- C (~ 109)

int f(char*t,char*s,int n){int i;char*q=t;int l=strlen(s);for(i=0;i<n;++i){t=strstr(t, s)+l;}return(t-q-l);}

Version lisible:

#include <string.h>

int f(const char *t, const char *s, int n)
{
  int i;
  char *start = t;
  int l = strlen(s);
  for(i = 0; i < n; ++i)
  {
    t = strstr(t, s) + l;
  }
  return(t - start - l);
}

3- Javascript (~ 56)

function(x, y) {return function() {for(i=0; i<x(); i++) y();}}

4- Rexx (~ 136)

f: Procedure
  Parse arg p
  w = random(1, 9)
  h = random(1, 9)
  Do y = 1 to h
    Do x = 1 to w
      Call CHAROUT p, d2c(random(32, 99))
    End
    Call LINEOUT p, ""
  End

5- Scala (~ 290)

def f(p: String, c: Char) {
  def sc(w: String, c: Char, x: Int, y:Int ): Boolean =
    {
      if(w.isEmpty) false else
      if(w.head==c) {println(x, y); true} else sc(w.tail, c, x+1, y)
    }
  def sr(w: Array[String], c: Char, x: Int, y: Int)
  {
    if(!sc(w.head, c, 0, y)) sr(w.tail, c, 0, y+1)
  }
  sr(io.Source.fromFile(p).mkString.split('\n'), c, 0, 0)
}

6- C ++ (~ 355)

void b(list<int> l) // trouser+s
{
  auto i = l.begin();
  auto j = i;
  j++;
  list<int> d;
  while(j!=s.end()) d.push_back(*j++ - *i++);
  j = d.begin();
  ostringstream o[2];
  for(auto i : l)
  {
    while(o[0].tellp()!=o[1].tellp()) o[1] << " ";
    o[1] << i;
    if(j != d.end())
    {
      while(o[0].tellp()!=o[1].tellp()) o[0] << " ";
      o[0] << "/" << (*j>=0 ? "+" : "") << *j++ << "\\";
    }
  }
  cout << o[0].str() << endl << o[1].str() << endl;
}

7- Go (~ 301)

Notez que ceci nécessite que l’horloge soit complétée (c’est-à-dire que toutes les lignes ont la même longueur).

func f(p string)(h int,m int) {
  var a=[8]int {0, 2, 4, 12, 16, 24, 26, 28}
  var b=[8]int {7, 8, 9, 13, 15, 19, 20, 21}
  var d=[8]int {11, 12, 1, 9, 3, 7, 6, 5}
  h=9
  c, e := ioutil.ReadFile(p)
  if e==nil {
    for i:=range a {
      if c[a[i]]>32 {
        m=i
      }
    }
    for i:= range b {
      if c[b[i]]>32 {
        if i!=m {
          h=i
        }
      }
    }
    if h==9 {
      h=m
    }
    h=d[h]
    m=d[m]*5%60
  }
  return
}

8- Rubis (~ 259)

def f(p)
  a,b = File.read(p).split(/\n/).reverse,Hash.new(1)
  a.each_with_index {
    |l,i|
    l.split("").each_with_index {|k,j|
      case k
        when ' '
          b[j] = 0
        when '/'
          b[j] = b[j]|b[j-1]
        when '\\'
           b[j] = b[j]|b[j+1]
      end
      unless k==' '
        if b[j]==0
          return 0
        end
      end
    }
  }
  return 1
end

Bidouille 9h / Unix (~ 193)

wget -qO - http://news.ycombinator.com/rss | tr "\074\076" "\n" | grep -B1 /title | awk 'NR % 3 == 1' | head -21 | tail -20 | sed 's/$1/$2/' | awk '{ print "\074h1\076" $0 "\074/h1\076"}' > $3
Guy Sirton
la source
1
Bien, mais votre n ° 9 utilise des accolades angulaires, ce qui est contraire aux règles de ce trou.
Rik Smith-Unna
@ RichardSmith: Merci ... je vais devoir résoudre celui-ci.
Guy Sirton
1
Attention, trou # 3, rien ne garantit que x () renverra le même numéro à chaque appel de fonction!
Tyzoid
@ Tyzoid: J'envisageais de le capturer ... Vous avez raison, c'est mon hypothèse / interprétation de la spécification.
Guy Sirton
2

Pas vraiment ici pour jouer au golf, mais voici un peu de Tcl, car la langue a besoin de plus d'amour:

set holes {
    greenway
    rough
    curry
    spew
    hunt
    bridge
    time
    timber
    slacker
}

proc greenway {c n} {
    puts [string repeat $c $n]
}

proc rough {t s n} {
    set i [string first $s $t] ;# a bit wet
    while {[incr n -1]} {
        incr i [string first $s $t $i]
    }
    return $i
}

proc curry {x y} {
    set n [uplevel 1 $x]
    set body [string repeat "$y;" $n]
    return [list apply [list args $body]]
}

proc spew {p} {
    set w [expr {int(rand()*80)}]
    set h [expr {int(rand()*80)}]
    set f [open $p w]
    for {set y 0} {$y<$h} {incr y} {
        set ln ""
        for {set x 0} {$x<$h} {incr x} {
            append ln [format %c [expr {int(rand()*96+32)}]]
        }
        puts $f $ln
    }
    close $f
}

proc hunt {p c} {
    set f [open $p r]
    set y 0
    while {[gets $f line]>=0} {
        set x [string first $f $c]
        if {$x != -1} {
            return [list $x $y]
        }
        incr y
    }
}

proc bridge {l} {
    set l [lassign $l m]
    set top ""
    set btm $m
    foreach n $l {
        set t "/[expr {$n>$m?"+":""}][expr {$n-$m}]\\"
        append top "[string repeat \  [string length $m]]$t"
        append btm "[string repeat \  [string length $t]]$n"
        set m $n
    }
    # trousers
    return $top\n$btm
}

proc time {p} {
    set f [open $p r]
    while {[gets $f line] >= 0} {
        set line [format %-.5s $line]
        lappend c [split $line {}]
    }
    close $f
    foreach {x y h} {
        -1 -1  0
         0 -1  1
         1 -1  3
         1  0  5
         1  1  6
         0  1  7
        -1  1  9
        -1  0 11
    } { 
        set 2x x; incr 2x $x
        set 2y y; incr 2y $y
        if {[lindex $c $2y $2x] != " "} {
            set hh $h
        } elseif {[lindex $c $y $x] != " "} {
            set mm $h
        }
    }
    if {![info exists $mm]} {
        set mm $hh
    }
    set mm [expr {$mm*5}]
    if {$hh == 0} {set hh 12}
    list $hh $mm
}

proc timber {p} {
    set f [open $p r]
    set must {}
    while {[gets $f line] >= 0} {
        set line [format %-.5s $line]
        foreach i $must {
            if {[string index $line $must] eq " "} {
                close $f
                return false
            }
        }
        set must {}
        set i 0
        foreach c [split $line] {
            switch $c {
                "\\" {lappend must [expr {$i+1}]}
                "/"  {lappend must [expr {$i-1}]}
                " "  { }
                default  {lappend $must $i}
            }
            incr i
        }
    }
    close $f
    return true
}

proc slacker {s r p} {
    package require tdom
    set f [open $p w]
    set h [::http::geturl https://news.ycombinator.com/]
    set html [string trim [::http::data $h]]
    ::http::cleanup $h
    set dom [dom parse $html]
    lappend map , [string index $html 0]
    lappend map . [string index $html end]
    set root [$dom documentElement]
    foreach n [$root selectNodes {//td[@class=title]/a}] {
        set x [$n text]
        set x [string map [list $s $r] $x]
        puts $f [string map $map ",h1.$x,/h1."]
    }
    close $f
}

Généralement non testé car écrire ces procédures en une demi-heure est beaucoup plus intéressant que d'essayer de concevoir correctement le code de golf. Prendre plaisir!

wackadoo
la source
2

Seulement eu le temps de travailler sur la moitié d'entre eux. Vous semblez les vouloir sous la forme d'une fonction et non d'un one liner. Toutes ces fonctions sont donc. Test du code sous la fonction. En Perl.

Voie verte:

sub f{print$_[0]x$_[1]}

#test
&f("abc",5);

Rugueux:

sub f{$i=-1;$n=$_[2];do{$i=index$_[0],$_[1],$i+1;$n--}while($n>0 && $i>-1);print$i+1}

#test
&f("abcefgacefgabcefgabcefgabcefg","cef",4);

Curry:

use Sub::Curried;
curry f($x,$y){$q=0;foreach(1..&$x){$q=&$y};return $q;}

#test
sub fy { return 1;}
sub fx { return 10;}
print&f(\&fx,\&fy);

Vomir:

use Crypt::PRNG qw(random_string_from irand);
sub f{open($o,">$_[0]");$m=(irand)%10+1;map{printf $o "%s\n",random_string_from(['A'..'z'],$m)}(1..$m)}

#test
&f('/tmp/t');

Trésor:

sub f{open($i,"<$_[0]");$x=$y=0;@l=<$i>;while($y<=$#l){$x=1+index$l[$#l-$y],$_[1];@a=($x,$y+1)if($x);$y++;}return\@a}

#test
@b=@{&f('/tmp/t','f')};
print join(",",@b);

Je travaillerai 6-9 demain.

Joe
la source
2

WIP. Notez que le nombre de caractères peut être désactivé en raison de '\n'etwc

[1 voie verte] Mindf * ck, 54 caractères

>>+[+>,-]<[<]>,<<++++++++[>>------<<-]>>[>[.>]<[<]>-]

Utilisation: Une fois le code écrit, entrez votre chaîne et terminez-la par un ^ a (ctr + a), puis, immédiatement après, entrez votre numéro.

Une mise en garde: le nombre indiqué doit être uniquement compris entre 0 et 9 (si vous souhaitez une plus grande, la valeur ascii-48 du caractère que vous avez entré sera utilisée n).

Capture d'écran:

Capture d'écran

[3 Curry for Dinner] Javascript, 59 caractères

function f(x,y){return function(){n=x();while(--n!=0)y();}}

[4 Spew] BASH, 56 caractères

f(){ dd if=/dev/urandom of="$1" count=$((RANDOM%30+2));}

[7 le temps passe vite quand vous jouez au golf] C, 334 caractères (412 avec définition de macro)

#define E(A) else if(s[A]==
#define G(A) else if(A)m=
#define M(A) &&m!=A)h=A
int (*f(char* s)){short h=0,m=0;if(s[0]=='\\')m=11;G(s[2]=='|')12;G(s[4]='/')1;G(s[11]=='-')9;G(s[15]=='-')3;G(s[22]=='/')7;G(s[24]=='|')6;G(s[26]=='\\')5;if(s[7]=='\\'M(11);E(8)'|'M(12);E(9)'/'M(1);E(12)'-'    M(9);E(14)'-'M(3);E(18)'/'M(7);E(19)'|'M(6);E(20)'\\'M(5);int* i=malloc(sizeof(int)*2);i[0]=(h==0)?m:h;i[1]=m*5;return i;}

Remarque: cette fonction renvoie un pointeur sur un tableau entier à deux dimensions, formaté comme suit: {3, 55} (pour une position d'horloge de heure sur 3, minute sur 11).

[9 Slacker News] PHP, 246 caractères

function f($a,$b,$c){$t=file_get_contents("http://x.co/3WQoY");$g=explode('d class="t',$t);$f=fopen($c,"w");for($i=1;++$i!=count($g)-10;){$e=explode("\x3e",$g[$i]);fwrite($f,"\x3ch1\x3e".str_replace($a,$b,s    ubstr($e[2],0,-3))."\x3c/h1\x3e\n");}}

Implémentation séparée / originale dans BASH + AWK, 218 caractères

f(){ wget -qO- x.co/3WQoY|grep "e_"|awk '{n=split($0,a,"d class=\"t");for(q=1;++q!=n-10;){split(a[q],b,"\x3e");m=substr(b[3],0,index(b[3],"\x3c/")-1);gsub("'"$1\",\"$2"'",m);print "\x3ch1\x3e"m"\x3c/h1\x3e"    }}'>"$3";};
Tyzoid
la source
2

1654

1. Voie verte (Haskell - 37)

f x y=do print(concat(replicate x y))

2. Quelque part dans le rugueux (Mathematica - 43)

f[t_,s_,n_]:=StringPosition[t, s][[n+1, 1]]

3. Curry pour le dîner (Lisp - 58)

(defun f(x y)(lambda()(dotimes(c(funcall x))(funcall y))))

4. Spew (Matlab / Octave - 83)

function x(f)
    save f arrayfun(@char,randi(255,randi(255),randi(255)))
endfunction

5. Chasse au trésor (C - 176)

char* f(char* s,char c){FILE* n;char* r;int i=0,j=0,k=0;n=fopen(s,"r");while(!feof(n)){k=fgetc(n);if(k==(int)c)break;j++;if(k=='\n'){i++;j=0;}}sprintf(r,"%d %d",i,j);return r;}

6. Pont sur la rivière Kwai (Ruby - 192)

def f(l)
    trouse="\n%s"
    rs = l[0].to_s
    for i in 1..l.length-1
        s = "/%+d\\"%(l[i]-l[i-1])
        print " "*l[i-1].to_s().length+s
        rs += " "*s.length+"%d"%l[i]
    end
    puts trouse%rs
end

7. Le temps passe vite quand vous jouez au golf (Node.js - 406)

function f(n){var g,h,m,q;fs.readFile(n,'ascii',function(e,d){l=d.split('\n');g=function(x,y){try{return l[x][y].trim()&&1;}catch(e){return 0;}};h=g(0,0)*11||g(0,2)*12||g(0,4)*1||g(2,0)*9||g(2,4)*3||g(4,0)*7||g(4,2)*6||g(4,4)*5;m=(g(1,1)&&h!=11)*55||(g(1,2)&&h!=12)*0||(g(1,3)&&h!=1)*5||(g(2,1)&&h!=9)*45||(g(2,3)&&h!=3)*15||(g(3,1)&&h!=7)*35||(g(3,2)&&h!=6)*30||(g(3,3)&&h!=5)*25||h*5%60;return [h,m];});}

8. Le bois! (Aller - 329)

func f(p string)bool{
    x,_:=ioutil.ReadFile(p)
    b:=strings.Split(string(x),"\n")
    for j:=0;j<len(b)-2;j++{
        for i:=0;i<len(b[j]);i++{
            r,o:=1,0
            switch string(b[j][i]){
            case " ": continue
            case "/": r,o=0,-1
            case "\\": r,o=0,1
            }
            if i+o<len(b[j]) && b[j+r][i+o]==' ' {
                return false
            }
        }
    }
    return true
}

9. Slacker News (Python - 330)

def f(s,r,p):
    w=urllib2.urlopen('http://news.ycombinator.com')
    a=[l.get_text() for l in BS(w).body("a") if l.find_parent("td", class_="title")]
    t=lambda x:u"\x3c{}\x3e{}\x3c/{}\x3e".format(x,'{}',x)
    m=''.join(t("h1").format(l.replace(s,r)) for l in a[:20])
    with open(p,'w') as h:
        h.write(t("html").format(m).encode('utf8'))
C Gearhart
la source
1

Je suis un tricheur et je n'ai pas joué les 9 trous… pas encore . Néanmoins, voici mon trou 8, solution «Timber» en Perl (149 car).

Un de mes collègues a présenté cela comme un défi au travail. Nous nous sommes amusés avec elle, surtout avec moi, car j'ai la solution la plus basse à ce jour!

Notre règle était que le script devait être autonome trueou falsesuivi par une nouvelle ligne STDOUT, et qu'aucun «shebang» n'était acceptable.

Ci-dessous la solution "minifiée". J'énonce également un « résumé » de la même chose qui inclut un code non «minifié» et des explications (souvent très longues) du raisonnement qui sous-tend mon approche.


$r=tru;open F,pop;while(<F>){y/0/6/;s/^|\s|$/0/g;s#\\(?=0)|(?<=0)/|[^\\/0]#6#g;@n=split//;for(0..@n){!$n[$_]&&$l[$_]==6?$r=fals:1}@l=@n;}print$r,'e
'
roosto
la source
0

Je suis trop paresseux pour le modifier selon les règles de la concurrence, mais ça marche très bien ...

from numpy import *
import sys

def greenway(c,n):
    print c*n

def somewhereintherough(t,s,n):
    i=-1
    count=0
    while(count<n):
        i = t.find(s,i+1)
        count+=1
    return i

def curryfordinner(x,y):
    def g():
        for i in range(x()):
            y()
    return g

def spew(p):
    f = open(p,'w')
    n = random.randint(1,28)  
    for i in range(n):
        if(i>0):
            f.write('\n')
        str1 = ''.join([chr(random.randint(32,126)) for _ in range(n)])
        f.writelines(str1)
    f.close()
    print "Grid size: ",n,'x',n

def treasurehunt(p,c):
    f = open(p,'r')    
    arr = f.readlines()
    n = len(arr)
    f.close()
    f = open(p,'r')
    found=False
    for i in range(n):
        line = f.readline()
        #print line
        loc = line.find(c)
        if(loc!=-1):
            print c,"found in",p,"at",i,loc
            found=True
            break
    if(not found):
        print c,"not in",p
    f.close()

def bridgeontheriverkwai(l):
    str_list = []
    for i in range(len(l)-1):
        sign = '+' if l[i+1]-l[i]>0 else '-'
        str_1 = '/'+sign+str(abs(l[i+1]-l[i]))+'\\'
        sys.stdout.write(' '*(len(str(l[i])))+str_1)
        str_list.append(str_1)
    print
    for i in range(len(l)):
        if i<len(l)-1:
            print str(l[i])+' '*(len(str_list[i])-1),
        else:
            print l[i]

def timeflieswhenyoureplayinggolf(p):
    f = open(p,'r')
    #clock = [[0]*5,[0]*5,[0]*5,[0]*5,[0]*5]
    line1 = f.readline()
    line2 = f.readline()
    line3 = f.readline()
    line4 = f.readline()
    line5 = f.readline()
    h = 0
    m = 0
    if line1.find('\\')!=-1:
        h = 11
        m = 55
    elif line1.find('|')!=-1:
        h = 12
        m = 0
    elif line1.find('/')!=-1:
        h = 1
        m = 5
    elif line5.find('/')!=-1:
        h = 7
        m = 35
    elif line5.find('|')!=-1:
        h = 6
        m = 30
    elif line5.find('\\')!=-1:
        h = 5
        m = 25
    elif line3[4]=='-':
        h = 3
        m = 15
    elif line3[0]=='-':
        h = 9
        m = 45

    if line2[1]=='\\' and h!=11:
        m = 55
    elif line2[3]=='/' and h!=1:
        m = 5
    elif line3[1]=='-' and h!=9:
        m = 45
    elif line3[3]=='-' and h!=3:
        m = 15
    elif line4[1]=='/' and h!=7:
        m = 35
    elif line4[3]=='\\' and h!=5:
        m = 25
    elif line2[2]=='|' and h!=12:
        m = 0
    elif line4[2]=='|' and h!=6:
        m = 30

    print h,m


def timber(p):
    f = open(p,'r')
    linecount=0
    line_size = 0
    line = f.readline()
    while(line):
        linecount+=1
        line_size = max(line_size,len(line)-1)
        line = f.readline()
    block = array([[0]*line_size]*linecount)
    f.seek(0)
    for i in range(linecount):
        line = f.readline()
        for j in range(len(line)-1):
            if(line[j]==' '):
                block[i][j]=0
            elif(line[j]=='/'):
                block[i][j]=1
            elif(line[j]=='\\'):
                block[i][j]=2
            else:
                block[i][j]=3
    f.close()
    for i in range(linecount):
        for j in range(line_size):
            if(block[i][j]==1 and j!=0 and block[i][j-1]==3):
                block[i][j]=4
        for j in range(line_size-1,0,-1):
            if(block[i][j]==2 and j!=line_size-1 and block[i][j+1]==3):
                block[i][j]=4
    for i in range(linecount):
        for j in range(line_size):
            if(block[i][j]==3 and i<linecount-1 and block[i+1][j]==0):
                print "Unsafe Structure"
                return
    print "Safe Structure"

def slackernews(s,r,p):
    import urllib2
    response = urllib2.urlopen('https://news.ycombinator.com')
    html = response.read()
    titles_list = []
    ix = -1
    count = 0
    index_list =  []
    while(count<21):
        ix = html.find("<td class=\"title\"",ix+1)
        index_list.append(ix)
        count+=1
    for i in range(len(index_list)-1):
        line = html[index_list[i]:index_list[i+1]]
        line = line[line.find("a href"):]
        start = line.find('>')
        end = line.find('<')
        titles_list.append(line[start+1:end])
    f = open(p,'w')
    for title in titles_list:
        title = title.replace(s,r)
        f.write('<h1>'+title+'</h1>')
    print "Done writing, Check : ",p
    f.close()


greenway('test!',2)
s='this is a cat. this is a dog. dog is an animal, animal is a beast in disguise.'
t='is'
ix=somewhereintherough(s,t,8)
print ix,s[ix:]
def x():
    return 4
def y():
    print ' !y_called! '
g = curryfordinner(x,y)
g()
spew('test.dat')
treasurehunt('test.dat','a')
bridgeontheriverkwai([-7,-22,6,9])
timeflieswhenyoureplayinggolf('clock.dat')
timber('block.dat')
slackernews('a','b','slacker.html')
heures
la source
0

Premier code golf! (Encore un travail en cours...)

1. Voie verte

Langue: Python 3.2.3
Taille du fichier: 23 octets
Code:

def f(c,n): print(c*n)

3. Curry pour le dîner

Langue: Python 3.2.3
Taille du fichier: 64 octets
Code:

def f(x,y):
    def g():
        for i in [1]*x(): y()
    return g
apnorton
la source
Vous aurez des points d'ancrage pour utiliser deux fois le même langage, si j'ai bien compris. Si vous le faites juste pour le plaisir, pas de problème.
Hosch250
@ user2509848 Je ne connais pas 9 langues golfables, il va donc falloir que je sois amarré. :( Merci pour le heads up, cependant!
apnorton
Ruby, Perl, Golfscript et Mathematica sont souvent les gagnants
Hosch250
Je ne connais que le C ++, avec un peu de Java et moins de Python 3.2.3. Rien d'autre que HTML et CSS (qui ne peuvent pas être utilisés de toute façon (CSS)).
Hosch250
0

Un autre travail est en cours ici, et je suis au travail alors je reviendrai plus tard.

Voie verte en Ruby (14 caractères, 24 avec #alligator ), appel avecf.(c, n)

f=->c,n{p c*n}#alligator

Capture d'écran

Voie verte

Quelque part dans le brouillon dans CoffeeScript (38 caractères)

f=(t,s,n)->t.split(s,n).join(s).length

Capture d'écran

Quelque part dans le rugueux

Curry pour le dîner en JavaScript (54 caractères)

f=function(x,y){return function(){for(i=x();i--;)y()}}

Capture d'écran

Curry pour le dîner

Spew en PHP (111 caractères)

Cela nécessite short_open_tagdans le fichier de configuration PHP d'être activé. Sinon, le délimiteur d'ouverture devrait être <?php, les @symboles sont utilisés PHP_NOTICEpour supprimer les erreurs qui sont générées pour éviter randde mettre des guillemets, et pour ne pas déclarer explicitement la $svariable. Cela générera une grille carrée de caractères ascii entre 4 et 30 caractères sur les deux axes.

<? @$r=rand;$x=$r(4,30);for($i=$x*$x;--$i;){@$s.=$i%$x!=0?chr($r(33,126)):"\n";}file_put_contents($argv[1],$s);

Capture d'écran

Vomir

Daniel Morris
la source
Quel est ce terminal que vous utilisez?
Alexander Craggs
0

1. Voie verte (Python 2: 20)

def a(x,n):print x*n

Exemple d'entrée: a("asdf",3)-> string ( asdfasdfasdf)

2. Quelque part dans le rugueux (Python 2: 47)

def b(t,s,n):return len(s.join(t.split(s)[:n]))

Exemple d'entrée: b("1,2,333,4,5,6",",",3)-> int (7)

3. Curry pour le dîner (Javascript: 61)

function c(a,b){d=a();return function(){while(d){d--;b()}};};

Exemple d'entrée: function z(){ return 3; }; function y(){ console.log( '1' ) }; myfunc = c(z,y); myfunc();-> se connecte string(1)à la console ... 3 fois.

Conformément aux spécifications, crenvoie une fonction et n'exécute pas réellement cette fonction elle-même.

4. Spew (C ++ 11: 171)

#include<fstream>
using namespace std;void d(string f){ofstream o;int i=rand()%10;int j=rand()%10;o.open(f);for(int x=0;x<i;x++){for(int y=0;y<j;y++){o.put(rand()%256);}}}

Pas réellement testé cela, mais devrait fonctionner.

Sumurai8
la source
0

Une certaine empreinte est laissée intacte pour des raisons de lisibilité, mais elle a été supprimée lors du comptage des caractères. Le total est d'environ 1227 . Ou pas, j'ai oublié un problème. 1486 1465 caractères.

1. MIPS ASM (55 caractères)

#a0 : the address of the null terminated string.
#a1 : the repetition count.
f:
li $v0,4
syscall
addi $a1,$a1,-1
bne $a1,$0,f
jr $ra

2. Schéma (52 caractères)

(define (f t s n)(list-ref(string-search-all s t)n))

3. F # (39 caractères)

let f x y=fun()->for i in 1..x() do y()

4. Powershell (133 caractères)

Function f($p){
$r=(Get-Random)%100
$z="";for($b=$r*$r;$b -gt 0;$b--){$z+=[char](33+(Get-Random)%94);if($b%$r -eq 1){"$z">>$p;$z=""}}
}

5. C ++ ( 184 152 caractères)

#include <istream>
#include <string>
int*f(std::string p,char c){int*x=new int[2]();std::ifstream i(p);for(;i>>p;x[1]++)if((x[0]=p.find(c))>0)return x;}

6. C # ( 291 282 caractères)

static void f(List<int> l)
{
    var z = "";
    var o = l[0].ToString();
    for (int j = 1; j < l.Count;j++)
    {
        int p = l[j-1];
        int i = l[j];
        var q = "/"+(i-p<0?"":"+")+(i-p).ToString()+"\\";
        o += new String(' ',q.Length)+i.ToString();
        z+=new String(' ',p.ToString().Length)+q;
    }
    Console.Out.Write(z+"\n"+o);
}

7. Haskell ( 318 306 caractères)

Je cherchais une excuse pour essayer Haskell. Je pensais avoir été intelligent en générant la liste des positions via des combinaisons de chiffres, mais avec le nombre de caractères requis, j'aurais pu coder en dur cette fichue chose. Tant pis. Le code est atroce mais c'était amusant d'écrire quand même.

edit: corrigé pour qu'il retourne correctement les minutes.

w i s=[s!!(j!!1)!!(j!!0)/=' '|j<-mapM(const i)[1,2],j/=[2,2]]
k[e,r](i,o,n)|i&&o=[e, n]|i&&not o=[n, r]|not$o||i=[e, r]
g s=let[h,m]=foldl k[0,0](zipWith3(\x y z->(x,y,z))(w[1,2,3]s)(w[0,2,4]s)[11,9,7,12,6,1,3,5])in let u=mod(m*5)60 in if h==0 then[m,u]else[h,u]
f p = do
  s<-readFile p
  return$g$lines s

8. Lua (259 caractères)

J'ai été surpris de constater que les chaînes ne supportaient pas l'indexation de style de tableau. Je devais donc m'appuyer sur sub.

function f (p)
    s=' ' g=''
    for l in io.open(p):lines() do l=l..s:rep(#g-#l) for v=1,#g do
        d=({['/']=v-1,['\\']=v+1,[s]=0})[g:sub(v,v)] or -1
        if l:sub(v,v)==s and (d<0 or d>0 and g:sub(d,d)==s and l:sub(d,d)==s) then
            return false
        end
    end g=l end
    return true
end

9. Python (187 caractères)

Merci à grc / Tyroid pour le raccourcisseur d’URL.

import urllib2
def f(s,r,p):[open(p,'a').write('\074h1\076'+i.split("\074")[0].replace(s,r)+'\074/h1\076') for i in urllib2.urlopen("http://x.co/3WYmQ").read().split("\074title\076")[2:]]
TrevorM
la source