言語は何ですか?


17

最近、PPCG設計リーダーボードは、回答htmlヘッダーの解析に問題を抱えています。

この課題では、回答ヘッダーの解析で独自のショットを取ります。


テストケースの例

これらの例入力NOT実際のテストケース)、ちょうどので、あなたが入力が方法のアイデアを得ることが可能かもしれないようなことを

Input: <h1>Python 3, 32 bytes</h1>
Desired Output: Python 3

Input: <h1>JavaScript, 13 chars / 32 bytes</h1>
Desired Output: JavaScript

Input: <b>VeryBadlyFormattedHeader v3 : (32 bytes)</b>

スペック

あなたのプログラムは150バイト以下でなければなりません

回答ヘッダーのhtmlの行が表示されます。言語を正常に抽出するには、最善を尽くす必要があります。入力にはユニコード文字が含まれる場合があります。

出力ケースが重要です。

テスト

Github Gistとテストケース

1行に1つのテストケースがあります。形式は次のとおりです。

<lang_name> - <rest_of_the_line_is_the_header>

得点

あなたのスコアは:

 Number Correct
----------------
  Total Number

(これはパーセントです)

タイブレーカーは最も短いコードです。


100%のスコアは非常に達成可能であるため、最短コードのようなタイブレーカーが必要です。
user81655

1
最も一般的なヘッダースタイル#は、テストケースにも存在しません。
edc65

だから、言語は通常、入力の最初の単語ですか?
-TanMath

@ edc65これは、Markdownソースではなく、回答のHTML出力の解析に関するものだと思います。
クロルタン

5
正規表現でHTMLを解析しますか?次は何?
ニール

回答:


11

Retina 0.8.2、100%、75 71 70 68 67 64 59 53 51バイト

<.*?>

(,| [-&(–5]| [0-7]\d)(?! W|...\)).*

2 |:

これは今や本質的にコードゴルフであるため、言語を切り替える必要がありました。

オンラインでお試しください!

検証

$ wget -q https://gist.githubusercontent.com/vihanb/1d99599b50c82d4a6d7f/raw/cd8225de96e9920db93613198b012749f9763e3c/testcases
$ grep -Po '(?<= - ).*' < testcases > input
$ grep -Po '^.*?(?= - )' < testcases > output
$ mono retina/Retina.exe headers.ret < input | head -n -1 | diff -s - output
Files - and output are identical

使い方

コードは、3つの単純な置換(または削除)で構成されています。言語名を一致させる代わりに、その一部を形成する入力文字列のすべての部分を取り除きます。

  1. <.*?> はすべてのHTMLタグに一致するため、置換により入力から削除されます。

    .*?任意の量の文字に一致します?が、量指定子をlazyにするため、パターン全体が一致する可能性のある最小量に一致します。これにより、常にa <で始まりa で終わる入力全体が削除されなくなります>

    言語名は、残りの変更された入力文字列の最初の文字で始まります。

  2. 言語の名前の後、ほとんどの場合、次の語尾のいずれかが見つかります。

    ,-&(5、またはスペースは、2桁の数字が続きます。

    最初の2つの末尾はかなり一般的であり、as 、as 、as 、およびas としてPython 2 &amp; PuLP...解析する必要があります。Python 2Ruby (2.2.2p95)...Ruby>PHP – 3302 bytesPHPPerl 5...Perl

    (,| [-&(–5]| \d\d).* これらのすべての末尾(およびその後のすべての文字)に一致しますが、いくつかの誤検知が発生します。

    • ,言語名のコンマに一致しますHelp, WarDoq!

    • (バージョンと一致しますJavaScript (ESx)Java (1.8)

    • \d\dのバージョンと一致しTi-Basic 84ます。

    inの一致を回避するため[0-7]\d\d\d、の代わりにを使用して、3番目の問題のケースを修正できます。884

    他の問題のケースでは、我々は、負の先読み使用し(?! W|...\))、それが続いている場合、マッチングの前のパターンを防止するW(同様にHelp, WarDoq!)、または正確に3文字と(同様に閉じ括弧(ES6)又は(1.8))。

    すべてをまとめると(,| [-&(–5]| [0-7]\d)(?! W|...\)).*、言語名の後のすべてに一致します。

  3. 次の2つの問題が残っています。

    <h1>Python <s>2</s> 3, <s>255</s> <s>204</s> <s>180</s> 178 bytes</h1>
    <h1><a href="http://sylwester.no/zozotez/" rel="nofollow">Zozotez Lisp</a>: 73</h1>
    

    として解析されます

    Python 2 3
    Zozotez Lisp:
    

    最初のものを削除して修正し、2番目のものを:出力から削除して修正できます。

    これは2 |:、空の文字列で置き換えることにより実現されます。


16

Bash、100%、100バイト

sed sX..s.2./s.XX|grep -Po '(?<=>)[^<]+?(?=(,(?! W)| [-&–5]| ?<| [0-79]\d| ?\((?!E|1\.)))'|head -1

Ideoneでオンラインでお試しください。

検証

$ wget -q https://gist.githubusercontent.com/vihanb/1d99599b50c82d4a6d7f/raw/cd8225de96e9920db93613198b012749f9763e3c/testcases
$ grep -Po '(?<= - ).*' < testcases > input
$ grep -Po '^.*?(?= - )' < testcases > output
$ while read line; do bash headers.sh <<< "$line"; done < input | diff -s - output
Files - and output are identical

2
ええ、私はこれが非常に難しいと本当に思っていました...いい仕事です!
ダウンゴート


4

Jolf、13バイト、85.94%、非競合

ρΥpΔid=',H',E
  pΔi         remove all HTML tags from input, preserving content
 Υ   d=',H     slice from beginning until a member is a comma
ρ         ',E  replace said comma with the empty string  

私は自分のコンピューターでこのアップデートをしました。通訳のためにそれぞれのコードを更新するのを忘れていたのは私の悔しさでした。100%で撮影する気はありません。たぶん誰もが同じヘッダーをフォーマットする必要があります¯\ _(ツ)_ /¯


タグを削除することをお勧めします。Retinaの回答で3バイト節約できました。
デニス

@デニスありがとう!喜んでくれました。
コナーオブライエン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.