Önemli Boşluk: Soyguncular


18

Bu bir Polisler ve Soyguncular yarışmasının bir parçası. Polisler için buraya gidin .

Bu zorluğun amacı için boşlukları yalnızca satır besleme (0x0A) ve boşluklar (0x20) olarak tanımlayacağız . Çoğu dil ve normal ifade aromasının ASCII aralığının içinde ve dışında diğer birçok karakteri de boşluk olarak gördüğünü, böylece ilgili yerleşikleri kullanamayabileceğinizi unutmayın.

Soyguncuların Mücadelesi

Bir polisin yanıtı, kodu girişe boşluk ekleyerek giriş dizesinden boşluk kaldırma görevini yerine getiren geçerli bir program veya işleve (seçilen dilde) dönüştürülerek kırılabilir. Örneğin, aşağıdaki girdiyi aldıysanız:

H e l l o,
 W o r l  d!

Program çıktı almalı

Hello,World!

Boşluk eklendikten sonra, çözeltinin bayt sayısı polisin cevabında belirtilen bayt sayısını aşmamalıdır. Yukarıdaki kısıtlamalar ile sizinki geçerli olduğu sürece, amaçlanan polisle aynı çözümü bulmak zorunda değilsiniz.

Bunu yönetirseniz, polisin cevabına bağlantı vererek çözüme bir cevap gönderin ve polisin cevabına kendinize geri bağlantı veren bir yorum bırakın.

En çok polise cevap veren hırsız kazanır. Bağlar, çatlamış polis cevaplarının boyutlarının toplamı ile kırılır (daha uzun gönderimleri çatlatan hırsız lehine).

Her polis yanıtı sadece bir kez kırılabilir ve tabii ki kendi cevabınızı kırmanıza izin verilmez. Polisin cevabı, çatlamadan önce veya sonra geçersiz görünüyorsa, soyguncu puanına dahil edilmez.

Yanıtlar:


8

Haskell, 100 bayt, yazan Laikoni

main=interact$id doid lines id words 
doid oi d o id=do
 iddoid<-do oi id
 oid<-do o iddoid
 do d oid


7

JavaScript ES6, 199 bayt , Arnauld tarafından

s=>eval(atob`ISYgJiAtOkI8Qk97BRBeaxZFShoUZSsiOGkMenNy`.replace(/./g,(c,i)=>String.fromCharCode(c.charCodeAt()^(k+="     S    e c  r   e t     C    o   d  e   ".split(/\w/)[i%11].length)),k=0)).join``

"SecretCode"Bölünmenin 33'ü (varsaydım) topladığım 11 rakamı aradığım anlamına geldiğini fark ettim. Bu, boşluk sayısının yıldız ve harflerin çubuk olduğu bir yıldız ve çubuk problemidir "SecretCode". Kaç tane kombinasyonun deneneceğini görmek için matematiği yaptım (1.917.334.783 kombinasyon) ve bütün gün süren kaba kuvvete karar verdim.

Orada bu konuda gitmiş için daha akıllı bir yol örneği Farkettiğin için, muhtemelen kolmak zorunda 33ve 66sırasıyla endeks 10 ve 21 için, ama ben tembelim.


Hey, aferin! ;-)
Arnauld

2
$/**/=/[ \n]/;s['sp'+'lit']($)... ah, bu kirli.
Patrick Roberts

Kimse benim kaba kuvvet girişimimi merak ediyorsa, pastebin.com/aN9Z1jVM
Patrick Roberts

6

C, 475 bayt rexroni tarafından

#include<unistd.h>
#define a char
#define b *
#define c write
#define d stdin
#define e stdout
#define f read
#define g (
#define h )
#define i while
#define j if
#define k 0
#define l &
#define m ,
#define n =
#define o ;
#define p 1
#define gpml ml h
#define abo
#define ml d m p
#define jg d o abo
#define lb abo d
#define gf h abo c
#define jgm b e n
#define pml f g
#define gpm lb
int main(){a jg a jgm l jg i g pml k m l gpml h j g d!=' '&&gpm!='\n'gf g p m l gpml o}

Bu tanımlardan bazılarını kullanmaya başlayabilirim :)

Ön işlemciden sonra kod şöyle görünür:

int main(){
    char stdin;
    char *stdout = &stdin;
    while(read(0, &stdin, 1))
        if(stdin !='' && stdin!='\n')
            write(1, &stdin, 1);
}   

Vaov! İyi iş. Sonunda bunu okumakta bile zorlanıyordum ve yazdım.
rexroni

@rexroni #defineabobir süre beni fırlattı. İlk başta #define ab obiraz ekstra ;s ekleyeceğini düşündüm , ama bu sonunda işe yaramadı.
Riley

Evet, özellikle zorlaştırmak için seçildi :)
rexroni

5

Ruby, 86 bayt + 1 bayrak = 87 histokrat tarafından

eval"( T $ }{(! // ; : 67 8 ? 32. && )".gsub(/ |(.)/){$1&&$&.ord.^($'.count(' ')).chr}

Bu gerçekten eğlenceliydi, geçirilen dizgideki her karakter dizede kalan boşluk sayısına karşı XORed evalkarakter koduyla değiştirilir . Ortaya çıkan kod:ord^(...)

$_.tr!(''<<32<<10,'')

4

RprogN, Ataco tarafından

Bu hile yapıyor gibi görünüyor

' ' ` R
"
" ` R

14 bayta kadar haha ​​çatlarken yanlışlıkla golf oynadım
Alfie Goodacre 14:16

Nasıl golf oynadığını gerçekten merak ediyorum.
ATaco

@ATaco program sadece 14 bayt. Sonunda bir satır beslemesi falan mı saydınız?
Martin Ender


@ATaco Yanılmışım, derleyici üzerinde yeni satırları test edemedim, bu da çalıştığını düşünmeme neden oldu, ancak lf
literal'ı kaldırmıştım

4

V, 37 bayt, yazan DJMcMayhem

O     VrS200@"kIi|D@"A üî|D@"

Unprintables:

O     <esc>Vr<C-a>S200<esc>@"kIi<C-v><C-v><esc>|D@"<esc>A üî<esc>|D@"

TryItOnline

üGerçekten de bunu bekliyor tuttu ve bir beni alt üst etti îkomutları olmak.

O                 # Insert 5 spaces above this line
Vr<C-a>           # Change them all to <C-a>
S200<esc>         # Replace the line with 200
@"                # Play back the 5 <C-a>'s, 200 -> 205
k                 # ????
Ii<C-v><C-v><esc> # insert "i<C-v>" so our line is now "i<C-v>205"
|D@"<esc>         # Delete the line and then run it, which inserts "Í" (ASCII 205)
A üî<esc>         # Append " üî" so our line is "Í üî"
|D@"              # Delete the line and run it

Í üîV :%s/ \|\n//g, global olarak tüm boşlukları kaldıran in vim anlamına gelir. ÍKomut wiki üzerinde ve üve îvardır |ve nbunların yüksek bit kümesiyle sırasıyla


Aferin! Sahip olduğum kesin çözüm bu. :)
DJMcMayhem

3

C, betseg tarafından 140 bayt

#include<stdio.h>
int main(){int a=getchar();while(a!=EOF){//\a=getchar();
if(a!=10&&a!=32)//\\putchar(a^10^32);
putchar(a);a=getchar();}}

(Umarım bunu doğru yapıyorum.)


Beni bir dakika Ninja etti!
Kritixi Lithos

@KritixiLithos Aynı, bu anwer patladığında göndermek üzereydi ^ ^
Denker

3

MATL, 22 bayt Luis Mendo tarafından

Neden olduğundan emin olamıyorum, bu işe yarıyor gibi görünüyor

t' @ * 'dm1e5%M
dw%Y
(

Ne yaptığını çözüp çözemeyeceğimi görmek zorundayım. Yorumların kendilerinden sonra satır beslemeleri olması gerektiğini düşündüm ve sonra sadece boşlukları doğru noktalara yerleştirmek meselesiydi.


Güzel, +1
Stewie Griffin

1
@StewieGriffin, açıklama için teşekkürler. Neden işe yaradığını araştırmaya çalışıyordum, ama yavaş gidiyordu. Çok kapsamlı dokümanlar Luis :)
MickyT

1
@MickyT Java gibi ayrıntılı demek istediniz :-P Nice cracking work!
Luis Mendo

3

MATL, 22 21 byte Luis Mendo tarafından.

Sonunda ... Bir açıklama yazarken MickyT onu kırdı, bu yüzden cevabı "geçerli" dir. Bunu yine de, bu meta yazıyla uyumlu olarak yayınladım .


Mve Ygereksizdir ve yorumlanır. 5 değil 4 boşluk karakteri eklemek yeterlidir.

t' @ *'dm1e5%M
dw%Y
(

Bu daha kompakt olana eşdeğerdir :

t' @ *'dm7dw(

Kısmi açıklama:

         % Implicit input
t        % Duplicate input
' @ *'   % String with ASCII-values [32   64   32   42]
d        % diff, giving [32  -32   10], 32 is space, 10 is newline
m        % ismember, checking if the character is 32 or 10
1e5      % 10000, but could just as well be 7
d        % Taking the diff of the scalar 1e5, returning an empty matrix []
w        % Swap stack in order to use ( below
(        % Equivalent to x(y)=[], where x is the input string, and y is the logical
         % vector found using ismember (m)
         % Implicit output

Güzel çatlama işi!
Luis Mendo

2
Teşekkürler :) Başlamadan önce MATL hakkında hiçbir şey bilmiyordum ... Sanırım açıklamam tamamen doğru değil (ama oldukça yakın olmalı?). 1e5Basılı 100000ya 1eda bir çağrı olduğu için uzun zaman aldı reshape, ama sonra ne oldu 5? (Şimdi %satırın sonunda olduğunu görüyorum , bu yüzden 5Mbeş ve bir değil M. Y(Bir satırda olması gerektiğini düşündüm . Sonuçta, çok güzel bir MATL öğretici :)
Stewie Griffin

Açıklama tamamen doğru :-) Evet, bir dil ile başlamak için iyi (sadece biraz zorsa) bir yol
Luis Mendo

2

Befunge-98, 65 bytes yazan ninjalj

~v       >#@
 >::':'0--\'[';--!8v1+!
*1+j  !j,v         >#@

Çevrimiçi deneyin!

Bu çok eğlenceliydi. Yön değiştiren çok az komut olduğu ve hiç ^<[]?xya da benzeri olmadığı için kaydırma kullanması gerektiğine karar verdim . Sonra j's için boşluk doğru almak için bir Python komut dosyası yazdım .

Kod, input ( ~) yöntemini alıp iki kez ( ::) çoğaltarak çalışır . Daha sonra 10 ( ':'0veya ord(':') - ord('0')) ve 32 ( '[';veya ord('[') - ord(';')) çıkartır . Daha sonra, ikinci sonuç mantıksal olarak reddedilir (boşluk ise 1, aksi takdirde 0) ve 8 itilir.

Şimdi neyi atlayacağınızı anlamanız gereken kısım geliyor. Bir 1+!sonraki satıra geçilerek atlanır. #atlar @. Mantıksal olarak reddedilen sonuç (0 veya 1) 8 ile çarpılır ve 1 eklenir.

Daha sonra kod, IP hareket ettikçe o (yani 1 veya 9) boşluğa ve bir ekstra alana atlar. Eğer karakter bir boşluk değilse !. Eksi 10 karakter kodu mantıksal olarak reddedilir (yeni satır ise 1, aksi takdirde 0).jdaha sonra hiçbir şey atlamaz ve print ( ,) çağrılır ve döngü dikey olarak sarılarak devam eder.

Karakter bir boşluk olsaydı, alt satır 32, 22yığının altı olarak tekrar döngüye girer . İlk j705 boşluk atlar. Sonra çizgi üçüncü kez döngüye girer. Yığın üzerinde iki tane 10'dan fazla kalırsa (kod yalnızca bunları bırakır), ilk j100 boşluk atlar ve döngü tekrarlanır. Aksi takdirde, birinci jatlanır !, sıfır çıkarılır, ikinci jbaskı üzerine atlar ve program devam eder.

Ben 59 bayt aşağı golf başardı.


Başlığınızdaki polis sayısını listelemek iyidir (çünkü tiebreaker daha büyük boyutları ödüllendirir).
Martin Ender

2

C # 6, 201 bayt, sütle

using System.Linq;
_=>string./**/
#if trueJoin
(/*"*//*/""/**//*/"*/",
#else
Concat(//*/,
#endif
from m in" "let p=$@"{@" 
"[1]}"from i in(_.Replace(p,@""))where!new[]{p[0]^32^10}.Contains(i)select@i);

demoyu göster

trueJointanımlanmamıştır, sadece string.Concat()kalır.
polduğunu "\n". p[0]^32^10uzaydır. Bu p[0]^42ya da diğer benzer sabitler için (biraz) daha zor olurdu .


Süt üzerinde yorumlandığı gibi bu ihtiyaç C # 6+ cevap, onlar değiştirmek eğer sen de yapabilir?
TheLethalCoder

2

retiküler, 43 bayt, yazan Conor O'Brien

ISBqv<>>$$4j
E :d/v$v?
c+91d/ v?E
;!?l$/o $

Çevrimiçi deneyin!

Bu benim için olması gerekenden daha zordu çünkü belgeleri bulmak için çok aptaldım ve bazı komutların nasıl çalıştığını tahmin etmek zorunda kaldım. Yani bu açıklamanın bir kısmı tamamen doğru olmayabilir, ancak bu benim kod hakkındaki temel anlayışımdı.

I               Push all the input on to the stack as a string
 S              Convert it into a character array.
  B             Turns that array into individual characters on the stack.
   q            Reverse the stack so the first letter is on top.
    v           Move down... 
    /           ...and turn left.
E :d            Duplicate the value and test if equal to space.

       v?       If it is a space we move down until we wrap to the top.
       >$$      Drop the test result and the space.
          4j    Jump over the next 4 commands (having wrapped to the start).
    v           Bringing us back to the first down arrow, ready to test the next char.

     v$         If it wasn't a space, drop the test result and move down.
c+91d/          Turn left and push a newline (char 10) on to the stack.
       v?E      If equal, we go down, following the same path as with the space.

     /          If not equal, turn down.
   l$/          Then turn left, drop the test result, and push the stack size.
;!?             If zero (the stack is empty) we terminate.
        o$      Otherwise wrap around, drop the stack size, and output the char. 
     /          Then turn down wrapping around to the top of the program.
    v<          Then turn left and down to start the process from the beginning again.

Github wiki'sinde dokümanlar var.
Conor O'Brien

İyi bir fikir! Ve bunu wiki olmadan yaptığınız etkileyici: D
Conor O'Brien

1

C #, 159 bayt LethalCoder tarafından

using System.Linq;s=>string.Join("",string.Join("",s.Split(@" 
".Replace(new string((char)0x0D,1),"").ToCharArray())).Select(c=>c+""!=""?c+"":"").ToArray());

repl.it

Satır 1'in sonundaki dize " \n"(boşluk + yeni satır).

/*Func<string, string> Lambda =*/ s =>
    string.Join("",                                                           // No-op
    string.Join("",                                                           // Join (without whitespace)
        s.Split(@" \n".Replace(new string((char)0x0D,1),"").ToCharArray())    // Split on whitespace
    ).Select(c=>c+""!=""?c+"":"").ToArray());                                 // No-op

1

Minkolang v0.15, 88 bayt Kritixi Lithos tarafından

$oI[dd" "=$r'10'=1J,? 1R]r$O3.14
$$$
Cdollars             >
$$$
Ceverywhere           >x

açıklama

                               # Layer 1
$o                             # input chars onto stack
  I                            # stack length pushed to stack
   [                    ]      # loop popped TOS times (length of string)
    dd                         # duplicate, duplicate
      " "                      # push space to stack
         =                     # equality check
          $r                   # swap
            '10'               # number 10 to stack (LF char)
                =              # equality
                 1J            # or
                   ,           # not
                    ?          # if true jump next
                               # drop to layer 2
                      1R       # rotates the stack 1 time
                         r     # reverse the stack
                          $O   # output the stack
                             . # stop
$$$                            # Layer 2
                     >         # shift right and then drop to layer 3
$$$                            # Layer 3
                      >x       # shift right, pop char off stack and drop to Layer 1 (end loop)

Aferin çatlama! Ben Cihmaller kafa karıştırıcı olacağını umuyordum , ama yine de güzel bir iş!
Kritixi Lithos

@KritixiLithos, katmanları böldüğümde ve işin çoğunun üst katmanda yapıldığını fark ettiğimde dürüst olmak gerekirse, daha kolay hale geldi. Bunu yapan dil hakkında biraz öğrendim, çok teşekkürler :)
MickyT
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.