Desafio de 9 Buracos [fechado]


65

O desafio de 9 buracos

  • 9 desafios de código de golfe de dificuldade variável.
  • Sanções por usar o mesmo idioma mais de uma vez.
  • A pergunta será atualizada com pares, campeões de buracos e vencedores de troféus.

    Isso vem de uma competição que eu tenho com alguns amigos, não é o formato usual, mas espero que alguns de vocês gostem da diferença. Desafios, regras e troféus abaixo.

Furos

  1. Greenway (24)

    f(c:string, n:integer)
    Imprime uma linha contendo ninstâncias de c.

  2. Em Algum Lugar Difícil (73)

    f(t:string, s:string, n:integer) -> i
    Onde iestá o índice da nthinstância de sin t.

  3. Caril para o jantar (6235)

    f(x:function, y: function) -> g Onde gestá uma função que chamará y, ntimes; onde né o valor de retorno dex

  4. Vomitar (92)

    f(p:string) Grava no arquivo pe o preenche com um retângulo de tamanho aleatório de caracteres aleatórios (ascii).

  5. Caça ao tesouro (75)

    f(p:string, c:char) -> (x, y) Lê o arquivo no pqual contém uma grade de símbolos e retorna as coordenadas xe yda primeira instância desse símbolo na grade, suponha que ele exista.

  6. Ponte sobre o rio Kwai (179)

    f(l:list[int]) Imprime o diagrama de pontes de diferença para l. Por exemplo, para[1,7,3,17,1]

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

    Verifique se os espaços foram criados de acordo com o tamanho do número acima. Para um número longo de 3 dígitos, você precisará de 4 espaços entre os dígitos na linha abaixo.

    Captura: em algum lugar, seu código deve soletrar calças (deve ter pelo menos 1 delimitadores não alfanuméricos. tr(ou,se)(rs)

  7. O tempo voa quando você joga golfe (1157)

    f(p:string) -> [h, m] Lê o arquivo no pqual contém uma representação ASCII de um relógio analógico, em que o ponteiro das horas é representado com uma linha e os minutos por duas. Saída uma lista contendo dois elementos: as horas e os minutos mostrados no relógio. Se apenas uma mão estiver visível, assuma que ambos apontam para essa posição.

    Aqui estão todas as combinações possíveis para uma mão.

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

    Essas posições, respectivamente, são (12, 1, 3, 5, 6, 7, 9, 11). Suponha que os outros caracteres na face do relógio sejam espaços.

  8. Madeira! ()

    f(p:string) -> b:boolean Onde p é o caminho para um arquivo com um edifício ASCII. Os blocos com espaço em branco embaixo deles cairão. (Exceto pelas barras, que permanecem no lugar se houver um bloco estável na direção oposta à maneira como elas se enfrentam). Se o edifício for estruturalmente integral, retorne true, caso contrário, retorne false. Todos os blocos que não são de espaço em branco são contados como sólidos e, exceto barras, todos caem.

    Estruturalmente seguro

    ____
    |/\|
    |  |
    

    Não é seguro

    |__
      | 
      |
    

    Versão segura

    |__
    \\| 
      |
    
  9. Notícias do Slacker (218)

    f(s:string, r:string, p:string) Obtém os títulos das 20 principais histórias do Hacker News e altera todas as instâncias de spara r, depois grava os novos títulos em um arquivo html em p, onde cada título está contido em um elemento h1.

    O arquivo gerado deve ser algo como isto

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

    Captura :

    • Você não pode usar a API do HN.
    • Você não pode usar o Regex.
    • Você não pode usar chaves de ângulo em nenhum lugar do seu código.

Pontuação

  • Contagem de caracteres é o comprimento da função que será compilada e executada corretamente. No entanto, você ainda precisa enviar o código completo, incluindo as importações.
  • + 10% para cada idioma repetido no seu envio. (Por exemplo, se você usar Ruby para 3 soluções, sua pontuação final será multiplicada por 1,2). Versões diferentes do mesmo idioma contam ainda como o mesmo idioma.
  • Par será a pontuação média para cada buraco.
  • Envie suas soluções em uma resposta.
  • Sua pontuação geral é a contagem de caracteres + a penalidade no idioma e, em seguida, arredonda-a para cima.

Troféus

  • Gold Jacket - ( @Sprigyig - 1290) Pontuação geral mais baixa
  • Atirador - ( @Sprigyig - 9) A maioria dos idiomas usados
  • Bunker - Maior pontuação acima do par em qualquer buraco
  • Snakes on a Plane - ( @AsksAnyway - 1727) Maior envio de caracteres python em uma única solução
  • Good Parts - ( @AsksAnyway - 255) Maior contagem de caracteres JS em uma única solução
  • Shakey Steve - Solução mais curta que usa interfaces
  • Você não é da região : a solução de idioma exclusivo mais curta, que possui a menor página da wikipedia.
  • Happy Gilmoore - ( @AsksAnyway - 31) Solução mais curta que tem a palavra 'jacaré' no código.
  • Unicycle Dwarf Magic - As extensões padrão dos seus 9 arquivos de origem de envio são um anagrama perfeito de uma palavra no Dicionário Oxford.

Você só é elegível para um troféu depois de completar os 9 buracos


Submissões

  1. @Sprigyig 1290
  2. @Firefly 1320
  3. @grc 1395
  4. @Trevor M 1465
  5. @C Gearhart 1654
  6. @Guy Sirton 1719
  7. @AsksAnyway 4651

2
@anorton <&>
Dan Prince

11
Um relógio analógico tem 12 posições para cada ponteiro, mas você nos fornece apenas 8. Como isso funciona?
21413 Kevin

11
@DanPrince Deseja que a /posição se refira a 1 ou 2? (e da mesma forma para todo o resto das diagonais)
apnorton

11
@anorton 1/5, 5/25, 7/35, 11/55
Dan Prince

2
Versões ou sabores diferentes de um idioma serão considerados "diferentes" para fins de pontuação? por exemplo, Python 2 vs Python 3? Visual Basic vs VB.Net vs VBScript? Que tal superconjuntos ou quase-superconjuntos, como C vs C ++? Desculpe pelo pedantismo, mas isso é código-golfe! :-)
Darren Stone

Respostas:


11

Pontuação: 4651

2907 + 60% de penalidade

1. GolfScript - 14 caracteres

{*}:a;lligator

Uso: c n apor exemplo "test" 3 a->testtesttest

Estrela Happy Gilmoore

2. Python - 72 caracteres

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 caracteres

/*
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;
}

EstrelaBunker EstrelaGood Parts

4. Python - 132 caracteres

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 caracteres

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 caracteres

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 caracteres

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]

Estrela Cobras em um avião

8. Python - 226 caracteres

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 caracteres

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]

O que o comentário "#alligator" tem a ver com o código # 1? Parece estar incluído na contagem de palavras por algum motivo.
Dhara

11
@Dhara É para o troféu Happy Gilmoore: "Solução mais curta que tem a palavra 'jacaré' no código".
PhiNotPi

# 9 usa chaves de ângulo ( i<i<42), ou eles são permitidos desde que você os use apenas como operadores?
Christopher Creutzig

@ChristopherCreutzig Fixed thanks.
AsksAnyway

7

Pontuação: 1320

Eu tenho muito o que fazer para melhorar essa pontuação ... Bem, pelo menos evitei penalidades repetidas em idiomas. :-)

1. Python (21 caracteres)

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

A solução "óbvia".

2. ECMAScript 6 (47 caracteres)

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

Localiza o índice de uma maneira não convencional, contando o comprimento da substring antes dele.

3. J (12 caracteres)

f=:2 :'v^:u'

A conjunção ^:interna eleva uma função a uma potência (ou seja, repete uma função um determinado número de vezes). Isto é f^:3 y = f (f (f y))). No entanto, está sobrecarregado para aceitar funções em vez de números inteiros; nesse caso, ele executa a função na entrada para obter o número de repetições. Infelizmente, precisamos inverter os operandos para a tarefa, caso contrário teríamos a resposta concisa f=:^:.

4. C (95 caracteres)

#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);}

Essa tarefa deixa bastante espaço para interpretação e abuso: é correto apenas gerar um caractere ASCII imprimível aleatório e dizer que é um retângulo de dimensão aleatória com dimensões do conjunto {1}? Provavelmente não. Enfim, eu fui com simples, rand()mas na realidade você provavelmente deseja adicionar %9ou algo assim, se você quiser testá-lo. Na minha caixa do linux, não precisei liberar o arquivo para que ele fosse gravado (acho que é liberado automaticamente na saída do programa), mas tenho certeza de que você deve liberá-lo para estar em conformidade com os padrões, então sinta-se livre para adicionar fflush(f);à contagem aqui.

5. Haskell (100 caracteres)

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

Eu gosto do padrão repetido entre encontrar a linha e a coluna (abstraído via h).

6. Lua (261 caracteres)

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

Faz uso de vários valores de retorno e recursão para lidar com o cálculo das diferenças. Custou-me alguns caracteres para combinar exatamente com a saída de amostra (adicionando a quantidade certa de espaços em todos os lugares).

7. Go (307 caracteres)

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}}

Provavelmente poderia ser jogado muito mais; Eu mal conheço Go.

8. CoffeeScript (+ node.js) (223 caracteres)

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

Um pouco barato desde que eu já tenho JS. Ah bem. Retorna um valor falso (ou seja undefined) ou um valor verdadeiro (ou seja 1) para indicar a resposta.

9. Bash (254 caracteres)

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
}

(Novas linhas após os tubos adicionadas para facilitar a leitura.) Trabalhar com as restrições com o shell foi divertido. Percebo que provavelmente há uma maneira melhor de fazer $2,$4,$6,..., mas foi assim que surgiu.


11
Existe alguma razão pela qual você não incluiu importações / inclusões na contagem de caracteres? Caso contrário, ótimo trabalho!
grc

11
Ah sim, eu esqueci de mencionar isso. Como a pergunta enfatiza que "você só precisa enviar a função", eu pensava que seria justo ignorar o custo de incluir bibliotecas padrão.
FireFly

Para o buraco 1f=str.__mul__
Snakes and Coffee

@SnakesandCoffee que não imprime em stdout, infelizmente. :(
FireFly

5

Pontuação: 1.394,4

996 caracteres + 40% de penalidade

1. Greenway - Haskell, 19 caracteres

f c n=replicate n c

Uso:

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

2. Áspero - PHP, 72 caracteres

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

3. Caril - JavaScript 1.8, 45 caracteres

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

4. Vomitar - J, 43 caracteres

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

Uso:

f 'file.txt'

5. Tesouro - J, 64 caracteres

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

Uso:

'file.txt' f 'c'

6. Bridge - Python, 166 caracteres

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. Time - Python, 205 caracteres

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]

Assume que as linhas têm espaço preenchido com cinco caracteres de largura. Usa guias para o segundo nível de recuo.

8. Madeira - Python, 190 caracteres

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 caracteres

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

Agradecimentos a Tyzoid pela idéia de encurtador de URL.


Muito impressionado com o seu Python, muitos truques para aprender.
AsksAnyway

11
@AsksAnyway Thanks. Certifique-se de verificar isso se você ainda não o fez.
grc

11
Umm, certamente o seu (1) está em J, não? Talvez você tenha esquecido de atualizar o cabeçalho / execução da amostra.
FireFly

@ FireFly Sim, meu erro. Atualizei a pontuação e o uso, mas esqueci de alterar a solução real.
grc 31/12/13

4

Edit: Acho que vou enviar isso como está: 1290 total, nenhum idioma se repete.

Greenway, C # 53

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

Decidi trocar idiomas com os nºs 1 e 9. Totalmente 30 aqui para centenas depois.

Em algum lugar difícil, Python 59

Eu realmente não deveria ter usado uma linguagem tão boa em um problema fácil. Além disso, como isso não faz parte da família indexOf de nenhuma linguagem de funções? Parece que eu sempre preciso disso ...

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

Caril Para O Jantar, Lisp 61

Eu não toquei lisp desde que uma semana na faculdade ....

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

Vomitar, utilitários Bash / shell 102

Meu bash-foo nunca foi tão bom para começar. Eu vou mexer com isso mais tarde. BTW, se você quiser terminar mais rápido, mude para / dev / urandom.

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

Caça ao tesouro, C 113

Provavelmente um dos problemas mais amigáveis ​​em C. Eu interpretei "retornar dois inteiros" como um ponteiro de matriz de retorno como argumento. Avisos? Quais avisos? Um int * é tão bom quanto um 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;}

Ponte sobre o rio Kwai, Perl 207

Comecei a aprender perl enquanto escrevia este. (Antes tarde do que nunca!) Eu entrei nisso querendo fazer heroísmo de regex, então formei a cadeia de caracteres como as duas camadas da ponte juntas e depois usei regexes com substituições de espaço para formar as duas linhas diferentes.

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}

O tempo voa quando você está jogando golfe, Java 297

Você só pode fazer muito para tornar o Java conciso ... Supõe que o relógio seja preenchido com espaço para que cada linha tenha 5 espaços.

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};}

Madeira! Javascript 201

Ele roda no console do chrome. Não dou garantias em outro lugar = p. Requer que as linhas sejam preenchidas com espaço ao comprimento da linha mais longa. Eu sinto que este é um pedido razoável da arte 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}

Notícias Slacker, 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

Essa não é apenas uma ótima resposta, mas também uma ótima leitura. Bom trabalho!
Dan príncipe

Obrigado, imagino que seja um pouco menos interessante agora que troquei ruby ​​e c #. Não há mais reclamações sobre a divisão insana de strings da .Net =) #
Sprigyig 31/12/13

4

Diverti-me tocando algumas línguas por um tempo ...

Contagens de caracteres obtidas após a remoção de espaços / novas linhas desnecessárias, mas o envio geralmente é legível. Como a pergunta é uma mistura de funções e programas, incluí apenas o corpo da função quando necessário ... Também alguma liberdade tomada com o significado do "retorno" ...

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);}

Versão legível:

#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- Ir (~ 301)

Observe que isso exige que o relógio seja preenchido (ou seja, todas as linhas têm o mesmo comprimento).

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- Rubi (~ 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

9- hack do bash / 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

11
Bom, mas o seu nº 9 usa chaves de ângulo, o que é contra as regras desse buraco.
Rik Smith-Unna

@ RichardSmith: Obrigado ... Vou ter que consertar esse.
Guy Sirton

11
Cuidado no buraco 3, não há garantia de que x () retornará o mesmo número em cada chamada de função!
Tyzoid

@ Tyzoid: Eu estava pensando em capturá-lo ... Você está correto, essa é a minha suposição / interpretação das especificações.
Guy Sirton

2

Na verdade, não estou aqui para jogar golfe, mas aqui está um pouco de Tcl, já que o idioma precisa de mais amor:

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
}

Principalmente não testado porque escrever esses procs em meia hora é muito mais interessante do que tentar projetar adequadamente o código do golfe. Desfrutar!


2

Só tive tempo de trabalhar em 1/2 delas. Você parece desejá-los na forma de uma função e não de uma linha. Então, todas essas são funções. Teste de código abaixo da função. Em Perl.

Via Verde:

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

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

Rude:

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);

Vomitar:

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');

Tesouro:

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);

Eu vou trabalhar em 6-9 amanhã.


2

WIP. Observe que a contagem de caracteres pode estar desativada devido a '\n'ewc

[1 Greenway] Mindf * ck, 54 caracteres

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

Uso: Depois que o código for escrito, insira sua sequência e termine-a com ^ a (ctr + a); em seguida, imediatamente depois, insira seu número.

Uma ressalva: o número fornecido deve ser apenas de 0 a 9 (se você desejar um número maior, o valor ASCII-48 de qualquer caractere digitado será usado n)

Captura de tela:

Captura de tela

[3 Curry for Dinner] Javascript, 59 caracteres

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

[4 vomitar] BASH, 56 caracteres

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

[7 o tempo voa ao jogar golfe] C, 334 caracteres (412 com definição 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;}

Nota: esta função retorna um ponteiro para uma matriz inteira bidimensional, formatada da seguinte forma: {3, 55} (para uma posição do relógio de hora em 3, minuto em 11)

[9 Slacker News] PHP, 246 caracteres

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");}}

Implementação separada / original em BASH + AWK, 218 caracteres

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";};

2

1654

1. Greenway (Haskell - 37)

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

2. Em algum lugar difícil (Mathematica - 43)

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

3. Caril para o jantar (Lisp - 58)

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

4. Vomitar (Matlab / Octave - 83)

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

5. Caça ao Tesouro (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. Ponte sobre o rio 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. O tempo voa quando você joga golfe (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. Madeira! (Go - 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'))

1

Eu sou um trapaceiro e ainda não joguei todos os 9 buracos ... ainda . No entanto, aqui está o meu buraco 8, a solução “Timber” em Perl (149 caracteres).

Um dos meus colegas de trabalho colocou isso como um desafio no trabalho. Temos nos divertido com ele, especialmente eu, desde que eu tenho a menor solução par até agora!

Nossas regras eram que tinha que ser um script independente que produzisse trueou falseseguisse uma nova linha para STDOUT, e que nenhum "shebang" fosse bom.

Abaixo está a solução "minificada". Também coloquei uma " essência " do mesmo que inclui código não "minificado" e (muitas vezes tortuosamente longo) explicações do raciocínio por trás da minha abordagem.


$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
'

0

Estou com preguiça de modificá-lo de acordo com as regras da competição Meh, mas funciona bem ...

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')

0

Primeiro código de golfe! (Ainda um trabalho em andamento ...)

1. Greenway

Idioma: Python 3.2.3
Tamanho do arquivo: 23 bytes
Código:

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

3. Caril para o jantar

Idioma: Python 3.2.3
Tamanho do arquivo: 64 bytes
Código:

def f(x,y):
    def g():
        for i in [1]*x(): y()
    return g

Você será ancorado em pontos por usar o mesmo idioma duas vezes, se eu entendi corretamente. Se você está apenas fazendo isso por diversão, não há problema.
Hosch250

@ user2509848 Eu não conheço 9 idiomas capazes de jogar golfe, então terei que me encaixar em alguns. :( Obrigado pelo
aviso

Ruby, Perl, Golfscript e Mathematica são frequentemente vencedores
Hosch250

Eu sei apenas C ++, com alguns Java e menos Python 3.2.3. Nada além de HTML e CSS (que não podem ser usados ​​de qualquer maneira (CSS)).
Hosch250

0

Outro trabalho em andamento aqui, e estou no trabalho, então voltarei mais tarde.

Greenway em Ruby (14 caracteres, 24 com #alligator ), ligue comf.(c, n)

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

Captura de tela

Via Verde

Em algum lugar difícil no CoffeeScript (38 caracteres)

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

Captura de tela

Em algum lugar difícil

Curry for Dinner em JavaScript (54 caracteres)

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

Captura de tela

Caril para o jantar

Vomitar em PHP (111 caracteres)

Isso requer que short_open_tago arquivo de configuração do PHP esteja ativado. Caso contrário, o delimitador de abertura deve ser <?php, os @símbolos são usados ​​para silenciar os PHP_NOTICEerros lançados para evitar o fechamento randentre aspas e para não declarar explicitamente a $svariável. Isso gerará uma grade quadrada de caracteres ascii entre 4 e 30 caracteres nos dois eixos.

<? @$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);

Captura de tela

Vomitar


Qual é esse terminal que você está usando?
Alexander Craggs

0

1. Greenway (Python 2: 20)

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

Exemplo de entrada: a("asdf",3)-> string ( asdfasdfasdf)

2. Em algum lugar difícil (Python 2: 47)

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

Exemplo de entrada: b("1,2,333,4,5,6",",",3)-> int (7)

3. Caril para o jantar (Javascript: 61)

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

Exemplo de entrada: function z(){ return 3; }; function y(){ console.log( '1' ) }; myfunc = c(z,y); myfunc();-> registra string(1)no console ... 3 vezes.

De acordo com as especificações, cretorna uma função e, na verdade, não executa essa função.

4. Vomitar (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);}}}

Na verdade, não testei isso, mas deve funcionar.


0

Alguma indentação é deixada intacta para facilitar a leitura, mas foi retirada ao contar caracteres. O total é de cerca de 1227 . Ou não, eu esqueci um problema. 1486 1465 caracteres.

1. MIPS ASM (55 caracteres)

#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. Esquema (52 caracteres)

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

3. F # (39 caracteres)

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

4. PowerShell (133 caracteres)

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 caracteres)

#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 caracteres)

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 ( 318306 caracteres)

Eu estava procurando uma desculpa para experimentar Haskell. Eu pensei que era inteligente ao gerar a lista de posições por meio de combinações de números, mas com o número de caracteres necessários eu poderia ter codificado a maldita coisa. Ah bem. O código é atroz, mas foi divertido escrever de qualquer maneira.

editar: corrigido para que retorne minutos corretamente.

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 caracteres)

Fiquei surpreso ao descobrir que as strings não suportavam a indexação de estilos de matriz, então tive que confiar no 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 caracteres)

Obrigado a grc / Tyroid pelo encurtador de 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:]]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.