Chỉnh hình thời trung cổ


9

Bài tập

Nhiệm vụ của bạn là chuyển đổi một văn bản thành chính tả thời trung cổ.

Chi tiết

  1. jđược chuyển đổi thành iJsang I.
  2. uUở đầu từ được chuyển đổi thành vVtương ứng.
  3. vVtại bất cứ nơi nào ngoại trừ phần đầu của từ được chuyển đổi thành uUtương ứng.
  4. sđược chuyển đổi thành ſ(U + 017F) trừ khi ở cuối từ hoặc đứng trước từ khác s.

Thông số kỹ thuật

  • Một từ được định nghĩa là một chuỗi các chữ cái trong abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.
  • Tất cả các từ sẽ có ít nhất hai chữ cái.
  • Đầu vào sẽ chỉ bao gồm các ký tự ASCII có thể in (U + 0020 - U + 007E).
  • Sẽ không có sự xuất hiện của hơn hai lần liên tiếp s. Đó là, ssssẽ không phải là một chuỗi con của đầu vào.

Tủ thử

Lời nói cá nhân:

Input       Output
------------------------
Joy         Ioy
joy         ioy
Universe    Vniuerſe
universe    vniuerſe
Success     Succeſs
successfull ſucceſsfull
Supervise   Superuiſe
supervise   ſuperuiſe
Super-vise  Super-viſe
I've        I've
majors      maiors
UNIVERSE    VNIUERSE
0universe   0vniuerſe
0verify     0verify
I0ve        I0ve
_UU_          _VU_
_VV_          _VU_
ss_         ſs_

Toàn bộ đoạn văn:

Input:  Christian Reader, I have for thy use collected this small Concordance, with no small labour. For being to comprise much in little roome, I was to make choyse of the most principall and usefull places, and to rank them under such words as I thought most essentiall and materiall in the sentence, because the scant roome allotted unto me, would not permit that I should expresse them under every word in the verse, as it is the manner in large Concordances.

Output: Chriſtian Reader, I haue for thy vſe collected this ſmall Concordance, with no ſmall labour. For being to compriſe much in little roome, I was to make choyſe of the moſt principall and vſefull places, and to rank them vnder ſuch words as I thought moſt eſsentiall and materiall in the ſentence, becauſe the ſcant roome allotted vnto me, would not permit that I ſhould expreſse them vnder euery word in the verſe, as it is the manner in large Concordances.

Hàm băm SHA-256 của đầu ra của testcase cuối cùng là:

5641899e7d55e6d1fc6e9aa4804f2710e883146bac0e757308afc58521621644

Khước từ

Chỉnh hình Medievall không phải là contante. Xin đừng phàn nàn nếu bạn hãy tìm những cuốn sách cũ với một hình chữ nhật khác.


1
"Bạn được phép sử dụng f thay vì ſ trong đầu ra." Vì vậy, về cơ bản không có khuyến khích sử dụng vì nó cần nhiều byte hơn.
Gây tử vong vào

1
@Firthize Điểm công bằng. Đã xóa cái đó.
Leaky Nun

@LeakyNun Chúng ta có thể tính ſlà 1 byte không?
R. Kap

thực sự có sự khuyến khích ở dạng ff được đổi thành fs trong một số thuật toán nếu không được sử dụng
Lemon

1
Không nên Super-visetrở thành Super-viſe?
R. Kap

Câu trả lời:


3

SED, 144 140 111 byte

đã lưu 29 byte nhờ NoOneIsHere

-r -e'y/j/i/g;y/J/I/g;s/ u/ v/g;s/ U/ V/g;s/^u/v/g;s/^U/V/g;s/([^s])s(\w)/\1ſ\2/g;s/(\w)v/\1u/g;s/(\w)V/\1U/g'

1
Bạn dũng cảm, dũng cảm tâm hồn.
Alexander - Hồi phục lại

Bạn có thể cắt nhiều byte bằng cách chỉ sử dụng 1 -e. Sử dụng ;s giữa các câu lệnh.
NoOneIsHãy là

Tôi không biết bạn có thể làm điều đó. Cảm ơn!!
Riley

2

Python 3 ( 128 126 byte)

import re;lambda k:re.sub("(?<!s)s(?=[a-zA-Z])",'ſ',re.sub("(?i)j|(?<![a-z])u|(?<=[a-z])v",lambda c:chr(ord(c.group())^3),k))

chr(ord(c.group())^3)cảm thấy quá mức để xor một chuỗi ký tự đơn, nhưng có lẽ một Pythonista thực sự có thể đề xuất một golf. Tuy nhiên, nó rất thuận tiện ^3đủ để trao đổi i <-> ju <-> v.

NB Điều duy nhất ở đây yêu cầu Python 3 là ký tự Unicode: Python 2 phàn nàn Non-ASCII character '\xc5' <snip> but no encoding declared.


Bạn không nên sử dụng \b\bsử dụng định nghĩa của một từ bao gồm chữ số và dấu gạch dưới.
Leaky Nun

@LeakyNun, hmm. Trong khi tôi đang tìm cách khắc phục, bạn có thể vui lòng thêm một số trường hợp thử nghiệm không?
Peter Taylor

@ R.Kap. (?i).
Peter Taylor

@PeterTaylor Chờ đã, điều đó làm gì?
R. Kap

@ R.Kap, nó làm cho trường hợp regex không nhạy cảm.
Peter Taylor


1

Python 3.5, 124 116 111 118 125 144 142 byte:

import re;lambda k:re.sub("J|j|(?<![a-zA-Z])[uU]|(?<=[a-zA-Z])[Vv]|(?<!s)s(?=[a-zA-Z])",lambda g:dict(zip('jJuUvVs','iIvVuUſ'))[g.group()],k)

Vâng, đây có vẻ như là công việc hoàn hảo cho các biểu thức thông thường !


1
Bạn có thể sử dụng J|jthay vì[Jj]
Leaky Nun

1

JavaScript (ES6), 154

Sử dụng parseInt để xác định các ký tự chữ cái. Lưu ý: tình cờ nhưng may mắn parseInt('undefined',36)|0là <0

s=>[...s].map((c,i)=>((n=v(c))-19?n==31&p>9?'uU':n!=30|p>9?c=='s'&s[i-1]!=c&v(s[i+1])>9?'?':c+c:'vV':'iI')[p=n,c<'a'|0],p=0,v=c=>parseInt(c,36)|0).join``

Ít chơi gôn

s=>
  [...s].map(
  (c,i)=>
  ((n=v(c))-19
  ?n==31&p>9
    ?'uU'
    :n!=30|p>9
      ?c=='s'&s[i-1]!=c&v(s[i+1])>9
        ?'ſ'
        :c+c
      :'vV'
  :'iI')[p=n,c<'a'|0],
  p=0,
  v=c=>parseInt(c,36)|0
).join``

Kiểm tra

F=
s=>[...s].map((c,i)=>((n=v(c))-19?n==31&p>9?'uU':n!=30|p>9?c=='s'&s[i-1]!=c&v(s[i+1])>9?'ſ':c+c:'vV':'iI')[p=n,c<'a'|0],p=0,v=c=>parseInt(c,36)|0).join``

out=(a,b,c)=>O.textContent+=a+'\n'+b+'\n'+c+'\n\n'

ti='Christian Reader, I have for thy use collected this small Concordance, with no small labour. For being to comprise much in little roome, I was to make choyse of the most principall and usefull places, and to rank them under such words as I thought most essentiall and materiall in the sentence, because the scant roome allotted unto me, would not permit that I should expresse them under every word in the verse, as it is the manner in large Concordances.'
to='Chriſtian Reader, I haue for thy vſe collected this ſmall Concordance, with no ſmall labour. For being to compriſe much in little roome, I was to make choyſe of the moſt principall and vſefull places, and to rank them vnder ſuch words as I thought moſt eſsentiall and materiall in the ſentence, becauſe the ſcant roome allotted vnto me, would not permit that I ſhould expreſse them vnder euery word in the verſe, as it is the manner in large Concordances.'
r=F(ti)
out(to==r?'OK':'KO',ti,r)

test=`Joy         Ioy
joy         ioy
Universe    Vniuerſe
universe    vniuerſe
Success     Succeſs
successfull ſucceſsfull
Supervise   Superuiſe
supervise   ſuperuiſe
Super-vise  Super-viſe
I've        I've
majors      maiors
UNIVERSE    VNIUERSE
0universe   0vniuerſe
0verify     0verify
I0ve        I0ve
_UU_          _VU_
_VV_          _VU_
ss_         ſs_`
.split('\n').map(t=>{
  var [i,o]=t.split(/\s+/),r=F(i)
  out(o==r?'OK':'KO',i,r)
})
#O {width:90%; overflow:auto; white-space: pre-wrap}
<pre id=O></pre>


1

JavaScript (ES6), 111 byte

s=>s.replace(/[a-z]+/gi,w=>w.replace(/j|J|^u|^U|\Bv|\BV|ss|s(?!$)/g,c=>"iIvVuUſ"["jJuUvVs".search(c)]||"ſs"))

Giải thích: Vì regrec JavaScript không có giao diện, thay vào đó tôi chia chuỗi thành các từ, sau đó cho phép tôi sử dụng ^\Bdưới dạng các ký tự chữ cái phủ định và tích cực. ssđược xử lý bằng cách khớp riêng, với biểu thức thay thế hơi khó xử, chỉ cần ít byte hơn là chỉ thay thế ký tự đầu tiên choặc thêm một bổ sung scho cả hai chuỗi và sử dụng chuỗi con phù hợp.


c=>"iIvVuUſ"["jJuUvVs".search(c)]||"ſs"là tốt 👍🏻
Jordan

0

CJam ( 89 88 byte)

{32|_'`>\'{<*}:A;SqS++3ew{_1="jJuUvVs"#[-4_{_0=A!3*}_{_0=A3*}_{_)A\0='s=>268*}W]=~f^1=}%

Bản demo trực tuyến

Tôi không bao giờ hiểu tại sao CJam không có regex, nhưng vì đây không phải là một giải pháp không sử dụng chúng.


0

Ruby, 85 + 1 = 86 byte

Chạy với ruby -p(+1 byte cho pcờ). Đưa đầu vào vào stdin.

gsub(/j|(?<=^|[^a-z])u|(?<=[a-z])v|(?<=^|[^s])s(?=[a-z])/i){$&.tr"jJsUuVv","iIfVvUu"}

Chạy thử nghiệm trên ideone (được bọc trong lambda ở đó vì bạn không thể đưa cờ cho ideone): http://ideone.com/AaZ8ya

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.