ส่งคืนหมายเลขเวอร์ชันที่พลิกกลับ


18

เมื่อตัวเลขปรากฏบนเครื่องคิดเลขเป็นไปได้ที่จะพิจารณาการเปลี่ยนรูปของตัวเลขนั้น ๆ ตัวอย่างเช่นบนจอแสดงผลเจ็ดส่วน 2 จะแสดงดังนี้:

enter image description here

และเมื่อพลิกในแนวนอนดูเหมือนว่า:

enter image description here

ดังนั้นภาพสะท้อนในกระจกของ 2 คือ 5

ภารกิจในการท้าทายนี้คือการใช้ตัวเลขหนึ่งหลักและส่งกลับตัวเลขที่เป็นภาพสะท้อน (ถ้าเป็นไปได้) หากภาพสะท้อนของกระจกนั้นไม่เหมือนตัวเลขให้ส่งคืนตัวเลขที่หมุนไป 180 องศา (ถ้าเป็นไปได้) หากไม่ใช่กรณีเหล่านี้ให้ส่งคืน -1

นี่คือรายการอินพุตและเอาต์พุตแบบเต็มรูปแบบที่โปรแกรมของคุณต้องการจัดการ:

Input   Output
0       0
1       -1
2       5
3       -1
4       -1
5       2
6       9
7       -1
8       8
9       6

ในฐานะที่เป็นความท้าทายรหัสที่สั้นที่สุดชนะ!


17
ฉันไม่เห็นด้วยกับจุดสุดท้ายของคุณ - 1 ในการแสดงผล 7 ส่วนก็จะพลิกไปด้านอื่น ๆ ดังนั้น 1 ควรงีบถึง 1
Jwosty

29
ฉันสับสนเกี่ยวกับวิธีการพลิกแต่ละหลัก หาก 2 กลายเป็น 5 ดังนั้น 6 ควรกลายเป็นถอยหลัง 9 ไม่ใช่ 9 แต่ถ้า 6 กลายเป็น 9 แล้วการหมุนจะหมุนเพียง 2 ดังนั้น 2 กลายเป็น 2 อีกไม่ใช่ 5
kernigh

6
6, 9 หมุน 180 องศา, 2, 5 พลิกในแนวนอนและในความเป็นจริง 1, 3 เป็นภาพสะท้อนของตัวเองผ่านแกนตั้ง
jimmy23013

22
การแปลที่กำหนดไว้ในคำถามไม่สอดคล้องกันเลย ทำไมพลิก 2 และ 5 แต่ 3 ไม่ได้?
Rynant

4
ฉันสังเกตเห็นความจริงที่อยากรู้อยากเห็นเกี่ยวกับตัวเลขที่เปลี่ยนได้: พวกมันอยู่ในรูปแบบไบนารีที่ตรงกันข้ามเช่น 2 = 010, 5 = 101 6 = 0110, 9 = 1001 ใครสามารถใช้ข้อเท็จจริงนี้ในการแก้ปัญหาของพวกเขา?
Jack Aidley

คำตอบ:


32

Haskell - 43 31

43 ตัวอักษรโดยไม่ต้องนึกอะไร

f 0=0
f 8=8
f 2=5
f 5=2
f 6=9
f 9=6
f _= -1

บันทึกลงเหลือ 31 ตัวอักษรโดยทำให้ฟังก์ชั่นบางส่วน

f=([0,-1,5,-1,-1,2,9,-1,8,6]!!)

4
ฉันหัวเราะ. มี +1
Seequ

6
+1 สำหรับใช้ Haskell จะทำว่าสิ่งที่สเปค กล่าวว่า!
recursion.ninja

1
ฉันไม่คิดว่าคุณต้องการf=วิธีแก้ปัญหาที่สองเนื่องจากมันเป็นนิพจน์ที่ถูกต้อง
Cyoce

23

GolfScript, 15 14

ฉันอ่านข้อมูลจำเพาะอีกครั้งและพบว่าอินพุตต้องเป็นสตริง

"0.5..29.86"\?

วิ่ง:

echo -n 2 | ruby golfscript.rb a.gs

รุ่นเก่า (ซึ่งมีอินพุตจำนวนเต็ม):

[0.5..2 9.8 6]?

หนึ่งใหม่ (14 ไบต์) เป็นแรงบันดาลใจบ้างโดยคำตอบ CJam โดย aditsu


1
ไม่สามารถเชื่อว่าฉันไม่คิดว่า ...
เดนนิส




8

CJam, 20 ไบต์

q25691347`"5296W"er~

ลองออนไลน์

เอาท์พุต

$ for i in {0..9}; { cjam <(echo 'q25691347`"5296W"er~') <<< $i; echo; }
0
-1
5
-1
-1
2
9
-1
8
6

มันทำงานอย่างไร

q          " Read from STDIN. The leaves a string on the stack.            ";
25691347`  " Push the string '25691347'.                                   ";
"5296W"    " Push the string '5296W'.                                      ";
er         " Perform character transliteration.                            ";
~          " Evaluate the result. Examples: '2' returns 2, 'W' returns -1. ";

8

ก่อนหน้านี้ 93 - 18 14 20 ไบต์

ฉันเดาว่าผู้แสดงความคิดเห็นถูกต้องแม้ว่า Befunge ที่เป็นสายภาษา 2 มิตินั้นแตกต่างกันมาก ยังในทันทีนี้ผู้แสดงความคิดเห็นที่ถูกต้อง

&1g01g-.  
! &  #* )'

ขั้นตอน:

&

อ่านอินพุตเป็นค่าตัวเลข x และกดลงบนสแต็ก

1g

รับค่าอักขระ c (ดังนั้นเช่น '!' = 33 หรือ '*' = 42 เซลล์ว่าง = 32) ที่ตำแหน่ง x, 1

01g-.

อ่านค่าอักขระของเซลล์ 0,1 (33) ลบออกจาก c และส่งออกเป็นค่าตัวเลข


2
ค่อนข้างดี มี +1
seequ

โปรดแก้ไขความยาว: มันคือ 20 ไบต์
har-wradim

1
คุณนับจำนวนไบต์ผิดจริง ๆ คุณใช้19ไบต์ เรานับบรรทัดใหม่และช่องว่าง แต่ถ้าคุณเปลี่ยนมาใช้ Befunge 98 คุณสามารถบันทึกได้ เปลี่ยนบรรทัดที่ 1 เป็น:&1g'!-.
Justin

8

Java - 49

long f(int a){return(0x790a300601L>>(a*4)&15)-1;}

นี่0x790a300601คือค่าที่อัดแน่นไปด้วยเอาต์พุตที่ต้องการโดยมีค่าเพิ่มเพื่อทำให้เป็นบวก ค่าจะถูกเก็บไว้ใน nibbles ภายในค่าดังนั้นต้องเลื่อนบิตและปิดบังเล็กน้อยเพื่อให้ปรากฏออกมา

Java - 100 (ตัวเลือกที่สนุก)

int f(int a){Random r=new Random(0x2000A2F47D6Fl);int b=0;for(;a>=0;a--)b=r.nextInt(11)-1;
return b;}

ไม่ใช่ตัวเลือกที่เล็กที่สุด แต่สนุกไปหน่อย ฉันพบเมล็ดสุ่มที่สร้างค่าที่ถูกต้องเมื่อเรียกว่าXคูณ (โดยที่ 0> = X <= 9)


ฉลาด. มี +1
Cyoce

8

JavaScript (ECMAScript 6) 25

x=>'1060039097'[x]-(x!=6)

JavaScript (ECMAScript 5) 43

function f(x){return'1060039097'[x]-(x!=6)}

ปรับปรุง: edc65 ได้แนะนำเทคนิคที่ดีกว่ามาก แปรงสีฟันได้แนะนำภาษาที่ดีกว่ามาก ณ จุดนี้การมีส่วนร่วมหลักของฉันคือการแก้จุดบกพร่องและ gumption


1
หากคุณเปลี่ยนไป ECMAScript 6 (การสนับสนุนใน Firefox) x=>[0,-1,5,-1,-1,2,9,-1,8,6][x]คุณก็สามารถทำ
แปรงสีฟัน

ตอนแรกฉันเกือบโพสต์function(x)[0,-1,5,-1,-1,2,9,-1,8,6][x]ขอบคุณ Firefox ฉันจะไม่ชนะต่อไปดังนั้นฉันจึงตัดสินใจว่าจะตอบคำถามที่เข้ากันได้สูงสุด หากฉันเริ่มเปลี่ยนภาษาเพื่อความกะทัดรัดในที่สุดฉันก็จะเริ่มต้นกำหนดภาษาของตัวเองสำหรับทุกความท้าทายที่ฉันทำ แต่ฉันจะไปข้างหน้าและพูดถึงรุ่น ECMAScript 6 เนื่องจากคุณแนะนำ
Keen

1
แนวคิดเดียวกัน แต่สั้นลง (bye bye จุลภาค): x => '106003907' [x] - (x! = 6)
edc65

@ edc65 คุณรู้ไหมฉันต้องการที่จะใช้สตริงและฉันได้ว่างเปล่าอย่างสมบูรณ์เกี่ยวกับความจริงที่ว่าฉันสามารถบีบบังคับผลกลับไปเป็นจำนวน ล่วงเลยที่แปลกประหลาด -(x!=6)แต่ฉันยังคงไม่ได้มาด้วย ขอขอบคุณ.
Keen


6

ทุบตี 29

tr 1-9 x5xx29x86|sed s/x/-1/g

เช่น

$ echo 0 1 2 3 4 5 6 7 8 9 | tr 1-9 x5xx29x86|sed s/x/-1/g
0 -1 5 -1 -1 2 9 -1 8 6

คุณสามารถละเว้น'นิพจน์ที่อยู่รอบ ๆ นอกจากนี้ฉันคิดว่าคุณสามารถละเว้นgเพราะสเป็คเพียงครั้งเดียวในแต่ละครั้ง
Digital Trauma

ขอบคุณ 'มันเป็นเพียงแค่ในตัวอย่างส่งตัวเองไม่ได้ใช้งาน ความชอบgสำหรับการป้อนข้อมูลที่ยาวนานขึ้น!

4

โคนา - 29

ฟังก์ชันนี้ส่งคืนองค์ประกอบxจากอาร์เรย์0 -1 5...

f:{0 -1 5 -1 -1 2 9 -1 8 6@x}

ตัวอย่าง:

> f 2
  5
> f 5
  2
> f 8
  8

อนุญาตเวกเตอร์ด้วยตัวเองจริงๆหรือ
Seequ

@TheRare: อืมมันจะพูดว่า "อัลกอริทึม" ดังนั้นฉันคิดว่าไม่ ฉันจะเปลี่ยนมันและทำให้เหมือนคุณมากขึ้น ...
Kyle Kanos

ดูเหมือนว่าดีกว่ามี +1
seequ

4

JavaScript 36 37 41

alert('0x'+'65b558f5ec'[prompt()]-6)

เป็นฟังก์ชั่น ES6 - 27:

f=v=>'0x'+'65b558f5ec'[v]-6

2
28:f=v=>~-[1,,6,,,3,10,,9,7][v]
ขีดล่าง

@nderscore คุณเพียงแค่ชอบปรับปรุงรหัสของผู้คนใช่ไหม
Seequ

3
@TheRare ฉันเพิ่งจะค้นหารหัสจาวาสคริปต์ที่สั้นที่สุด :) หากมีคนอื่นโพสต์คำตอบที่ดีอยู่แล้วฉันจะต้องหาวิธีเพิ่มประสิทธิภาพแทนการโพสต์คำตอบใหม่ที่เกือบจะซ้ำซ้อน ฉันไม่ได้มาที่นี่เพื่อแข่งขันเพียงเพื่อร่วมมือเพื่อบรรลุเป้าหมายนี้
ขีดล่าง

@ ตัวเลขฉันมีความคิดเช่นเดียวกันตราบใดที่ความคิดของฉันคล้ายกันมากพอ อย่างไรก็ตามเป็นคนดี
seequ

@ncorecore คุณให้แรงบันดาลใจแก่ฉันจริงๆ ฉันไม่แน่ใจว่าฉันจะทำให้มันสั้นกว่านี้ได้ไหม แต่ฉันจะลอง :)
core1024

4

Sclipting 11 ตัวอักษร

걄럣뉥밈결⓷方分결剩貶

ในที่สุดฉันก็พบคอมพิวเตอร์ Windows ที่ติดตั้ง Visual Studio เพื่อสร้างล่าม และมันก็เอาชนะรหัส GolfScript ของฉันได้อย่างง่ายดาย

มันอ่าน18453063256\11\?/11%(ใน GolfScript


2
น่าสนใจ แต่คำตอบ GolfScript ของคุณยังคงชนะอยู่ ความยาวจะถูกวัดเป็นไบต์
เดนนิส

@Dennis นี่คือคำตอบที่ 3 หรือ 4 ของฉันในเว็บไซต์นี้ ฉันไม่รู้ และฉันคิดว่า APL เป็นข้อยกเว้น
jimmy23013

@Dennis และคนส่วนใหญ่ไม่ชอบ Sclipting :)
jimmy23013

ไม่ใช่ข้อยกเว้นจริงๆเราแค่ให้ผู้คนเลือกการเข้ารหัสของพวกเขา คำตอบนี้จะให้คะแนน 22 ไบต์เนื่องจากเป็นขนาดที่ใช้ UTF-16 APL ใช้อักขระที่แตกต่างกันเพียง 256 ตัวและมีหน้ารหัส APL ซึ่งเมื่ออักขระมีขนาดเท่ากับหนึ่งไบต์
เดนนิส

@Dennis Ah คุณพูดถูก
jimmy23013

3

J - 28 27 ไบต์

คุณรู้ว่าฉันชอบอะไร ความเรียบง่าย (28 ไบต์) โปรดทราบว่าใน J _1เป็นลบหนึ่ง (-1)

f=:{&0 _1 5 _1 _1 2 9 _1 8 6

เพิ่มความซับซ้อนเล็กน้อยและคุณมี 27 ไบต์

f=:-{&0 2 _3 4 5 3 _3 8 0 3

ตัวอย่าง:

   f 2
5
   f 6
9
   f 5
2
...

3

CJam - 14

รุ่นอินพุต / เอาต์พุต:

"0 5  29 86"q#

รุ่นสแต็ค (ถือว่าตัวเลขอยู่ในสแต็ก):

[0W5WWY9W8 6]=

ลองใช้ที่http://cjam.aditsu.net/


ไม่มีบทความวิกิพีเดียเกี่ยวกับ CJAM และลิงก์จะไปที่นักไวโอลินที่ว่างเปล่า คุณจะหาข้อมูลเกี่ยวกับภาษาและรุ่นที่เผยแพร่ได้จากที่ไหน
Panzercrisis

ดูเหมือนว่าจะเป็น: sourceforge.net/projects/cjam
Panzercrisis

@Panzercrisis cjam.aditsu.netมี "CJam" ที่เชื่อมโยงไปยังหน้าแหล่งข้อมูล
aditsu

3

Perl, 27 26

นับรวมถึงpธง

y/2569/5296/,s/[1347]/-1/

การใช้งาน:

$ echo 7 | perl -pe y/2569/5296/,s/[1347]/-1/
-1

เดี๋ยวก่อน Perl เพิ่งเอาชนะ J หรือเปล่า? :)


+1 ฉันจะโพสต์y+0-9+9a4aa70a13+;$_=9-hexซึ่งมีความยาวเท่ากัน แต่เป็นของคุณมากกว่าเดิม)
core1024

1
@ core1024: และมันเพิ่งจะสั้นลง;)
Zaid

It didn't: echo 1 | perl -pe y/2569/5296/,s/[347]/-1/
core1024

@core1024 : I misread the specs, should be fixed now. It's still shorter than the J solution.
Zaid

There really is no concise way to do this in J, as values are strictly typed and numbers can't match strings.
seequ

3

Marbelous 34 bytes

}0
=6=9=2=5=0=8?0
+3-3+3-3....--

It's not the shortest solution, but it's not the longest either.

How it works

}0 spawns a marble representing the first command line input. This marble drops down the next tick, onto the =6 cell. =6 is a comparison cell, it pushes any marble with value 6 down and all others to the right. This line-up of comparison cells pushes marbles right until they equal a desired value. 0 and 8 just fall through and get printed when tehy fall off the bottom of the board, 6 and 2, and 9 and 5 first get 3 added to them, subtracted from them respectively. If a marble doesn't equal any of the desired values, it lands on the ?0 cell, which turn any marble into a 0 marble1. This marble then gets decremented and falls off the board.

1 A ?n marble technically turns any marble into a marble between 0 and n. This has the nice side effect that ?0 turns anything into 0.




2

TI-BASIC, 24 22

-1+int(11fPart(11^Ans.0954191904

This encodes the possible outputs in a lookup table stored as a base-11 floating point number; the (N+1)th base-11 digit after the decimal point is extracted from the table to get the value of the inverted digit. In base 11 the number is .106003A097, and the digits of this less one are exactly 0,-1,5,-1,-1,2,9,-1,8,6.

edc65's trick of subtracting one in the case of 6 leads to this 24-byte solution, where ⑩^( is a single one-byte token:

-(Ans≠6)+int(10fPart(.1060039097⑩^(Ans

The string approach is 29 bytes:

-(Ans≠6)+expr(inString("1060039097",Ans+1,1

The array approach (which Ypnpyn also took) is 30 bytes, assuming the number is stored in X:

{1,0,6,0,0,3,10,0,9,7}-1:Ans(X+1

24 -> 22: Removed two extra digits of precision in the magic constant.


This can almost certainly be golfed to 19, and possibly to 18; however, I need to search for the correct numbers.
lirtosiast


1

Python - 34

f=lambda n:ord("A@F@@CJ@IG"[n])-65

1
33 f=lambda n:ord(" "[n])-3 working with space codeskulptor.org/#user34_Q7NbNvQy55_0.py
Dylan Madisetti

You might want to explain how and why this works
Riot

Using the ascii table asciitable.com the white spaces chosen are printable in python. it actually looks something like &#002;&#002;&#008;&#002;&#002;&#005;&#012;&#002;&#011;&#009; It's minus 3 for the reason that -1 leaves a null character which is no good, and minus 2 leaves a line feed which is reserved in python
Dylan Madisetti

1

Java, 58 59

int f(int i){int[]a={1,0,6,0,0,3,10,0,9,7};return a[i]-1;}

OR

int f(int i){return new int[]{1,0,6,0,0,3,10,0,9,7}[i]-1;}

You can make your code a bit shorter if you add 1 to each value in array and after [i] substract 1.
barteks2x

@Barteks2x Good point; thanks
Ypnypn


1

C - 117 108 106 77 76 bytes

a[]={1,0,6,0,0,3,10,0,9,7};main(int c,char**b){printf("%d",a[*b[1]-48]-1);}

Not the best language for golfing, but oh well...
Compile with gcc progname.c -o progname. (Ignore the warnings, or add -include stdio.h to the compile command.)

Usage: ./progname <number>

EDIT

As per @bebe's suggestion, here is an example that takes the input from STDIN instead:

C - 68 51 bytes

main(){printf("%d","106003:097"[getchar()-48]-49);}

using d=*b[1]-48 could be a good idea
bebe

@bebe Ah yes, thanks!
BenjiWiebe

1
main(){printf("%d",(int[]){1,0,6,0,0,3,10,0,9,7}[getchar()-48]-1);} sorry for bothering you this much but i find this a bit shorter.
bebe

You can save another character by making the array global so you don't need the cast. a[]={1,0,6,0,0,3,10,0,9,7};main(){printf("%d",a[getchar()-48]-1);}
Allbeert

2
main(){printf("%d","106003:097"[getchar()-48]-49);} 51 bytes
bebe



1

05AB1E, 13 bytes (non-competing)

0®5®®Y9®8 6¹@

Try it online!

-3 thanks to Emigna.

Explanation:

0®5®®Y9®8 6¹@ Takes an integer from STDIN.
0®5®®Y9®8 6   Push 0, r=-1, 5, r=-1, r=-1, Y=2, 9, r=-1, 8, 6.
           ¹  Push first input item.
            @ Pop and push the 0-indexed stack item at the respective index.

0®5®®Y9®8 6¹@ should work as well.
Emigna

@Emigna I had no idea, thanks!
Erik the Outgolfer

Good thinking with @. Not often you see that used :)
Emigna

@Emigna A byte shorter than )¹è or )sè.
Erik the Outgolfer


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.