Gif - Jif, Jif - Gif


24

Lấy cắp từ @Downgoat với sự cho phép

Điểm chính của thử thách này là (không) giải quyết cuộc tranh luận về cách phát âm của "gif".

Gif so với Jif"


Cách phát âm của gif được tranh luận và trong khi nó được cho là (và nên được) phát âm là jif , nó vẫn thường bị tranh cãi.

Trong thử thách này, bạn sẽ được cung cấp một tập hợp các từ có g hoặc j , đại diện cho âm thanh mà từ đó được phát âm. Bạn cũng sẽ nhận được một số văn bản trong đó bạn phải sửa lỗi chính tả của gif .

Bởi vì đây là internet và mọi người luôn sai. Đó là (không) phép lịch sự phổ biến để sửa chúng.

Một ví dụ về cách phát âm sai sẽ là:

Có một gif của một con chuột ăn một Burrito

Lỗi chính tả của gif ? Không thể chấp nhận được! Điều này phải được sửa chữa ngay lập tức:

Có một con jif (như trong hũ) của một con chuột đang ăn burrito

Chúng ta làm xong chưa? Không, bạn vẫn sai.

Bạn luôn sai

Điều này phải hoạt động theo cách khác:

Trong jif con mèo đội mũ của một con mèo

Lỗi chính tả rõ ràng này phải được sửa, chúng tôi sẽ sửa lỗi này thành:

Trong gif (như trong đồ họa) con mèo đội mũ con mèo

Quy tắc

  • Đầu vào là một chuỗi (câu) và một chuỗi các chuỗi (hoặc bất kỳ thay thế hợp lý nào, chẳng hạn như chuỗi được phân tách bằng dấu phẩy) theo bất kỳ thứ tự nào
  • Bạn có thể lấy gjtừ theo thứ tự bất kỳ. Họ có thể được thực hiện riêng biệt.
  • Mỗi thể hiện của gif(bất kỳ trường hợp) trong câu phải được thay thế bằng jif (as in ___)nơi ___là một từ được lựa chọn ngẫu nhiên thống nhất bắt đầu với j từ mảng các chuỗi, và ngược lại đối với jifvới các từ bắt đầu vớig .
  • CHỈ các từ gifjifnên được thay thế (nghĩa là "jiffy" không nên thay đổi). Những lời đó đã làm không sai.
  • Bạn được đảm bảo rằng ít nhất một từ trong mảng bắt đầu bằng gvà ít nhất một từ bắt đầu bằng j.
  • Trường hợp phải được bảo quản (ví dụ GiF->JiF ).
  • Bạn có thể viết một chương trình hoặc một chức năng
  • Áp dụng sơ hở tiêu chuẩn
  • Chúng ta cần (không) giải quyết cuộc tranh luận một cách nhanh chóng; mã ngắn nhất tính bằng byte

Ví dụ

Đầu vào và đầu ra cách nhau bởi một dòng duy nhất:

graphic, jar, jam, gram
I saw a jif of how to pronounce gif that showed gif is pronounced jif

I saw a gif (as in graphic) of how to pronounce jif (as in jar) that showed jif (as in jam) is pronounced gif (as in gram)


gravy, jeff
G is for gIf, h is for JiF, i is for gIF, j is for JIf

G is for jIf (as in jeff), h is for GiF (as in gravy), i is for jIF (as in jeff), j is for JIf (as in gravy)

joke, june, gorilla, great
Jiffy should not be treated as a GIF or JIF, like gifted.

Jiffy should not be treated as a JIF (as in june) or GIF (as in great), like gifted.

3
The pronunciation of gif is debated and while it's supposed to be (and should be) pronounced **gif,** it's still commonly disputed.FTFY;)
Draco18

15
Định dạng trao đổi Giraffical :)
Mikhail V

3
(G là im lặng.)
David Conrad

6
Đó rõ ràng là jif như trong Johan. Giống như các furries âm thanh làm.
R ..

2
Bị cám dỗ vì downvote vì nó được phát âm bằng ag và KHÔNG AJ
Stan Strum

Câu trả lời:


6

Toán học, 164 165 byte

Đây là một điều kinh tởm, nhưng tôi muốn ai đó chia sẻ nỗi đau của mình.

StringReplace[f[f@"g"="j"]="g";f[f@"G"="J"]="G";z=IgnoreCase->1>0;#,x:"g"|"j"~~y:"if ":>{f@x,y,"(as in ",RandomChoice@StringCases[#2,f@x~~Except[","]..,z]}<>") ",z]&

Functiontrong đó dự kiến ​​đối số thứ nhất #sẽ là câu được sửa (in) và đối số thứ hai #2thành một chuỗi các từ được phân tách bằng dấu phẩy.

f[f@"g"="j"]="g";f[f@"G"="J"]="G"định nghĩa một hàm fmà có các chữ cái g, G, j, và Jđể thay thế thích hợp. Điều này là bao giờ ngắn hơn một chút so với f@"g"="j";f@"j"="g";f@"G"="J";f@"J"="G".

Tôi cũng đặt zbằng IgnoreCase->Truevì tôi sẽ sử dụng hai lần.

x:"g"|"j"~~y:"if "là một StringExpressiontừ trùng khớp "gif "hoặc "jif ", đặt tên cho chữ cái đầu tiênx và ba ký tự cuối cùng y. Vì tùy chọn z(còn được gọi là IgnoreCase->True) được chuyển đến StringReplace, các chữ cái này có thể nằm trong bất kỳ kết hợp nào của chữ hoa và chữ thường.

Sau đó tôi thay thế mọi trận đấu như vậy bằng

{f@x,y,"(as in ",RandomChoice@StringCases[#2,f@x~~Except[","]..,z]}<>") " 

RandomChoice@StringCases[#2,f@x~~Except[","]..,z]chọn ngẫu nhiên một từ trong đối số thứ hai #2bắt đầu bằng f[x], một lần nữa bỏ qua trường hợp vì tùy chọn zđược đưa ra.


3
Tại sao bạn sẽ sử dụng Mathicala cho việc này? Ồ
Neil A.

1
IgnoreCase->True=>IgnoreCase->1<2
Máy

1
@CalculatorFeline Tôi thực sự đã viết tắt Trueđể 1>0, chỉ cần không phải trong lời giải thích của tôi :)
ngenisis

Bạn sử dụng sinppets mã golf đầy đủ ở mọi nơi khác. Tại sao không có?
Máy

1
@CalculatorFeline Tôi đoán bởi vì trong trường hợp đó tôi đã không trích dẫn mã, tôi đã mô tả những gì nó đã làm, đó là đặt biến zbằng IgnoreCase->True. Tôi đã làm điều tương tự sau đó: "bắt đầu bằng f[x]". ¯\_(ツ)_/¯
ngenisis

5

Ruby , 88 87 91 byte

-1 byte từ ETHproductions. +4 byte vì các từ có chứa "gif" hoặc "jif" không nên được thay thế. -2 byte vì danh sách từ thay thế có thể được lấy riêng bây giờ.

->s,g,j{s.gsub(/\b(g|j)if\b/i){$&.tr("GgJj","JjGg")+" (as in #{($1[/g/i]?j:g).sample})"}}

Hãy thử trực tuyến!


6
Bạn có thể đổi ([gj])thành (g|j)? (idk nhiều Ruby nhưng tôi biết regex)
ETHproductions

3

CJam , 78 byte

l',%:A;lS%{_ela"gifjif"3/&{_V=_el:B'g=1W?Z*+V\t" (as in "A{V=elB=!},mR')}O?S}%

Hãy thử trực tuyến!

Yêu cầu danh sách các ký tự thay thế phải được phân tách bằng dấu phẩy.


Giải trình:

l',%                        e# read line of input and split at commas
    :A;                     e# store in var A and pop off the stack
       lS%{...}%            e# for each word in the next line of input so:

_ela"gifjif"3/&             e#   intersection of ["gif" "jif"] and [lowercase(word)]
               {...}O?      e#   if set it non-empty, run block below, otherwise do nothing (push empty string)
                      S     e#   push space

_V=                         e#     extract first char
   _el:B                    e#     duplicate to lowercase and store in var B
        'g=1W?Z*+           e#     convert g/G <=> j/J
                 V\t        e#     store back to word
" (as in "                  e#     push string
           A{V=elB=!},      e#     filter replacements by words starting with the same char (case insensitive)
                      mR    e#     select random element
                        ')  e#     push ')' char

Không hoạt động trên ví dụ trong đó gif / jif được theo sau bởi dấu phẩy.
Michael Boger

1

Python 3 , 237 byte

lambda s,g,j:' '.join([(w if False in(w[0]in q,w[1:2]in['i','I'],w[2:3]in['f','F'],w[3:]in",;!?.")else q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:])for w in s.split()])
from random import*
q=dict(zip("gGjJ","jJgG"))

Hãy thử trực tuyến!

Đây là cách tốt nhất tôi có thể làm - có thể là một cách nào đó để thực hiện nhanh hơn (có thể là với các biểu thức chính quy) nhưng bây giờ não tôi bị đau.

Giải thích: qlà một ánh xạ từ điển đơn giản, tôi hy vọng điều đó rõ ràng. s,g,jlà chuỗi đầu vào, danh sách các từ g và danh sách các từ j. ' '.joinDo đó, kết hợp với việc hiểu danh sách được thực hiện for w in s.split()là do danh sách các từ trong s.

Phần giữa là ma thuật đen, thứ mà tôi sẽ phá vỡ từng phần. Đầu tiên, điều kiện : False in(w[0]in q,w[1:2]in['i','I'],w[2:3]in['f','F'],w[3:]in",;!.").

w[0]in qkiểm tra ký tự đầu tiên là trong các khóa của q'g','G','j','J'. Lý do để phân tách qthành một biến là chúng tôi cũng sử dụng nó như là một dict / map sau này.

w[1:2]in ['i','I']kiểm tra xem ký tự thứ hai là i hoặc I. The: 2 là cần thiết bởi vì chỉ cần đặt w[1]sẽ dẫn đến sự cố về các từ 1 chữ cái, nhưng các lát cắt không làm điều đó vì một số lý do (tôi nghĩ rằng họ đã làm, bất cứ điều gì!)

w[2:3]in ['f','F']là tương tự. Tôi đã có một thời gian ngắn như vậy chỉ là 2: trước khi tôi nhận ra rằng tôi cần phải tính đến gif, hoặc jif, sau đó là dấu câu!

w[3:]in",;!?."kiểm tra xem các ký tự tiếp theo có dấu chấm câu không. Tôi thừa nhận mã của mình không hoạt động nếu ai đó đặt 'gif?!' nhưng tôi không thể hoàn hảo. Một số người khác cũng có thể chấp nhận thử thách mở dấu ngoặc kép trước gif hoặc jif.

False in(,,,)về cơ bản là một NAND lớn. Nó thực sự giống với bytecount khi tách bốn mục với andvà hoán đổi các đối số, nhưng điều này có vẻ mát hơn và hoạt động tốt hơn nếu bạn phải mở rộng nó thành andđiều thứ năm .

w ifcó nghĩa là nếu Sai nằm trong danh sách có điều kiện, chúng ta sẽ trả lại từ không thay đổi - nó không đáp ứng các tiêu chí của chúng ta. else, chúng tôi thay đổi nó thành:

q[w[0]]+w[1:3]+" (as in "+choice(g if w[0]in 'jJ'else j)+')'+w[3:]

ĐƯỢC. q[w[0]]thay thế chữ cái đầu tiên một cách chính xác. w[1:3]khai thác trên i hoặc I và f hoặc F, xử lý w[3:]bất kỳ dấu chấm câu nào. Điều đó để lại như trong mệnh đề.

" (as in "+choice(g if w[0]in 'jJ'else j)+')'đặt trong chuỗi ký tự rõ ràng ở đầu và dấu ngoặc đơn, bit thú vị ở đây là choice(g if w[0]in 'jJ'else j)lựa chọn ngẫu nhiên từ ghoặc j, tùy thuộc vào việc w[0]có trong'jJ' . và tôi chỉ nhận ra rằng tôi đã có một chút ngược lại để sửa nó trong suốt.

Đó là một ngày dài. choicelà trong các randommô-đun do đó nhập khẩu. Tôi nghĩ đó là tất cả.


0

JavaScript (ES6), 142 byte

(s,g,j,r=l=>l[Math.random()*l.length|0])=>s.replace(/\b[gj]if\b/gi,w=>`GJgj`[l=`JGjg`.search(w[0])]+w.slice(1)+` (as in ${r([g,j,g,j][l])})`)

Có danh sách riêng gjtừ.


0

Javascript (ES6), 151 byte

f=(s,g,j)=>s.replace(/\b(g|j)(if)\b/ig,(m,p,c)=>`${a=g,p=="j"?"g":p=="J"?"G":(a=j,p=="g"?"j":"J")}${c}(as in ${a[Math.floor(Math.random()*a.length)]})`)

Tôi có thể có thể chơi golf xuống phần ternary nhiều hơn, nhưng tôi không thể nghĩ làm thế nào ngay bây giờ. Ngoài ra, nó có các từ g và j riêng biệt.

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.