Şekil ve Zemin


32

şekil ve zemin
Kaynak: Wikipedia

Bu zorluk için, yukarıdaki görüntünün şekline ve zeminine benzeyen iki program yazmalısınız , öyle ki bunlardan biri basar figureve diğeri basar ground. özellikle:

  1. Girisi olmayan ve dizeyi basan bir program yazın figure. Programınızdaki izin verilen tek boşluk karakterleri boşluklar (kod noktası 0x20) ve yeni satırlar (satır başı, 0x0D, satır beslemeleri, 0x0A veya her ikisinin birleşimi).
  2. Yeni satırları yok sayarak, boşluk karakterlerinin sayısı (kod noktası 0x20) ve boşluk içermeyen karakterlerin aynı olması gerekir. Örneğin, bu geçerli bir program olacaktır (varsayımsal bir dilde):

    ab c 
       d
    e f
    

    İlk satırda bir boşluk olduğuna dikkat edin.

  3. Eğer takas olursa n ile inci boşluk karakteri n inci boşluk olmayan karakterine, program yazdırmak gerekir groundbunun yerine. Yukarıdaki örnekte, program şöyle görünür:

      a b
    cde 
     f 
    

    İkinci ve üçüncü satırlarda sonda boşluk bulunduğunu unutmayın.

Hem şekil hem de zemin çözümleri, STDOUT'a basılan aynı dilde tam programlar olmalıdır. Her iki durumda da tek bir isteğe bağlı izleyen yeni satır yazdırabilirsiniz. STDOUT doğru olan sürece STDERR'ye istediğiniz herhangi bir şeyi verebilirsiniz.

Herhangi bir programlama dilini kullanabilirsiniz , ancak bu boşlukların varsayılan olarak yasak olduğunu unutmayın .

Bu , yani en kısa geçerli cevap - bayt cinsinden - kazanır.

Yardımcı Komut Dosyası

Bir rakam ve yer programı arasında dönüştürmek için bu CJam betiğini kullanabilirsiniz . İkisinden birini basitçe Giriş alanına yapıştırın ve programı çalıştırın. Ayrıca, boşluk sayısının ve boşluk olmayan alanın uyuşmadığını size söyleyecektir.

Liderler Sıralaması

Yanıtlar:


20

Jöle , 20 bayt

şekil

“¦ĠȮ“©ụd» Ṃ         

Dokuz sondaki boşluk. Çevrimiçi deneyin!

Zemin

         “ ¦ĠȮ“©ụd»Ṃ

Sondaki boşluk yok. Çevrimiçi deneyin!

Nasıl çalışır

İlk olarak, boşlukların atom olmadığını, dolayısıyla dizginin değişmezleri dışındaki boşluk karakterlerinin programı hiçbir şekilde etkilemediğini unutmayın.

Dize değişmezleri , istenen kelimeleri üretmek için Jelly'in yerleşik sözlüğe dayalı dize sıkıştırmasını kullanır. Sıkıştırılmış bir dize değişmezi ile başlar , biter »ve bir dizi dizisi oluşturmak için dahili olarak kullanır .

Olarak Şekil program “¦ĠȮ“©ụd»dizi çiftini veren ( “şekil”, “taban”) , ve atom seçer lexicographical yani en az, “şekil” .

Yer programında, “ ¦ĠȮ“©ụd»dizge çiftini (“logicallyAbacs”, “ground”) verir . Sözlükbilimsel minimum şimdi güzelce seçen "zemin" dir .

Her iki durumda da, yorumlayıcı otomatik olarak son dönüş değerini - yani seçilen minimum - STDOUT'a yazdırır.


14

Python 2, 53 bayt

·Her iki yanıtta da boşlukla değiştirin :

····················
print'······figureground'[6:12]#

Yazdırır figure.

print'figureground'[
······6:12]#····················

Yazdırır ground.


14

05AB1E , 15 14 bayt

şekil

 'ŠÂ,'í¶      

Çevrimiçi deneyin!

Zemin

'       ŠÂ,'í¶

Çevrimiçi deneyin!

CP-1252 kodlamasını kullanır . Sondaki boşluklara dikkat edin. In Şekil programı, bu hatasız normal program. Aşağıdaki kelimeleri açar:

'ŠÂ  ->  figure
'í¶  ->  ground

Virgül basar ve figurekelimeyi yeni bir satırla yazdırır . Bir şey yazdırıldığından, yığının üstü artık yazdırılmaz.

Gelen Toprak programı, bu durumda uygun olan bazı hatalar var. Aşağıdaki bölüm:

'<space>

yığının üstüne bir boşluk karakteri iter. ŠBir Arity sahip yığın, döner 3 . Yığında yalnızca bir öğe var ve giriş yok, bu nedenle yığını temizleyerek bir istisna verir. Âİstifin üst ikiye bölen ancak bu döndürme operatör aynı hikayesi vardır. Yani temelde ,komut hiçbir şey basmıyor.

Bu, programın hala olan yığının tepesini çıkartacağı anlamına gelir 'í¶. Sonuç olarak ground.


9

Retina , 31 bayt

Şekil:

|       
şekil
 | zemin
      

Zemin:

 | rakam

|       
zemin

Şekil ve Zemin . Her iki program da STDIN'in geçerli şekil veya yer programları olarak boş bırakılmasını gerektirir.


9

Pyth, 30 bayt

şekil

"figure" "ground              

14 takip alanı.

Ölçek

Zemin

Sondaki boşluk yok

        "       figure""ground

Ölçek

Nasıl çalışır

Oldukça faydalı bir şekilde, bir boşluk Pyth'te yazdırmayı bastırırken, kapanması olmayan dize değişmezleri "kapalı olarak kapatılır.

Bu nedenle ilk program iki karakterden oluşur "figure"ve "ground ". İlk dize dolaylı olarak yazdırılır ve ikincisinin baskısı bastırılır, yani sadece figureyazdırılır.

İkinci program iki karakterden oluşuyor " figure"ve "ground". Birincinin baskısı bastırılır, ikincisi ise dolaylı olarak basılır, yani sadece groundbasılır.


6

MATL , 37 bayt

İlk program

'figure'         
%x'ground'         

Her satırın 9 arka kısmı vardır.

Çevrimiçi deneyin!

İkinci program

    'figure'%
      x'ground'

Burada trajik alan yok.

Çevrimiçi deneyin!

açıklama

Hiçbir şey çok süslü ...

  • İfadeler arasındaki boşluklar ve yeni çizgiler MATL tarafından dikkate alınmaz.
  • % çizginin geri kalanını görmezden gelen yorum sembolüdür.
  • x yığının üstünü siler.
  • Yığın örtük olarak programın sonunda yazdırılır.

6

Java, 180 bayt

.Boşluk ile değiştirin .

"Figure" i yazdırır:

class
A{public
static
void
main(String[]a){System.out.println(
//"ground"
//
.....
........
......
....
...................................
..
........
..........
....
"figure");}}

"Ground" u yazdırır:

.....
........
......
....
...................................
..........
..
class
A{public
static
void
main(String[]a){System.out.println(
//
"ground"
//"figure"
);}}
............


4

Mathematica, 50 34 bayt

Bir REPL ortamı kullanır. ( Print[]Eşit sayıda boşluk içeren bir sarmalayıcı eklemek , bayt sayısını 14 artıracaktır.) İki program

01figure+0 1ground                

(16 arka boşluk ile) ve

          0       1figure+01ground

Buradaki anahtar, Mathematica'nın boşluksuz basamaklı birleştirme işlemini tek bir sayı olarak ele alması, ancak araya giren boşluklar, sayılarla ve rasgele değişken isimlerinin birleşimiyle olduğu gibi, komşu çarpma olarak yorumlanır. İlk sentezleme değerlendirir Yani 1*figure+0*1*groundolup, figure; ikinci ifade 0*1*figure+1*groundolanı değerlendirir ground.


4

PHP, 44 42 bayt

şekil: (16 arkada boşluk, şekil arasında 5 boşluk;;)

echo''?ground:figure     ;                 

zemin: (20 ön alan)

                     echo' '?ground:figure;

Gerçekten çok basit, işe yarıyor çünkü yanlış ''ve ' 'hakikaten. Gibi kullanın:

php -r "echo''?ground:figure     ;                "
php -r "                    echo' '?ground:figure;"

düzenleme: 2 Martin Ender sayesinde kaydedilen geriye dönük açık bayt


3

Haskell, 96 94 88 82 77 bayt

İlk program yazdırır "figure":

main              =          putStr$idid"ground"
idid    _          ="figure"

İkinci program, yazdırır "ground":

    main=putStr$id id"ground"                   
    idid _="figure"         

Farklı adlandırılmış sabit fonksiyonlardan birini çağırır.


3

Haskell, 88 65 bayt

main=putStr
...........--
.."figure"..........
--"ground"........

ve

...........
main=putStr..
--........"figure"--
.........."ground"

.bir boşluğu gösterir. Sadece bir satır yorumu (-> --) hokkabazlık.


3

Python 2, 52 bayt

........................
print"figure"
an
d
"ground"

.s boşlukları gösterir. Son üç satır SyntaxError, kodun ilk etapta çalışmasını engelleyen herhangi bir hataya neden olmadan hataya bölünür .

Zemin sürümü yalnızca andikinci dizgenin yazdırılmasını sağlamak için kullanılır.


Alternatif (daha uzun) denemeler:

.......
print(#"ground")#
"figure")...................


print"figure"""and"ground"
.............
.............

3

JavaScript (ES6), 56 bayt

alert('figure'
                //&&'ground'
           )
              
alert('figure'//            
&&'ground') 

Şekilde takip eden boşluk yoktur.


Yeni satırlar sayılmazsa, her program için 56 bayt sayırım. Daha kısa süreceğinden şüpheliyim.
ETHProductions 29:16

@ETHproductions Ugh, manuel olarak bayt saydığınızda ne olur :-(
Neil

2

Ray , 56 bayt

şekil

$'main'
 -[figure]o                
-          [ground]o

İkinci satırda 16 sondaki boşluk var. Program bir hatayla sona eriyor.

Çevrimiçi deneyin!

Zemin

       
$ 'main' - [şekil] o
 - [toz] o         

İlk satırda 7, son satırda 9 takip alanı vardır. Bu program aynı zamanda bir hata ile sona erer.

Çevrimiçi deneyin!

açıklama

Rail, \$.*'main'bir giriş noktası bulmak için (regex notasyonu) ile başlayan bir hat arar . Sonra tren (talimat göstericisi) $güney-doğudan hareket eder. Trenle ulaşılamayan şeyler program için tamamen göz ardı edilebilir. Bu, giriş noktasıyla aynı satırdaki herhangi bir şeyi içerir. Yana -güney-doğu $hemen doğu treni döner iki program basitçe azaltmayı:

 -[figure]o
 -[ground]o

[...]bir dize değişmezini gösterir ve oyazdırır. Normalde, #rayı sona erdirmek için bir şeye ihtiyacınız vardır , ancak bunu ihmal ederseniz, program yine de sonlandırılır (ancak STDERR'de trenin düştüğünden şikayet eder).


2

> <> , 39 bayt

Boşlukları ·temsil etmek için kullanma .

şekil

v·
"·dnuo
e·
r·
u·
g··
i··
f···
"·
>·o·

Çevrimiçi deneyin!

Zemin

·v
·"····
·d
·n
·u
·oe
·ru
·gif
·"
·>·o

Çevrimiçi deneyin!

Her iki program da bir hatayla sonlanıyor.

açıklama

Dikey kod yazmadan, ben yeniden başardı gve rtırnak yanı sıra her iki çözümler arasında ve >ve oçıkış döngüsü için.

Her iki durumda da, yürütülen tek bit v, istenen kelimenin harflerini yığının üzerine ters sırayla iten altındaki sütundur . Ardından >komut göstergesini sağa yönlendirir, içinden geçtiği yerde o, istif boşalana kadar karakterleri yazdırır.


Sadece kendi sürümümde çalışmaya başladım, sonra seninkilerle karşılaştım. Dikey olarak çalışma fikrini gerçekten seviyorum (benimki çok "normal").
Teal pelikan

@Tealpelican, Fission cevabını bulana kadar bu olamadım. Ondan önce en iyi> <> özüm 42 baytı: !__|"druong">o<"figure"( _boşluklar ve kalan boşluklar satırın sonuna kadar gider).
Martin Ender

En kısa güncel sürümüm şudur; ## "de nr uu gg ri GF"> o! ~ ~! Aynı zamanda yeterince komik olan da 42 bayt! Önceki sürümlerimde hata denetimi vardı, ancak yalnızca 53 bayta indirebilirdim.
Teal pelikan

2

Fisyon , 37 bayt

Boşlukları ·temsil etmek için kullanma .

şekil

D·
"···
f··
i··
g·
u·
r·
e·ound
"·
;·

Çevrimiçi deneyin!

Zemin

·D
·"fi
·gu
·re
·o
·u
·n
·d····
·"
·;

Çevrimiçi deneyin!

açıklama

Temelde benim> <> cevabımla aynı şekilde çalışır (gerçekte bunu önce bulmama rağmen). Tek fark, "hemen Fission'da karakterleri basmaktır, bu yüzden kelimeler baş aşağı yazılmamıştır ;ve sonunda programı sonlandırmamız gerekir .


1

retiküler, 46 bayt

                      "ground""figure"" "?$$o;

Çevrimiçi deneyin! Bu yazdırır ground.

"ground""figure"""?$$o                 ;      

Çevrimiçi deneyin! Bu yazdırır figure.

zemin

İlgili kod:

"ground""figure"" "?$$o;
................          push these two strings
                " "?$     pop " " off (since " " is truthy, `?` executes `$`)
                     $    pop TOS ("figure")
                      o;  output and terminate

şekil

İlgili kod:

"ground""figure"""?$$o;
................         push these two strings
                ""?$     doesn't activate
                    $    pop ""
                     o;  output and terminate

1

Brian & Chuck , 55 53 bayt

şekil

erugif?dnuorg             
}<.<.<.<.<.<.             

Her satırda 13 sondaki boşluk vardır.

Çevrimiçi deneyin!

Zemin

             erugif?dnuorg
             }<.<.<.<.<.<.

Çevrimiçi deneyin!

açıklama

Ah, Brian ve Chuck'ı en son kullandığımdan bu yana bir süre geçti. Kısa bir hatırlatma olarak, Brian ve Chuck, birbirlerinin kaynak kodunu kasetleri olarak kullanan Brainfuck benzeri iki örnektir. Sadece Chuck baskı komutunu kullanabilirsiniz ., ?şartlı iki örneği arasında geçiş yapar ve }sıralama gibi taşımaktadır [>]brainfuck içinde. Bilinmeyen komutlar göz ardı edilir.

Programların başındaki boşluklar göz ardı edildiğinden, iki program neredeyse aynıdır. Tek fark, anahtarlama komutundan sonra komut ?göstergesinin bir sonraki komutu çalıştırmadan önce hareket etmesi gerçeğinden gelir . Bu nedenle, Chuck'ın kasetindeki ilk komut her zaman atlanır. Dolayısıyla, tek gerçek fark şudur ki yer programı }, şekil programının uygulayamadığı şekilde yürütülür. İşte kod şu şekilde çalışıyor:

?   Switch control to Chuck.
}   GROUND PROGRAM ONLY: Move the tape head on Brian to the end of the tape.
<.  Move the tape head left and print the character there.
... Do the same another five times to print the remainder of the string.

0

WinDbg, 74 bayt

Zemin

                      ea2000000"      groundfigure";;;da       2000006  L6

şekil

ea2000000"groundfigure          ";;;da                  2000006       L6  

Şekil 2 arkada boşluk bırakmıştır. En az 2 ya da 4 bayt golf oynamak zorunda gibi hissediyorum ...

Belleğe bir dize yazarak ve ondan 6 karakter göstererek çalışır. Dizideki karakter dizileri yeniden düzenlenir, böylece gösterilen karakter dizileri programlar arasında değişir:

* Ground:
ea 2000000 "      groundfigure";     * Write string "      groundfigure" starting at 2000000
;                                    * No-op
;                                    * No-op
da 2000006 L6                        * Print 6 ascii chars, from 2000006, ie- ground

* Figure:
ea 2000000 "groundfigure          "; * Write string "groundfigure          " to memory
;                                    * No-op
;                                    * No-op
da 2000006 L6                        * Print 6 ascii chars, ie- figure

Çıktı:

0:000>                       ea2000000"      groundfigure";;;da       2000006  L6
02000006  "ground"
0:000> ea2000000"groundfigure          ";;;da                  2000006       L6  
02000006  "figure"
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.