Evrensel Spooky Meme Tercüman


43

Giriş

Anlaşılan uzaylılar da bizim kadar memleri severler. Şimdiye kadar karşılaştığımız her yabancı ırkın kendine has bir sürümü 2spooky4me( aşağıdaki soruya bakın ) ve buna karşın, bir miktar değişiklikle eşdeğerdir. CUTE1f gezegeninin sakinleri çok fazla ürkütücü işleyemez, bu yüzden tercih ettikleri 1spooky2meürkütücü, iskelet memurları onları biraz korkutur, bu yüzden kullanma eğilimindedirler 9spooky11me.

Meydan okuma

Anı çevirmek zor bir iştir, bu yüzden bu adamların hatıraya doğru erişmesine yardımcı olmak için evrensel bir meme çevirmeni yazmakla görevlendirildin. Programınız, bir meme ve farklı bir gezegenin sakinleri için uygun hale getirmek için o meme içindeki rakam dizilerine uygulanacak bir dönüşümü kabul edecektir.

Giriş

Programınız iki dize girişi alacak:

  1. Giriş mem (örneğin 2spooky4me). Maçlar [a-zA-Z0-9]+.
  2. Transformasyon (örn kendisine uygulanacak +1gitmek için, 2spooky4meiçin 3spooky5me). Maçlar [+\-*/^]\d+(eğer kabul etmelidir +, -, *, /, ve ^operatörler olarak, ne olursa olsun kendi dilinizde yerli temsilinin).

Çıktı

Programınız, giriş memesindeki rakam dizilerine verilen dönüşümle birlikte bir dizge çıktısı (standart çıktıya veya eşdeğeri basılmış) döndürmelidir. Olayların garip bir dönüşünde, şimdiye kadar karşılaşılan tüm ırkların kesirli olanlar yerine bütünleşik memeleri tercih ettiği, dolayısıyla bu dönüşümlerin tamsayı aritmetiği 1spooky1me /2yapması gerektiği ortaya çıkmıştır (örneğin sonuçlanmalı 0spooky0me).

Örnekler

Standart aritmetik işlemler geçerlidir:

Input:  2spooky4me +1
Output: 3spooky5me

Input:  2spooky4me -1
Output: 1spooky3me

Input:  2spooky4me *15
Output: 30spooky60me

Input:  10spooky900me /5
Output: 2spooky180me

Rakam dizileri integraldir; Bu gibi durumlarda tamsayı kesmesi gerekir:

Input:  idontunderstandmemes3 /2
Output: idontunderstandmemes1

Girişinizde herhangi bir rakam dizisi olmayabilir:

Input:  notreallyafunnymeme *100
Output: notreallyafunnymeme

Tercih ettiğiniz dilde yerel bir işlem olmasa bile üstelleştirmeyi desteklemelisiniz:

Input:  2spooky4me ^3
Output: 8spooky64me

Dizedeki dize dizisi sayısının uzunluğu için bir sınır yoktur:

Input:  some1meme2sequences3can4be5really6long7 /2
Output: some0meme1sequences1can2be2really3long3

ek

Diliniz bir dil özelliği olarak rasgele hassas tam sayıları destekliyorsa, bunları kullanmanız gerekir. Olmazsa, isteğe bağlı hassas tamsayıları desteklemeniz gerekmez. Örneğin , dilin bir parçası olduğu için IntegerHaskell yerine kullanmanız gerekir Int; içinde Java, BigIntegerbir dil özelliği değil bir kütüphane özelliği olduğu için kullanmanız gerekmez .

Input:  2000000000000000000000000000000000000000000000000000000000000000000000000000000‌​000000000000000000000000000000000spooky4me /2
Output: 1000000000000000000000000000000000000000000000000000000000000000000000000000000‌​000000000000000000000000000000000spooky2me

Bu , bu yüzden standart boşluklar yasaktır ve en kısa cevap bayt olarak kazanılır!

Liderler Sıralaması

Bu yazının altındaki Yığın Parçacığı, a) dilindeki en kısa çözümlerin bir listesi olarak ve b) genel bir lider tablosu olarak cevaplardan lider tablosu oluşturur.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

## Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

## Perl, 43 + 2 (-p flag) = 45 bytes

Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


3
Son sınav durumun yanlış. Çıktıda / 5 olması için çok fazla bir sıfırınız var.
Nic Hartley

5
Öncelikle, bu ilk mesajın oldukça iyi bir şekilde bir araya getirilmesidir, tebrikler :) Not: Canlı yayınlanmadan önce geri bildiriminiz için mücadelenizi gönderebileceğiniz bir Sandbox'ımız var .
FryAmTheEggman

3
PPCG'ye hoş geldiniz (görünüşe göre 2+ yıldır burada olsanız bile). Güzel ilk meydan okuma. Rasgele kesinlikli tamsayılarla ilgili ek, örneğin Java'nın hesaplamaları için kullanılması gerektiğini zorunluBigInteger mu?
AdmBorkBork 12:16

18
Şimdiye kadar karşılaştığımız her uzaylı ırk ... Bu tamamen doğru! :-)
Luis Mendo

2
Bu sizin göreviniz ve sonuçta size bağlı, ancak farklı bir sözdizimi kullanan dillere karşı bu adil değil.
Dennis

Yanıtlar:


10

Jolf, 15 14 bayt

ρi«\d+»dC!6+HI

Burada dene!

açıklama

ρi«\d+»dC!6+HI
ρ «\d+»         replace all digits
 i              in the input
       d        (functional replace)
         !6     eval (using jolf's custom infix eval)
           +H   the number as a string plus
             I  the second input
        C       floor the result (integer truncate)

Unutulmaması gereken, bazı RegExp yerleşiklerini ekleyerek bu zorluğun ardından Jolf'u güncelledim. Bu 12 11 bayt olabilir:

ρiLRdC!6+HI

24

Ruby, 50 44 43 bayt

FGITW cevap. Hızlı gitmeli!

6 bayt kaydettiğiniz için @Neil'e teşekkürler.

Ah doğru, çarpı 44, hala 44

->m,t{m.gsub(/\d+/){eval$&+t.sub(?^,'**')}}

Oh, dostum, bu neredeyse tam olarak cevap verdiğim bir cevap a=gets;$><<gets.gsub(/\d+/){eval$&+a}. Mine olsa ^! = ** şey cevapsız ve muhtemelen biraz daha uzun.
Nic Hartley

3
Tüm çözümünüzü elde etmek için +1, yalnızca işlemek için PowerShell'de gerekenden 4 bayt daha kısa olmalıdır ^. : D
AdmBorkBork 12:16

15

Perl, 36 34 bayt

s/\d+/"0|$&$^I"=~s#\^#**#r/gee

Kaynak kodu 30 bayt uzunluğunda ve anahtarları -pi( +4 bayt ) gerektirir . İlk girişi STDIN'den, ikinci girişi argüman olarak alır -i.

2 baytlık golf oynamak için @DenisIbaev'a teşekkürler!

İdeone üzerinde test et .


Evet, eğer biri Ruby cevabımı yenebilirse, Dennis olacağını ve / veya Perl'de olacağını ve aynı anda her iki beklentiyi de yerine getirdiğini düşündüm
Value Ink

1
-pi4 bayt mı?
CalculatorFeline

@CatsAreFluffy Mevcut fikir birliği , başlatmadan bayraklamasız düzenleme mesafesini saymaktır. Bu -pikomutun geri kalanından ayırmak için bir boşluk içerir .
Dennis,

"0|$&"daha kısa "0|".$&.
Denis İbaev

@DenisIbaev Girdi alfasayısal olduğundan, aynı zamanda "0|$&$^I"çalışır. Teşekkürler!
Dennis,

9

PowerShell v2 +, 139 137 bayt

param($a,$b)-join($a-split"(\d+)"|%{if($_-match"\d+"){if($b[0]-ne'^'){[math]::Floor((iex $_$b))}else{"$_*"*$b.Trim('^')+1|iex}}else{$_}})

Ooof ... 47 bayt sadece hesaba katmalı, ^çünkü bu PowerShell'deki yerel bir operatör değil. @TessellatingHeckler sayesinde 2 bayt kurtarıldı.

Olarak girdi Alır $a=<word>, $b=<operation>gibi .\universal-spooky-meme.ps1 2spooky4me ^3. -split $aRakamları tutuyoruz , onu parantez içine aldık , böylece sınırlayıcıları koruyoruz ve elde edilen diziyi bir döngüden geçiriyoruz |%{...}. Mevcut parça bir sayıysa, ilk biziz if. Biz ilk karakteri olmadığını kontrol etmek gerekir $bDİR ^. Değilse, şu anki parçamızı birleştirip $b, iex(benzer eval) e göndeririz , sonra onu boru hattında bırakın. Aksi takdirde, ile üstel bir üstel dizgisi oluşturmalı "$_*"*$b.Trim('^')+1ve bunu boru iexhattında bırakmalıyız. Verilen 2spooky4me ^3örnek için, bu sırasıyla 2*2*2*1ve 4*4*4*1olacaktır.

Aksi takdirde, dizgiyi boru hattında olduğu gibi bırakıyoruz.

Bu sonuçların tümü, bir ipte bir -joinaraya getirilmeden önce, kapsülleyici parens ile boru hattından toplanır . Bu, boru hattında kalan şeydir ve çıktı, program sonlandırmasında gizlidir.

Örnekler

PS C:\Tools\Scripts\golfing> .\universal-spooky-meme.ps1 2spooky4me ^5
32spooky1024me

PS C:\Tools\Scripts\golfing> .\universal-spooky-meme.ps1 2spooky4me /3
0spooky1me

Cevaplara bakmadan önce kendime yazdım, sonra da bazı düşüncelerinizi bastırdım - teşekkürler. Bir kaçını kurtarmak için Floor(("$_$b"|iex))onunla değiştirebileceğini düşünüyorum Floor((iex $_$b)), belki de iex $_+$b.
TessellatingHeckler

@TessellatingHeckler İki bayt için teşekkürler!
AdmBorkBork,

8

JavaScript (ES7), 58 57 bayt

(s,t)=>s.replace(/\d+/g,n=>0|eval(n+t.replace('^','**')))

Düzenleme: replacedeğişmez dizeleri üzerinde de çalıştığını hatırladığımda 1 bayt kaydedildi .


Harika, bir ES6 çözümü üzerinde çalışıyorum
Bálint

Bir bayt kurtarmak için köri olabilir misiniz?
gcampbell

1
@gcampbell Evet, ama çok tembelim.
Neil,

6

Pyth, 29

Jws.i:zK"\d+"3m.vs.iJ]+d;:zK1

Bu, her sayıyı memeden ayıklayarak ve ardından harmanlayarak ( .i) boşluk bırakarak çalışır ve diğer argümanla bir listeye sarılır. Yani eğer bizim sayıdır 7ve biz vardı ^20biz listesini almak istiyoruz: ["^", "7 ", "20"]. Bunun üzerine Pyth'in eval( .v) düzleştirilmesi ve kullanılması her zaman istediğimiz işlemi verir. Son olarak, bu değerler, sayıların oluşumu üzerine orijinal dize bölünmesiyle serpiştirilir.

Bu, her iki giriş de alıntı karakterleriyle çevrelenmişse bir bayt kısalması veya sadece bir tanesi alıntılanabiliyorsa iki bayt daha kısa olabilir.

Burada deneyin veya bir Test Suite çalıştırın


6

Python 2, 156 89 88 87 bayt

Dillerini değiştirme işlevini kullanarak uzun igiriş dizesinin sayısal parçalarını sayfa onumaralarını işlemek için işlev işleyicisiyle kullanan diğer yanıtlardan esinlenilmiştir . Python için şanssız, ^yerine **büyük bir 18 bayt mal olan, değiştirilmesi gerekir . .group(0)Çağrı sadece erişmek için maç nesnesi 'nin dize gösterimi daha iyi şeyler yapmaz ...

Gereksiz bir argüman için sahte bir yer tespit için QPaysTaxes ve RootTwo için teşekkürler .group!

import re
lambda i,o:re.sub(r'\d+',lambda p:str(eval(p.group()+o.replace('^','**'))),i)

Sanırım sonra uzaydan kurtulabilirsinizi,o:
Nic Hartley

İki bayttan daha fazlasını kaydedebilirsiniz: (1) kullanarak p.group(). (varsayılan olarak 0'dır); ve (2) insert r=re.sub;yerine ilk re.subçağrıyı rkullanın ve ardından r('^','**',o)o.replace(...)
RootTwo

@RootTwo: Benim için, r('^','**',o)daha sonra kaçan gerektirir ^için \^karakteri, değil başlangıcını eşleştirmek için o, hiçbir bayt :-( tasarrufu net - Gereksiz işaret için ancak teşekkür 0!
ojdo

5

Javascript (ES6) 99 bayt

Başka bir örnek, neden ES7'nin uyumluluk kazanmasını beklemekten nefret ediyoruz?

(a,b)=>a.match(/\d+|\D+/g).map(_=>(d=- -_)?eval(b[0]=="\^"?Math.pow(_,b.slice(1)):d+b)|0:_).join``

Çalıştırılabilir örnek:

f=(a,b)=>a.match(/\d+|\D+/g).map(_=>(d=- -_)?Math.ceil(eval(b[0]=="\^"?Math.pow(_,b.slice(1)):d+b)):_).join``

alert(f(prompt("Enter string!"), prompt("Enter operation!")));


Eşleşen regex'leriniz biraz kapalı görünüyor. Çalıştırılabilir örnekte, onları sonuçtan çıkaran büyük harfleri ("2spooky4ME", "+1" => "3spooky5") dışarıda bırakırsınız ve ilk örnekte buna \d+|\D+karşılık gelen eşleşirsiniz .+. [a-zA-Z0-9]+İstediğiniz regex, hayır mı? Ya [a-zA-Z]+|[0-9]+da bölme bir fark yaratırsa?
Itai Ferber

Her Math.powhalükarda özel bir durum söz konusu olduğunda, doğrudan çağırmak daha kolay olacaktır. Ayrıca, tamsayı bölme kullanıyor musunuz?
Neil

@Neil bunu unuttum, dakika
Bálint

@Neil tavan için daha iyi bir yol var mı?
Bálint

1
@ItaiFerber \d+|\D+ile aynı değil .+. Aynı değiller çünkü kleen genişlemesi bundan önce başlıyor or. Öyle gözükse aynı olurdu (\d|\D)+, ancak olduğu gibi , 2abir gruptaki tüm sözlerle eşleşmeyecek , iki ayrı grup olacaktır.
FryAmTheEggman

5

Julia, 71 59 54 bayt

/ 
x%y=replace(x,r"\d+",t->"big($t)"y|>parse|>eval)

bigMümkünse kullanma gereksinimi, olabileceğinden çok daha uzun sürüyor ...

Çevrimiçi deneyin!


4

Kotlin, 416 413 Bayt

eval()Kotlin'de bir eksikliği, bu bayt sayımı gerçekten arttı ...

fun main(a:Array<String>){var r=Regex("\\d+");var i=a[0];var n=a[1].takeLast(a[1].length-1).toInt();when(a[1][0]){'+'->print(r.replace(i,{m->""+(m.value.toInt()+n)}));'*'->print(r.replace(i,{m->""+(m.value.toInt()*n)}));'/'->print(r.replace(i,{m->""+(m.value.toInt()/n)}));'-'->print(r.replace(i,{m->""+(m.value.toInt()-n)}));'^'->print(r.replace(i,{m->""+(Math.pow(m.value.toDouble(),n.toDouble())).toInt()}));}}

Çevrimiçi Deneyin!

Ungolfed

fun main(a: Array<String>) {
    var r = Regex("""\d+""")
    var i = a[0]
    var n = a[1].takeLast(a[1].length - 1).toInt()
    when (a[1][0]) {
        '+' -> print(r.replace(i, { m -> "" + (m.value.toInt() + n) }))
        '*' -> print(r.replace(i, { m -> "" + (m.value.toInt() * n) }))
        '/' -> print(r.replace(i, { m -> "" + (m.value.toInt() / n) }))
        '-' -> print(r.replace(i, { m -> "" + (m.value.toInt() - n) }))
        '^' -> print(r.replace(i, { m -> "" + (Math.pow(m.value.toDouble(), n.toDouble())).toInt() }))
    }
}

4

PowerShell (v4), 124 120 bayt

# New 120 byte version:
$s,$a=$args;[regex]::Replace($s,'\d+',{($(if($a-ne($a=$a.Trim('^'))){
"$args*"*$a+1}else{"$args$a"})|iex)-replace'\..*'})

# Previous 124 byte version
$s,$a=$args;[regex]::Replace($s,'\d+',{if($a[0]-eq'^'){
[math]::pow("$args",$a.Trim('^'))}else{iex "$args$a-replace'\..*'"}})

(Yeni satırlar sadece yatay kaydırmayı önlemek için buradadır, bir satır olarak kaydedildiğinde çalışırlar).

Yorumlar ve asılsız sürüm istendi:

$meme, $instruction = $args

# Scriptblock which processes the numbers
# to be replaced. $args is the input number.
$replacement = {

    # Generates a string of the calculation, by:
    # Removing leading ^ character, if present.
    # ^3 -> 3,      +3 -> +3
    # See if it was present, and switch code paths.
    # (Can be one combined step in the golf)
    # Switch code paths for "raise to the power of",
    # or basic arithmetic.
    $trimmedInstruction = $instruction.Trim('^')
    $tmp = if ( $instruction -ne $trimmedInstruction ) {

        # String multiplication, changes
        # function input "45" and instruction "3" into
        # "45*45*45*+1". The "3" implicitly casts to [int]
        # the +1 is there to make the trailing * not crash.
        "$args*" * $instruction + 1

    } else {
        # Cobble the basic math together as a string
        # "45" and "+10" becomes
        # "45+10"
        "$args$instruction"
    }

    # eval() the generated string (e.g. "45+10" or "45*45*45*+1")
    $tmp = Invoke-Expression $tmp      # iex

    # Use a regex golf to replace trailing .23423
    # decimals in case of division with remainder.
    # Acts as [math]::floor(), harmless on other numbers.
    $tmp -replace'\..*'
}

# A regular expression replacement which picks out all 
# the numbers (\d+) and runs them through the
# replacement function. Returns a string which 
# ends up on stdout
[regex]::Replace($meme, '\d+', $replacement)
  • Net regex kütüphanesi, eşleşmenin içeriğinde çalışan bir scriptblock ile değiştirebilir ve PowerShell, dizgileri sayılara çevirir ve diğer dillerde iexolduğu gibi eval(). Sadece yapar "2spooky" "+3"->eval("2+3")
  • Dışında ... ^işleç ya da başka herhangi bir uygun üstelik işleyemez **, sadece [math]::Pow()kütüphane çağrısını kullanabilir, böylece o dalı idare edecek büyük bir blok olur.
    • Güncellenmiş sürüm @TimmyD'den bir fikir çalıyor ve bunun yerine dize çarpımını yapıyor - "2*" * nki bu oluyor "2*2*2*2*"ve sonra da izlemekten şikayet etmek yerine bir taneyle +1çarpmak için sonuna geliyor *.
  • Bunun dışında .... Net, varsayılan olarak en yakın çift sayıya yuvarlanan Banker Rounding işlemini yapar ve 3/2 = 1 yerine 3/2 = 2 olur [math]::Truncate(). Bunun yerine, -replacebir ondalık basamağı ve ondan sonraki herhangi bir şeyi kırpmak için kullanarak karakterleri kaydederim.

Test durumları:

PS D:\> .\meme.ps1 2spooky4me +1
3spooky5me

PS D:\> .\meme.ps1 2spooky4me -1
1spooky3me

PS D:\> .\meme.ps1 2spooky4me *15
30spooky60me

PS D:\> .\meme.ps1 10spooky900me /5
2spooky180me

PS D:\> .\meme.ps1 idontunderstandememes3 /2
idontunderstandememes1

PS D:\> .\meme.ps1 "idontunderstandememes3" "/2"
idontunderstandememes1

PS D:\> .\meme.ps1 "notreallyafunnymeme" "*100"
notreallyafunnymeme

PS D:\> .\meme.ps1 "2spooky4me" "^3"
8spooky64me

PS D:\> .\meme.ps1 "some1meme2sequences3can4be5really6long7" "/2"
some0meme1sequences1can2be2really3long3

PS D:\> .\meme.ps1 2000000000000000000000000000000000000000000000000000000000000000000000000000000‌​000000000000000000000000000000000spooky4me /2
1E+78‌​0spooky2me

NB. Son testte, sayılar [BigInteger]otomatik olarak yazıya taşar , ancak bilimsel gösterime girerler. Neyse ki, yıldızlar arasında iletişim kurabilen bilinen her ırk, bilimsel gösterimi sorunsuz bir şekilde yapabilmek için yeterli bilimsel gelişime sahiptir.


1
Diğer cevaplarda kod okunamayan golf versiyonunu ve ardından kod davranışını incelemek için ayrı bir model versiyonunu nasıl sunduklarını görebilirsiniz. Bunu kendinle yapmalısın (yani golf sürümündeki yeni satırları kaldır).
jpmc26

Kredi için teşekkürler, ama numaram değil - PowerShell İpuçları başlığından çıkardım.
AdmBorkBork

Görünüşe göre, bir yorum bırakacak kadar önemsiyorum ve bir başkası yorumumu geçersiz kılacak kadar önemsiyor. ;)
jpmc26 16:16

Hayır, tamamen golf versiyonuna ve tamamen ungolf versiyonuna sahip olman gerektiğini söyledim. Golf olanı kaydırma gerektirecektir. Topraksız olan, sahip olduğunuzdan daha okunaklı olmayacak ve olmayacak.
jpmc26

1
@ jpmc26 Tamam, bir yunged yorum yaptı yorumladı.
TessellatingHeckler

3

Bash + GNU coreutils, 144 Bayt

d=
u=$1,
for((i=0;i<${#u};i++)){ l=${u:i:1}
[[ "$l" =~ [0-9] ]]&&d=$d$l||{ [ -z $d ]||echo -n `bc<<<$d$2`&&{ [ $l != , ]&&echo -n $l; };d=; }
}

Bu, rakamlarla rakam olmayanlar arasındaki değişime bakar, bu yüzden giriş dizgisine rastgele geçersiz giriş karakteri (virgül) eklenir. Bu virgül çıkışta göz ardı edilir. OP'nin konvansiyonu tam olarak sözdizimini bcmatematikte yapmak için burada kullanılanları takip eder.


Bu arada, PowerShell çözümündeki @TessellatingHeckler tarafından yapılan tartışmadan dolayı: Çözümümde, satır sonlarını değiştiren noktalı virgülleri değiştirerek programı tek bir satıra çevirebilirsiniz.
rexkogitans

3

Lua, 145 93 bayt

r=io.read;m=r()o=r()m=m:gsub("%d",function(n)return loadstring("return..."..o)(n)end)print(m)

Neden sadece bir işlev göndermiyorsunuz?
Bálint

2

R, 163 bayt

R'de düzenli ifadeler ve dize ikamesi öğrenen biri olarak, bu oldukça zor bir mücadele oldu. Özellikle, sayıları eşleştirmek kolay olduğu için, ancak birden fazla ikame kullanmanın bir yolunu bulamadım gsub. Ayrıca, eval(parse(paste0(...işlemler arasında geçiş yapmanın en etkili yolu olup olmadığını bilmiyorum . Belki de buradaki switchişlev daha iyi olabilir.

function(s,o){p=strsplit;y=p(gsub("\\d+","?",s),"?")[[1]];x=na.omit(as.integer(p(s,"[a-zA-Z]+")[[1]]));y[y=="?"]=floor(eval(parse(,,paste0("x",o))));cat(y,sep="")}

açıklama

f=function(s,o){
    p=strsplit                                    # alias for stringsplit    
    y=p(gsub("\\d+","?",s),"?")[[1]]              # substitute numbers with "?" and split into vector on "?"
    x=na.omit(as.integer(p(s,"[a-zA-Z]+")[[1]]))  # split at alphabetical char, return vector with numbers to be operated on
    y[y=="?"]=floor(eval(parse(,,paste0("x",o)))) # replace inserted "?" with vector of numbers operated on
    cat(y,sep="")                                 # print concatenated vector
}

Eğer bs açıklamasında ipuçlarını verdiğiniz eşleşmelerde gsub kullanıyorsanız, bir ton bayt kurtarabilirsiniz. R de nasıl yapılır bilmiyorum. Groovy'de nasıl yapılacağını bulana kadar ben de bununla mücadele ettim; hemen hemen bir oyun değiştirici oldu.
Magic Octopus Urn,

2

Javascript (ES6), 85 Bayt

x=(s)=>{var a=s.split(" ");return[...a[0]].map(x=>(!isNaN(x))?eval(x+a[1]):x).join``}

console.log(x("2spookie5me +1"));

Ungolfed:

x = (s) => {
  var a = s.split(" ");
  return [...a[0]].map(x => (!isNaN(x)) ? eval(x + a[1]) : x).join ``
}
console.log(x("2spookie5me +1"));

Spread operatörünü kullanarak boşlukları bölebilir miyim bilen var mı? Bundan s.split (""); ["" ... s] 'ye; En azından bu fikir.
Bladimir Ruiz

Buna gerek yok ()İhtiyacınız lambda argüman yok etrafında varve parantez yerine parens ve virgül operatörünü kullanabilirsiniz etmelidirreturn
Cyoce

Ayrıca, ^JavaScript için özel bir durumdur, biraz bitli bir XOR'dirMath.pow
Sunny Pun

2

Groovy, 64 60 Bayt

{a,b->a.replaceAll(/\d+/,{Eval.me(it+b.replace("^","**"))})}

Tüm basamak örneklerini, geçen kelimenin basamak bölümlerinde işlemi değerlendiren bir kapanışla değiştirir. Bir üs işlevinden geçilirse, onu uygun gösterim ile değiştirir. Groovy, kullanıldığında Eval.me()ayrıştırılmış dizgiler 2^32-1aralık dışında olabileceğinden BigInteger / BigDecimal dönüşümünü örtülü olarak işler .

Açıklaması

{a,b->...} - İki argümanla kapanma.

a.replaceAll(/\d+/,{...}) - Dizideki tüm rakam dizilerini arayın ve bir kapatma ile değiştirin.

{Eval.me(it+b.replace("^","**"))} - Daha spesifik olarak, her bir eşleşmeyle operasyonun kendisine eklendiği bir kapatma, daha sonra genel kod olarak değerlendirildi.

.replace("^","**")- Sağlanan operasyondaki ilk örnek olan ^groovy üs operatörü ile değiştirin **. replaceAll()Bunun üstleri kullanan tam denklem dizeleriyle çalışmasını istiyorsanız, bunun yerine +3 baytlık bir ceza kullanın.

Eğlenceli yan not onun geçerli bir test senaryosudur:
(22348952345238905290858906209862398036spooky409552me, /200*4943^8-23939+((100/203)+600)


1

RProgN , 39 Bayt

►x='%d+'§x'%D+'''Rx'%d+'''Rg'y'=y_}R

Açıklaması

►x='%d+'§x'%D+'''Rx'%d+'''Rg'y'=y_}R
►                                       # Spaceless segment.
 x=                                     # Assign the top value of the stack '[+*/-]\d+' 
   '$d+'§                         }R     # Replace everything in the pattern %d+ (all numbers) based on an anonymous function 
         x'%D+'''R                      # Replace all Non-digits in the modifer with nothing, leaving just the second argument for the operator.
                  x'%d+'''R             # Snip all digits, separating our operator from our digits such that digit operator exists in the stack.
                           g'y'=        # Grab the function that is represented by the top of the stack (the operator in this case)
                                y       # Run it
                                 _      # Floor the result. 

Teknik olarak geçersiz cevap, çünkü bu dil onun için yoktu. Ancak, bunun için özel olarak tasarlanmadı, ne de herhangi bir ekleme yapıldı. Bu yüzden koşuyorum. Beni dava et.

Çevrimiçi Deneyin!


0

Perl 6, 111 bayt

{/(\w+)\s(<[+\-*/^]>)(\d+)/&&my \b=+$2;my \o=(*+b,*-b,* *b,*div b,* **b)[index "+-*/^",$1];$0.subst(/\d+/,o):g}

Maalesef EVALvarsayılan olarak devre dışıdır. Ayrıca, divtamsayı bölümü için kullanmanız gerekir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.